demarches-normaliennes/spec/system/users/dossier_creation_spec.rb

134 lines
5.4 KiB
Ruby
Raw Normal View History

describe 'Creating a new dossier:' do
let(:user) { create(:user) }
let(:siret) { '41816609600051' }
let(:siren) { siret[0...9] }
2018-10-15 15:46:23 +02:00
context 'when the user is already signed in' do
before do
login_as user, scope: :user
end
context 'when the procedure has identification by individual' do
let(:libelle) { "[title] with characters to escape : '@*^$" }
let(:procedure) { create(:procedure, :published, :for_individual, :with_service, ask_birthday: ask_birthday, libelle: libelle) }
2018-10-15 15:46:23 +02:00
let(:ask_birthday) { false }
let(:expected_birthday) { nil }
before do
2018-10-30 12:00:58 +01:00
visit commencer_path(path: procedure.path)
2019-01-16 11:57:58 +01:00
click_on 'Commencer la démarche'
2019-01-16 11:57:58 +01:00
expect(page).to have_current_path identite_dossier_path(user.reload.dossiers.last)
expect(page).to have_title(libelle)
2020-12-08 17:43:50 +01:00
choose 'Monsieur'
2018-10-15 15:46:23 +02:00
fill_in 'individual_nom', with: 'Nom'
fill_in 'individual_prenom', with: 'Prenom'
end
2018-10-15 15:46:23 +02:00
shared_examples 'the user can create a new draft' do
it do
click_button('Continuer')
2018-10-15 15:46:23 +02:00
expect(page).to have_current_path(brouillon_dossier_path(procedure.dossiers.last))
2018-10-15 15:46:23 +02:00
expect(user.dossiers.first.individual.birthdate).to eq(expected_birthday)
end
2018-10-15 15:46:23 +02:00
end
2018-10-15 15:46:23 +02:00
context 'when the birthday is asked' do
let(:ask_birthday) { true }
let(:expected_birthday) { Date.new(1987, 10, 14) }
2018-10-15 15:46:23 +02:00
before do
fill_in 'individual_birthdate', with: birthday_format
end
2018-10-15 15:46:23 +02:00
context 'when the browser supports `type=date` input fields' do
let(:birthday_format) { '1987-10-14' }
it_behaves_like 'the user can create a new draft'
end
2018-10-15 15:46:23 +02:00
context 'when the browser does not support `type=date` input fields' do
let(:birthday_format) { '1987-10-14' }
it_behaves_like 'the user can create a new draft'
end
end
2018-10-15 15:46:23 +02:00
context 'when the birthday is not asked' do
let(:ask_birthday) { false }
2018-10-15 15:46:23 +02:00
let(:expected_birthday) { nil }
it_behaves_like 'the user can create a new draft'
end
end
2018-10-15 15:46:23 +02:00
context 'when identifying through SIRET' do
let(:procedure) { create(:procedure, :published, :with_service, :with_type_de_champ) }
let(:dossier) { procedure.dossiers.last }
2018-10-15 15:46:23 +02:00
before do
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v3\/insee\/sirene\/etablissements\/#{siret}/)
2018-10-15 15:46:23 +02:00
.to_return(status: 200, body: File.read('spec/fixtures/files/api_entreprise/etablissements.json'))
2023-05-25 11:15:26 +02:00
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v3\/insee\/sirene\/unites_legales\/#{siren}/)
2018-10-15 15:46:23 +02:00
.to_return(status: 200, body: File.read('spec/fixtures/files/api_entreprise/entreprises.json'))
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/exercices\/#{siret}/)
2018-10-15 15:46:23 +02:00
.to_return(status: 200, body: File.read('spec/fixtures/files/api_entreprise/exercices.json'))
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/associations\/#{siret}/)
2018-10-15 15:46:23 +02:00
.to_return(status: 404, body: '')
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/2020\/02\/entreprise\/#{siren}/)
.to_return(status: 404, body: '')
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}/)
.to_return(status: 404, body: '')
2020-08-05 18:40:47 +02:00
allow_any_instance_of(APIEntrepriseToken).to receive(:roles).and_return([])
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
2018-10-15 15:46:23 +02:00
end
before { Timecop.freeze(Time.zone.local(2020, 3, 14)) }
after { Timecop.return }
scenario 'the user can enter the SIRET of its etablissement and create a new draft' do
2018-10-30 12:00:58 +01:00
visit commencer_path(path: procedure.path)
2019-01-16 11:57:58 +01:00
click_on 'Commencer la démarche'
2019-01-16 11:57:58 +01:00
expect(page).to have_current_path siret_dossier_path(dossier)
expect(page).to have_content(procedure.libelle)
fill_in 'Numéro SIRET', with: siret
2018-10-15 15:46:23 +02:00
click_on 'Valider'
expect(page).to have_current_path(etablissement_dossier_path(dossier))
expect(page).to have_content('Coiff Land, CoiffureLand')
click_on 'Continuer avec ces informations'
expect(page).to have_current_path(brouillon_dossier_path(dossier))
end
scenario 'the user is notified when its SIRET is invalid' do
2018-10-30 12:00:58 +01:00
visit commencer_path(path: procedure.path)
2019-01-16 11:57:58 +01:00
click_on 'Commencer la démarche'
expect(page).to have_current_path(siret_dossier_path(dossier))
expect(page).to have_content(procedure.libelle)
fill_in 'Numéro SIRET', with: '0000'
click_on 'Valider'
expect(page).to have_current_path(siret_dossier_path(dossier))
expect(page).to have_content('Le champ « Siret » est invalide. Saisir un numéro SIRET avec 14 chiffres')
expect(page).to have_field('Numéro SIRET', with: '0000')
2018-10-15 15:46:23 +02:00
end
end
end
context 'when the user is not signed in' do
let(:instructeur) { create(:instructeur) }
let(:procedure) { create(:procedure, :published) }
scenario 'the user is an instructeur with untrusted device' do
visit commencer_path(path: procedure.path)
click_on "Jai déjà un compte"
sign_in_with(instructeur.email, instructeur.user.password, true)
expect(page).to have_current_path(commencer_path(path: procedure.path))
end
end
end