The factory creating assignments automatically assigns a poll to it, so we don't use the poll for anything else, there's no need to explicitely create it.
121 lines
3.8 KiB
Ruby
121 lines
3.8 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Poll::Shift do
|
|
let(:poll) { create(:poll) }
|
|
let(:booth) { create(:poll_booth) }
|
|
let(:user) { create(:user, username: "Ana", email: "ana@example.com") }
|
|
let(:officer) { create(:poll_officer, user: user) }
|
|
let(:recount_shift) { build(:poll_shift, booth: booth, officer: officer, date: Date.current, task: :recount_scrutiny) }
|
|
|
|
describe "validations" do
|
|
let(:shift) { build(:poll_shift) }
|
|
|
|
it "is valid" do
|
|
expect(shift).to be_valid
|
|
end
|
|
|
|
it "is not valid without a booth" do
|
|
shift.booth = nil
|
|
expect(shift).not_to be_valid
|
|
end
|
|
|
|
it "is not valid without an officer" do
|
|
shift.officer = nil
|
|
expect(shift).not_to be_valid
|
|
end
|
|
|
|
it "is not valid without a date" do
|
|
shift.date = nil
|
|
expect(shift).not_to be_valid
|
|
end
|
|
|
|
it "is not valid without a task" do
|
|
shift.task = nil
|
|
expect(shift).not_to be_valid
|
|
end
|
|
|
|
it "is not valid with same booth, officer, date and task" do
|
|
recount_shift.save
|
|
|
|
expect(build(:poll_shift, booth: booth, officer: officer, date: Date.current, task: :recount_scrutiny)).not_to be_valid
|
|
end
|
|
|
|
it "is valid with same booth, officer and date but different task" do
|
|
recount_shift.save
|
|
|
|
expect(build(:poll_shift, booth: booth, officer: officer, date: Date.current, task: :vote_collection)).to be_valid
|
|
end
|
|
|
|
it "is valid with same booth, officer and task but different date" do
|
|
recount_shift.save
|
|
|
|
expect(build(:poll_shift, booth: booth, officer: officer, date: Date.tomorrow, task: :recount_scrutiny)).to be_valid
|
|
end
|
|
|
|
end
|
|
|
|
describe "officer_assignments" do
|
|
|
|
it "creates and destroy corresponding officer_assignments" do
|
|
booth_assignment1 = create(:poll_booth_assignment, booth: booth)
|
|
booth_assignment2 = create(:poll_booth_assignment, booth: booth)
|
|
|
|
expect { create(:poll_shift, booth: booth, officer: officer, date: Date.current) }.to change { Poll::OfficerAssignment.all.count }.by(2)
|
|
|
|
officer_assignments = Poll::OfficerAssignment.all
|
|
oa1 = officer_assignments.first
|
|
oa2 = officer_assignments.second
|
|
|
|
expect(oa1.officer).to eq(officer)
|
|
expect(oa1.date).to eq(Date.current)
|
|
expect(oa1.booth_assignment).to eq(booth_assignment1)
|
|
expect(oa1.final).to be_falsey
|
|
|
|
expect(oa2.officer).to eq(officer)
|
|
expect(oa2.date).to eq(Date.current)
|
|
expect(oa2.booth_assignment).to eq(booth_assignment2)
|
|
expect(oa2.final).to be_falsey
|
|
|
|
create(:poll_officer_assignment, officer: officer, booth_assignment: booth_assignment1, date: Date.tomorrow)
|
|
|
|
expect { Poll::Shift.last.destroy }.to change { Poll::OfficerAssignment.all.count }.by(-2)
|
|
end
|
|
|
|
it "creates final officer_assignments" do
|
|
booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth)
|
|
recount_shift.save
|
|
|
|
officer_assignments = Poll::OfficerAssignment.all
|
|
expect(officer_assignments.count).to eq(1)
|
|
|
|
officer_assignment = officer_assignments.first
|
|
|
|
expect(officer_assignment.officer).to eq(officer)
|
|
expect(officer_assignment.date).to eq(Date.current)
|
|
expect(officer_assignment.booth_assignment).to eq(booth_assignment)
|
|
expect(officer_assignment.final).to be_truthy
|
|
end
|
|
|
|
end
|
|
|
|
describe "#persist_data" do
|
|
let(:shift) { create(:poll_shift, officer: officer, booth: booth) }
|
|
|
|
it "maintains officer data after destroying associated user" do
|
|
shift.officer.user.destroy
|
|
|
|
expect(shift.officer_name).to eq "Ana"
|
|
expect(shift.officer_email).to eq "ana@example.com"
|
|
end
|
|
|
|
it "maintains officer data after destroying officer role" do
|
|
shift.officer.destroy
|
|
|
|
expect(shift.officer_name).to eq "Ana"
|
|
expect(shift.officer_email).to eq "ana@example.com"
|
|
end
|
|
|
|
end
|
|
|
|
end
|