Merge pull request #2909 from tchak/remove-procedure-path

Remove ProcedurePath
This commit is contained in:
gregoirenovel 2018-10-30 12:11:21 +01:00 committed by GitHub
commit a005484e38
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 104 additions and 290 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 lutiliser 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'

View file

@ -1,7 +1,7 @@
- if mine
Ce lien est déjà utilisé par une de vos démarche.
%br
Si vous voulez lutiliser, lancienne démarche sera archivée (plus accessible du public).
Si vous voulez lutiliser, lancienne 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

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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 }

View file

@ -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 }

View file

@ -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

View file

@ -1,5 +0,0 @@
FactoryBot.define do
factory :procedure_path do
path { 'fake_path' }
end
end

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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'

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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