test: instructeurs_procedure_spec
This commit is contained in:
parent
3e1a510286
commit
95a3f17976
2 changed files with 71 additions and 0 deletions
8
spec/factories/instructeurs_procedure.rb
Normal file
8
spec/factories/instructeurs_procedure.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :instructeurs_procedure do
|
||||||
|
association :instructeur
|
||||||
|
association :procedure
|
||||||
|
end
|
||||||
|
end
|
|
@ -862,6 +862,69 @@ describe Instructeur, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.ensure_instructeur_procedures_for' do
|
||||||
|
let(:instructeur) { create(:instructeur) }
|
||||||
|
let!(:procedures) { create_list(:procedure, 5, published_at: Time.current) }
|
||||||
|
|
||||||
|
context 'when some procedures are missing for the instructeur' do
|
||||||
|
before do
|
||||||
|
create(:instructeurs_procedure, instructeur: instructeur, procedure: procedures.first, position: 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates missing instructeurs_procedures with correct positions' do
|
||||||
|
expect {
|
||||||
|
instructeur.ensure_instructeur_procedures_for(procedures)
|
||||||
|
}.to change { InstructeursProcedure.count }.by(4)
|
||||||
|
|
||||||
|
instructeur_procedures = InstructeursProcedure.where(instructeur: instructeur)
|
||||||
|
expect(instructeur_procedures.pluck(:procedure_id)).to match_array(procedures.map(&:id))
|
||||||
|
expect(instructeur_procedures.pluck(:position)).to eq([0, 1, 2, 3, 4])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when all procedures already exist for the instructeur' do
|
||||||
|
before do
|
||||||
|
procedures.each_with_index do |procedure, index|
|
||||||
|
create(:instructeurs_procedure, instructeur: instructeur, procedure: procedure, position: index + 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not create any new instructeurs_procedures' do
|
||||||
|
expect {
|
||||||
|
instructeur.ensure_instructeur_procedures_for(procedures)
|
||||||
|
}.not_to change { InstructeursProcedure.count }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.update_instructeur_procedures_positions' do
|
||||||
|
let(:instructeur) { create(:instructeur) }
|
||||||
|
let!(:procedures) { create_list(:procedure, 5, published_at: Time.current) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
procedures.each_with_index do |procedure, index|
|
||||||
|
create(:instructeurs_procedure, instructeur: instructeur, procedure: procedure, position: index + 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'updates the positions of the specified instructeurs_procedures' do
|
||||||
|
instructeur.update_instructeur_procedures_positions(procedures.map(&:id))
|
||||||
|
|
||||||
|
updated_positions = InstructeursProcedure
|
||||||
|
.where(instructeur:)
|
||||||
|
.order(:procedure_id)
|
||||||
|
.pluck(:procedure_id, :position)
|
||||||
|
|
||||||
|
expect(updated_positions).to match_array([
|
||||||
|
[procedures[0].id, 4],
|
||||||
|
[procedures[1].id, 3],
|
||||||
|
[procedures[2].id, 2],
|
||||||
|
[procedures[3].id, 1],
|
||||||
|
[procedures[4].id, 0]
|
||||||
|
])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def assign(procedure_to_assign, instructeur_assigne: instructeur)
|
def assign(procedure_to_assign, instructeur_assigne: instructeur)
|
||||||
|
|
Loading…
Reference in a new issue