Merge pull request #2909 from tchak/remove-procedure-path
Remove ProcedurePath
This commit is contained in:
commit
a005484e38
30 changed files with 104 additions and 290 deletions
|
@ -41,7 +41,7 @@ class Admin::ProceduresController < AdminController
|
|||
def edit
|
||||
@path = @procedure.path || @procedure.default_path
|
||||
@available = @procedure.path_available?(@path)
|
||||
@mine = @procedure.path_is_mine?(@path)
|
||||
@mine = @procedure.path_mine?(@path)
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
@ -71,22 +71,14 @@ class Admin::ProceduresController < AdminController
|
|||
@procedure.module_api_carto = ModuleAPICarto.new(create_module_api_carto_params)
|
||||
end
|
||||
|
||||
@path = params.require(:procedure).permit(:path)[:path]
|
||||
@available = !ProcedurePath.exists?(path: @path)
|
||||
@mine = ProcedurePath.mine?(current_administrateur, @path)
|
||||
@path = @procedure.path
|
||||
@available = !Procedure.exists?(path: @path)
|
||||
@mine = Procedure.path_mine?(current_administrateur, @path)
|
||||
|
||||
if !@procedure.validate
|
||||
if !@procedure.save
|
||||
flash.now.alert = @procedure.errors.full_messages
|
||||
return render 'new'
|
||||
elsif Flipflop.publish_draft? && !ProcedurePath.valid?(Procedure.last, @path)
|
||||
# FIXME: The code abow is a horrible hack that we need until we migrated path directly on procedure model
|
||||
flash.now.alert = 'Lien de la démarche invalide.'
|
||||
return render 'new'
|
||||
else
|
||||
@procedure.save!
|
||||
if Flipflop.publish_draft?
|
||||
@procedure.publish_with_path!(@path)
|
||||
end
|
||||
flash.notice = 'Démarche enregistrée.'
|
||||
end
|
||||
|
||||
|
@ -95,20 +87,13 @@ class Admin::ProceduresController < AdminController
|
|||
|
||||
def update
|
||||
@procedure = current_administrateur.procedures.find(params[:id])
|
||||
path = params.require(:procedure).permit(:path)[:path]
|
||||
|
||||
if !@procedure.update(procedure_params)
|
||||
flash.alert = @procedure.errors.full_messages
|
||||
elsif Flipflop.publish_draft? && @procedure.brouillon?
|
||||
if ProcedurePath.valid?(@procedure, path)
|
||||
@procedure.publish_with_path!(path)
|
||||
reset_procedure
|
||||
flash.notice = 'Démarche modifiée. Tous les dossiers de cette démarche ont été supprimés.'
|
||||
else
|
||||
flash.alert = 'Lien de la démarche invalide.'
|
||||
end
|
||||
else
|
||||
reset_procedure
|
||||
flash.notice = 'Démarche modifiée. Tous les dossiers de cette démarche ont été supprimés.'
|
||||
else
|
||||
flash.notice = 'Démarche modifiée.'
|
||||
end
|
||||
|
||||
|
@ -116,14 +101,18 @@ class Admin::ProceduresController < AdminController
|
|||
end
|
||||
|
||||
def publish
|
||||
path = params[:path]
|
||||
procedure = current_administrateur.procedures.find(params[:procedure_id])
|
||||
|
||||
if !ProcedurePath.valid?(procedure, params[:procedure_path])
|
||||
procedure.path = path
|
||||
if !procedure.validate
|
||||
flash.alert = 'Lien de la démarche invalide'
|
||||
return redirect_to admin_procedures_path
|
||||
else
|
||||
procedure.path = nil
|
||||
end
|
||||
|
||||
if procedure.publish_or_reopen!(params[:procedure_path])
|
||||
if procedure.publish_or_reopen!(path)
|
||||
flash.notice = "Démarche publiée"
|
||||
redirect_to admin_procedures_path
|
||||
else
|
||||
|
@ -216,9 +205,10 @@ class Admin::ProceduresController < AdminController
|
|||
end
|
||||
|
||||
def path_list
|
||||
json_path_list = ProcedurePath
|
||||
json_path_list = Procedure
|
||||
.find_with_path(params[:request])
|
||||
.pluck('procedure_paths.path', :administrateur_id)
|
||||
.order(:id)
|
||||
.pluck(:path, :administrateur_id)
|
||||
.map do |path, administrateur_id|
|
||||
{
|
||||
label: path,
|
||||
|
@ -236,10 +226,10 @@ class Admin::ProceduresController < AdminController
|
|||
if procedure_id.present?
|
||||
procedure = current_administrateur.procedures.find(procedure_id)
|
||||
@available = procedure.path_available?(path)
|
||||
@mine = procedure.path_is_mine?(path)
|
||||
@mine = procedure.path_mine?(path)
|
||||
else
|
||||
@available = !ProcedurePath.exists?(path: path)
|
||||
@mine = ProcedurePath.mine?(current_administrateur, path)
|
||||
@available = !Procedure.exists?(path: path)
|
||||
@mine = Procedure.path_mine?(current_administrateur, path)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -276,6 +266,9 @@ class Admin::ProceduresController < AdminController
|
|||
if @procedure&.locked?
|
||||
params.require(:procedure).permit(*editable_params)
|
||||
else
|
||||
if Flipflop.publish_draft?
|
||||
editable_params << :path
|
||||
end
|
||||
params.require(:procedure).permit(*editable_params, :duree_conservation_dossiers_dans_ds, :duree_conservation_dossiers_hors_ds, :for_individual, :individual_with_siret, :ask_birthday, module_api_carto_attributes: [:id, :use_api_carto, :quartiers_prioritaires, :cadastre]).merge(administrateur_id: current_administrateur.id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,10 +12,9 @@ class Users::DossiersController < UsersController
|
|||
end
|
||||
|
||||
def commencer_test
|
||||
procedure_path = ProcedurePath.find_by(path: params[:procedure_path])
|
||||
procedure = procedure_path&.procedure
|
||||
procedure = Procedure.brouillons.find_by(path: params[:path])
|
||||
|
||||
if procedure&.brouillon? && procedure&.path.present?
|
||||
if procedure.present?
|
||||
redirect_to new_users_dossier_path(procedure_id: procedure.id, brouillon: true)
|
||||
else
|
||||
flash.alert = "La démarche est inconnue."
|
||||
|
@ -24,17 +23,10 @@ class Users::DossiersController < UsersController
|
|||
end
|
||||
|
||||
def commencer
|
||||
procedure_path = ProcedurePath.find_by(path: params[:procedure_path])
|
||||
procedure = procedure_path&.procedure
|
||||
procedure = Procedure.publiees.find_by(path: params[:path])
|
||||
|
||||
if procedure.present?
|
||||
if procedure.archivee?
|
||||
@dossier = Dossier.new(procedure: procedure)
|
||||
|
||||
render 'commencer/archived'
|
||||
else
|
||||
redirect_to new_users_dossier_path(procedure_id: procedure.id)
|
||||
end
|
||||
redirect_to new_users_dossier_path(procedure_id: procedure.id)
|
||||
else
|
||||
flash.alert = "La démarche est inconnue, ou la création de nouveaux dossiers pour cette démarche est terminée."
|
||||
redirect_to root_path
|
||||
|
|
|
@ -2,9 +2,9 @@ module ProcedureHelper
|
|||
def procedure_lien(procedure)
|
||||
if procedure.path.present?
|
||||
if procedure.brouillon_avec_lien?
|
||||
commencer_test_url(procedure_path: procedure.path)
|
||||
commencer_test_url(path: procedure.path)
|
||||
else
|
||||
commencer_url(procedure_path: procedure.path)
|
||||
commencer_url(path: procedure.path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,7 +9,6 @@ class Procedure < ApplicationRecord
|
|||
|
||||
has_one :module_api_carto, dependent: :destroy
|
||||
has_one :attestation_template, dependent: :destroy
|
||||
has_one :procedure_path, dependent: :destroy
|
||||
|
||||
belongs_to :administrateur
|
||||
belongs_to :parent_procedure, class_name: 'Procedure'
|
||||
|
@ -46,12 +45,12 @@ class Procedure < ApplicationRecord
|
|||
scope :by_libelle, -> { order(libelle: :asc) }
|
||||
scope :created_during, -> (range) { where(created_at: range) }
|
||||
scope :cloned_from_library, -> { where(cloned_from_library: true) }
|
||||
scope :avec_lien, -> { joins(:procedure_path) }
|
||||
scope :avec_lien, -> { where.not(path: nil) }
|
||||
|
||||
validates :libelle, presence: true, allow_blank: false, allow_nil: false
|
||||
validates :description, presence: true, allow_blank: false, allow_nil: false
|
||||
validate :check_juridique
|
||||
validates :path, format: { with: /\A[a-z0-9_\-]{3,50}\z/ }, uniqueness: true, presence: true, allow_blank: false, allow_nil: true
|
||||
validates :path, format: { with: /\A[a-z0-9_\-]{3,50}\z/ }, uniqueness: { scope: :aasm_state, case_sensitive: false }, presence: true, allow_blank: false, allow_nil: true
|
||||
# FIXME: remove duree_conservation_required flag once all procedures are converted to the new style
|
||||
validates :duree_conservation_dossiers_dans_ds, allow_nil: false, numericality: { only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: MAX_DUREE_CONSERVATION }, if: :durees_conservation_required
|
||||
validates :duree_conservation_dossiers_hors_ds, allow_nil: false, numericality: { only_integer: true, greater_than_or_equal_to: 0 }, if: :durees_conservation_required
|
||||
|
@ -101,19 +100,6 @@ class Procedure < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
def publish_with_path!(path)
|
||||
procedure_path = ProcedurePath
|
||||
.where(administrateur: administrateur)
|
||||
.find_by(path: path)
|
||||
|
||||
if procedure_path.present?
|
||||
procedure_path.publish!(self)
|
||||
else
|
||||
create_procedure_path!(administrateur: administrateur, path: path)
|
||||
end
|
||||
update!(path: path)
|
||||
end
|
||||
|
||||
def reset!
|
||||
if locked?
|
||||
raise "Can not reset a locked procedure."
|
||||
|
@ -126,14 +112,6 @@ class Procedure < ApplicationRecord
|
|||
publiee_ou_archivee?
|
||||
end
|
||||
|
||||
def path_available?(path)
|
||||
!ProcedurePath.where.not(procedure: self).exists?(path: path)
|
||||
end
|
||||
|
||||
def path_is_mine?(path)
|
||||
ProcedurePath.where.not(procedure: self).mine?(administrateur, path)
|
||||
end
|
||||
|
||||
# This method is needed for transition. Eventually this will be the same as brouillon?.
|
||||
def brouillon_avec_lien?
|
||||
Flipflop.publish_draft? && brouillon? && path.present?
|
||||
|
@ -157,10 +135,6 @@ class Procedure < ApplicationRecord
|
|||
Dossier.new(procedure: self, champs: champs, champs_private: champs_private)
|
||||
end
|
||||
|
||||
def path
|
||||
read_attribute(:path) || procedure_path&.path
|
||||
end
|
||||
|
||||
def default_path
|
||||
libelle&.parameterize&.first(50)
|
||||
end
|
||||
|
@ -332,21 +306,48 @@ class Procedure < ApplicationRecord
|
|||
mean_time(:en_instruction_at, :processed_at)
|
||||
end
|
||||
|
||||
def path_available?(path)
|
||||
!Procedure.where.not(id: id).exists?(path: path)
|
||||
end
|
||||
|
||||
def path_mine?(path)
|
||||
Procedure.path_mine?(administrateur, path)
|
||||
end
|
||||
|
||||
def self.path_mine?(administrateur, path)
|
||||
where(administrateur: administrateur).exists?(path: path)
|
||||
end
|
||||
|
||||
def self.find_with_path(path)
|
||||
where.not(aasm_state: :archivee).where("path LIKE ?", "%#{path}%")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def can_publish?(path)
|
||||
procedure_path = ProcedurePath.find_by(path: path)
|
||||
if procedure_path.present?
|
||||
administrateur.owns?(procedure_path)
|
||||
else
|
||||
true
|
||||
def claim_path_ownership!(path)
|
||||
procedure = Procedure.where(administrateur: administrateur).find_by(path: path)
|
||||
|
||||
if procedure&.publiee? && procedure != self
|
||||
procedure.archive!
|
||||
end
|
||||
|
||||
update!(path: path)
|
||||
end
|
||||
|
||||
def can_publish?(path)
|
||||
path_available?(path) || path_mine?(path)
|
||||
end
|
||||
|
||||
def after_publish(path)
|
||||
update!(published_at: Time.zone.now)
|
||||
|
||||
publish_with_path!(path)
|
||||
claim_path_ownership!(path)
|
||||
end
|
||||
|
||||
def after_reopen(path)
|
||||
update!(published_at: Time.zone.now, archived_at: nil)
|
||||
|
||||
claim_path_ownership!(path)
|
||||
end
|
||||
|
||||
def after_archive
|
||||
|
@ -356,16 +357,9 @@ class Procedure < ApplicationRecord
|
|||
def after_hide
|
||||
now = Time.zone.now
|
||||
update!(hidden_at: now, path: nil)
|
||||
procedure_path&.hide!
|
||||
dossiers.update_all(hidden_at: now)
|
||||
end
|
||||
|
||||
def after_reopen(path)
|
||||
update!(published_at: Time.zone.now, archived_at: nil)
|
||||
|
||||
publish_with_path!(path)
|
||||
end
|
||||
|
||||
def after_draft
|
||||
update!(published_at: nil)
|
||||
end
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
class ProcedurePath < ApplicationRecord
|
||||
validates :path, format: { with: /\A[a-z0-9_\-]{3,50}\z/ }, uniqueness: true, presence: true, allow_blank: false, allow_nil: false
|
||||
validates :administrateur_id, presence: true, allow_blank: false, allow_nil: false
|
||||
validates :procedure_id, presence: true, allow_blank: false, allow_nil: false
|
||||
|
||||
belongs_to :procedure
|
||||
belongs_to :administrateur
|
||||
|
||||
def self.valid?(procedure, path)
|
||||
create_with(procedure: procedure, administrateur: procedure.administrateur)
|
||||
.find_or_initialize_by(path: path).validate
|
||||
end
|
||||
|
||||
def self.mine?(administrateur, path)
|
||||
procedure_path = find_by(path: path)
|
||||
procedure_path && administrateur.owns?(procedure_path)
|
||||
end
|
||||
|
||||
def self.find_with_path(path)
|
||||
joins(:procedure)
|
||||
.where.not(procedures: { aasm_state: :archivee })
|
||||
.where("procedure_paths.path LIKE ?", "%#{path}%")
|
||||
.order(:id)
|
||||
end
|
||||
|
||||
def hide!
|
||||
destroy!
|
||||
end
|
||||
|
||||
def publish!(new_procedure)
|
||||
if procedure&.publiee? && procedure != new_procedure
|
||||
procedure.archive!
|
||||
end
|
||||
update!(procedure: new_procedure)
|
||||
end
|
||||
end
|
|
@ -21,9 +21,9 @@ class ProcedureSerializer < ActiveModel::Serializer
|
|||
def link
|
||||
if object.path.present?
|
||||
if object.brouillon_avec_lien?
|
||||
commencer_test_url(procedure_path: object.path)
|
||||
commencer_test_url(path: object.path)
|
||||
else
|
||||
commencer_url(procedure_path: object.path)
|
||||
commencer_url(path: object.path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
class ProcedurePathFormatValidator < ActiveModel::Validator
|
||||
def path_regex
|
||||
/^[a-z0-9_]{3,30}$/
|
||||
end
|
||||
|
||||
def validate(record)
|
||||
if record.path.blank?
|
||||
return false
|
||||
end
|
||||
|
||||
if !path_regex.match(record.path)
|
||||
record.errors[:path] << "Path invalide"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -16,7 +16,7 @@
|
|||
%h4 Lien public*
|
||||
.procedure-lien
|
||||
%span.prefix
|
||||
= commencer_test_url(procedure_path: '')
|
||||
= commencer_test_url(path: '')
|
||||
= f.text_field :path, value: @path, class: 'form-control', data: { remote: true, debounce: true, url: admin_procedures_available_path, params: { id: @procedure.id }.to_query(:procedure) }
|
||||
%p.unavailable-path-message.text-warning
|
||||
- if !@available
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
%br
|
||||
%h4 Lien de la démarche
|
||||
%p.center
|
||||
= commencer_url(procedure_path: '')
|
||||
= text_field_tag('procedure_path', @procedure.path || @procedure.default_path,
|
||||
= commencer_url(path: '')
|
||||
= text_field_tag(:path, @procedure.path || @procedure.default_path,
|
||||
id: 'procedure_path',
|
||||
placeholder: 'Chemin vers la démarche',
|
||||
data: { autocomplete: 'path' },
|
||||
|
@ -41,7 +41,7 @@
|
|||
%br
|
||||
Vous ne pouvez pas l’utiliser car il appartient à un autre administrateur.
|
||||
#path_is_invalid.text-danger.center.message
|
||||
= t('activerecord.errors.models.procedure_path.attributes.path.format')
|
||||
= t('activerecord.errors.models.procedure.attributes.path.format')
|
||||
.modal-footer
|
||||
= submit_tag procedure_modal_text(@procedure, :submit), class: %w(btn btn btn-success), disabled: :disabled, id: 'publish'
|
||||
= button_tag "Annuler", class: %w(btn btn btn-default), data: { dismiss: :modal }, id: 'cancel'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- if mine
|
||||
Ce lien est déjà utilisé par une de vos démarche.
|
||||
%br
|
||||
Si vous voulez l’utiliser, l’ancienne démarche sera archivée (plus accessible du public).
|
||||
Si vous voulez l’utiliser, l’ancienne démarche sera archivée lors de la publication de la démarche (plus accessible du public).
|
||||
- else
|
||||
Ce lien est déjà utilisé par une démarche.
|
||||
%br
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
%br
|
||||
%div{ style: 'text-align: center; max-width: 500px; margin-left: auto; margin-right: auto; padding: 20px;' }
|
||||
= render partial: 'users/sessions/resume_procedure'
|
||||
|
||||
.center{ style: 'margin-top: -20px;' }
|
||||
%h3
|
||||
La campagne de création de nouveau dossier
|
||||
%br
|
||||
pour cette démarche en ligne est maintenant terminée.
|
||||
|
||||
%br
|
||||
%p
|
||||
Si vous avez déjà déposé un ou plusieurs dossiers :
|
||||
%a.btn.btn-lg.btn-info{ href: new_user_session_path }
|
||||
Accéder à mon espace en ligne.
|
|
@ -1,4 +1,4 @@
|
|||
- if field.data.present?
|
||||
= link_to "/commencer/#{field.data}", commencer_url(procedure_path: field.data), target: '_blank'
|
||||
= link_to "/commencer/#{field.data}", commencer_url(path: field.data), target: '_blank'
|
||||
- else
|
||||
Plus en ligne
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
%ul.demarche-links
|
||||
- @previous_demarches_still_active.each do |demarche|
|
||||
%li
|
||||
= link_to(commencer_url(procedure_path: demarche.path), class: "demarche-link") do
|
||||
= link_to(commencer_url(path: demarche.path), class: "demarche-link") do
|
||||
= demarche.libelle
|
||||
%br
|
||||
.service-name
|
||||
|
@ -23,7 +23,7 @@
|
|||
%ul.demarche-links
|
||||
- @popular_demarches.each do |demarche|
|
||||
%li
|
||||
= link_to(commencer_url(procedure_path: demarche.path), class: "demarche-link") do
|
||||
= link_to(commencer_url(path: demarche.path), class: "demarche-link") do
|
||||
= demarche.libelle
|
||||
%br
|
||||
.service-name
|
||||
|
|
|
@ -2,6 +2,13 @@ fr:
|
|||
activerecord:
|
||||
attributes:
|
||||
procedure:
|
||||
path: Lien
|
||||
organisation: Organisme
|
||||
duree_conservation_dossiers_dans_ds: Durée de conservation des dossiers sur demarches-simplifiees.fr
|
||||
duree_conservation_dossiers_hors_ds: Durée de conservation des dossiers hors demarches-simplifiees.fr
|
||||
errors:
|
||||
models:
|
||||
procedure:
|
||||
attributes:
|
||||
path:
|
||||
format: Ce lien n'est pas valide. Il doit comporter au moins 3 caractères, au plus 50 caractères et seuls les caractères a-z, 0-9, '_' et '-' sont autorisés.
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
fr:
|
||||
activerecord:
|
||||
attributes:
|
||||
procedure_path:
|
||||
path: Lien
|
||||
errors:
|
||||
models:
|
||||
procedure_path:
|
||||
attributes:
|
||||
path:
|
||||
format: Ce lien n'est pas valide. Il doit comporter au moins 3 caractères, au plus 50 caractères et seuls les caractères a-z, 0-9, '_' et '-' sont autorisés.
|
||||
taken: est déjà utilisé par une procédure.
|
|
@ -129,8 +129,8 @@ Rails.application.routes.draw do
|
|||
end
|
||||
|
||||
namespace :commencer do
|
||||
get '/test/:procedure_path' => '/users/dossiers#commencer_test', as: :test
|
||||
get '/:procedure_path' => '/users/dossiers#commencer'
|
||||
get '/test/:path' => '/users/dossiers#commencer_test', as: :test
|
||||
get '/:path' => '/users/dossiers#commencer'
|
||||
end
|
||||
|
||||
get "patron" => "root#patron"
|
||||
|
|
|
@ -27,11 +27,6 @@ namespace :support do
|
|||
|
||||
rake_puts("Changing owner of procedure ##{procedure_id} from ##{procedure.administrateur_id} to ##{new_owner.id}")
|
||||
procedure.update(administrateur: new_owner)
|
||||
|
||||
ProcedurePath.where(procedure_id: procedure_id).each do |pp|
|
||||
rake_puts("Changing owner of procedure_path #{pp.path} from ##{pp.administrateur_id} to ##{new_owner.id}")
|
||||
pp.update(administrateur: new_owner)
|
||||
end
|
||||
end
|
||||
|
||||
desc <<~EOD
|
||||
|
@ -74,13 +69,6 @@ namespace :support do
|
|||
end
|
||||
|
||||
procedures.update_all(administrateur_id: new_owner.id)
|
||||
|
||||
procedures.pluck(:id).each do |procedure_id|
|
||||
ProcedurePath.where(procedure_id: procedure_id).each do |pp|
|
||||
rake_puts("Changing owner of procedure_path #{pp.path} from ##{pp.administrateur_id} to ##{new_owner.id}")
|
||||
pp.update(administrateur: new_owner)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc <<~EOD
|
||||
|
|
|
@ -359,28 +359,28 @@ describe Admin::ProceduresController, type: :controller do
|
|||
|
||||
context 'when admin is the owner of the procedure' do
|
||||
before do
|
||||
put :publish, params: { procedure_id: procedure.id, procedure_path: procedure_path }
|
||||
put :publish, params: { procedure_id: procedure.id, path: path }
|
||||
procedure.reload
|
||||
procedure2.reload
|
||||
end
|
||||
|
||||
context 'procedure path does not exist' do
|
||||
let(:procedure_path) { 'new_path' }
|
||||
let(:path) { 'new_path' }
|
||||
|
||||
it 'publish the given procedure' do
|
||||
expect(procedure.publiee?).to be_truthy
|
||||
expect(procedure.path).to eq(procedure_path)
|
||||
expect(procedure.path).to eq(path)
|
||||
expect(response.status).to eq 302
|
||||
expect(flash[:notice]).to have_content 'Démarche publiée'
|
||||
end
|
||||
end
|
||||
|
||||
context 'procedure path exists and is owned by current administrator' do
|
||||
let(:procedure_path) { procedure2.path }
|
||||
let(:path) { procedure2.path }
|
||||
|
||||
it 'publish the given procedure' do
|
||||
expect(procedure.publiee?).to be_truthy
|
||||
expect(procedure.path).to eq(procedure_path)
|
||||
expect(procedure.path).to eq(path)
|
||||
expect(response.status).to eq 302
|
||||
expect(flash[:notice]).to have_content 'Démarche publiée'
|
||||
end
|
||||
|
@ -391,24 +391,8 @@ describe Admin::ProceduresController, type: :controller do
|
|||
end
|
||||
end
|
||||
|
||||
context 'procedure path exists and has archived procedure' do
|
||||
let(:procedure_path) { procedure2.path }
|
||||
let(:procedure2) { create(:procedure, :archived, administrateur: admin) }
|
||||
|
||||
it 'publish the given procedure' do
|
||||
expect(procedure.publiee?).to be_truthy
|
||||
expect(procedure.path).to eq(procedure_path)
|
||||
expect(response.status).to eq 302
|
||||
expect(flash[:notice]).to have_content 'Démarche publiée'
|
||||
end
|
||||
|
||||
it 'archive previous procedure' do
|
||||
expect(procedure2.archivee?).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'procedure path exists and is not owned by current administrator' do
|
||||
let(:procedure_path) { procedure3.path }
|
||||
let(:path) { procedure3.path }
|
||||
|
||||
it 'does not publish the given procedure' do
|
||||
expect(procedure.publiee?).to be_falsey
|
||||
|
@ -424,7 +408,7 @@ describe Admin::ProceduresController, type: :controller do
|
|||
end
|
||||
|
||||
context 'procedure path is invalid' do
|
||||
let(:procedure_path) { 'Invalid Procedure Path' }
|
||||
let(:path) { 'Invalid Procedure Path' }
|
||||
|
||||
it 'does not publish the given procedure' do
|
||||
expect(procedure.publiee?).to be_falsey
|
||||
|
@ -442,7 +426,7 @@ describe Admin::ProceduresController, type: :controller do
|
|||
sign_out admin
|
||||
sign_in admin_2
|
||||
|
||||
put :publish, params: { procedure_id: procedure.id, procedure_path: 'fake_path' }
|
||||
put :publish, params: { procedure_id: procedure.id, path: 'fake_path' }
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
|
@ -470,7 +454,7 @@ describe Admin::ProceduresController, type: :controller do
|
|||
|
||||
context 'when owner want to re-enable procedure' do
|
||||
before do
|
||||
put :publish, params: { procedure_id: procedure.id, procedure_path: 'fake_path' }
|
||||
put :publish, params: { procedure_id: procedure.id, path: 'fake_path' }
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ describe Users::DossiersController, type: :controller do
|
|||
end
|
||||
|
||||
describe 'GET #commencer' do
|
||||
subject { get :commencer, params: { procedure_path: path } }
|
||||
subject { get :commencer, params: { path: path } }
|
||||
let(:path) { procedure.path }
|
||||
|
||||
it { expect(subject.status).to eq 302 }
|
||||
|
@ -83,7 +83,7 @@ describe Users::DossiersController, type: :controller do
|
|||
Flipflop::FeatureSet.current.test!.switch!(:publish_draft, true)
|
||||
end
|
||||
|
||||
subject { get :commencer_test, params: { procedure_path: path } }
|
||||
subject { get :commencer_test, params: { path: path } }
|
||||
let(:procedure) { create(:procedure, :with_path) }
|
||||
let(:path) { procedure.path }
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ require 'spec_helper'
|
|||
describe ProcedureDecorator do
|
||||
let(:published_at) { Time.zone.local(2017, 12, 24, 14, 12) }
|
||||
let(:procedure) { create(:procedure, published_at: published_at, created_at: Time.zone.local(2015, 12, 24, 14, 10)) }
|
||||
let!(:procedure_path) { create(:procedure_path, administrateur: create(:administrateur), procedure: procedure) }
|
||||
|
||||
subject { procedure.decorate }
|
||||
|
||||
|
|
|
@ -37,12 +37,7 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
trait :with_path do
|
||||
after(:create) do |procedure|
|
||||
create(:procedure_path,
|
||||
procedure: procedure,
|
||||
administrateur: procedure.administrateur,
|
||||
path: generate(:published_path))
|
||||
end
|
||||
path { generate(:published_path) }
|
||||
end
|
||||
|
||||
trait :with_service do
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
FactoryBot.define do
|
||||
factory :procedure_path do
|
||||
path { 'fake_path' }
|
||||
end
|
||||
end
|
|
@ -7,8 +7,6 @@ feature 'As an administrateur I wanna clone a procedure', js: true do
|
|||
let(:administrateur) { create(:administrateur) }
|
||||
|
||||
before do
|
||||
# FIXME: needed to make procedure_path validation work
|
||||
create(:procedure)
|
||||
Flipflop::FeatureSet.current.test!.switch!(:publish_draft, true)
|
||||
login_as administrateur, scope: :administrateur
|
||||
visit root_path
|
||||
|
|
|
@ -7,8 +7,6 @@ feature 'As an administrateur I wanna create a new procedure', js: true do
|
|||
let(:administrateur) { create(:administrateur) }
|
||||
|
||||
before do
|
||||
# FIXME: needed to make procedure_path validation work
|
||||
create(:procedure)
|
||||
Flipflop::FeatureSet.current.test!.switch!(:publish_draft, true)
|
||||
login_as administrateur, scope: :administrateur
|
||||
visit root_path
|
||||
|
|
|
@ -129,7 +129,7 @@ feature 'The user' do
|
|||
private
|
||||
|
||||
def log_in(email, password, procedure)
|
||||
visit "/commencer/#{procedure.procedure_path.path}"
|
||||
visit "/commencer/#{procedure.path}"
|
||||
expect(page).to have_current_path(new_user_session_path)
|
||||
|
||||
fill_in 'user_email', with: email
|
||||
|
|
|
@ -16,7 +16,7 @@ feature 'Creating a new dossier:' do
|
|||
let(:expected_birthday) { nil }
|
||||
|
||||
before do
|
||||
visit commencer_path(procedure_path: procedure.path)
|
||||
visit commencer_path(path: procedure.path)
|
||||
fill_in 'individual_nom', with: 'Nom'
|
||||
fill_in 'individual_prenom', with: 'Prenom'
|
||||
end
|
||||
|
@ -76,7 +76,7 @@ feature 'Creating a new dossier:' do
|
|||
end
|
||||
|
||||
scenario 'the user can enter the SIRET of its etablissement and create a new draft', vcr: { cassette_name: 'api_adresse_search_paris_3' }, js: true do
|
||||
visit commencer_path(procedure_path: procedure.path)
|
||||
visit commencer_path(path: procedure.path)
|
||||
expect(page).to have_current_path(siret_dossier_path(dossier))
|
||||
|
||||
fill_in 'Numéro SIRET', with: siret
|
||||
|
@ -93,7 +93,7 @@ feature 'Creating a new dossier:' do
|
|||
end
|
||||
|
||||
scenario 'the user is notified when its SIRET is invalid' do
|
||||
visit commencer_path(procedure_path: procedure.path)
|
||||
visit commencer_path(path: procedure.path)
|
||||
expect(page).to have_current_path(siret_dossier_path(dossier))
|
||||
|
||||
fill_in 'Numéro SIRET', with: '0000'
|
||||
|
|
|
@ -47,7 +47,7 @@ feature 'linked dropdown lists' do
|
|||
private
|
||||
|
||||
def log_in(email, password, procedure)
|
||||
visit "/commencer/#{procedure.procedure_path.path}"
|
||||
visit "/commencer/#{procedure.path}"
|
||||
expect(page).to have_current_path(new_user_session_path)
|
||||
|
||||
fill_in 'user_email', with: email
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ProcedurePath do
|
||||
describe 'assocations' do
|
||||
it { is_expected.to belong_to(:administrateur) }
|
||||
it { is_expected.to belong_to(:procedure) }
|
||||
end
|
||||
|
||||
describe 'attributes' do
|
||||
it { is_expected.to have_db_column(:path) }
|
||||
end
|
||||
|
||||
describe 'validation' do
|
||||
describe 'path' do
|
||||
let(:admin) { create(:administrateur) }
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:procedure_path) { create(:procedure_path, administrateur: admin, procedure: procedure, path: path) }
|
||||
|
||||
context 'when path is nil' do
|
||||
let(:path) { nil }
|
||||
it { expect{ procedure_path }.to raise_error ActiveRecord::RecordInvalid }
|
||||
end
|
||||
context 'when path is empty' do
|
||||
let(:path) { '' }
|
||||
it { expect{ procedure_path }.to raise_error ActiveRecord::RecordInvalid }
|
||||
end
|
||||
context 'when path contains spaces' do
|
||||
let(:path) { 'Demande de subvention' }
|
||||
it { expect{ procedure_path }.to raise_error ActiveRecord::RecordInvalid }
|
||||
end
|
||||
context 'when path contains alphanumerics and underscores' do
|
||||
let(:path) { 'ma_super_procedure_1' }
|
||||
it { expect{ procedure_path }.not_to raise_error }
|
||||
end
|
||||
context 'when path contains dashes' do
|
||||
let(:path) { 'ma-super-procedure' }
|
||||
it { expect{ procedure_path }.not_to raise_error }
|
||||
end
|
||||
context 'when path is too long' do
|
||||
let(:path) { 'ma-super-procedure-12345678901234567890123456789012345678901234567890' }
|
||||
it { expect{ procedure_path }.to raise_error ActiveRecord::RecordInvalid }
|
||||
end
|
||||
context 'when path is too short' do
|
||||
let(:path) { 'pr' }
|
||||
it { expect{ procedure_path }.to raise_error ActiveRecord::RecordInvalid }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -439,9 +439,8 @@ describe Procedure do
|
|||
|
||||
it { expect(procedure.archived_at).to eq(nil) }
|
||||
it { expect(procedure.published_at).to eq(now) }
|
||||
it { expect(ProcedurePath.find_by(path: "example-path")).to be }
|
||||
it { expect(ProcedurePath.find_by(path: "example-path").procedure).to eq(procedure) }
|
||||
it { expect(ProcedurePath.find_by(path: "example-path").administrateur).to eq(procedure.administrateur) }
|
||||
it { expect(Procedure.find_by(path: "example-path")).to eq(procedure) }
|
||||
it { expect(Procedure.find_by(path: "example-path").administrateur).to eq(procedure.administrateur) }
|
||||
end
|
||||
|
||||
describe "#brouillon?" do
|
||||
|
@ -486,7 +485,6 @@ describe Procedure do
|
|||
|
||||
describe 'archive' do
|
||||
let(:procedure) { create(:procedure, :published) }
|
||||
let(:procedure_path) { ProcedurePath.find(procedure.procedure_path.id) }
|
||||
let(:now) { Time.zone.now.beginning_of_minute }
|
||||
before do
|
||||
Timecop.freeze(now)
|
||||
|
@ -634,7 +632,7 @@ describe Procedure do
|
|||
context "with a path" do
|
||||
let(:procedure) { create(:procedure, :published) }
|
||||
|
||||
it { is_expected.to eq("dossiers_#{procedure.procedure_path.path}_2018-01-02_23-11") }
|
||||
it { is_expected.to eq("dossiers_#{procedure.path}_2018-01-02_23-11") }
|
||||
end
|
||||
|
||||
context "without a path" do
|
||||
|
|
|
@ -53,7 +53,7 @@ describe 'admin/procedures/show.html.haml', type: :view do
|
|||
end
|
||||
|
||||
describe 'procedure link is present' do
|
||||
it { expect(rendered).to have_content(commencer_url(procedure_path: procedure.path)) }
|
||||
it { expect(rendered).to have_content(commencer_url(path: procedure.path)) }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue