From 12cdbf6196a5e053f929dfc99c25846b76d7c413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Mon, 23 Sep 2019 00:37:34 +0200 Subject: [PATCH] Simplify assigning officer to a poll in specs While it could be argued we're hiding the real way we've defined associations in our models, the tests are so much easier to read when we don't have so many lines just creating data. Furthermore, developers who care about vertically aligning the code will be glad to see some variables disrupting this alignment are now gone. --- spec/factories/polls.rb | 8 +++- .../admin/poll/booth_assigments_spec.rb | 9 ++-- .../admin/poll/officer_assignments_spec.rb | 16 ++----- spec/features/budget_polls/voter_spec.rb | 3 +- spec/features/officing/booth_spec.rb | 20 +++------ spec/features/officing/residence_spec.rb | 3 +- spec/features/officing/voters_spec.rb | 28 ++++--------- spec/features/polls/polls_spec.rb | 4 +- spec/features/polls/voter_spec.rb | 3 +- spec/models/poll/officer_spec.rb | 42 +++++++------------ 10 files changed, 47 insertions(+), 89 deletions(-) diff --git a/spec/factories/polls.rb b/spec/factories/polls.rb index a6f700007..ca3c10649 100644 --- a/spec/factories/polls.rb +++ b/spec/factories/polls.rb @@ -145,9 +145,15 @@ FactoryBot.define do factory :poll_officer_assignment, class: "Poll::OfficerAssignment" do association :officer, factory: :poll_officer - association :booth_assignment, factory: :poll_booth_assignment date { Date.current } + transient { poll { association(:poll) } } + transient { booth { association(:poll_booth) } } + + booth_assignment do + association :poll_booth_assignment, poll: poll, booth: booth + end + trait :final do final { true } end diff --git a/spec/features/admin/poll/booth_assigments_spec.rb b/spec/features/admin/poll/booth_assigments_spec.rb index 905eb48a2..987ba99ad 100644 --- a/spec/features/admin/poll/booth_assigments_spec.rb +++ b/spec/features/admin/poll/booth_assigments_spec.rb @@ -118,9 +118,8 @@ describe "Admin booths assignments" do end scenario "Unassing booth whith associated shifts", :js do - assignment = create(:poll_booth_assignment, poll: poll, booth: booth) officer = create(:poll_officer) - create(:poll_officer_assignment, officer: officer, booth_assignment: assignment) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth) create(:poll_shift, booth: booth, officer: officer) visit manage_admin_poll_booth_assignments_path(poll) @@ -157,12 +156,10 @@ describe "Admin booths assignments" do scenario "Lists all assigned poll officers" do poll = create(:poll) booth = create(:poll_booth) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, booth_assignment: booth_assignment) + officer_assignment = create(:poll_officer_assignment, poll: poll, booth: booth) officer = officer_assignment.officer - booth_assignment_2 = create(:poll_booth_assignment, poll: poll) - officer_assignment_2 = create(:poll_officer_assignment, booth_assignment: booth_assignment_2) + officer_assignment_2 = create(:poll_officer_assignment, poll: poll) officer_2 = officer_assignment_2.officer visit admin_poll_path(poll) diff --git a/spec/features/admin/poll/officer_assignments_spec.rb b/spec/features/admin/poll/officer_assignments_spec.rb index 2f04ab607..d54ec0cac 100644 --- a/spec/features/admin/poll/officer_assignments_spec.rb +++ b/spec/features/admin/poll/officer_assignments_spec.rb @@ -9,17 +9,13 @@ describe "Officer Assignments" do scenario "Index" do poll = create(:poll) - booth = create(:poll_booth) officer1 = create(:poll_officer) officer2 = create(:poll_officer) officer3 = create(:poll_officer) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, booth_assignment: booth_assignment, officer: officer1) - - booth_assignment_2 = create(:poll_booth_assignment, poll: poll) - officer_assignment_2 = create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer2) + officer_assignment = create(:poll_officer_assignment, poll: poll, officer: officer1) + officer_assignment_2 = create(:poll_officer_assignment, poll: poll, officer: officer2) visit admin_poll_path(poll) @@ -34,7 +30,6 @@ describe "Officer Assignments" do scenario "Search", :js do poll = create(:poll) - booth = create(:poll_booth) user1 = create(:user, username: "John Snow") user2 = create(:user, username: "John Silver") @@ -44,11 +39,8 @@ describe "Officer Assignments" do officer2 = create(:poll_officer, user: user2) officer3 = create(:poll_officer, user: user3) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, booth_assignment: booth_assignment, officer: officer1) - - booth_assignment_2 = create(:poll_booth_assignment, poll: poll) - officer_assignment_2 = create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer2) + officer_assignment = create(:poll_officer_assignment, poll: poll, officer: officer1) + officer_assignment_2 = create(:poll_officer_assignment, poll: poll, officer: officer2) visit admin_poll_path(poll) diff --git a/spec/features/budget_polls/voter_spec.rb b/spec/features/budget_polls/voter_spec.rb index a36ad1e3f..bf572def8 100644 --- a/spec/features/budget_polls/voter_spec.rb +++ b/spec/features/budget_polls/voter_spec.rb @@ -11,8 +11,7 @@ describe "BudgetPolls", :with_frozen_time do before do create(:poll_shift, officer: officer, booth: booth, date: Date.current, task: :vote_collection) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth, date: Date.current) end context "Offline" do diff --git a/spec/features/officing/booth_spec.rb b/spec/features/officing/booth_spec.rb index b26e2f0c4..a2be7997d 100644 --- a/spec/features/officing/booth_spec.rb +++ b/spec/features/officing/booth_spec.rb @@ -25,8 +25,7 @@ describe "Booth", :with_frozen_time do booth = create(:poll_booth) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth, date: Date.current) login_through_form_as_officer(officer.user) @@ -42,11 +41,8 @@ describe "Booth", :with_frozen_time do booth1 = create(:poll_booth) booth2 = create(:poll_booth) - ba1 = create(:poll_booth_assignment, poll: poll, booth: booth1) - ba2 = create(:poll_booth_assignment, poll: poll, booth: booth2) - - create(:poll_officer_assignment, officer: officer, booth_assignment: ba1, date: Date.current) - create(:poll_officer_assignment, officer: officer, booth_assignment: ba2, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth1, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth2, date: Date.current) login_through_form_as_officer(officer.user) @@ -69,13 +65,9 @@ describe "Booth", :with_frozen_time do poll1 = create(:poll) poll2 = create(:poll) - ba1 = create(:poll_booth_assignment, poll: poll1, booth: booth1) - ba2 = create(:poll_booth_assignment, poll: poll2, booth: booth2) - ba3 = create(:poll_booth_assignment, poll: poll2, booth: booth2) - - create(:poll_officer_assignment, officer: officer, booth_assignment: ba1, date: Date.current) - create(:poll_officer_assignment, officer: officer, booth_assignment: ba2, date: Date.current) - create(:poll_officer_assignment, officer: officer, booth_assignment: ba3, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll1, booth: booth1, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll2, booth: booth2, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll2, booth: booth2, date: Date.current) login_through_form_as_officer(officer.user) diff --git a/spec/features/officing/residence_spec.rb b/spec/features/officing/residence_spec.rb index b6896cd8a..d28cf9156 100644 --- a/spec/features/officing/residence_spec.rb +++ b/spec/features/officing/residence_spec.rb @@ -97,8 +97,7 @@ describe "Residence", :with_frozen_time do booth = create(:poll_booth) poll = create(:poll) - ba = create(:poll_booth_assignment, poll: poll, booth: booth) - create(:poll_officer_assignment, officer: officer, booth_assignment: ba) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth) create(:poll_shift, officer: officer, booth: booth, date: Date.current) login_as(officer.user) diff --git a/spec/features/officing/voters_spec.rb b/spec/features/officing/voters_spec.rb index b2660b543..647fc6db0 100644 --- a/spec/features/officing/voters_spec.rb +++ b/spec/features/officing/voters_spec.rb @@ -10,8 +10,7 @@ describe "Voters" do login_as(officer.user) create(:geozone, :in_census) create(:poll_shift, officer: officer, booth: booth, date: Date.current, task: :vote_collection) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth) set_officing_booth(booth) end @@ -38,8 +37,7 @@ describe "Voters" do scenario "Cannot vote" do unvotable_poll = create(:poll, :current, geozone_restricted: true, geozones: [create(:geozone, census_code: "02")]) - booth_assignment = create(:poll_booth_assignment, poll: unvotable_poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + officer_assignment = create(:poll_officer_assignment, officer: officer, poll: unvotable_poll, booth: booth) set_officing_booth(booth) visit new_officing_residence_path @@ -53,8 +51,7 @@ describe "Voters" do scenario "Already voted" do poll2 = create(:poll, :current) - booth_assignment = create(:poll_booth_assignment, poll: poll2, booth: booth) - create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + create(:poll_officer_assignment, officer: officer, poll: poll2, booth: booth) user = create(:user, :level_two) voter = create(:poll_voter, poll: poll, user: user) @@ -90,8 +87,7 @@ describe "Voters" do scenario "Display current polls assigned to a booth" do poll = create(:poll, :current) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + officer_assignment = create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth) set_officing_booth(booth) visit new_officing_residence_path @@ -103,8 +99,7 @@ describe "Voters" do scenario "Display polls that the user can vote" do votable_poll = create(:poll, :current, geozone_restricted: true, geozones: [Geozone.first]) - booth_assignment = create(:poll_booth_assignment, poll: votable_poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + officer_assignment = create(:poll_officer_assignment, officer: officer, poll: votable_poll, booth: booth) set_officing_booth(booth) visit new_officing_residence_path @@ -116,8 +111,7 @@ describe "Voters" do scenario "Display polls that the user cannot vote" do unvotable_poll = create(:poll, :current, geozone_restricted: true, geozones: [create(:geozone, census_code: "02")]) - booth_assignment = create(:poll_booth_assignment, poll: unvotable_poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + officer_assignment = create(:poll_officer_assignment, officer: officer, poll: unvotable_poll, booth: booth) set_officing_booth(booth) visit new_officing_residence_path @@ -129,8 +123,7 @@ describe "Voters" do scenario "Do not display expired polls" do expired_poll = create(:poll, :expired) - booth_assignment = create(:poll_booth_assignment, poll: expired_poll, booth: booth) - officer_assignment = create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + officer_assignment = create(:poll_officer_assignment, officer: officer, poll: expired_poll, booth: booth) set_officing_booth(booth) visit new_officing_residence_path @@ -147,11 +140,8 @@ describe "Voters" do booth1 = create(:poll_booth) booth2 = create(:poll_booth) - booth_assignment1 = create(:poll_booth_assignment, poll: poll1, booth: booth1) - booth_assignment2 = create(:poll_booth_assignment, poll: poll2, booth: booth2) - - officer_assignment1 = create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment1) - officer_assignment2 = create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment2) + officer_assignment1 = create(:poll_officer_assignment, officer: officer, poll: poll1, booth: booth1) + officer_assignment2 = create(:poll_officer_assignment, officer: officer, poll: poll2, booth: booth2) set_officing_booth(booth1) visit new_officing_residence_path diff --git a/spec/features/polls/polls_spec.rb b/spec/features/polls/polls_spec.rb index 71b332a97..f3f96b8b6 100644 --- a/spec/features/polls/polls_spec.rb +++ b/spec/features/polls/polls_spec.rb @@ -375,10 +375,8 @@ describe "Polls" do let(:officer) { create(:poll_officer) } scenario "Already voted on booth cannot vote on website", :js do - create(:poll_shift, officer: officer, booth: booth, date: Date.current, task: :vote_collection) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment, date: Date.current) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth, date: Date.current) question = create(:poll_question, :yes_no, poll: poll) user = create(:user, :level_two, :in_census) diff --git a/spec/features/polls/voter_spec.rb b/spec/features/polls/voter_spec.rb index 391cb6489..d97a4aba1 100644 --- a/spec/features/polls/voter_spec.rb +++ b/spec/features/polls/voter_spec.rb @@ -15,8 +15,7 @@ describe "Voter" do before do create(:geozone, :in_census) create(:poll_shift, officer: officer, booth: booth, date: Date.current, task: :vote_collection) - booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment) + create(:poll_officer_assignment, officer: officer, poll: poll, booth: booth) end scenario "Voting via web - Standard", :js do diff --git a/spec/models/poll/officer_spec.rb b/spec/models/poll/officer_spec.rb index 85b5e482d..6d9637312 100644 --- a/spec/models/poll/officer_spec.rb +++ b/spec/models/poll/officer_spec.rb @@ -38,13 +38,9 @@ describe Poll::Officer do poll_2 = create(:poll) poll_3 = create(:poll) - booth_assignment_1a = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_1b = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) - - create(:poll_officer_assignment, booth_assignment: booth_assignment_1a, officer: officer, date: poll_1.starts_at) - create(:poll_officer_assignment, booth_assignment: booth_assignment_1b, officer: officer, date: poll_1.ends_at) - create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer) + create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.starts_at) + create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.ends_at) + create(:poll_officer_assignment, poll: poll_2, officer: officer) assigned_polls = officer.voting_days_assigned_polls @@ -57,11 +53,8 @@ describe Poll::Officer do poll_1 = create(:poll) poll_2 = create(:poll) - booth_assignment_1 = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) - - create(:poll_officer_assignment, booth_assignment: booth_assignment_1, officer: officer, date: poll_1.starts_at) - create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer, final: true) + create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.starts_at) + create(:poll_officer_assignment, poll: poll_2, officer: officer, final: true) assigned_polls = officer.voting_days_assigned_polls @@ -75,8 +68,8 @@ describe Poll::Officer do poll_2 = create(:poll, ends_at: 10.days.from_now) poll_3 = create(:poll, ends_at: 10.days.ago) - [poll_1, poll_2, poll_3].each do |p| - create(:poll_officer_assignment, officer: officer, booth_assignment: create(:poll_booth_assignment, poll: p)) + [poll_1, poll_2, poll_3].each do |poll| + create(:poll_officer_assignment, officer: officer, poll: poll) end assigned_polls = officer.voting_days_assigned_polls @@ -95,13 +88,9 @@ describe Poll::Officer do poll_2 = create(:poll) poll_3 = create(:poll) - booth_assignment_1a = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_1b = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) - - create(:poll_officer_assignment, booth_assignment: booth_assignment_1a, officer: officer, date: poll_1.starts_at, final: true) - create(:poll_officer_assignment, booth_assignment: booth_assignment_1b, officer: officer, date: poll_1.ends_at, final: true) - create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer, final: true) + create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.starts_at, final: true) + create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.ends_at, final: true) + create(:poll_officer_assignment, poll: poll_2, officer: officer, final: true) assigned_polls = officer.final_days_assigned_polls @@ -114,11 +103,8 @@ describe Poll::Officer do poll_1 = create(:poll) poll_2 = create(:poll) - booth_assignment_1 = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) - - create(:poll_officer_assignment, booth_assignment: booth_assignment_1, officer: officer, date: poll_1.starts_at) - create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer, final: true) + create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.starts_at) + create(:poll_officer_assignment, poll: poll_2, officer: officer, final: true) assigned_polls = officer.final_days_assigned_polls @@ -132,8 +118,8 @@ describe Poll::Officer do poll_2 = create(:poll, ends_at: 10.days.from_now) poll_3 = create(:poll, ends_at: 10.days.ago) - [poll_1, poll_2, poll_3].each do |p| - create(:poll_officer_assignment, officer: officer, booth_assignment: create(:poll_booth_assignment, poll: p), final: true) + [poll_1, poll_2, poll_3].each do |poll| + create(:poll_officer_assignment, officer: officer, poll: poll, final: true) end assigned_polls = officer.final_days_assigned_polls