Browse Source

Add tests for sales logs

pull/2534/head
Rachael Booth 2 years ago
parent
commit
0ea7a9edc2
  1. 140
      spec/requests/form_controller_spec.rb

140
spec/requests/form_controller_spec.rb

@ -939,19 +939,141 @@ RSpec.describe FormController, type: :request do
},
}
end
let(:page_id) { "buyer_1_age" }
context "and duplicate logs" do
let!(:duplicate_logs) { create_list(:sales_log, 2) }
context "when the answer makes the log a duplicate" do
context "with one other log" do
let(:new_duplicate) { create(:sales_log) }
before do
allow(SalesLog).to receive(:duplicate_logs).and_return(duplicate_logs)
post "/sales-logs/#{sales_log.id}/buyer-1-age", params:
before do
allow(SalesLog).to receive(:duplicate_logs).and_return(SalesLog.where(id: new_duplicate.id))
post "/sales-logs/#{sales_log.id}/#{page_id.dasherize}", params:
end
it "sets a new duplicate set id on both logs" do
sales_log.reload
new_duplicate.reload
expect(sales_log.duplicate_set_id).not_to be_nil
expect(sales_log.duplicate_set_id).to eql(new_duplicate.duplicate_set_id)
end
it "redirects to the duplicate logs page" do
expect(response).to redirect_to("/sales-logs/#{sales_log.id}/duplicate-logs?original_log_id=#{sales_log.id}")
follow_redirect!
expect(page).to have_content("These logs are duplicates")
end
end
it "redirects to the duplicate logs page" do
expect(response).to redirect_to("/sales-logs/#{sales_log.id}/duplicate-logs?original_log_id=#{sales_log.id}")
follow_redirect!
expect(page).to have_content("These logs are duplicates")
context "with a set of other logs" do
let(:duplicate_set_id) { 100 }
let(:new_duplicates) { create_list(:sales_log, 2, duplicate_set_id:) }
before do
allow(SalesLog).to receive(:duplicate_logs).and_return(SalesLog.where(id: new_duplicates.pluck(:id)))
post "/sales-logs/#{sales_log.id}/#{page_id.dasherize}", params:
end
it "sets the logs duplicate set id to that of the set it is now part of" do
sales_log.reload
expect(sales_log.duplicate_set_id).to eql(duplicate_set_id)
new_duplicates.each do |log|
log.reload
expect(log.duplicate_set_id).to eql(duplicate_set_id)
end
end
it "redirects to the duplicate logs page" do
expect(response).to redirect_to("/sales-logs/#{sales_log.id}/duplicate-logs?original_log_id=#{sales_log.id}")
follow_redirect!
expect(page).to have_content("These logs are duplicates")
end
end
context "when the log was previously in a different duplicate set" do
context "with a single other log" do
let(:old_duplicate_set_id) { 110 }
let!(:old_duplicate) { create(:sales_log, duplicate_set_id: old_duplicate_set_id) }
let(:sales_log) { create(:sales_log, assigned_to: user, duplicate_set_id: old_duplicate_set_id) }
let(:new_duplicate) { create(:sales_log) }
before do
allow(SalesLog).to receive(:duplicate_logs).and_return(SalesLog.where(id: new_duplicate.id))
post "/sales-logs/#{sales_log.id}/#{page_id.dasherize}", params:
end
it "updates the relevant duplicate set ids" do
sales_log.reload
old_duplicate.reload
new_duplicate.reload
expect(old_duplicate.duplicate_set_id).to be_nil
expect(sales_log.duplicate_set_id).not_to be_nil
expect(sales_log.duplicate_set_id).to eql(new_duplicate.duplicate_set_id)
end
end
context "with multiple other logs" do
let(:old_duplicate_set_id) { 120 }
let!(:old_duplicates) { create_list(:sales_log, 2, duplicate_set_id: old_duplicate_set_id) }
let(:sales_log) { create(:sales_log, assigned_to: user, duplicate_set_id: old_duplicate_set_id) }
let(:new_duplicate) { create(:sales_log) }
before do
allow(SalesLog).to receive(:duplicate_logs).and_return(SalesLog.where(id: new_duplicate.id))
post "/sales-logs/#{sales_log.id}/#{page_id.dasherize}", params:
end
it "updates the relevant duplicate set ids" do
sales_log.reload
new_duplicate.reload
old_duplicates.each do |log|
log.reload
expect(log.duplicate_set_id).to eql(old_duplicate_set_id)
end
expect(sales_log.duplicate_set_id).not_to be_nil
expect(sales_log.duplicate_set_id).not_to eql(old_duplicate_set_id)
expect(sales_log.duplicate_set_id).to eql(new_duplicate.duplicate_set_id)
end
end
end
end
context "when the answer makes the log stop being a duplicate" do
context "when the log had one duplicate" do
let(:old_duplicate_set_id) { 130 }
let!(:old_duplicate) { create(:sales_log, duplicate_set_id: old_duplicate_set_id) }
let(:sales_log) { create(:sales_log, assigned_to: user, duplicate_set_id: old_duplicate_set_id) }
before do
allow(SalesLog).to receive(:duplicate_logs).and_return(SalesLog.none)
post "/sales-logs/#{sales_log.id}/#{page_id.dasherize}", params:
end
it "updates the relevant duplicate set ids" do
sales_log.reload
old_duplicate.reload
expect(old_duplicate.duplicate_set_id).to be_nil
expect(sales_log.duplicate_set_id).to be_nil
end
end
context "when the log had multiple duplicates" do
let(:old_duplicate_set_id) { 140 }
let!(:old_duplicates) { create_list(:sales_log, 2, duplicate_set_id: old_duplicate_set_id) }
let(:sales_log) { create(:sales_log, assigned_to: user, duplicate_set_id: old_duplicate_set_id) }
before do
allow(SalesLog).to receive(:duplicate_logs).and_return(SalesLog.none)
post "/sales-logs/#{sales_log.id}/#{page_id.dasherize}", params:
end
it "updates the relevant duplicate set ids" do
sales_log.reload
old_duplicates.each do |log|
log.reload
expect(log.duplicate_set_id).to eql(old_duplicate_set_id)
end
expect(sales_log.duplicate_set_id).to be_nil
end
end
end
end

Loading…
Cancel
Save