From 55e994313210e6ef887b580af08bb1be53df5815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Geuken?= Date: Mon, 30 May 2016 15:42:00 +0200 Subject: [PATCH 1/4] [ci] project controller spec: Cleanup it blocks to make their descriptions more speaking --- .../webui/project_controller_spec.rb | 70 ++++++++++++------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/src/api/spec/controllers/webui/project_controller_spec.rb b/src/api/spec/controllers/webui/project_controller_spec.rb index 100a4bc739a..97ce2db92fe 100644 --- a/src/api/spec/controllers/webui/project_controller_spec.rb +++ b/src/api/spec/controllers/webui/project_controller_spec.rb @@ -221,42 +221,60 @@ Project.any_instance.stubs(:number_of_build_problems).returns(0) end - it 'without nextstatus param' do - get :show, project: apache_project - expect(response).to have_http_status(:ok) + context 'without nextstatus param' do + before do + get :show, project: apache_project + end + + it { expect(response).to have_http_status(:ok) } end - it 'with nextstatus param' do - get :show, { project: apache_project, nextstatus: 500 } - expect(response).to have_http_status(:internal_server_error) + context 'with nextstatus param' do + before do + get :show, { project: apache_project, nextstatus: 500 } + end + + it { expect(response).to have_http_status(:internal_server_error) } end - it 'without patchinfo' do - get :show, project: apache_project - expect(assigns(:has_patchinfo)).to be_falsey + context 'without patchinfo' do + before do + get :show, project: apache_project + end + + it { expect(assigns(:has_patchinfo)).to be_falsey } end - it 'with patchinfo' do - login admin_user - # Avoid fetching from backend directly - Directory.stubs(:hashed).returns(Xmlhash::XMLHash.new('entry' => {'name' => '_patchinfo'})) - # Avoid writing to the backend - Package.any_instance.stubs(:sources_changed).returns(nil) - Patchinfo.new.create_patchinfo(apache_project.name, nil, comment: 'Fake comment', force: false) - get :show, project: apache_project - expect(assigns(:has_patchinfo)).to be_truthy + context 'with patchinfo' do + before do + login admin_user + # Avoid fetching from backend directly + Directory.stubs(:hashed).returns(Xmlhash::XMLHash.new('entry' => {'name' => '_patchinfo'})) + # Avoid writing to the backend + Package.any_instance.stubs(:sources_changed).returns(nil) + Patchinfo.new.create_patchinfo(apache_project.name, nil, comment: 'Fake comment', force: false) + get :show, project: apache_project + end + + it { expect(assigns(:has_patchinfo)).to be_truthy } end - it 'with comments' do - apache_project.comments << build(:comment_project, user: user) - get :show, project: apache_project - expect(assigns(:comments)).to match_array(apache_project.comments) + context 'with comments' do + before do + apache_project.comments << build(:comment_project, user: user) + get :show, project: apache_project + end + + it { expect(assigns(:comments)).to match_array(apache_project.comments) } end - it 'with bugowners' do - create(:relationship_project_user, role: Role.find_by_title('bugowner'), project: apache_project, user: user) - get :show, project: apache_project - expect(assigns(:bugowners_mail)).to match_array([user.email]) + context 'with bugowners' do + before do + create(:relationship_project_user, role: Role.find_by_title('bugowner'), project: apache_project, user: user) + get :show, project: apache_project + end + + it { expect(assigns(:bugowners_mail)).to match_array([user.email]) } end context 'without bugowners' do From ecc5f61fb907594fb00b801b266f5ed18e4927f8 Mon Sep 17 00:00:00 2001 From: Moises Deniz Aleman Date: Wed, 25 May 2016 17:36:09 +0200 Subject: [PATCH 2/4] [ci] Migrate ProjectController#buildresult to Rspec --- .../spec/controllers/webui/project_controller_spec.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/api/spec/controllers/webui/project_controller_spec.rb b/src/api/spec/controllers/webui/project_controller_spec.rb index 97ce2db92fe..56a8da39d39 100644 --- a/src/api/spec/controllers/webui/project_controller_spec.rb +++ b/src/api/spec/controllers/webui/project_controller_spec.rb @@ -393,4 +393,14 @@ expect(flash[:error]).to eq("Couldn't add repository: 'Name must not start with '_' or contain any of these characters ':/'") end end + + describe 'GET #buildresult' do + it 'assigns the buildresult' do + summary = Xmlhash::XMLHash.new({'statuscount' => {'code' => 'succeeded', 'count' => 1} }) + build_result = { 'result' => Xmlhash::XMLHash.new({'repository' => 'openSUSE', 'arch' => 'x86_64', 'summary' => summary }) } + Buildresult.stubs(:find_hashed).returns(Xmlhash::XMLHash.new(build_result)) + xhr :get, :buildresult, project: project_with_package + expect(assigns(:buildresult)).to match_array([["openSUSE", [["x86_64", [[:succeeded, 1]]]]]]) + end + end end From f6139c5ed690a0fb0d6d40d4421cdff1884dfbec Mon Sep 17 00:00:00 2001 From: Moises Deniz Aleman Date: Thu, 26 May 2016 16:24:30 +0200 Subject: [PATCH 3/4] [ci] Migrate ProjectController#destroy action to RSpec --- .../webui/project_controller_spec.rb | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/api/spec/controllers/webui/project_controller_spec.rb b/src/api/spec/controllers/webui/project_controller_spec.rb index 56a8da39d39..cab5379d621 100644 --- a/src/api/spec/controllers/webui/project_controller_spec.rb +++ b/src/api/spec/controllers/webui/project_controller_spec.rb @@ -403,4 +403,57 @@ expect(assigns(:buildresult)).to match_array([["openSUSE", [["x86_64", [[:succeeded, 1]]]]]]) end end + + describe 'GET #delete_dialog' do + it 'assigns only linking_projects' do + apache2_project + another_project.projects_linking_to << apache_project + xhr :get, :delete_dialog, project: apache_project + expect(assigns(:linking_projects)).to match_array([another_project.name]) + end + end + + describe 'DELETE #destroy' do + before do + login user_moi + end + + context 'with check_weak_dependencies to true' do + before do + Project.any_instance.stubs(:check_weak_dependencies?).returns(true) + end + + context 'having a parent project' do + before do + subproject = create(:project, name: "#{user_moi.home_project}:subproject") + delete :destroy, project: subproject + end + + it { expect(Project.count).to eq(1) } + it { is_expected.to redirect_to(project_show_path(user_moi.home_project)) } + it { expect(flash[:notice]).to eq("Project was successfully removed.") } + end + + context 'not having a parent project' do + before do + delete :destroy, project: user_moi.home_project + end + + it { expect(Project.count).to eq(0) } + it { is_expected.to redirect_to(action: :index) } + it { expect(flash[:notice]).to eq("Project was successfully removed.") } + end + end + + context 'with check_weak_dependencies to false' do + before do + Project.any_instance.stubs(:check_weak_dependencies?).returns(false) + delete :destroy, project: user_moi.home_project + end + + it { expect(Project.count).to eq(1) } + it { is_expected.to redirect_to(project_show_path(user_moi.home_project)) } + it { expect(flash[:notice]).to start_with("Project can't be removed:") } + end + end end From f23cb80dd0bd5ec759fba56afb18c77e4d156cf7 Mon Sep 17 00:00:00 2001 From: Moises Deniz Aleman Date: Thu, 26 May 2016 17:30:01 +0200 Subject: [PATCH 4/4] [ci] Migrate ProjectController#update_target action to RSpec --- .../webui/project_controller_spec.rb | 54 ++++++++++++++++--- src/api/spec/factories/repository.rb | 2 +- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/api/spec/controllers/webui/project_controller_spec.rb b/src/api/spec/controllers/webui/project_controller_spec.rb index cab5379d621..28b6273a032 100644 --- a/src/api/spec/controllers/webui/project_controller_spec.rb +++ b/src/api/spec/controllers/webui/project_controller_spec.rb @@ -11,6 +11,7 @@ let(:home_moi_project) { create(:project, name: 'home:moi') } let(:maintenance_project) { create(:maintenance_project, name: 'maintenance_project') } let(:project_with_package) { create(:project_with_package, name: 'NewProject', package_name: 'PackageExample') } + let(:repo_for_user_home) { create(:repository, project: user.home_project) } describe 'CSRF protection' do before do @@ -415,28 +416,28 @@ describe 'DELETE #destroy' do before do - login user_moi + login user end - context 'with check_weak_dependencies to true' do + context 'with check_weak_dependencies enabled' do before do Project.any_instance.stubs(:check_weak_dependencies?).returns(true) end context 'having a parent project' do before do - subproject = create(:project, name: "#{user_moi.home_project}:subproject") + subproject = create(:project, name: "#{user.home_project}:subproject") delete :destroy, project: subproject end it { expect(Project.count).to eq(1) } - it { is_expected.to redirect_to(project_show_path(user_moi.home_project)) } + it { is_expected.to redirect_to(project_show_path(user.home_project)) } it { expect(flash[:notice]).to eq("Project was successfully removed.") } end context 'not having a parent project' do before do - delete :destroy, project: user_moi.home_project + delete :destroy, project: user.home_project end it { expect(Project.count).to eq(0) } @@ -445,15 +446,52 @@ end end - context 'with check_weak_dependencies to false' do + context 'with check_weak_dependencies disabled' do before do Project.any_instance.stubs(:check_weak_dependencies?).returns(false) - delete :destroy, project: user_moi.home_project + delete :destroy, project: user.home_project end it { expect(Project.count).to eq(1) } - it { is_expected.to redirect_to(project_show_path(user_moi.home_project)) } + it { is_expected.to redirect_to(project_show_path(user.home_project)) } it { expect(flash[:notice]).to start_with("Project can't be removed:") } end end + + describe 'POST #update_target' do + before do + login user + end + + context 'updating non existent repository' do + it 'will raise a NoMethodError' do + expect do + post :update_target, project: user.home_project, repo: 'standard' + end.to raise_error(NoMethodError) + end + end + + context 'updating the repository without architectures' do + before do + post :update_target, project: user.home_project, repo: repo_for_user_home.name + end + + it { expect(repo_for_user_home.architectures.pluck(:name)).to be_empty } + it { expect(assigns(:repository_arch_hash).to_a).to match_array([["armv7l", false], ['i586', false], ['x86_64', false]])} + it { is_expected.to redirect_to(action: :repositories) } + it { expect(flash[:notice]).to eq("Successfully updated repository") } + end + + context 'updating the repository with architectures' do + before do + post :update_target, project: user.home_project, repo: repo_for_user_home.name, arch: {'i586' => true, 'x86_64' => true} + end + + it { expect(repo_for_user_home.architectures.pluck(:name)).to match_array(['i586', 'x86_64']) } + it { expect(Architecture.available.pluck(:name)).to match_array(["armv7l", "i586", "x86_64"]) } + it { expect(assigns(:repository_arch_hash).to_a).to match_array([["armv7l", false], ['i586', true], ['x86_64', true]])} + it { is_expected.to redirect_to(action: :repositories) } + it { expect(flash[:notice]).to eq("Successfully updated repository") } + end + end end diff --git a/src/api/spec/factories/repository.rb b/src/api/spec/factories/repository.rb index 27c11f0e38a..e4f097d44db 100644 --- a/src/api/spec/factories/repository.rb +++ b/src/api/spec/factories/repository.rb @@ -1,7 +1,7 @@ FactoryGirl.define do factory :repository do project - name { Faker::Internet.domain_word } + sequence(:name) { |n| "#{Faker::Internet.domain_word}#{n}" } transient do architectures []