From cc4ef4da11d46761ab0ce4fbd6b032a7e01baba9 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 9 Sep 2015 14:17:16 +0200 Subject: [PATCH] Refactor CI tests --- spec/ci/six.tar.gz | Bin 61937 -> 0 bytes .../ci/projects_controller_spec.rb | 18 ++--- spec/factories/ci/trigger_requests.rb | 4 +- spec/factories/ci/triggers.rb | 2 +- .../ci}/admin/builds_spec.rb | 0 .../ci}/admin/events_spec.rb | 0 .../ci}/admin/projects_spec.rb | 0 .../ci}/admin/runners_spec.rb | 0 .../features => features/ci}/builds_spec.rb | 0 .../features => features/ci}/commits_spec.rb | 0 .../features => features/ci}/events_spec.rb | 0 .../{ci/features => features/ci}/lint_spec.rb | 0 .../features => features/ci}/projects_spec.rb | 0 .../features => features/ci}/runners_spec.rb | 0 .../features => features/ci}/triggers_spec.rb | 0 .../ci}/variables_spec.rb | 0 .../ci}/application_helper_spec.rb | 2 +- .../ci}/runners_helper_spec.rb | 2 +- .../ci}/user_helper_spec.rb | 2 +- .../ci}/user_sessions_helper_spec.rb | 2 +- spec/{ci/lib => lib/ci}/ansi2html_spec.rb | 0 spec/{ci/lib => lib/ci}/charts_spec.rb | 0 .../ci}/gitlab_ci_yaml_processor_spec.rb | 0 spec/{ci/lib => lib/ci}/upgrader_spec.rb | 0 .../{ci/mailers => mailers/ci}/notify_spec.rb | 0 spec/{ci/models => models/ci}/build_spec.rb | 50 ++++++------- spec/{ci/models => models/ci}/commit_spec.rb | 70 +++++++++--------- .../models => models/ci}/mail_service_spec.rb | 40 +++++----- spec/{ci/models => models/ci}/network_spec.rb | 0 .../project_services/hip_chat_message_spec.rb | 10 +-- .../project_services/hip_chat_service_spec.rb | 2 +- .../project_services/slack_message_spec.rb | 6 +- .../project_services/slack_service_spec.rb | 2 +- spec/{ci/models => models/ci}/project_spec.rb | 0 .../ci}/runner_project_spec.rb | 2 +- spec/{ci/models => models/ci}/runner_spec.rb | 2 +- spec/{ci/models => models/ci}/service_spec.rb | 2 +- spec/{ci/models => models/ci}/trigger_spec.rb | 2 +- spec/{ci/models => models/ci}/user_spec.rb | 2 +- .../{ci/models => models/ci}/variable_spec.rb | 2 +- .../{ci/models => models/ci}/web_hook_spec.rb | 2 +- .../ci}/api/builds_spec.rb | 2 +- .../ci}/api/commits_spec.rb | 2 +- .../ci}/api/forks_spec.rb | 2 +- .../ci}/api/projects_spec.rb | 8 +- .../ci}/api/runners_spec.rb | 2 +- .../ci}/api/triggers_spec.rb | 2 +- .../requests => requests/ci}/builds_spec.rb | 0 .../requests => requests/ci}/commits_spec.rb | 0 .../ci}/create_commit_service_spec.rb | 0 .../ci}/create_project_service_spec.rb | 0 .../create_trigger_request_service_spec.rb | 0 .../ci}/event_service_spec.rb | 0 .../ci}/image_for_build_service_spec.rb | 0 .../ci}/register_build_service_spec.rb | 0 .../ci}/web_hook_service_spec.rb | 0 56 files changed, 122 insertions(+), 122 deletions(-) delete mode 100644 spec/ci/six.tar.gz rename spec/{ci/features => features/ci}/admin/builds_spec.rb (100%) rename spec/{ci/features => features/ci}/admin/events_spec.rb (100%) rename spec/{ci/features => features/ci}/admin/projects_spec.rb (100%) rename spec/{ci/features => features/ci}/admin/runners_spec.rb (100%) rename spec/{ci/features => features/ci}/builds_spec.rb (100%) rename spec/{ci/features => features/ci}/commits_spec.rb (100%) rename spec/{ci/features => features/ci}/events_spec.rb (100%) rename spec/{ci/features => features/ci}/lint_spec.rb (100%) rename spec/{ci/features => features/ci}/projects_spec.rb (100%) rename spec/{ci/features => features/ci}/runners_spec.rb (100%) rename spec/{ci/features => features/ci}/triggers_spec.rb (100%) rename spec/{ci/features => features/ci}/variables_spec.rb (100%) rename spec/{ci/helpers => helpers/ci}/application_helper_spec.rb (96%) rename spec/{ci/helpers => helpers/ci}/runners_helper_spec.rb (94%) rename spec/{ci/helpers => helpers/ci}/user_helper_spec.rb (98%) rename spec/{ci/helpers => helpers/ci}/user_sessions_helper_spec.rb (98%) rename spec/{ci/lib => lib/ci}/ansi2html_spec.rb (100%) rename spec/{ci/lib => lib/ci}/charts_spec.rb (100%) rename spec/{ci/lib => lib/ci}/gitlab_ci_yaml_processor_spec.rb (100%) rename spec/{ci/lib => lib/ci}/upgrader_spec.rb (100%) rename spec/{ci/mailers => mailers/ci}/notify_spec.rb (100%) rename spec/{ci/models => models/ci}/build_spec.rb (84%) rename spec/{ci/models => models/ci}/commit_spec.rb (72%) rename spec/{ci/models => models/ci}/mail_service_spec.rb (74%) rename spec/{ci/models => models/ci}/network_spec.rb (100%) rename spec/{ci/models => models/ci}/project_services/hip_chat_message_spec.rb (96%) rename spec/{ci/models => models/ci}/project_services/hip_chat_service_spec.rb (98%) rename spec/{ci/models => models/ci}/project_services/slack_message_spec.rb (97%) rename spec/{ci/models => models/ci}/project_services/slack_service_spec.rb (98%) rename spec/{ci/models => models/ci}/project_spec.rb (100%) rename spec/{ci/models => models/ci}/runner_project_spec.rb (91%) rename spec/{ci/models => models/ci}/runner_spec.rb (98%) rename spec/{ci/models => models/ci}/service_spec.rb (97%) rename spec/{ci/models => models/ci}/trigger_spec.rb (95%) rename spec/{ci/models => models/ci}/user_spec.rb (99%) rename spec/{ci/models => models/ci}/variable_spec.rb (97%) rename spec/{ci/models => models/ci}/web_hook_spec.rb (98%) rename spec/{ci/requests => requests/ci}/api/builds_spec.rb (99%) rename spec/{ci/requests => requests/ci}/api/commits_spec.rb (98%) rename spec/{ci/requests => requests/ci}/api/forks_spec.rb (98%) rename spec/{ci/requests => requests/ci}/api/projects_spec.rb (99%) rename spec/{ci/requests => requests/ci}/api/runners_spec.rb (98%) rename spec/{ci/requests => requests/ci}/api/triggers_spec.rb (99%) rename spec/{ci/requests => requests/ci}/builds_spec.rb (100%) rename spec/{ci/requests => requests/ci}/commits_spec.rb (100%) rename spec/{ci/services => services/ci}/create_commit_service_spec.rb (100%) rename spec/{ci/services => services/ci}/create_project_service_spec.rb (100%) rename spec/{ci/services => services/ci}/create_trigger_request_service_spec.rb (100%) rename spec/{ci/services => services/ci}/event_service_spec.rb (100%) rename spec/{ci/services => services/ci}/image_for_build_service_spec.rb (100%) rename spec/{ci/services => services/ci}/register_build_service_spec.rb (100%) rename spec/{ci/services => services/ci}/web_hook_service_spec.rb (100%) diff --git a/spec/ci/six.tar.gz b/spec/ci/six.tar.gz deleted file mode 100644 index 80a8c6644e4c9e187a5c8f54f6cf189c76e7b122..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61937 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

