diff options
author | Kestred <kestred@riotcave.com> | 2014-08-23 22:27:52 -0700 |
---|---|---|
committer | Kestred <kestred@riotcave.com> | 2014-08-23 22:27:52 -0700 |
commit | 18f954b31c242822b6c7430a50ca99a93adc6ea6 (patch) | |
tree | b7ee4acac738d5b64b6fcfaf909756f784dd2d61 /spec/models/build_spec.rb | |
parent | 2eb3d91e1a6e51d3ca0be2fe0a5df750708b366d (diff) | |
download | gitlab-ci-18f954b31c242822b6c7430a50ca99a93adc6ea6.tar.gz |
Separate Commit model and logic from Build model|etc...
This is an entirely non-user facing change which prepares GitLab CI for future support of Parallel Builds.
See https://about.gitlab.com/2013/12/19/gitlab-ci-with-parallel-builds-and-deployments/.
These changes specifically avoid changing the supported API or changing any of the website views.
Changes to the website views will come in tandem with future features like "Multiple build scripts".
The supported API won't change as part of any future changes on this vein, to maintain support for the unofficial GitLab CI runners.
This closes the following implementation step:
1. A commit has many builds
Signed-off-by: Kestred <kestred@riotcave.com>
Diffstat (limited to 'spec/models/build_spec.rb')
-rw-r--r-- | spec/models/build_spec.rb | 220 |
1 files changed, 65 insertions, 155 deletions
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb index 9e932ab..ae67c33 100644 --- a/spec/models/build_spec.rb +++ b/spec/models/build_spec.rb @@ -3,58 +3,43 @@ # Table name: builds # # id :integer not null, primary key -# project_id :integer -# ref :string(255) # status :string(255) # finished_at :datetime # trace :text # created_at :datetime # updated_at :datetime -# sha :string(255) # started_at :datetime # tmp_file :string(255) -# before_sha :string(255) -# push_data :text # runner_id :integer +# commit_id :integer # require 'spec_helper' describe Build do let(:project) { FactoryGirl.create :project } - let(:build) { FactoryGirl.create :build } - let(:build_with_project) { FactoryGirl.create :build, project: project } + let(:commit) { FactoryGirl.create :commit, project: project } + let(:build) { FactoryGirl.create :build, commit: commit } - it { should belong_to(:project) } - it { should validate_presence_of :before_sha } - it { should validate_presence_of :sha } - it { should validate_presence_of :ref } + it { should belong_to(:commit) } it { should validate_presence_of :status } it { should respond_to :success? } it { should respond_to :failed? } it { should respond_to :running? } it { should respond_to :pending? } - it { should respond_to :git_author_name } - it { should respond_to :git_author_email } - it { should respond_to :short_sha } it { should respond_to :trace_html } - it { should allow_mass_assignment_of(:project_id) } - it { should allow_mass_assignment_of(:ref) } - it { should allow_mass_assignment_of(:sha) } - it { should allow_mass_assignment_of(:before_sha) } + it { should allow_mass_assignment_of(:commit_id) } it { should allow_mass_assignment_of(:status) } + it { should allow_mass_assignment_of(:started_at) } it { should allow_mass_assignment_of(:finished_at) } it { should allow_mass_assignment_of(:trace) } - it { should allow_mass_assignment_of(:started_at) } - it { should allow_mass_assignment_of(:push_data) } it { should allow_mass_assignment_of(:runner_id) } - it { should allow_mass_assignment_of(:project_name) } describe :first_pending do - let(:first) { FactoryGirl.create :build, status: 'pending', created_at: Date.yesterday } - let(:second) { FactoryGirl.create :build, status: 'pending' } + let(:first) { FactoryGirl.create :build, commit: commit, status: 'pending', created_at: Date.yesterday } + let(:second) { FactoryGirl.create :build, commit: commit, status: 'pending' } before { first; second } subject { Build.first_pending } @@ -76,73 +61,6 @@ describe Build do end end - describe :ci_skip? do - let(:project) { FactoryGirl.create(:project) } - let(:build) { FactoryGirl.create(:build, project: project) } - - it 'true if commit message contains [ci skip]' do - build.stub(:git_commit_message) { 'Small typo [ci skip]' } - build.ci_skip?.should == true - end - - it 'false if commit message does not contain [ci skip]' do - build.ci_skip?.should == false - end - end - - describe :project_recipients do - - context 'always sending notification' do - it 'should return git_author_email as only recipient when no additional recipients are given' do - project = FactoryGirl.create :project, - email_add_committer: true, - email_recipients: '' - build = FactoryGirl.create :build, - status: :success, - project: project - expected = 'git_author_email' - build.stub(:git_author_email) { expected } - build.project_recipients.should == [expected] - end - - it 'should return git_author_email and additional recipients' do - project = FactoryGirl.create :project, - email_add_committer: true, - email_recipients: 'rec1 rec2' - build = FactoryGirl.create :build, - status: :success, - project: project - expected = 'git_author_email' - build.stub(:git_author_email) { expected } - build.project_recipients.should == ['rec1', 'rec2', expected] - end - - it 'should return recipients' do - project = FactoryGirl.create :project, - email_add_committer: false, - email_recipients: 'rec1 rec2' - build = FactoryGirl.create :build, - status: :success, - project: project - expected = 'git_author_email' - build.stub(:git_author_email) { expected } - build.project_recipients.should == ['rec1', 'rec2'] - end - - it 'should return unique recipients only' do - project = FactoryGirl.create :project, - email_add_committer: true, - email_recipients: 'rec1 rec1 rec2' - build = FactoryGirl.create :build, - status: :success, - project: project - expected = 'rec2' - build.stub(:git_author_email) { expected } - build.project_recipients.should == ['rec1', 'rec2'] - end - end - end - describe :started? do subject { build.started? } @@ -209,17 +127,6 @@ describe Build do end end - describe :valid_commit_sha do - context 'build.sha can not start with 00000000' do - before do - build.sha = '0' * 32 - build.valid_commit_sha - end - - it('build errors should not be empty') { build.errors.should_not be_empty } - end - end - describe :trace do subject { build.trace_html } @@ -234,91 +141,94 @@ describe Build do end end - describe :compare? do - subject { build_with_project.compare? } + describe :commands do + subject { build.commands } - context 'if project.gitlab_url and build.before_sha are not nil' do - it { should be_true } - end + it { should eq(commit.project.scripts) } end - describe :short_sha do - subject { build.short_before_sha } + describe :timeout do + subject { build.timeout } - it { should have(9).items } - it { build.before_sha.should start_with(subject) } + it { should eq(commit.project.timeout) } end - describe :short_sha do - subject { build.short_sha } + describe :duration do + subject { build.duration } + + it { should eq(120.0) } + + context 'if the building process has not started yet' do + before do + build.started_at = nil + build.finished_at = nil + end - it { should have(9).items } - it { build.sha.should start_with(subject) } + it { should be_nil } + end + + context 'if the building process has started' do + before do + build.started_at = Time.now - 1.minute + build.finished_at = nil + end + + it { should be_a(Float) } + it { should > 0.0 } + end end - describe :repo_url do - subject { build_with_project.repo_url } - - it { should be_a(String) } - it { should end_with(".git") } - it { should start_with(project.gitlab_url[0..6]) } - it { should include(project.token) } - it { should include('gitlab-ci-token') } - it { should include(project.gitlab_url[7..-1]) } + describe :ref do + subject { build.ref } + + it { should eq(commit.ref) } end - describe :gitlab? do - subject { build_with_project.gitlab? } + describe :sha do + subject { build.sha } - it { should eq(project.gitlab?) } + it { should eq(commit.sha) } end - describe :commands do - subject { build_with_project.commands } + describe :short_sha do + subject { build.short_sha } - it { should eq(project.scripts) } + it { should eq(commit.short_sha) } end - describe :timeout do - subject { build_with_project.timeout } + describe :before_sha do + subject { build.before_sha } - it { should eq(project.timeout) } + it { should eq(commit.before_sha) } end describe :allow_git_fetch do - subject { build_with_project.allow_git_fetch } + subject { build.allow_git_fetch } - it { should eq(project.allow_git_fetch) } + it { should eq(commit.allow_git_fetch) } end - describe :name do - subject { build_with_project.project_name } + describe :project do + subject { build.project } - it { should eq(project.name) } + it { should eq(commit.project) } end - describe :duration do - subject { build.duration } + describe :project_id do + subject { build.project_id } - it { should eq(120.0) } + it { should eq(commit.project_id) } + end - context 'if the building process has not started yet' do - before do - build.started_at = nil - build.finished_at = nil - end + describe :project_name do + subject { build.project_name } - it { should be_nil } - end + it { should eq(commit.project_name) } + end - context 'if the building process has started' do - before do - build.started_at = Time.now - 1.minute - build.finished_at = nil - end + describe :repo_url do + subject { build.repo_url } - it { should be_a(Float) } - it { should > 0.0 } - end + it { should eq(commit.repo_url) } end end |