From 691f0618288f387a22ee5fe01dc8a6d8a9f7d5d2 Mon Sep 17 00:00:00 2001 From: JC Date: Mon, 19 Dec 2016 17:15:59 +0100 Subject: [PATCH] Features tests about user: create and edit dossier --- app/controllers/users/carte_controller.rb | 2 +- app/views/dossiers/_dossier_show.html.haml | 6 +-- app/views/dossiers/_edit_dossier.html.haml | 2 +- app/views/dossiers/_infos_dossier.html.haml | 2 +- .../etapes/etape_2/_entreprise.html.haml | 2 +- ...l_users_dossierscontroller_index.html.haml | 12 ++--- spec/factories/procedure.rb | 6 +++ spec/features/users/dossier_creation_spec.rb | 53 +++++++++++++++++++ spec/features/users/dossier_edition_spec.rb | 52 ++++++++++++++++++ spec/features/users/start_demande_spec.rb | 2 +- spec/fixtures/file.pdf | 0 11 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 spec/features/users/dossier_creation_spec.rb create mode 100644 spec/features/users/dossier_edition_spec.rb create mode 100644 spec/fixtures/file.pdf diff --git a/app/controllers/users/carte_controller.rb b/app/controllers/users/carte_controller.rb index 0bf52f02e..302b8149a 100644 --- a/app/controllers/users/carte_controller.rb +++ b/app/controllers/users/carte_controller.rb @@ -32,7 +32,7 @@ class Users::CarteController < UsersController end def get_position - point = Carto::Geocodeur.convert_adresse_to_point(current_user_dossier.etablissement.geo_adresse) + point = Carto::Geocodeur.convert_adresse_to_point(current_user_dossier.etablissement.geo_adresse) rescue nil lon = '2.428462' lat = '46.538192' diff --git a/app/views/dossiers/_dossier_show.html.haml b/app/views/dossiers/_dossier_show.html.haml index 5ba0d0ee9..bcf209d1d 100644 --- a/app/views/dossiers/_dossier_show.html.haml +++ b/app/views/dossiers/_dossier_show.html.haml @@ -22,7 +22,7 @@ %textarea.form-control{id: 'texte_commentaire', class: 'wysihtml5', name: 'texte_commentaire', style: 'width: 100%; margin-bottom:2%', rows: '5', placeholder:"Commentaire"} %h4.text-primary{style: 'margin-top: 0px'} Ajouter un fichier = file_field_tag "piece_justificative[content]", accept: PieceJustificative.accept_format, style: 'float: left; margin-left: 20px' - %input.form-control.btn.btn-send{ type: 'submit', value: 'ENVOYER' } + %input#save-message.form-control.btn.btn-send{ type: 'submit', value: 'ENVOYER' } - if last_comment = @facade.commentaires.first %div.last-commentaire .row @@ -40,13 +40,13 @@ = file.original_filename .row .col-lg-12.col-md-12 - %div.new-action + %div#open-message.new-action ENVOYER UN MESSAGE - else .last-commentaire .row .col-lg-12.col-md-12 - %div.new-action + %div#open-message.new-action ENVOYER UN MESSAGE - if @facade.procedure.individual_with_siret diff --git a/app/views/dossiers/_edit_dossier.html.haml b/app/views/dossiers/_edit_dossier.html.haml index b834b8dcb..c817d741e 100644 --- a/app/views/dossiers/_edit_dossier.html.haml +++ b/app/views/dossiers/_edit_dossier.html.haml @@ -1,5 +1,5 @@ - unless @facade.dossier.read_only? - if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email)) %a#maj_infos.action{href: "/users/dossiers/#{@facade.dossier.id}/description"} - %div.col-lg-2.col-md-2.action + %div#edit-dossier.col-lg-2.col-md-2.action = "éditer".upcase diff --git a/app/views/dossiers/_infos_dossier.html.haml b/app/views/dossiers/_infos_dossier.html.haml index 17c3e0095..de9773924 100644 --- a/app/views/dossiers/_infos_dossier.html.haml +++ b/app/views/dossiers/_infos_dossier.html.haml @@ -44,7 +44,7 @@ - else %div.col-md-1.col-lg-1.comments-off = "-" - %div.col-md-5.col-lg-5.depositaire-info + %div.col-md-5.col-lg-5.depositaire-info{ id: "champ-#{champ.id}-value" } - unless champ.decorate.value.blank? = champ.decorate.value.html_safe diff --git a/app/views/dossiers/etapes/etape_2/_entreprise.html.haml b/app/views/dossiers/etapes/etape_2/_entreprise.html.haml index 2e8f161e9..3b31ba770 100644 --- a/app/views/dossiers/etapes/etape_2/_entreprise.html.haml +++ b/app/views/dossiers/etapes/etape_2/_entreprise.html.haml @@ -20,7 +20,7 @@ .form-group.form-group-lg = f.text_field :siret, class: "form-control", placeholder: "Entrez votre Siret", value: @siret = f.hidden_field :dossier_id, value: @facade.dossier.id - = f.submit 'Valider', class: %w(btn btn-lg btn-success), data: { disable_with: "Recherche en cours ..." } + = f.submit 'Valider', class: %w(btn btn-lg btn-success), id: 'submit-siret', data: { disable_with: "Recherche en cours ..." } - else %br #recap_info_entreprise diff --git a/app/views/layouts/left_panels/_left_panel_users_dossierscontroller_index.html.haml b/app/views/layouts/left_panels/_left_panel_users_dossierscontroller_index.html.haml index bd9a7826c..792e7c09c 100644 --- a/app/views/layouts/left_panels/_left_panel_users_dossierscontroller_index.html.haml +++ b/app/views/layouts/left_panels/_left_panel_users_dossierscontroller_index.html.haml @@ -11,37 +11,37 @@ %div.split-hr-left #procedure_list %a{:href => "#{url_for users_dossiers_path(liste: 'brouillon')}", 'data-toggle' => :tooltip, title: 'Les dossiers jamais proposés à la relecture.'} - %div.procedure_list_element{ class: @dossiers_list_facade.brouillon_class } + %div.procedure_list_element{ class: @dossiers_list_facade.brouillon_class, id: 'brouillon' } = "Brouillons" .badge.progress-bar-default = @dossiers_list_facade.brouillon_total %a{:href => "#{url_for users_dossiers_path(liste: 'a_traiter')}", 'data-toggle' => :tooltip, title: 'Les dossiers qui requièrent une action de votre part.'} - %div.procedure_list_element{ class: @dossiers_list_facade.en_construction_class } + %div.procedure_list_element{ class: @dossiers_list_facade.en_construction_class, id: 'a_traiter' } = "En construction" .badge.progress-bar-danger = @dossiers_list_facade.en_construction_total %a{:href => "#{url_for users_dossiers_path(liste: 'valides')}", 'data-toggle' => :tooltip, title: 'Les dossiers relus par votre accompagnateur pouvant être déposés pour examen.'} - %div.procedure_list_element{ class: @dossiers_list_facade.valides_class } + %div.procedure_list_element{ class: @dossiers_list_facade.valides_class, id: 'valides' } ="À déposer" .badge.progress-bar-purple = @dossiers_list_facade.valides_total %a{:href => "#{url_for users_dossiers_path(liste: 'en_instruction')}", 'data-toggle' => :tooltip, title: 'Les dossiers en cours d\'examen par l\'administration compétante.'} - %div.procedure_list_element{ class: @dossiers_list_facade.en_instruction_class } + %div.procedure_list_element{ class: @dossiers_list_facade.en_instruction_class, id: 'en_instruction' } ="En examen" .badge.progress-bar-default = @dossiers_list_facade.en_instruction_total %a{:href => "#{url_for users_dossiers_path(liste: 'termine')}", 'data-toggle' => :tooltip, title: 'Les dossiers cloturés qui peuvent être "Accepté", "Refusé" ou "Sans suite".'} - %div.procedure_list_element{ class: @dossiers_list_facade.termine_class } + %div.procedure_list_element{ class: @dossiers_list_facade.termine_class, id: 'termine' } = "Cloturé" .badge.progress-bar-success = @dossiers_list_facade.termine_total %a{:href => "#{url_for users_dossiers_path(liste: 'invite')}"} - %div.procedure_list_element{ class: @dossiers_list_facade.invite_class } + %div.procedure_list_element{ class: @dossiers_list_facade.invite_class, id: 'invite' } = "Invitation" .badge.progress-bar-warning = @dossiers_list_facade.invite_total diff --git a/spec/factories/procedure.rb b/spec/factories/procedure.rb index 11cd238b1..740faf5bc 100644 --- a/spec/factories/procedure.rb +++ b/spec/factories/procedure.rb @@ -22,6 +22,12 @@ FactoryGirl.define do end end + trait :for_individual do + after(:build) do |procedure, _evaluator| + procedure.for_individual = true + end + end + trait :with_type_de_champ do after(:build) do |procedure, _evaluator| type_de_champ = create(:type_de_champ_public) diff --git a/spec/features/users/dossier_creation_spec.rb b/spec/features/users/dossier_creation_spec.rb new file mode 100644 index 000000000..28ec759e8 --- /dev/null +++ b/spec/features/users/dossier_creation_spec.rb @@ -0,0 +1,53 @@ +require 'spec_helper' + +feature 'As a User I wanna create a dossier', js: true do + + let(:user) { create(:user) } + let(:siret) { '40307130100044' } + let(:siren) { siret[0...9] } + + context 'Right after sign_in I shall see inscription by credentials/siret, I can create a new Dossier' do + let(:procedure_with_siret) { create(:procedure, :published, :with_api_carto, :with_type_de_champ, :with_two_type_de_piece_justificative) } + let(:procedure_for_individual) { create(:procedure, :published, :for_individual, :with_api_carto, :with_type_de_champ, :with_two_type_de_piece_justificative) } + + scenario 'Identification for individual' do + login_as user, scope: :user + visit commencer_path(procedure_path: procedure_for_individual.path) + fill_in 'dossier_individual_attributes_nom', with: 'Nom' + fill_in 'dossier_individual_attributes_prenom', with: 'Prenom' + fill_in 'dossier_individual_attributes_birthdate', with: '14/10/1987' + find(:css, "#dossier_autorisation_donnees[value='1']").set(true) + page.find_by_id('etape_suivante').click + expect(page).to have_current_path(users_dossier_carte_path(Dossier.first.id.to_s), only_path: true) + page.find_by_id('etape_suivante').click + fill_in 'champs_1', with: 'contenu du champ 1' + page.find_by_id('suivant').click + expect(page).to have_current_path(users_dossier_recapitulatif_path(Dossier.first.id.to_s), only_path: true) + end + + scenario 'Identification through siret' do + login_as user, scope: :user + visit commencer_path(procedure_path: procedure_with_siret.path) + expect(page).to have_current_path(users_dossier_path(Dossier.first.id.to_s), only_path: true) + fill_in 'dossier_siret', with: siret + stub_request(:get, "https://api-dev.apientreprise.fr/v2/etablissements/#{siret}?token=#{SIADETOKEN}") + .to_return(status: 200, body: File.read('spec/support/files/etablissement.json')) + stub_request(:get, "https://api-dev.apientreprise.fr/v2/entreprises/#{siren}?token=#{SIADETOKEN}") + .to_return(status: 200, body: File.read('spec/support/files/entreprise.json')) + stub_request(:get, "https://api-dev.apientreprise.fr/v1/etablissements/exercices/#{siret}?token=#{SIADETOKEN}") + .to_return(status: 200, body: File.read('spec/support/files/exercices.json')) + stub_request(:get, "https://api-dev.apientreprise.fr/v1/associations/#{siret}?token=#{SIADETOKEN}") + .to_return(status: 404, body: '') + page.find_by_id('dossier_siret').set siret + page.find_by_id('submit-siret').click + expect(page).to have_css('#recap_info_entreprise') + find(:css, "#dossier_autorisation_donnees[value='1']").set(true) + page.find_by_id('etape_suivante').click + expect(page).to have_current_path(users_dossier_carte_path(Dossier.first.id.to_s), only_path: true) + page.find_by_id('etape_suivante').click + fill_in 'champs_1', with: 'contenu du champ 1' + page.find_by_id('suivant').click + expect(page).to have_current_path(users_dossier_recapitulatif_path(Dossier.first.id.to_s), only_path: true) + end + end +end diff --git a/spec/features/users/dossier_edition_spec.rb b/spec/features/users/dossier_edition_spec.rb new file mode 100644 index 000000000..deeeb2acd --- /dev/null +++ b/spec/features/users/dossier_edition_spec.rb @@ -0,0 +1,52 @@ +require 'spec_helper' + +feature 'As a User I want to edit a dossier I own', js: true do + + let(:user) { create(:user) } + let(:procedure_for_individual) { create(:procedure, :published, :for_individual, :with_api_carto, :with_type_de_champ, :with_two_type_de_piece_justificative) } + + before "Create dossier" do + login_as user, scope: :user + visit commencer_path(procedure_path: procedure_for_individual.path) + fill_in 'dossier_individual_attributes_nom', with: 'Nom' + fill_in 'dossier_individual_attributes_prenom', with: 'Prenom' + fill_in 'dossier_individual_attributes_birthdate', with: '14/10/1987' + find(:css, "#dossier_autorisation_donnees[value='1']").set(true) + page.find_by_id('etape_suivante').click + page.find_by_id('etape_suivante').click + page.find_by_id('suivant').click + visit root_path + end + + context 'After sign_in, I can navigate through dossiers indexes and edit a dossier' do + + scenario 'After sign_in, I can see dossiers "à traiter" (default), and other indexes' do + expect(page.find('#a_traiter')['class'] ).to eq('active procedure_list_element') + page.find_by_id('brouillon').click + page.find_by_id('a_traiter').click + page.find_by_id('valides').click + page.find_by_id('en_instruction').click + page.find_by_id('termine').click + page.find_by_id('invite').click + end + + scenario 'Getting a dossier, I want to create a new message on' do + page.find_by_id('tr_dossier_' + Dossier.last.id.to_s).click + expect(page).to have_current_path(users_dossier_recapitulatif_path(Dossier.first.id.to_s), only_path: true) + page.find_by_id('open-message').click + page.execute_script("$('#texte_commentaire').data('wysihtml5').editor.setValue('Contenu du nouveau message')") + page.find_by_id('save-message').click + expect(page.find('.last-commentaire .content').text).to eq('Contenu du nouveau message') + end + + scenario 'On the same dossier, I want to edit informations' do + page.find_by_id('tr_dossier_' + Dossier.last.id.to_s).click + page.find_by_id('edit-dossier').click + expect(page).to have_current_path(users_dossier_description_path(Dossier.first.id.to_s), only_path: true) + fill_in 'champs_1', with: 'Contenu du champ 1' + page.find_by_id('modification_terminee').click + expect(page).to have_current_path(users_dossier_recapitulatif_path(Dossier.first.id.to_s), only_path: true) + expect(page.find('#champ-1-value').text).to eq('Contenu du champ 1') + end + end +end diff --git a/spec/features/users/start_demande_spec.rb b/spec/features/users/start_demande_spec.rb index 664fc8729..a1448e139 100644 --- a/spec/features/users/start_demande_spec.rb +++ b/spec/features/users/start_demande_spec.rb @@ -44,4 +44,4 @@ feature 'user arrive on siret page' do end end end -end \ No newline at end of file +end diff --git a/spec/fixtures/file.pdf b/spec/fixtures/file.pdf new file mode 100644 index 000000000..e69de29bb