gitlab-org--gitlab-foss/spec/lib/gitlab/pages/deployment_update_spec.rb

141 lines
4.4 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Pages::DeploymentUpdate do
let_it_be(:project, refind: true) { create(:project, :repository) }
let_it_be(:old_pipeline) { create(:ci_pipeline, project: project, sha: project.commit('HEAD').sha) }
let_it_be(:pipeline) { create(:ci_pipeline, project: project, sha: project.commit('HEAD').sha) }
let(:build) { create(:ci_build, pipeline: pipeline, ref: 'HEAD') }
let(:invalid_file) { fixture_file_upload('spec/fixtures/dk.png') }
let(:file) { fixture_file_upload("spec/fixtures/pages.zip") }
let(:empty_file) { fixture_file_upload("spec/fixtures/pages_empty.zip") }
let(:empty_metadata_filename) { "spec/fixtures/pages_empty.zip.meta" }
let(:metadata_filename) { "spec/fixtures/pages.zip.meta" }
let(:metadata) { fixture_file_upload(metadata_filename) if File.exist?(metadata_filename) }
subject(:pages_deployment_update) { described_class.new(project, build) }
context 'for new artifacts' do
context 'for a valid job' do
let!(:artifacts_archive) { create(:ci_job_artifact, :correct_checksum, file: file, job: build) }
before do
create(:ci_job_artifact, file_type: :metadata, file_format: :gzip, file: metadata, job: build)
build.reload
end
it 'is valid' do
expect(pages_deployment_update).to be_valid
end
context 'when missing artifacts metadata' do
before do
expect(build).to receive(:artifacts_metadata?).and_return(false)
end
it 'is invalid' do
expect(pages_deployment_update).not_to be_valid
expect(pages_deployment_update.errors.full_messages).to include('missing artifacts metadata')
end
end
end
it 'is invalid for invalid archive' do
create(:ci_job_artifact, :archive, file: invalid_file, job: build)
expect(pages_deployment_update).not_to be_valid
expect(pages_deployment_update.errors.full_messages).to include('missing artifacts metadata')
end
end
describe 'maximum pages artifacts size' do
let(:metadata) { spy('metadata') } # rubocop: disable RSpec/VerifiedDoubles
before do
file = fixture_file_upload('spec/fixtures/pages.zip')
metafile = fixture_file_upload('spec/fixtures/pages.zip.meta')
create(:ci_job_artifact, :archive, :correct_checksum, file: file, job: build)
create(:ci_job_artifact, :metadata, file: metafile, job: build)
allow(build).to receive(:artifacts_metadata_entry)
.and_return(metadata)
end
context 'when maximum pages size is set to zero' do
before do
stub_application_setting(max_pages_size: 0)
end
context "when size is above the limit" do
before do
allow(metadata).to receive(:total_size).and_return(1.megabyte)
allow(metadata).to receive(:entries).and_return([])
end
it 'is valid' do
expect(pages_deployment_update).to be_valid
end
end
end
context 'when size is limited on the instance level' do
before do
stub_application_setting(max_pages_size: 100)
end
context "when size is below the limit" do
before do
allow(metadata).to receive(:total_size).and_return(1.megabyte)
allow(metadata).to receive(:entries).and_return([])
end
it 'is valid' do
expect(pages_deployment_update).to be_valid
end
end
context "when size is above the limit" do
before do
allow(metadata).to receive(:total_size).and_return(101.megabyte)
allow(metadata).to receive(:entries).and_return([])
end
it 'is invalid' do
expect(pages_deployment_update).not_to be_valid
expect(pages_deployment_update.errors.full_messages)
.to include('artifacts for pages are too large: 105906176')
end
end
end
end
context 'when retrying the job' do
let!(:older_deploy_job) do
create(
:generic_commit_status,
:failed,
pipeline: pipeline,
ref: build.ref,
stage: 'deploy',
name: 'pages:deploy'
)
end
before do
create(:ci_job_artifact, :correct_checksum, file: file, job: build)
create(:ci_job_artifact, file_type: :metadata, file_format: :gzip, file: metadata, job: build)
build.reload
end
it 'marks older pages:deploy jobs retried' do
expect(pages_deployment_update).to be_valid
end
end
end