@ -2,32 +2,29 @@ require "rails_helper"
RSpec . describe MergeRequestsController , type : :request do
RSpec . describe MergeRequestsController , type : :request do
let ( :organisation ) { user . organisation }
let ( :organisation ) { user . organisation }
let ( :other_organisation ) { FactoryBot . create ( :organisation , name : " Other Test Org " ) }
let ( :other_organisation ) { create ( :organisation , name : " Other Test Org " ) }
let ( :headers ) { { " Accept " = > " text/html " } }
let ( :headers ) { { " Accept " = > " text/html " } }
let ( :page ) { Capybara :: Node :: Simple . new ( response . body ) }
let ( :page ) { Capybara :: Node :: Simple . new ( response . body ) }
let ( :user ) { FactoryBot . create ( :user , :data_coordinator ) }
let ( :user ) { create ( :user , :data_coordinator ) }
let ( :support_user ) { FactoryBot . create ( :user , :support , organisation : ) }
let ( :support_user ) { create ( :user , :support , organisation : ) }
let ( :merge_request ) { MergeRequest . create! ( requesting_organisation : organisation ) }
let ( :merge_request ) { MergeRequest . create! ( requesting_organisation : organisation ) }
let ( :other_merge_request ) { MergeRequest . create! ( requesting_organisation : other_organisation ) }
let ( :other_merge_request ) { MergeRequest . create! ( requesting_organisation : other_organisation ) }
context " when user is signed in with a data coordinator user " do
context " when user is signed in with a data coordinator user " do
before do
before { sign_in user }
sign_in user
end
describe " # organisations " do
describe " # organisations " do
let ( :params ) { { merge_request : { requesting_organisation_id : " 9 " , status : " unsubmitted " } } }
let ( :params ) { { merge_request : { requesting_organisation_id : " 9 " , status : " unsubmitted " } } }
context " when creating a new merge request " do
context " when creating a new merge request " do
before do
before do
organisation . update! ( name : " Test Org " )
post " /merge-request " , headers : , params :
post " /merge-request " , headers : , params :
end
end
it " creates merge request with requesting organisation " do
it " creates merge request with requesting organisation " do
follow_redirect!
follow_redirect!
expect ( page ) . to have_content ( " Which organisations are merging? " )
expect ( page ) . to have_content ( " Which organisations are merging? " )
expect ( page ) . to have_content ( " Test Org " )
expect ( page ) . to have_content ( organisation . name )
expect ( page ) . not_to have_link ( " Remove " )
expect ( page ) . not_to have_link ( " Remove " )
end
end
@ -46,13 +43,12 @@ RSpec.describe MergeRequestsController, type: :request do
context " when viewing existing merge request " do
context " when viewing existing merge request " do
before do
before do
organisation . update! ( name : " Test Org " )
get " /merge-request/ #{ merge_request . id } /organisations " , headers : , params :
get " /merge-request/ #{ merge_request . id } /organisations " , headers : , params :
end
end
it " shows merge request with requesting organisation " do
it " shows merge request with requesting organisation " do
expect ( page ) . to have_content ( " Which organisations are merging? " )
expect ( page ) . to have_content ( " Which organisations are merging? " )
expect ( page ) . to have_content ( " Test Org " )
expect ( page ) . to have_content ( organisation . name )
end
end
end
end
@ -116,7 +112,7 @@ RSpec.describe MergeRequestsController, type: :request do
end
end
context " when the user selects an organisation that is a part of another merge " do
context " when the user selects an organisation that is a part of another merge " do
let ( :another_organisation ) { FactoryBot . create ( :organisation , name : " Other Test Org " ) }
let ( :another_organisation ) { create ( :organisation ) }
let ( :params ) { { merge_request : { merging_organisation : another_organisation . id } } }
let ( :params ) { { merge_request : { merging_organisation : another_organisation . id } } }
before do
before do
@ -134,7 +130,7 @@ RSpec.describe MergeRequestsController, type: :request do
end
end
context " when the user selects an organisation that is a part of another unsubmitted merge " do
context " when the user selects an organisation that is a part of another unsubmitted merge " do
let ( :another_organisation ) { FactoryBot . create ( :organisation , name : " Other Test Org " ) }
let ( :another_organisation ) { create ( :organisation ) }
let ( :params ) { { merge_request : { merging_organisation : another_organisation . id } } }
let ( :params ) { { merge_request : { merging_organisation : another_organisation . id } } }
before do
before do
@ -151,7 +147,7 @@ RSpec.describe MergeRequestsController, type: :request do
end
end
context " when the user selects an organisation that is a part of current merge " do
context " when the user selects an organisation that is a part of current merge " do
let ( :another_organisation ) { FactoryBot . create ( :organisation , name : " Other Test Org " ) }
let ( :another_organisation ) { create ( :organisation ) }
let ( :params ) { { merge_request : { merging_organisation : another_organisation . id } } }
let ( :params ) { { merge_request : { merging_organisation : another_organisation . id } } }
before do
before do
@ -237,18 +233,99 @@ RSpec.describe MergeRequestsController, type: :request do
end
end
end
end
describe " # update " do
before { sign_in user }
describe " # other_merging_organisations " do
describe " # other_merging_organisations " do
let ( :params ) { { merge_request : { other_merging_organisations : " A list of other merging organisations " } } }
let ( :other_merging_organisations ) { " A list of other merging organisations " }
let ( :params ) { { merge_request : { other_merging_organisations : , page : " organisations " } } }
let ( :request ) do
patch " /merge-request/ #{ merge_request . id } " , headers : , params :
end
context " when adding other merging organisations " do
context " when adding other merging organisations " do
before do
before do
MergeRequestOrganisation . create! ( merge_request_id : merge_request . id , merging_organisation_id : other_organisation . id )
MergeRequestOrganisation . create! ( merge_request_id : merge_request . id , merging_organisation_id : other_organisation . id )
patch " /merge-request/ #{ merge_request . id } " , headers : , params :
end
end
it " updates the merge request " do
it " updates the merge request " do
merge_request . reload
expect { request } . to change { merge_request . reload . other_merging_organisations } . from ( nil ) . to ( other_merging_organisations )
expect ( merge_request . other_merging_organisations ) . to eq ( " A list of other merging organisations " )
end
it " redirects telephone number path " do
request
expect ( response ) . to redirect_to ( absorbing_organisation_merge_request_path ( merge_request ) )
end
end
end
context " when not answering the question " do
let ( :merge_request ) { MergeRequest . create! ( requesting_organisation : organisation , absorbing_organisation : other_organisation ) }
let ( :params ) do
{ merge_request : { page : " absorbing_organisation " } }
end
let ( :request ) do
patch " /merge-request/ #{ merge_request . id } " , headers : , params :
end
it " renders the error " do
request
expect ( page ) . to have_content ( " Select the organisation absorbing the others " )
end
it " does not update the request " do
expect { request } . not_to ( change { merge_request . reload . attributes } )
end
end
context " when absorbing_organisation_id set to other " do
let ( :merge_request ) { MergeRequest . create! ( requesting_organisation : organisation , absorbing_organisation : other_organisation ) }
let ( :params ) do
{ merge_request : { absorbing_organisation_id : " other " , page : " absorbing_organisation " } }
end
let ( :request ) do
patch " /merge-request/ #{ merge_request . id } " , headers : , params :
end
it " redirects to new org path " do
request
expect ( response ) . to redirect_to ( new_org_name_merge_request_path ( merge_request ) )
end
it " resets absorbing_organisation and sets new_absorbing_organisation to true " do
expect { request } . to change {
merge_request . reload . absorbing_organisation
} . from ( other_organisation ) . to ( nil ) . and change {
merge_request . reload . new_absorbing_organisation
} . from ( nil ) . to ( true )
end
end
context " when absorbing_organisation_id set to id " do
let ( :merge_request ) { MergeRequest . create! ( requesting_organisation : organisation , new_absorbing_organisation : true ) }
let ( :params ) do
{ merge_request : { absorbing_organisation_id : other_organisation . id , page : " absorbing_organisation " } }
end
let ( :request ) do
patch " /merge-request/ #{ merge_request . id } " , headers : , params :
end
it " redirects telephone number path " do
request
expect ( response ) . to redirect_to ( confirm_telephone_number_merge_request_path ( merge_request ) )
end
it " updates absorbing_organisation_id and sets new_absorbing_organisation to false " do
expect { request } . to change {
merge_request . reload . absorbing_organisation
} . from ( nil ) . to ( other_organisation ) . and change {
merge_request . reload . new_absorbing_organisation
} . from ( true ) . to ( false )
end
end
end
end
end
end
@ -264,7 +341,6 @@ RSpec.describe MergeRequestsController, type: :request do
let ( :params ) { { merge_request : { requesting_organisation_id : other_organisation . id , status : " unsubmitted " } } }
let ( :params ) { { merge_request : { requesting_organisation_id : other_organisation . id , status : " unsubmitted " } } }
before do
before do
organisation . update! ( name : " Test Org " )
post " /merge-request " , headers : , params :
post " /merge-request " , headers : , params :
end
end