refactor(spec): add wait_for_autosave helper
This commit is contained in:
parent
4500a5aa04
commit
dd38fa4458
6 changed files with 60 additions and 47 deletions
|
@ -27,6 +27,8 @@ export class AutosaveStatusController extends ApplicationController {
|
|||
connect(): void {
|
||||
this.onGlobal('autosave:enqueue', () => this.didEnqueue());
|
||||
this.onGlobal('autosave:end', () => this.didSucceed());
|
||||
// This event is used in tests to reset the state of the controller
|
||||
this.onGlobal('autosave:reset', () => this.didReset());
|
||||
this.onGlobal<CustomEvent>('autosave:error', (event) =>
|
||||
this.didFail(event)
|
||||
);
|
||||
|
@ -46,6 +48,10 @@ export class AutosaveStatusController extends ApplicationController {
|
|||
this.debounce(this.hideSucceededStatus, AUTOSAVE_STATUS_VISIBLE_DURATION);
|
||||
}
|
||||
|
||||
private didReset() {
|
||||
this.setState('idle');
|
||||
}
|
||||
|
||||
private didFail(event: CustomEvent<{ error: ResponseError }>) {
|
||||
const error = event.detail.error;
|
||||
|
||||
|
|
|
@ -171,6 +171,12 @@ module SystemHelpers
|
|||
def form_id_for(libelle)
|
||||
find(:xpath, ".//label[contains(text()[normalize-space()], '#{libelle}')]")[:for]
|
||||
end
|
||||
|
||||
def wait_for_autosave(brouillon = true)
|
||||
blur
|
||||
expect(page).to have_css('span', text: "#{brouillon ? 'Brouillon' : 'Dossier'} enregistré", visible: true)
|
||||
page.execute_script("document.documentElement.dispatchEvent(new CustomEvent('autosave:reset'));")
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
|
|
|
@ -274,9 +274,7 @@ describe 'fetch API Particulier Data', js: true do
|
|||
|
||||
fill_in 'Le numéro d’allocataire CAF', with: numero_allocataire
|
||||
fill_in 'Le code postal', with: 'wrong_code'
|
||||
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
dossier = Dossier.last
|
||||
cnaf_champ = dossier.champs.find(&:cnaf?)
|
||||
|
@ -286,11 +284,14 @@ describe 'fetch API Particulier Data', js: true do
|
|||
click_on 'Déposer le dossier'
|
||||
expect(page).to have_content(/code postal doit posséder 5 caractères/)
|
||||
|
||||
fill_in 'Le code postal', with: code_postal
|
||||
|
||||
VCR.use_cassette('api_particulier/success/composition_familiale') do
|
||||
perform_enqueued_jobs { click_on 'Déposer le dossier' }
|
||||
perform_enqueued_jobs do
|
||||
fill_in 'Le code postal', with: code_postal
|
||||
wait_for_autosave
|
||||
end
|
||||
end
|
||||
|
||||
click_on 'Déposer le dossier'
|
||||
|
||||
visit demande_dossier_path(dossier)
|
||||
expect(page).to have_content(/Des données.*ont été reçues depuis la CAF/)
|
||||
|
@ -329,20 +330,23 @@ describe 'fetch API Particulier Data', js: true do
|
|||
click_button('Continuer')
|
||||
|
||||
fill_in "Identifiant", with: 'wrong code'
|
||||
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
dossier = Dossier.last
|
||||
pole_emploi_champ = dossier.champs.find(&:pole_emploi?)
|
||||
|
||||
expect(pole_emploi_champ.identifiant).to eq('wrong code')
|
||||
|
||||
fill_in "Identifiant", with: identifiant
|
||||
clear_enqueued_jobs
|
||||
pole_emploi_champ.update(external_id: nil, identifiant: nil)
|
||||
|
||||
VCR.use_cassette('api_particulier/success/situation_pole_emploi') do
|
||||
perform_enqueued_jobs { click_on 'Déposer le dossier' }
|
||||
perform_enqueued_jobs do
|
||||
fill_in "Identifiant", with: identifiant
|
||||
wait_until { pole_emploi_champ.reload.external_id.present? }
|
||||
end
|
||||
end
|
||||
|
||||
click_on 'Déposer le dossier'
|
||||
|
||||
visit demande_dossier_path(dossier)
|
||||
expect(page).to have_content(/Des données.*ont été reçues depuis Pôle emploi/)
|
||||
|
@ -397,20 +401,23 @@ describe 'fetch API Particulier Data', js: true do
|
|||
click_button('Continuer')
|
||||
|
||||
fill_in "INE", with: 'wrong code'
|
||||
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
dossier = Dossier.last
|
||||
mesri_champ = dossier.champs.find(&:mesri?)
|
||||
|
||||
expect(mesri_champ.ine).to eq('wrong code')
|
||||
|
||||
fill_in "INE", with: ine
|
||||
clear_enqueued_jobs
|
||||
mesri_champ.update(external_id: nil, ine: nil)
|
||||
|
||||
VCR.use_cassette('api_particulier/success/etudiants') do
|
||||
perform_enqueued_jobs { click_on 'Déposer le dossier' }
|
||||
perform_enqueued_jobs do
|
||||
fill_in "INE", with: ine
|
||||
wait_until { mesri_champ.reload.external_id.present? }
|
||||
end
|
||||
end
|
||||
|
||||
click_on 'Déposer le dossier'
|
||||
|
||||
visit demande_dossier_path(dossier)
|
||||
expect(page).to have_content(/Des données.*ont été reçues depuis le MESRI/)
|
||||
|
@ -457,9 +464,7 @@ describe 'fetch API Particulier Data', js: true do
|
|||
|
||||
fill_in 'Le numéro fiscal', with: numero_fiscal
|
||||
fill_in "La référence d'avis d'imposition", with: 'wrong_code'
|
||||
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
dossier = Dossier.last
|
||||
dgfip_champ = dossier.champs.find(&:dgfip?)
|
||||
|
@ -469,11 +474,14 @@ describe 'fetch API Particulier Data', js: true do
|
|||
click_on 'Déposer le dossier'
|
||||
expect(page).to have_content(/reference avis doit posséder 13 ou 14 caractères/)
|
||||
|
||||
fill_in "La référence d'avis d'imposition", with: reference_avis
|
||||
|
||||
VCR.use_cassette('api_particulier/success/avis_imposition') do
|
||||
perform_enqueued_jobs { click_on 'Déposer le dossier' }
|
||||
perform_enqueued_jobs do
|
||||
fill_in "La référence d'avis d'imposition", with: reference_avis
|
||||
wait_for_autosave
|
||||
end
|
||||
end
|
||||
|
||||
click_on 'Déposer le dossier'
|
||||
|
||||
visit demande_dossier_path(dossier)
|
||||
expect(page).to have_content(/Des données.*ont été reçues depuis la DGFiP/)
|
||||
|
|
|
@ -120,8 +120,8 @@ describe 'The routing', js: true do
|
|||
click_on 'Modifier mon dossier'
|
||||
|
||||
fill_in litteraire_user.dossiers.first.champs.first.libelle, with: 'some value'
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Dossier enregistré', visible: true)
|
||||
wait_for_autosave(false)
|
||||
|
||||
log_out
|
||||
|
||||
# the litteraires instructeurs should have a notification
|
||||
|
@ -199,6 +199,7 @@ describe 'The routing', js: true do
|
|||
click_button('Continuer')
|
||||
|
||||
select(groupe, from: 'dossier_groupe_instructeur_id')
|
||||
wait_for_autosave
|
||||
|
||||
click_on 'Déposer le dossier'
|
||||
expect(page).to have_text('Merci')
|
||||
|
@ -215,7 +216,8 @@ describe 'The routing', js: true do
|
|||
expect(page).not_to have_selector("option", text: "Groupe inactif")
|
||||
|
||||
select(new_group, from: 'dossier_groupe_instructeur_id')
|
||||
expect(page).to have_css('span', text: 'Dossier enregistré', visible: true)
|
||||
wait_for_autosave(false)
|
||||
|
||||
expect(page).to have_text(new_group)
|
||||
|
||||
log_out
|
||||
|
|
|
@ -43,8 +43,7 @@ describe 'The user' do
|
|||
find('.editable-champ-piece_justificative input[type=file]').attach_file(Rails.root + 'spec/fixtures/files/file.pdf')
|
||||
|
||||
expect(page).to have_css('span', text: 'Votre brouillon est automatiquement enregistré', visible: true)
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
# check data on the dossier
|
||||
expect(user_dossier.brouillon?).to be true
|
||||
|
@ -116,18 +115,14 @@ describe 'The user' do
|
|||
end
|
||||
|
||||
expect(page).to have_content('Supprimer', count: 2)
|
||||
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
expect(page).to have_content('Supprimer', count: 2)
|
||||
|
||||
within '.repetition .row:first-child' do
|
||||
click_on 'Supprimer l’élément'
|
||||
end
|
||||
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
expect(page).to have_content('Supprimer', count: 1)
|
||||
end
|
||||
|
@ -140,8 +135,8 @@ describe 'The user' do
|
|||
|
||||
# Check an incomplete dossier can be saved as a draft, even when mandatory fields are missing
|
||||
fill_in('texte optionnel', with: 'ça ne suffira pas')
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
expect(page).to have_current_path(brouillon_dossier_path(user_dossier))
|
||||
|
||||
# Check an incomplete dossier cannot be submitted when mandatory fields are missing
|
||||
|
@ -151,6 +146,7 @@ describe 'The user' do
|
|||
|
||||
# Check a dossier can be submitted when all mandatory fields are filled
|
||||
fill_in('texte obligatoire', with: 'super texte')
|
||||
wait_for_autosave
|
||||
|
||||
click_on 'Déposer le dossier'
|
||||
expect(user_dossier.reload.en_construction?).to be(true)
|
||||
|
@ -370,8 +366,7 @@ describe 'The user' do
|
|||
expect(page).to have_no_css('label', text: 'tonnage', visible: true)
|
||||
|
||||
fill_in('age', with: '18')
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Dossier enregistré', visible: true)
|
||||
wait_for_autosave(false)
|
||||
|
||||
# the champ keeps their previous value so they are all displayed
|
||||
expect(page).to have_css('label', text: 'permis de conduire', visible: true)
|
||||
|
@ -389,9 +384,7 @@ describe 'The user' do
|
|||
expect(page).to have_content('Votre brouillon est automatiquement enregistré')
|
||||
|
||||
fill_in('texte obligatoire', with: 'a valid user input')
|
||||
blur
|
||||
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
visit current_path
|
||||
expect(page).to have_field('texte obligatoire', with: 'a valid user input')
|
||||
|
@ -410,7 +403,7 @@ describe 'The user' do
|
|||
# Test that retrying after a failure works
|
||||
allow_any_instance_of(Users::DossiersController).to receive(:update_brouillon).and_call_original
|
||||
click_on 'réessayer'
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
|
||||
visit current_path
|
||||
expect(page).to have_field('texte obligatoire', with: 'a valid user input')
|
||||
|
@ -434,8 +427,7 @@ describe 'The user' do
|
|||
expect(page).to have_current_path(brouillon_dossier_path(user_dossier))
|
||||
|
||||
fill_in('texte obligatoire', with: 'a valid user input')
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Brouillon enregistré', visible: true)
|
||||
wait_for_autosave
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -10,8 +10,7 @@ RSpec.shared_examples 'the user can edit the submitted demande' do
|
|||
|
||||
expect(page).to have_current_path(modifier_dossier_path(dossier))
|
||||
fill_in('Texte obligatoire', with: 'Nouveau texte')
|
||||
blur
|
||||
expect(page).to have_css('span', text: 'Dossier enregistré', visible: true)
|
||||
wait_for_autosave(false)
|
||||
|
||||
click_on 'Demande'
|
||||
expect(page).to have_current_path(demande_dossier_path(dossier))
|
||||
|
|
Loading…
Add table
Reference in a new issue