bp0;?wOmN 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\k;AQz)$p_Vghu&oBo@d{K^0O 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 diff --git a/spec/controllers/ci/projects_controller_spec.rb b/spec/controllers/ci/projects_controller_spec.rb index 0069a782511..9af766eff33 100644 --- a/spec/controllers/ci/projects_controller_spec.rb +++ b/spec/controllers/ci/projects_controller_spec.rb @@ -1,8 +1,8 @@ require "spec_helper" -describe ProjectsController do +describe Ci::ProjectsController do before do - @project = FactoryGirl.create :project + @project = FactoryGirl.create :ci_project end describe "POST #build" do @@ -55,25 +55,25 @@ describe ProjectsController do end let(:user) do - User.new(user_data) + Ci::User.new(user_data) end it "creates project" do allow(controller).to receive(:reset_cache) { true } allow(controller).to receive(:current_user) { user } - Network.any_instance.stub(:enable_ci).and_return(true) - Network.any_instance.stub(:project_hooks).and_return(true) + allow_any_instance_of(Ci::Network).to receive(:enable_ci).and_return(true) + allow_any_instance_of(Ci::Network).to receive(:project_hooks).and_return(true) post :create, { project: JSON.dump(project_dump.to_h) }.with_indifferent_access expect(response.code).to eq('302') - expect(assigns(:project)).not_to be_a_new(Project) + expect(assigns(:project)).not_to be_a_new(Ci::Project) end it "shows error" do allow(controller).to receive(:reset_cache) { true } allow(controller).to receive(:current_user) { user } - User.any_instance.stub(:can_manage_project?).and_return(false) + allow_any_instance_of(Ci::User).to receive(:can_manage_project?).and_return(false) post :create, { project: JSON.dump(project_dump.to_h) }.with_indifferent_access @@ -91,13 +91,13 @@ describe ProjectsController do end let(:user) do - User.new(user_data) + Ci::User.new(user_data) end it "searches projects" do allow(controller).to receive(:reset_cache) { true } allow(controller).to receive(:current_user) { user } - Network.any_instance.should_receive(:projects).with(hash_including(search: 'str'), :authorized) + allow_any_instance_of(Ci::Network).to receive(:projects).with(hash_including(search: 'str'), :authorized) xhr :get, :gitlab, { search: "str", format: "js" }.with_indifferent_access diff --git a/spec/factories/ci/trigger_requests.rb b/spec/factories/ci/trigger_requests.rb index c85d1027ce6..da8b7342fcf 100644 --- a/spec/factories/ci/trigger_requests.rb +++ b/spec/factories/ci/trigger_requests.rb @@ -1,8 +1,8 @@ # Read about factories at https://github.com/thoughtbot/factory_girl FactoryGirl.define do - factory :trigger_request do - factory :trigger_request_with_variables do + factory :ci_trigger_request do + factory :ci_trigger_request_with_variables do variables do { TRIGGER_KEY: 'TRIGGER_VALUE' diff --git a/spec/factories/ci/triggers.rb b/spec/factories/ci/triggers.rb index 38cd3cbceb6..fd3afdb1ec2 100644 --- a/spec/factories/ci/triggers.rb +++ b/spec/factories/ci/triggers.rb @@ -2,7 +2,7 @@ FactoryGirl.define do factory :ci_trigger_without_token, class: Ci::Trigger do - factory :trigger do + factory :ci_trigger do token 'token' end end diff --git a/spec/ci/features/admin/builds_spec.rb b/spec/features/ci/admin/builds_spec.rb similarity index 100% rename from spec/ci/features/admin/builds_spec.rb rename to spec/features/ci/admin/builds_spec.rb diff --git a/spec/ci/features/admin/events_spec.rb b/spec/features/ci/admin/events_spec.rb similarity index 100% rename from spec/ci/features/admin/events_spec.rb rename to spec/features/ci/admin/events_spec.rb diff --git a/spec/ci/features/admin/projects_spec.rb b/spec/features/ci/admin/projects_spec.rb similarity index 100% rename from spec/ci/features/admin/projects_spec.rb rename to spec/features/ci/admin/projects_spec.rb diff --git a/spec/ci/features/admin/runners_spec.rb b/spec/features/ci/admin/runners_spec.rb similarity index 100% rename from spec/ci/features/admin/runners_spec.rb rename to spec/features/ci/admin/runners_spec.rb diff --git a/spec/ci/features/builds_spec.rb b/spec/features/ci/builds_spec.rb similarity index 100% rename from spec/ci/features/builds_spec.rb rename to spec/features/ci/builds_spec.rb diff --git a/spec/ci/features/commits_spec.rb b/spec/features/ci/commits_spec.rb similarity index 100% rename from spec/ci/features/commits_spec.rb rename to spec/features/ci/commits_spec.rb diff --git a/spec/ci/features/events_spec.rb b/spec/features/ci/events_spec.rb similarity index 100% rename from spec/ci/features/events_spec.rb rename to spec/features/ci/events_spec.rb diff --git a/spec/ci/features/lint_spec.rb b/spec/features/ci/lint_spec.rb similarity index 100% rename from spec/ci/features/lint_spec.rb rename to spec/features/ci/lint_spec.rb diff --git a/spec/ci/features/projects_spec.rb b/spec/features/ci/projects_spec.rb similarity index 100% rename from spec/ci/features/projects_spec.rb rename to spec/features/ci/projects_spec.rb diff --git a/spec/ci/features/runners_spec.rb b/spec/features/ci/runners_spec.rb similarity index 100% rename from spec/ci/features/runners_spec.rb rename to spec/features/ci/runners_spec.rb diff --git a/spec/ci/features/triggers_spec.rb b/spec/features/ci/triggers_spec.rb similarity index 100% rename from spec/ci/features/triggers_spec.rb rename to spec/features/ci/triggers_spec.rb diff --git a/spec/ci/features/variables_spec.rb b/spec/features/ci/variables_spec.rb similarity index 100% rename from spec/ci/features/variables_spec.rb rename to spec/features/ci/variables_spec.rb diff --git a/spec/ci/helpers/application_helper_spec.rb b/spec/helpers/ci/application_helper_spec.rb similarity index 96% rename from spec/ci/helpers/application_helper_spec.rb rename to spec/helpers/ci/application_helper_spec.rb index c2b1058a8fa..478c0266770 100644 --- a/spec/ci/helpers/application_helper_spec.rb +++ b/spec/helpers/ci/application_helper_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe ApplicationHelper do +describe Ci::ApplicationHelper do describe "#duration_in_words" do it "returns minutes and seconds" do intervals_in_words = { diff --git a/spec/ci/helpers/runners_helper_spec.rb b/spec/helpers/ci/runners_helper_spec.rb similarity index 94% rename from spec/ci/helpers/runners_helper_spec.rb rename to spec/helpers/ci/runners_helper_spec.rb index 02d497b40d2..e7681df10bd 100644 --- a/spec/ci/helpers/runners_helper_spec.rb +++ b/spec/helpers/ci/runners_helper_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe RunnersHelper do +describe Ci::RunnersHelper do it "returns - not contacted yet" do runner = FactoryGirl.build :runner runner_status_icon(runner).should include("not connected yet") diff --git a/spec/ci/helpers/user_helper_spec.rb b/spec/helpers/ci/user_helper_spec.rb similarity index 98% rename from spec/ci/helpers/user_helper_spec.rb rename to spec/helpers/ci/user_helper_spec.rb index 7215dc41a85..f95bfb355ed 100644 --- a/spec/ci/helpers/user_helper_spec.rb +++ b/spec/helpers/ci/user_helper_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe UserHelper do +describe Ci::UserHelper do describe :user_avatar_url do let (:user) { User.new({'avatar_url' => avatar_url}) } diff --git a/spec/ci/helpers/user_sessions_helper_spec.rb b/spec/helpers/ci/user_sessions_helper_spec.rb similarity index 98% rename from spec/ci/helpers/user_sessions_helper_spec.rb rename to spec/helpers/ci/user_sessions_helper_spec.rb index a2ab1f1e023..5f654866d99 100644 --- a/spec/ci/helpers/user_sessions_helper_spec.rb +++ b/spec/helpers/ci/user_sessions_helper_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe UserSessionsHelper do +describe Ci::UserSessionsHelper do describe :generate_oauth_hmac do let (:salt) { 'a' } let (:salt2) { 'b' } diff --git a/spec/ci/lib/ansi2html_spec.rb b/spec/lib/ci/ansi2html_spec.rb similarity index 100% rename from spec/ci/lib/ansi2html_spec.rb rename to spec/lib/ci/ansi2html_spec.rb diff --git a/spec/ci/lib/charts_spec.rb b/spec/lib/ci/charts_spec.rb similarity index 100% rename from spec/ci/lib/charts_spec.rb rename to spec/lib/ci/charts_spec.rb diff --git a/spec/ci/lib/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb similarity index 100% rename from spec/ci/lib/gitlab_ci_yaml_processor_spec.rb rename to spec/lib/ci/gitlab_ci_yaml_processor_spec.rb diff --git a/spec/ci/lib/upgrader_spec.rb b/spec/lib/ci/upgrader_spec.rb similarity index 100% rename from spec/ci/lib/upgrader_spec.rb rename to spec/lib/ci/upgrader_spec.rb diff --git a/spec/ci/mailers/notify_spec.rb b/spec/mailers/ci/notify_spec.rb similarity index 100% rename from spec/ci/mailers/notify_spec.rb rename to spec/mailers/ci/notify_spec.rb diff --git a/spec/ci/models/build_spec.rb b/spec/models/ci/build_spec.rb similarity index 84% rename from spec/ci/models/build_spec.rb rename to spec/models/ci/build_spec.rb index 733398176bf..d1e58438f7b 100644 --- a/spec/ci/models/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -25,10 +25,10 @@ require 'spec_helper' -describe Build do - let(:project) { FactoryGirl.create :project } - let(:commit) { FactoryGirl.create :commit, project: project } - let(:build) { FactoryGirl.create :build, commit: commit } +describe Ci::Build do + let(:project) { FactoryGirl.create :ci_project } + let(:commit) { FactoryGirl.create :ci_commit, project: project } + let(:build) { FactoryGirl.create :ci_build, commit: commit } it { should belong_to(:commit) } it { should validate_presence_of :status } @@ -40,12 +40,12 @@ describe Build do it { should respond_to :trace_html } describe :first_pending do - let(:first) { FactoryGirl.create :build, commit: commit, status: 'pending', created_at: Date.yesterday } - let(:second) { FactoryGirl.create :build, commit: commit, status: 'pending' } + let(:first) { FactoryGirl.create :ci_build, commit: commit, status: 'pending', created_at: Date.yesterday } + let(:second) { FactoryGirl.create :ci_build, commit: commit, status: 'pending' } before { first; second } - subject { Build.first_pending } + subject { Ci::Build.first_pending } - it { should be_a(Build) } + it { should be_a(Ci::Build) } it('returns with the first pending build') { should eq(first) } end @@ -54,12 +54,12 @@ describe Build do build.status = 'success' build.save end - let(:create_from_build) { Build.create_from build } + let(:create_from_build) { Ci::Build.create_from build } it ('there should be a pending task') do - expect(Build.pending.count(:all)).to eq 0 + expect(Ci::Build.pending.count(:all)).to eq 0 create_from_build - expect(Build.pending.count(:all)).to be > 0 + expect(Ci::Build.pending.count(:all)).to be > 0 end end @@ -69,14 +69,14 @@ describe Build do context 'without started_at' do before { build.started_at = nil } - it { should be_false } + it { should be_falsey } end %w(running success failed).each do |status| context "if build status is #{status}" do before { build.status = status } - it { should be_true } + it { should be_truthy } end end @@ -84,7 +84,7 @@ describe Build do context "if build status is #{status}" do before { build.status = status } - it { should be_false } + it { should be_falsey } end end end @@ -96,7 +96,7 @@ describe Build do context "if build.status is #{state}" do before { build.status = state } - it { should be_true } + it { should be_truthy } end end @@ -104,7 +104,7 @@ describe Build do context "if build.status is #{state}" do before { build.status = state } - it { should be_false } + it { should be_falsey } end end end @@ -116,7 +116,7 @@ describe Build do context "if build.status is #{state}" do before { build.status = state } - it { should be_true } + it { should be_truthy } end end @@ -124,7 +124,7 @@ describe Build do context "if build.status is #{state}" do before { build.status = state } - it { should be_false } + it { should be_falsey } end end end @@ -138,13 +138,13 @@ describe Build do context 'and build.status is success' do before { build.status = 'success' } - it { should be_false } + it { should be_falsey } end context 'and build.status is failed' do before { build.status = 'failed' } - it { should be_false } + it { should be_falsey } end end @@ -154,13 +154,13 @@ describe Build do context 'and build.status is success' do before { build.status = 'success' } - it { should be_false } + it { should be_falsey } end context 'and build.status is failed' do before { build.status = 'failed' } - it { should be_true } + it { should be_truthy } end end end @@ -324,14 +324,14 @@ describe Build do } before do - build.project.variables << Variable.new(key: 'SECRET_KEY', value: 'secret_value') + build.project.variables << Ci::Variable.new(key: 'SECRET_KEY', value: 'secret_value') end it { should eq(variables + secure_variables) } context 'and trigger variables' do - let(:trigger) { FactoryGirl.create :trigger, project: project } - let(:trigger_request) { FactoryGirl.create :trigger_request_with_variables, commit: commit, trigger: trigger } + let(:trigger) { FactoryGirl.create :ci_trigger, project: project } + let(:trigger_request) { FactoryGirl.create :ci_trigger_request_with_variables, commit: commit, trigger: trigger } let(:trigger_variables) { [ {key: :TRIGGER_KEY, value: 'TRIGGER_VALUE', public: false} diff --git a/spec/ci/models/commit_spec.rb b/spec/models/ci/commit_spec.rb similarity index 72% rename from spec/ci/models/commit_spec.rb rename to spec/models/ci/commit_spec.rb index 6f644d20aaf..6d5b0597e13 100644 --- a/spec/ci/models/commit_spec.rb +++ b/spec/models/ci/commit_spec.rb @@ -17,10 +17,10 @@ require 'spec_helper' -describe Commit do - let(:project) { FactoryGirl.create :project } - let(:commit) { FactoryGirl.create :commit, project: project } - let(:commit_with_project) { FactoryGirl.create :commit, project: project } +describe Ci::Commit do + let(:project) { FactoryGirl.create :ci_project } + let(:commit) { FactoryGirl.create :ci_commit, project: project } + let(:commit_with_project) { FactoryGirl.create :ci_commit, project: project } let(:config_processor) { GitlabCiYamlProcessor.new(gitlab_ci_yaml) } it { should belong_to(:project) } @@ -37,18 +37,18 @@ describe Commit do describe :last_build do subject { commit.last_build } before do - @first = FactoryGirl.create :build, commit: commit, created_at: Date.yesterday - @second = FactoryGirl.create :build, commit: commit + @first = FactoryGirl.create :ci_build, commit: commit, created_at: Date.yesterday + @second = FactoryGirl.create :ci_build, commit: commit end - it { should be_a(Build) } + it { should be_a(Ci::Build) } it('returns with the most recently created build') { should eq(@second) } end describe :retry do before do - @first = FactoryGirl.create :build, commit: commit, created_at: Date.yesterday - @second = FactoryGirl.create :build, commit: commit + @first = FactoryGirl.create :ci_build, commit: commit, created_at: Date.yesterday + @second = FactoryGirl.create :ci_build, commit: commit end it "creates new build" do @@ -62,38 +62,38 @@ describe Commit do context 'always sending notification' do it 'should return commit_pusher_email as only recipient when no additional recipients are given' do - project = FactoryGirl.create :project, + project = FactoryGirl.create :ci_project, email_add_pusher: true, email_recipients: '' - commit = FactoryGirl.create :commit, project: project + commit = FactoryGirl.create :ci_commit, project: project expected = 'commit_pusher_email' commit.stub(:push_data) { { user_email: expected } } commit.project_recipients.should == [expected] end it 'should return commit_pusher_email and additional recipients' do - project = FactoryGirl.create :project, + project = FactoryGirl.create :ci_project, email_add_pusher: true, email_recipients: 'rec1 rec2' - commit = FactoryGirl.create :commit, project: project + commit = FactoryGirl.create :ci_commit, project: project expected = 'commit_pusher_email' commit.stub(:push_data) { { user_email: expected } } commit.project_recipients.should == ['rec1', 'rec2', expected] end it 'should return recipients' do - project = FactoryGirl.create :project, + project = FactoryGirl.create :ci_project, email_add_pusher: false, email_recipients: 'rec1 rec2' - commit = FactoryGirl.create :commit, project: project + commit = FactoryGirl.create :ci_commit, project: project commit.project_recipients.should == ['rec1', 'rec2'] end it 'should return unique recipients only' do - project = FactoryGirl.create :project, + project = FactoryGirl.create :ci_project, email_add_pusher: true, email_recipients: 'rec1 rec1 rec2' - commit = FactoryGirl.create :commit, project: project + commit = FactoryGirl.create :ci_commit, project: project expected = 'rec2' commit.stub(:push_data) { { user_email: expected } } commit.project_recipients.should == ['rec1', 'rec2'] @@ -168,8 +168,8 @@ describe Commit do end context 'for build triggers' do - let(:trigger) { FactoryGirl.create :trigger, project: project } - let(:trigger_request) { FactoryGirl.create :trigger_request, commit: commit, trigger: trigger } + let(:trigger) { FactoryGirl.create :ci_trigger, project: project } + let(:trigger_request) { FactoryGirl.create :ci_trigger_request, commit: commit, trigger: trigger } it 'creates builds' do commit.create_builds(trigger_request).should be_true @@ -215,49 +215,49 @@ describe Commit do end describe "#finished_at" do - let(:project) { FactoryGirl.create :project } - let(:commit) { FactoryGirl.create :commit, project: project } + let(:project) { FactoryGirl.create :ci_project } + let(:commit) { FactoryGirl.create :ci_commit, project: project } it "returns finished_at of latest build" do - build = FactoryGirl.create :build, commit: commit, finished_at: Time.now - 60 - build1 = FactoryGirl.create :build, commit: commit, finished_at: Time.now - 120 + build = FactoryGirl.create :ci_build, commit: commit, finished_at: Time.now - 60 + build1 = FactoryGirl.create :ci_build, commit: commit, finished_at: Time.now - 120 commit.finished_at.to_i.should == build.finished_at.to_i end it "returns nil if there is no finished build" do - build = FactoryGirl.create :not_started_build, commit: commit + build = FactoryGirl.create :ci_not_started_build, commit: commit commit.finished_at.should be_nil end end describe "coverage" do - let(:project) { FactoryGirl.create :project, coverage_regex: "/.*/" } - let(:commit) { FactoryGirl.create :commit, project: project } + let(:project) { FactoryGirl.create :ci_project, coverage_regex: "/.*/" } + let(:commit) { FactoryGirl.create :ci_commit, project: project } it "calculates average when there are two builds with coverage" do - FactoryGirl.create :build, name: "rspec", coverage: 30, commit: commit - FactoryGirl.create :build, name: "rubocop", coverage: 40, commit: commit + FactoryGirl.create :ci_build, name: "rspec", coverage: 30, commit: commit + FactoryGirl.create :ci_build, name: "rubocop", coverage: 40, commit: commit commit.coverage.should == "35.00" end it "calculates average when there are two builds with coverage and one with nil" do - FactoryGirl.create :build, name: "rspec", coverage: 30, commit: commit - FactoryGirl.create :build, name: "rubocop", coverage: 40, commit: commit - FactoryGirl.create :build, commit: commit + FactoryGirl.create :ci_build, name: "rspec", coverage: 30, commit: commit + FactoryGirl.create :ci_build, name: "rubocop", coverage: 40, commit: commit + FactoryGirl.create :ci_build, commit: commit commit.coverage.should == "35.00" end it "calculates average when there are two builds with coverage and one is retried" do - FactoryGirl.create :build, name: "rspec", coverage: 30, commit: commit - FactoryGirl.create :build, name: "rubocop", coverage: 30, commit: commit - FactoryGirl.create :build, name: "rubocop", coverage: 40, commit: commit + FactoryGirl.create :ci_build, name: "rspec", coverage: 30, commit: commit + FactoryGirl.create :ci_build, name: "rubocop", coverage: 30, commit: commit + FactoryGirl.create :ci_build, name: "rubocop", coverage: 40, commit: commit commit.coverage.should == "35.00" end it "calculates average when there is one build without coverage" do - FactoryGirl.create :build, commit: commit + FactoryGirl.create :ci_build, commit: commit commit.coverage.should be_nil end end diff --git a/spec/ci/models/mail_service_spec.rb b/spec/models/ci/mail_service_spec.rb similarity index 74% rename from spec/ci/models/mail_service_spec.rb rename to spec/models/ci/mail_service_spec.rb index d66a6591f8f..4830d98bdf8 100644 --- a/spec/ci/models/mail_service_spec.rb +++ b/spec/models/ci/mail_service_spec.rb @@ -14,7 +14,7 @@ require 'spec_helper' -describe MailService do +describe Ci::MailService do describe "Associations" do it { should belong_to :project } end @@ -28,12 +28,12 @@ describe MailService do end describe 'Sends email for' do - let(:mail) { MailService.new } + let(:mail) { Ci::MailService.new } describe 'failed build' do - let(:project) { FactoryGirl.create(:project, email_add_pusher: true) } - let(:commit) { FactoryGirl.create(:commit, project: project) } - let(:build) { FactoryGirl.create(:build, status: :failed, commit: commit) } + let(:project) { FactoryGirl.create(:ci_project, email_add_pusher: true) } + let(:commit) { FactoryGirl.create(:ci_commit, project: project) } + let(:build) { FactoryGirl.create(:ci_build, status: :failed, commit: commit) } before do mail.stub( @@ -53,9 +53,9 @@ describe MailService do end describe 'successfull build' do - let(:project) { FactoryGirl.create(:project, email_add_pusher: true, email_only_broken_builds: false) } - let(:commit) { FactoryGirl.create(:commit, project: project) } - let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } + let(:project) { FactoryGirl.create(:ci_project, email_add_pusher: true, email_only_broken_builds: false) } + let(:commit) { FactoryGirl.create(:ci_commit, project: project) } + let(:build) { FactoryGirl.create(:ci_build, status: :success, commit: commit) } before do mail.stub( @@ -76,13 +76,13 @@ describe MailService do describe 'successfull build and project has email_recipients' do let(:project) { - FactoryGirl.create(:project, + FactoryGirl.create(:ci_project, email_add_pusher: true, email_only_broken_builds: false, email_recipients: "jeroen@example.com") } - let(:commit) { FactoryGirl.create(:commit, project: project) } - let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } + let(:commit) { FactoryGirl.create(:ci_commit, project: project) } + let(:build) { FactoryGirl.create(:ci_build, status: :success, commit: commit) } before do mail.stub( @@ -104,13 +104,13 @@ describe MailService do describe 'successful build and notify only broken builds' do let(:project) { - FactoryGirl.create(:project, + FactoryGirl.create(:ci_project, email_add_pusher: true, email_only_broken_builds: true, email_recipients: "jeroen@example.com") } - let(:commit) { FactoryGirl.create(:commit, project: project) } - let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } + let(:commit) { FactoryGirl.create(:ci_commit, project: project) } + let(:build) { FactoryGirl.create(:ci_build, status: :success, commit: commit) } before do mail.stub( @@ -132,13 +132,13 @@ describe MailService do describe 'successful build and can test service' do let(:project) { - FactoryGirl.create(:project, + FactoryGirl.create(:ci_project, email_add_pusher: true, email_only_broken_builds: false, email_recipients: "jeroen@example.com") } - let(:commit) { FactoryGirl.create(:commit, project: project) } - let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } + let(:commit) { FactoryGirl.create(:ci_commit, project: project) } + let(:build) { FactoryGirl.create(:ci_build, status: :success, commit: commit) } before do mail.stub( @@ -154,13 +154,13 @@ describe MailService do describe 'retried build should not receive email' do let(:project) { - FactoryGirl.create(:project, + FactoryGirl.create(:ci_project, email_add_pusher: true, email_only_broken_builds: true, email_recipients: "jeroen@example.com") } - let(:commit) { FactoryGirl.create(:commit, project: project) } - let(:build) { FactoryGirl.create(:build, status: :failed, commit: commit) } + let(:commit) { FactoryGirl.create(:ci_commit, project: project) } + let(:build) { FactoryGirl.create(:ci_build, status: :failed, commit: commit) } before do mail.stub( diff --git a/spec/ci/models/network_spec.rb b/spec/models/ci/network_spec.rb similarity index 100% rename from spec/ci/models/network_spec.rb rename to spec/models/ci/network_spec.rb diff --git a/spec/ci/models/project_services/hip_chat_message_spec.rb b/spec/models/ci/project_services/hip_chat_message_spec.rb similarity index 96% rename from spec/ci/models/project_services/hip_chat_message_spec.rb rename to spec/models/ci/project_services/hip_chat_message_spec.rb index f1ad875ebcf..3571cb94793 100644 --- a/spec/ci/models/project_services/hip_chat_message_spec.rb +++ b/spec/models/ci/project_services/hip_chat_message_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe HipChatMessage do +describe Ci::HipChatMessage do subject { HipChatMessage.new(build) } let(:project) { FactoryGirl.create(:project) } @@ -8,7 +8,7 @@ describe HipChatMessage do context "One build" do let(:commit) { FactoryGirl.create(:commit_with_one_job, project: project) } - let(:build) do + let(:build) do commit.create_builds commit.builds.first end @@ -16,7 +16,7 @@ describe HipChatMessage do context 'when build succeeds' do it 'returns a successful message' do build.update(status: "success") - + expect( subject.status_color ).to eq 'green' expect( subject.notify? ).to be_false expect( subject.to_s ).to match(/Build '[^']+' #\d+/) @@ -39,7 +39,7 @@ describe HipChatMessage do context "Several builds" do let(:commit) { FactoryGirl.create(:commit_with_two_jobs, project: project) } - let(:build) do + let(:build) do commit.builds.first end @@ -63,7 +63,7 @@ describe HipChatMessage do second_build = commit.builds.last first_build.update(status: "success") second_build.update(status: "failed") - + expect( subject.status_color ).to eq 'red' expect( subject.notify? ).to be_true expect( subject.to_s ).to match(/Commit #\d+/) diff --git a/spec/ci/models/project_services/hip_chat_service_spec.rb b/spec/models/ci/project_services/hip_chat_service_spec.rb similarity index 98% rename from spec/ci/models/project_services/hip_chat_service_spec.rb rename to spec/models/ci/project_services/hip_chat_service_spec.rb index 37ce4905af8..71dba8fc358 100644 --- a/spec/ci/models/project_services/hip_chat_service_spec.rb +++ b/spec/models/ci/project_services/hip_chat_service_spec.rb @@ -15,7 +15,7 @@ require 'spec_helper' -describe HipChatService do +describe Ci::HipChatService do describe "Validations" do diff --git a/spec/ci/models/project_services/slack_message_spec.rb b/spec/models/ci/project_services/slack_message_spec.rb similarity index 97% rename from spec/ci/models/project_services/slack_message_spec.rb rename to spec/models/ci/project_services/slack_message_spec.rb index 88e0f373206..4a7284fe460 100644 --- a/spec/ci/models/project_services/slack_message_spec.rb +++ b/spec/models/ci/project_services/slack_message_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe SlackMessage do +describe Ci::SlackMessage do subject { SlackMessage.new(commit) } let(:project) { FactoryGirl.create :project } @@ -8,7 +8,7 @@ describe SlackMessage do context "One build" do let(:commit) { FactoryGirl.create(:commit_with_one_job, project: project) } - let(:build) do + let(:build) do commit.create_builds commit.builds.first end @@ -70,7 +70,7 @@ describe SlackMessage do second_build = commit.builds.last first_build.update(status: "success") second_build.update(status: "failed") - + subject.color.should == color subject.fallback.should include('Commit') subject.fallback.should include("\##{commit.id}") diff --git a/spec/ci/models/project_services/slack_service_spec.rb b/spec/models/ci/project_services/slack_service_spec.rb similarity index 98% rename from spec/ci/models/project_services/slack_service_spec.rb rename to spec/models/ci/project_services/slack_service_spec.rb index e1c14281274..952349a9def 100644 --- a/spec/ci/models/project_services/slack_service_spec.rb +++ b/spec/models/ci/project_services/slack_service_spec.rb @@ -14,7 +14,7 @@ require 'spec_helper' -describe SlackService do +describe Ci::SlackService do describe "Associations" do it { should belong_to :project } end diff --git a/spec/ci/models/project_spec.rb b/spec/models/ci/project_spec.rb similarity index 100% rename from spec/ci/models/project_spec.rb rename to spec/models/ci/project_spec.rb diff --git a/spec/ci/models/runner_project_spec.rb b/spec/models/ci/runner_project_spec.rb similarity index 91% rename from spec/ci/models/runner_project_spec.rb rename to spec/models/ci/runner_project_spec.rb index cbefb24705a..0218d484130 100644 --- a/spec/ci/models/runner_project_spec.rb +++ b/spec/models/ci/runner_project_spec.rb @@ -11,6 +11,6 @@ require 'spec_helper' -describe RunnerProject do +describe Ci::RunnerProject do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/ci/models/runner_spec.rb b/spec/models/ci/runner_spec.rb similarity index 98% rename from spec/ci/models/runner_spec.rb rename to spec/models/ci/runner_spec.rb index 6902c0a94e6..8677d86aa02 100644 --- a/spec/ci/models/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -19,7 +19,7 @@ require 'spec_helper' -describe Runner do +describe Ci::Runner do describe '#display_name' do it 'should return the description if it has a value' do runner = FactoryGirl.build(:runner, description: 'Linux/Ruby-1.9.3-p448') diff --git a/spec/ci/models/service_spec.rb b/spec/models/ci/service_spec.rb similarity index 97% rename from spec/ci/models/service_spec.rb rename to spec/models/ci/service_spec.rb index 22a49e10a6c..5a90229ec43 100644 --- a/spec/ci/models/service_spec.rb +++ b/spec/models/ci/service_spec.rb @@ -14,7 +14,7 @@ require 'spec_helper' -describe Service do +describe Ci::Service do describe "Associations" do it { should belong_to :project } diff --git a/spec/ci/models/trigger_spec.rb b/spec/models/ci/trigger_spec.rb similarity index 95% rename from spec/ci/models/trigger_spec.rb rename to spec/models/ci/trigger_spec.rb index bba638e7817..7c928f9d9dc 100644 --- a/spec/ci/models/trigger_spec.rb +++ b/spec/models/ci/trigger_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Trigger do +describe Ci::Trigger do let(:project) { FactoryGirl.create :project } describe 'before_validation' do diff --git a/spec/ci/models/user_spec.rb b/spec/models/ci/user_spec.rb similarity index 99% rename from spec/ci/models/user_spec.rb rename to spec/models/ci/user_spec.rb index 73a7a7d5fbc..d1b87988b74 100644 --- a/spec/ci/models/user_spec.rb +++ b/spec/models/ci/user_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe User do +describe Ci::User do describe "has_developer_access?" do before do diff --git a/spec/ci/models/variable_spec.rb b/spec/models/ci/variable_spec.rb similarity index 97% rename from spec/ci/models/variable_spec.rb rename to spec/models/ci/variable_spec.rb index 4575115ccfb..447512bf6df 100644 --- a/spec/ci/models/variable_spec.rb +++ b/spec/models/ci/variable_spec.rb @@ -13,7 +13,7 @@ require 'spec_helper' -describe Variable do +describe Ci::Variable do subject { Variable.new } let(:secret_value) { 'secret' } diff --git a/spec/ci/models/web_hook_spec.rb b/spec/models/ci/web_hook_spec.rb similarity index 98% rename from spec/ci/models/web_hook_spec.rb rename to spec/models/ci/web_hook_spec.rb index 0f0f175a7a3..4211576ce5e 100644 --- a/spec/ci/models/web_hook_spec.rb +++ b/spec/models/ci/web_hook_spec.rb @@ -11,7 +11,7 @@ require 'spec_helper' -describe WebHook do +describe Ci::WebHook do describe "Associations" do it { should belong_to :project } end diff --git a/spec/ci/requests/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb similarity index 99% rename from spec/ci/requests/api/builds_spec.rb rename to spec/requests/ci/api/builds_spec.rb index be55e9ff479..7da212da83a 100644 --- a/spec/ci/requests/api/builds_spec.rb +++ b/spec/requests/ci/api/builds_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe API::API do +describe Ci::API::API do include ApiHelpers let(:runner) { FactoryGirl.create(:runner, tag_list: ["mysql", "ruby"]) } diff --git a/spec/ci/requests/api/commits_spec.rb b/spec/requests/ci/api/commits_spec.rb similarity index 98% rename from spec/ci/requests/api/commits_spec.rb rename to spec/requests/ci/api/commits_spec.rb index 190df70c1a5..99021dd681d 100644 --- a/spec/ci/requests/api/commits_spec.rb +++ b/spec/requests/ci/api/commits_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe API::API, 'Commits' do +describe Ci::API::API, 'Commits' do include ApiHelpers let(:project) { FactoryGirl.create(:project) } diff --git a/spec/ci/requests/api/forks_spec.rb b/spec/requests/ci/api/forks_spec.rb similarity index 98% rename from spec/ci/requests/api/forks_spec.rb rename to spec/requests/ci/api/forks_spec.rb index af523421c65..74efc0c30be 100644 --- a/spec/ci/requests/api/forks_spec.rb +++ b/spec/requests/ci/api/forks_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe API::API do +describe Ci::API::API do include ApiHelpers let(:project) { FactoryGirl.create(:project) } diff --git a/spec/ci/requests/api/projects_spec.rb b/spec/requests/ci/api/projects_spec.rb similarity index 99% rename from spec/ci/requests/api/projects_spec.rb rename to spec/requests/ci/api/projects_spec.rb index 014a9efc617..65cfc909b48 100644 --- a/spec/ci/requests/api/projects_spec.rb +++ b/spec/requests/ci/api/projects_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe API::API do +describe Ci::API::API do include ApiHelpers let(:gitlab_url) { GitlabCi.config.gitlab_server.url } @@ -12,11 +12,11 @@ describe API::API do url: gitlab_url } } - + before { stub_gitlab_calls } - + context "requests for scoped projects" do # NOTE: These ids are tied to the actual projects on demo.gitlab.com describe "GET /projects" do @@ -45,7 +45,7 @@ describe API::API do end end end - + describe "POST /projects/:project_id/webhooks" do let!(:project) { FactoryGirl.create(:project) } diff --git a/spec/ci/requests/api/runners_spec.rb b/spec/requests/ci/api/runners_spec.rb similarity index 98% rename from spec/ci/requests/api/runners_spec.rb rename to spec/requests/ci/api/runners_spec.rb index 47de3c2a95c..3faebd40bae 100644 --- a/spec/ci/requests/api/runners_spec.rb +++ b/spec/requests/ci/api/runners_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe API::API do +describe Ci::API::API do include ApiHelpers include StubGitlabCalls diff --git a/spec/ci/requests/api/triggers_spec.rb b/spec/requests/ci/api/triggers_spec.rb similarity index 99% rename from spec/ci/requests/api/triggers_spec.rb rename to spec/requests/ci/api/triggers_spec.rb index 6e56c4b3b22..5da40a69991 100644 --- a/spec/ci/requests/api/triggers_spec.rb +++ b/spec/requests/ci/api/triggers_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe API::API do +describe Ci::API::API do include ApiHelpers describe 'POST /projects/:project_id/refs/:ref/trigger' do diff --git a/spec/ci/requests/builds_spec.rb b/spec/requests/ci/builds_spec.rb similarity index 100% rename from spec/ci/requests/builds_spec.rb rename to spec/requests/ci/builds_spec.rb diff --git a/spec/ci/requests/commits_spec.rb b/spec/requests/ci/commits_spec.rb similarity index 100% rename from spec/ci/requests/commits_spec.rb rename to spec/requests/ci/commits_spec.rb diff --git a/spec/ci/services/create_commit_service_spec.rb b/spec/services/ci/create_commit_service_spec.rb similarity index 100% rename from spec/ci/services/create_commit_service_spec.rb rename to spec/services/ci/create_commit_service_spec.rb diff --git a/spec/ci/services/create_project_service_spec.rb b/spec/services/ci/create_project_service_spec.rb similarity index 100% rename from spec/ci/services/create_project_service_spec.rb rename to spec/services/ci/create_project_service_spec.rb diff --git a/spec/ci/services/create_trigger_request_service_spec.rb b/spec/services/ci/create_trigger_request_service_spec.rb similarity index 100% rename from spec/ci/services/create_trigger_request_service_spec.rb rename to spec/services/ci/create_trigger_request_service_spec.rb diff --git a/spec/ci/services/event_service_spec.rb b/spec/services/ci/event_service_spec.rb similarity index 100% rename from spec/ci/services/event_service_spec.rb rename to spec/services/ci/event_service_spec.rb diff --git a/spec/ci/services/image_for_build_service_spec.rb b/spec/services/ci/image_for_build_service_spec.rb similarity index 100% rename from spec/ci/services/image_for_build_service_spec.rb rename to spec/services/ci/image_for_build_service_spec.rb diff --git a/spec/ci/services/register_build_service_spec.rb b/spec/services/ci/register_build_service_spec.rb similarity index 100% rename from spec/ci/services/register_build_service_spec.rb rename to spec/services/ci/register_build_service_spec.rb diff --git a/spec/ci/services/web_hook_service_spec.rb b/spec/services/ci/web_hook_service_spec.rb similarity index 100% rename from spec/ci/services/web_hook_service_spec.rb rename to spec/services/ci/web_hook_service_spec.rb -- GitLab