Skip to content

Commit

Permalink
Add tests for Staging managers
Browse files Browse the repository at this point in the history
Added specs to cover the staging managers functionality

Co-authored-by: David Kang <dkang@suse.com>
  • Loading branch information
Moises Deniz Aleman and DavidKang committed Nov 19, 2018
1 parent d113abf commit ee9379c
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

RSpec.describe Webui::Staging::ProjectsController do
let(:user) { create(:confirmed_user, login: 'tom') }
let(:managers_group) { create(:group) }
let(:project) { user.home_project }
let(:staging_workflow) { project.create_staging }
let(:staging_workflow) { project.create_staging(managers: managers_group) }

before do
login(user)
Expand All @@ -24,6 +25,9 @@
end
it { expect(response).to redirect_to(edit_staging_workflow_path(subject)) }
it { expect(flash[:success]).not_to be_nil }
it 'assigns the managers group' do
expect(Staging::StagingProject.find_by_name('home:tom:Staging:C').groups.last).to eq(subject.managers_group)
end
end

context 'an existent staging project' do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

RSpec.describe Webui::Staging::WorkflowsController do
let(:user) { create(:confirmed_user, login: 'tom') }
let(:managers_group) { create(:group) }
let(:other_managers_group) { create(:group) }
let(:project) { user.home_project }
let(:staging_workflow) { project.create_staging(managers: managers_group) }

before do
login(user)
Expand All @@ -21,7 +24,7 @@

context 'with an existent staging_workflow for project' do
before do
project.create_staging
project.create_staging(managers_id: managers_group.id)
get :new, params: { project: project.name }
end

Expand All @@ -33,14 +36,15 @@
describe 'POST #create' do
context 'a staging_workflow and staging_projects' do
before do
post :create, params: { project: project.name }
post :create, params: { project: project.name, managers_title: managers_group.title }
end

subject { project.staging }

it { expect(Staging::Workflow.count).to eq(1) }
it { expect(subject.staging_projects.map(&:name)).to match_array(['home:tom:Staging:A', 'home:tom:Staging:B']) }
it { expect(response).to redirect_to(staging_workflow_path(project.staging)) }
it { expect(subject.managers_group).to eq(managers_group) }
it { expect(flash[:success]).not_to be_nil }
end

Expand All @@ -49,14 +53,15 @@
let!(:staging_b) { create(:project, name: "#{project}:Staging:B") }

before do
post :create, params: { project: project.name }
post :create, params: { project: project.name, managers_title: managers_group.title }
end

subject { project.staging }

it { expect(Staging::Workflow.count).to eq(1) }
it { expect(subject.staging_projects.map(&:name)).to match_array(['home:tom:Staging:A', 'home:tom:Staging:B']) }
it { expect(response).to redirect_to(staging_workflow_path(project.staging)) }
it { expect(subject.managers_group).to eq(managers_group) }
it { expect(flash[:success]).not_to be_nil }
end

Expand Down Expand Up @@ -85,7 +90,7 @@

context 'with an existent staging_workflow for project' do
before do
project.create_staging
project.create_staging(managers_id: managers_group.id)
get :show, params: { id: project.staging }
end

Expand All @@ -108,7 +113,7 @@

context 'with an existent staging_workflow for project' do
before do
project.create_staging
project.create_staging(managers_id: managers_group.id)
get :edit, params: { id: project.staging }
end

Expand All @@ -121,7 +126,7 @@
describe 'DELETE #destroy' do
context 'a staging workflow and staging projects' do
before do
project.create_staging
project.create_staging(managers_id: managers_group.id)
params = { id: project.staging, staging_project_ids: project.staging.staging_projects.ids, format: :js }
delete :destroy, params: params
end
Expand All @@ -137,7 +142,7 @@

context 'a staging workflow and one staging project' do
before do
project.create_staging
project.create_staging(managers_id: managers_group.id)
params = { id: project.staging, staging_project_ids: project.staging.staging_projects.ids.first, format: :js }
delete :destroy, params: params
end
Expand All @@ -153,7 +158,7 @@

context 'a staging workflow unsuccessful' do
before do
project.create_staging
project.create_staging(managers_id: managers_group.id)
allow_any_instance_of(Staging::Workflow).to receive(:destroy).and_return(false)
params = { id: project.staging, staging_project_ids: project.staging.staging_projects.ids, format: :js }
delete :destroy, params: params
Expand All @@ -163,4 +168,42 @@
it { expect(response.body).to eq("window.location='#{staging_workflow_path(project.staging)}'") }
end
end

describe 'PUT #update' do
context 'without any problem' do
before do
put :update, params: { id: staging_workflow, managers_title: other_managers_group.title }
end

subject { staging_workflow.reload }

it { expect(subject.managers_group).to eq(other_managers_group) }
it 'assigns the new group and unassigns the old one' do
subject.staging_projects.each do |staging_project|
expect(staging_project.groups).to contain_exactly(other_managers_group)
end
end
it { expect(response).to redirect_to(edit_staging_workflow_path(subject)) }
it { expect(flash[:success]).not_to be_nil }
end

context 'with a failing save for staging workflow' do
before do
staging_workflow
allow_any_instance_of(Staging::Workflow).to receive(:save).and_return(false)
put :update, params: { id: staging_workflow, managers_title: other_managers_group.title }
end

subject { staging_workflow.reload }

it { expect(subject.managers_group).to eq(managers_group) }
it 'don\'t assigns the new group and unassigns the old one' do
subject.staging_projects.each do |staging_project|
expect(staging_project.groups).to contain_exactly(managers_group)
end
end
it { expect(response).to redirect_to(edit_staging_workflow_path(subject)) }
it { expect(flash[:error]).not_to be_nil }
end
end
end
35 changes: 34 additions & 1 deletion src/api/spec/models/staging/staging_project_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@

RSpec.describe Staging::StagingProject, vcr: true do
let(:user) { create(:confirmed_user, login: 'tom') }
let(:staging_workflow) { create(:staging_workflow_with_staging_projects, project: user.home_project) }

let(:managers_group) { create(:group) }
let(:other_managers_group) { create(:group) }

let(:staging_workflow) { create(:staging_workflow_with_staging_projects, project: user.home_project, managers_group: managers_group) }
let(:staging_project) { staging_workflow.staging_projects.first }

let!(:repository) { create(:repository, architectures: ['x86_64'], project: staging_project, name: 'staging_repository') }
Expand Down Expand Up @@ -120,4 +124,33 @@
it { expect(staging_project.overall_state).to eq(:failed) }
end
end

describe '#assign_managers_group' do
context 'when the group wasn\'t assigned before' do
before do
staging_project.assign_managers_group(other_managers_group)
staging_project.store
end

it { expect(staging_project.reload.groups).to include(other_managers_group) }
end

context 'when the group was already assigned' do
let(:assign_group) do
staging_project.assign_managers_group(managers_group)
staging_project.store
end

it { expect { assign_group }.not_to change(Relationship, :count) }
end
end

describe '#unassign_managers_group' do
before do
staging_project.unassign_managers_group(managers_group)
staging_project.store
end

it { expect(staging_project.reload.groups).to be_empty }
end
end

0 comments on commit ee9379c

Please sign in to comment.