Add on gestionnaire dossier view the private form
This commit is contained in:
parent
ddb64878c8
commit
480431ea01
28 changed files with 320 additions and 88 deletions
|
@ -184,7 +184,7 @@ div.pagination {
|
|||
|
||||
.alert.alert-success.move_up,
|
||||
.alert.alert-danger.siret{
|
||||
position: absolute;
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
left: 0;
|
||||
height: 52px;
|
||||
|
|
|
@ -14,6 +14,7 @@ class Backoffice::DossiersController < ApplicationController
|
|||
|
||||
def show
|
||||
create_dossier_facade params[:id]
|
||||
@champs = @facade.champs_private unless @facade.nil?
|
||||
end
|
||||
|
||||
def search
|
||||
|
|
19
app/controllers/backoffice/private_formulaires_controller.rb
Normal file
19
app/controllers/backoffice/private_formulaires_controller.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
class Backoffice::PrivateFormulairesController < ApplicationController
|
||||
before_action :authenticate_gestionnaire!
|
||||
|
||||
def update
|
||||
dossier = current_gestionnaire.dossiers.find(params[:dossier_id])
|
||||
|
||||
unless params[:champs].nil?
|
||||
champs_service_errors = ChampsService.save_formulaire dossier.champs_private, params
|
||||
|
||||
if champs_service_errors.empty?
|
||||
flash[:notice] = "Formulaire enregistré"
|
||||
else
|
||||
flash[:alert] = (champs_service_errors.inject('') { |acc, error| acc+= error[:message]+'<br>' }).html_safe
|
||||
end
|
||||
end
|
||||
|
||||
render 'backoffice/dossiers/formulaire_private', formats: :js
|
||||
end
|
||||
end
|
|
@ -43,23 +43,11 @@ class Users::DescriptionController < UsersController
|
|||
end
|
||||
|
||||
unless params[:champs].nil?
|
||||
@dossier.champs.each do |champ|
|
||||
champ.value = params[:champs]["'#{champ.id}'"]
|
||||
champs_service_errors = ChampsService.save_formulaire @dossier.champs, params
|
||||
|
||||
if champ.type_champ == 'datetime'
|
||||
champ.value = params[:champs]["'#{champ.id}'"]+
|
||||
' ' +
|
||||
params[:time_hour]["'#{champ.id}'"] +
|
||||
':' +
|
||||
params[:time_minute]["'#{champ.id}'"]
|
||||
end
|
||||
|
||||
if champ.mandatory? && (champ.value.nil? || champ.value.blank?)
|
||||
flash.now.alert = "Le champ #{champ.libelle} doit être rempli."
|
||||
return render 'show'
|
||||
end
|
||||
|
||||
champ.save
|
||||
unless champs_service_errors.empty?
|
||||
flash.now.alert = (champs_service_errors.inject('') {|acc, error| acc+= error[:message]+'<br>' }).html_safe
|
||||
return render 'show'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -46,6 +46,10 @@ class DossierFacades
|
|||
@dossier.invites
|
||||
end
|
||||
|
||||
def champs_private
|
||||
@dossier.ordered_champs_private
|
||||
end
|
||||
|
||||
def commentaires_files
|
||||
PieceJustificative.where(dossier_id: @dossier.id, type_de_piece_justificative_id: nil)
|
||||
end
|
||||
|
|
3
app/models/champ_private.rb
Normal file
3
app/models/champ_private.rb
Normal file
|
@ -0,0 +1,3 @@
|
|||
class ChampPrivate < Champ
|
||||
|
||||
end
|
3
app/models/champ_public.rb
Normal file
3
app/models/champ_public.rb
Normal file
|
@ -0,0 +1,3 @@
|
|||
class ChampPublic < Champ
|
||||
|
||||
end
|
|
@ -13,7 +13,8 @@ class Dossier < ActiveRecord::Base
|
|||
has_many :cerfa, dependent: :destroy
|
||||
|
||||
has_many :pieces_justificatives, dependent: :destroy
|
||||
has_many :champs, dependent: :destroy
|
||||
has_many :champs, class_name: 'ChampPublic', dependent: :destroy
|
||||
has_many :champs_private, class_name: 'ChampPrivate', dependent: :destroy
|
||||
has_many :quartier_prioritaires, dependent: :destroy
|
||||
has_many :cadastres, dependent: :destroy
|
||||
has_many :commentaires, dependent: :destroy
|
||||
|
@ -47,7 +48,11 @@ class Dossier < ActiveRecord::Base
|
|||
|
||||
def build_default_champs
|
||||
procedure.types_de_champ.each do |type_de_champ|
|
||||
Champ.create(type_de_champ_id: type_de_champ.id, dossier_id: id)
|
||||
ChampPublic.create(type_de_champ_id: type_de_champ.id, dossier_id: id)
|
||||
end
|
||||
|
||||
procedure.types_de_champ_private.each do |type_de_champ|
|
||||
ChampPrivate.create(type_de_champ_id: type_de_champ.id, dossier_id: id)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -55,6 +60,10 @@ class Dossier < ActiveRecord::Base
|
|||
champs.joins(', types_de_champ').where("champs.type_de_champ_id = types_de_champ.id AND types_de_champ.procedure_id = #{procedure.id}").order('order_place')
|
||||
end
|
||||
|
||||
def ordered_champs_private
|
||||
champs_private.joins(', types_de_champ').where("champs.type_de_champ_id = types_de_champ.id AND types_de_champ.procedure_id = #{procedure.id}").order('order_place')
|
||||
end
|
||||
|
||||
def ordered_commentaires
|
||||
commentaires.order(created_at: :desc)
|
||||
end
|
||||
|
|
5
app/serializers/champ_private_serializer.rb
Normal file
5
app/serializers/champ_private_serializer.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class ChampPrivateSerializer < ActiveModel::Serializer
|
||||
attributes :value
|
||||
|
||||
has_one :type_de_champ
|
||||
end
|
5
app/serializers/champ_public_serializer.rb
Normal file
5
app/serializers/champ_public_serializer.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class ChampPublicSerializer < ActiveModel::Serializer
|
||||
attributes :value
|
||||
|
||||
has_one :type_de_champ
|
||||
end
|
|
@ -1,5 +0,0 @@
|
|||
class ChampSerializer < ActiveModel::Serializer
|
||||
attributes :value
|
||||
|
||||
has_one :type_de_champ
|
||||
end
|
|
@ -12,6 +12,7 @@ class DossierSerializer < ActiveModel::Serializer
|
|||
has_many :cerfa
|
||||
has_many :commentaires
|
||||
has_many :champs
|
||||
has_many :champs_private
|
||||
has_many :pieces_justificatives
|
||||
has_many :types_de_piece_justificative
|
||||
end
|
25
app/services/champs_service.rb
Normal file
25
app/services/champs_service.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
class ChampsService
|
||||
def self.save_formulaire champs, params
|
||||
errors = Array.new
|
||||
|
||||
champs.each do |champ|
|
||||
champ.value = params[:champs]["'#{champ.id}'"]
|
||||
|
||||
if champ.type_champ == 'datetime'
|
||||
champ.value = params[:champs]["'#{champ.id}'"]+
|
||||
' ' +
|
||||
params[:time_hour]["'#{champ.id}'"] +
|
||||
':' +
|
||||
params[:time_minute]["'#{champ.id}'"]
|
||||
end
|
||||
|
||||
if champ.mandatory? && (champ.value.nil? || champ.value.blank?)
|
||||
errors.push({message: "Le champ #{champ.libelle} doit être rempli."})
|
||||
end
|
||||
|
||||
champ.save
|
||||
end
|
||||
|
||||
errors
|
||||
end
|
||||
end
|
|
@ -12,10 +12,11 @@
|
|||
%h4 Description
|
||||
= ff.text_area :description, class: 'form-control description', placeholder: 'Description'
|
||||
|
||||
.form-group.mandatory
|
||||
%h4 Obligatoire ?
|
||||
.center
|
||||
= ff.check_box :mandatory, placeholder: 'Obligatoire ?'
|
||||
- unless ff.object.object.class == TypeDeChampPrivate
|
||||
.form-group.mandatory
|
||||
%h4 Obligatoire ?
|
||||
.center
|
||||
= ff.check_box :mandatory, placeholder: 'Obligatoire ?'
|
||||
|
||||
.form-group
|
||||
= ff.hidden_field :order_place, value: ff.index
|
||||
|
|
4
app/views/backoffice/dossiers/formulaire_private.js.erb
Normal file
4
app/views/backoffice/dossiers/formulaire_private.js.erb
Normal file
|
@ -0,0 +1,4 @@
|
|||
<% flash.each do |type, message| %>
|
||||
$("#flash_message").html("<div class=\"alert alert-success move_up\" style=\"display: block:\"> <%= message.html_safe %></div>").children().fadeOut(5000)
|
||||
<% end %>
|
||||
<% flash.clear %>
|
|
@ -27,6 +27,9 @@
|
|||
%li{role: "presentation"}
|
||||
%a{href: "#followers", 'aria-controls' => "followers", role: "tab", 'data-toggle' => "tab"}
|
||||
Abonnés
|
||||
%li{role: "presentation"}
|
||||
%a{href: "#champs_private", 'aria-controls' => "champs_private", role: "tab", 'data-toggle' => "tab"}
|
||||
Formulaire
|
||||
|
||||
%div{class: "tab-content"}
|
||||
%div{role: "tabpanel", class: "tab-pane fade in active", id:"commentaires"}
|
||||
|
@ -39,6 +42,12 @@
|
|||
= render partial: '/dossiers/invites'
|
||||
%div{role: "tabpanel", class: "tab-pane fade", id:"followers"}
|
||||
= render partial: 'followers'
|
||||
|
||||
%div{role: "tabpanel", class: "tab-pane fade", id:"champs_private"}
|
||||
%h3 Formulaire privé
|
||||
- unless @champs.nil?
|
||||
= form_for @facade.dossier, url: {controller: 'backoffice/private_formulaires', action: :update, dossier_id: @facade.dossier.id}, remote: true do
|
||||
= render partial: '/users/description/champs'
|
||||
%br
|
||||
= submit_tag :Enregistrer, {class: 'btn btn-success', style: 'float: right'}
|
||||
%br
|
||||
%br
|
|
@ -145,6 +145,7 @@ Rails.application.routes.draw do
|
|||
get 'filtres' => 'procedure_filter#index'
|
||||
patch 'filtres/update' => 'procedure_filter#update'
|
||||
|
||||
resource :private_formulaire
|
||||
|
||||
namespace :preference_list_dossier do
|
||||
post 'add'
|
||||
|
|
25
db/migrate/20160804130638_add_type_attr_in_champ_table.rb
Normal file
25
db/migrate/20160804130638_add_type_attr_in_champ_table.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
class AddTypeAttrInChampTable < ActiveRecord::Migration
|
||||
|
||||
class TypeDeChamp < ActiveRecord::Base
|
||||
has_many :champs
|
||||
end
|
||||
|
||||
class Champ < ActiveRecord::Base
|
||||
belongs_to :type_de_champ
|
||||
end
|
||||
|
||||
def up
|
||||
add_column :champs, :type, :string
|
||||
|
||||
Champ.all.each do |champ|
|
||||
type = 'ChampPublic' if champ.type_de_champ.class == TypeDeChampPublic
|
||||
type = 'ChampPrivate' if champ.type_de_champ.class == TypeDeChampPrivate
|
||||
|
||||
champ.update_attribute(:type, type)
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
remove_column :champs, :type
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20160803081304) do
|
||||
ActiveRecord::Schema.define(version: 20160804130638) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -99,6 +99,7 @@ ActiveRecord::Schema.define(version: 20160803081304) do
|
|||
t.string "value"
|
||||
t.integer "type_de_champ_id"
|
||||
t.integer "dossier_id"
|
||||
t.string "type"
|
||||
end
|
||||
|
||||
create_table "commentaires", force: :cascade do |t|
|
||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
|||
|
||||
describe API::V1::DossiersController do
|
||||
let(:admin) { create(:administrateur) }
|
||||
let(:procedure) { create(:procedure, :with_two_type_de_piece_justificative, :with_type_de_champ, administrateur: admin, cerfa_flag: true) }
|
||||
let(:procedure) { create(:procedure, :with_two_type_de_piece_justificative, :with_type_de_champ, :with_type_de_champ_private, administrateur: admin, cerfa_flag: true) }
|
||||
let(:wrong_procedure) { create(:procedure) }
|
||||
|
||||
it { expect(described_class).to be < APIController }
|
||||
|
@ -115,7 +115,7 @@ describe API::V1::DossiersController do
|
|||
let!(:dossier) { Timecop.freeze(date_creation) { create(:dossier, :with_entreprise, procedure: procedure) } }
|
||||
let(:dossier_id) { dossier.id }
|
||||
let(:body) { JSON.parse(retour.body, symbolize_names: true) }
|
||||
let(:field_list) { [:id, :created_at, :updated_at, :archived, :mandataire_social, :total_commentaire, :entreprise, :etablissement, :cerfa, :types_de_piece_justificative, :pieces_justificatives, :champs, :commentaires, :state] }
|
||||
let(:field_list) { [:id, :created_at, :updated_at, :archived, :mandataire_social, :total_commentaire, :entreprise, :etablissement, :cerfa, :types_de_piece_justificative, :pieces_justificatives, :champs, :champs_private, :commentaires, :state] }
|
||||
subject { body[:dossier] }
|
||||
|
||||
it 'return REST code 200', :show_in_doc do
|
||||
|
@ -235,6 +235,37 @@ describe API::V1::DossiersController do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'champs_private' do
|
||||
let(:field_list) { [
|
||||
:url] }
|
||||
subject { super()[:champs_private] }
|
||||
|
||||
it { expect(subject.length).to eq 1 }
|
||||
|
||||
describe 'first champs' do
|
||||
subject { super().first }
|
||||
|
||||
it { expect(subject.keys.include?(:value)).to be_truthy }
|
||||
it { expect(subject.keys.include?(:type_de_champ)).to be_truthy }
|
||||
|
||||
describe 'type de champ' do
|
||||
let(:field_list) { [
|
||||
:id,
|
||||
:libelle,
|
||||
:description,
|
||||
:order_place,
|
||||
:type] }
|
||||
subject { super()[:type_de_champ] }
|
||||
|
||||
it { expect(subject.keys.include?(:id)).to be_truthy }
|
||||
it { expect(subject[:libelle]).to eq('Description') }
|
||||
it { expect(subject[:description]).to eq('description de votre projet') }
|
||||
it { expect(subject.keys.include?(:order_place)).to be_truthy }
|
||||
it { expect(subject[:type_champ]).to eq('text') }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'commentaires' do
|
||||
let!(:commentaire) { create :commentaire, body: 'plop', created_at: '2016-03-14 14:00:00', email: 'plop@plip.com', dossier: dossier }
|
||||
let!(:commentaire_2) { create :commentaire, body: 'plip', created_at: '2016-03-14 15:00:00', email: 'plip@plap.com', dossier: dossier }
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Backoffice::PrivateFormulairesController, type: :controller do
|
||||
let(:gestionnaire) { create :gestionnaire }
|
||||
let(:dossier) { create :dossier }
|
||||
let(:dossier_champs_first) { 'plop' }
|
||||
|
||||
before do
|
||||
create :assign_to, procedure_id: dossier.procedure.id, gestionnaire_id: gestionnaire.id
|
||||
|
||||
sign_in gestionnaire
|
||||
end
|
||||
|
||||
describe '#PATCH update' do
|
||||
subject { patch :update, dossier_id: dossier.id,
|
||||
champs: {
|
||||
"'#{dossier.champs_private.first.id}'" => dossier_champs_first
|
||||
} }
|
||||
|
||||
before do
|
||||
subject
|
||||
end
|
||||
|
||||
it { expect(response.status).to eq 200 }
|
||||
it { expect(Dossier.find(dossier.id).champs_private.first.value).to eq dossier_champs_first }
|
||||
it { expect(flash[:notice]).to be_present }
|
||||
end
|
||||
end
|
|
@ -5,7 +5,7 @@ FactoryGirl.define do
|
|||
|
||||
before(:create) do |dossier, _evaluator|
|
||||
unless dossier.procedure
|
||||
procedure = create(:procedure, :with_two_type_de_piece_justificative, :with_type_de_champ)
|
||||
procedure = create(:procedure, :with_two_type_de_piece_justificative, :with_type_de_champ, :with_type_de_champ_private)
|
||||
dossier.procedure = procedure
|
||||
end
|
||||
end
|
||||
|
|
7
spec/models/champ_private_spec.rb
Normal file
7
spec/models/champ_private_spec.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ChampPrivate do
|
||||
require 'models/champ_shared_example.rb'
|
||||
|
||||
it_should_behave_like "champ_spec"
|
||||
end
|
7
spec/models/champ_public_spec.rb
Normal file
7
spec/models/champ_public_spec.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ChampPublic do
|
||||
require 'models/champ_shared_example.rb'
|
||||
|
||||
it_should_behave_like "champ_spec"
|
||||
end
|
38
spec/models/champ_shared_example.rb
Normal file
38
spec/models/champ_shared_example.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
shared_examples 'champ_spec' do
|
||||
describe 'database columns' do
|
||||
it { is_expected.to have_db_column(:value) }
|
||||
end
|
||||
|
||||
describe 'associations' do
|
||||
it { is_expected.to belong_to(:dossier) }
|
||||
it { is_expected.to belong_to(:type_de_champ) }
|
||||
end
|
||||
|
||||
describe 'delegation' do
|
||||
it { is_expected.to delegate_method(:libelle).to(:type_de_champ) }
|
||||
it { is_expected.to delegate_method(:type_champ).to(:type_de_champ) }
|
||||
it { is_expected.to delegate_method(:order_place).to(:type_de_champ) }
|
||||
end
|
||||
|
||||
describe 'data_provide' do
|
||||
let(:champ) { create :champ }
|
||||
|
||||
subject { champ.data_provide }
|
||||
|
||||
context 'when type_champ is datetime' do
|
||||
before do
|
||||
champ.type_de_champ = create :type_de_champ_public, type_champ: 'datetime'
|
||||
end
|
||||
|
||||
it { is_expected.to eq 'datepicker' }
|
||||
end
|
||||
|
||||
context 'when type_champ is address' do
|
||||
before do
|
||||
champ.type_de_champ = create :type_de_champ_public, type_champ: 'address'
|
||||
end
|
||||
|
||||
it { is_expected.to eq 'typeahead' }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,40 +1,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Champ do
|
||||
describe 'database columns' do
|
||||
it { is_expected.to have_db_column(:value) }
|
||||
end
|
||||
require 'models/champ_shared_example.rb'
|
||||
|
||||
describe 'associations' do
|
||||
it { is_expected.to belong_to(:dossier) }
|
||||
it { is_expected.to belong_to(:type_de_champ) }
|
||||
end
|
||||
|
||||
describe 'delegation' do
|
||||
it { is_expected.to delegate_method(:libelle).to(:type_de_champ) }
|
||||
it { is_expected.to delegate_method(:type_champ).to(:type_de_champ) }
|
||||
it { is_expected.to delegate_method(:order_place).to(:type_de_champ) }
|
||||
end
|
||||
|
||||
describe 'data_provide' do
|
||||
let(:champ) { create :champ }
|
||||
|
||||
subject { champ.data_provide }
|
||||
|
||||
context 'when type_champ is datetime' do
|
||||
before do
|
||||
champ.type_de_champ = create :type_de_champ_public, type_champ: 'datetime'
|
||||
end
|
||||
|
||||
it { is_expected.to eq 'datepicker' }
|
||||
end
|
||||
|
||||
context 'when type_champ is address' do
|
||||
before do
|
||||
champ.type_de_champ = create :type_de_champ_public, type_champ: 'address'
|
||||
end
|
||||
|
||||
it { is_expected.to eq 'typeahead' }
|
||||
end
|
||||
end
|
||||
it_should_behave_like "champ_spec"
|
||||
end
|
|
@ -92,12 +92,16 @@ describe Dossier do
|
|||
end
|
||||
|
||||
describe '#build_default_champs' do
|
||||
context 'when dossier is linked to a procedure' do
|
||||
context 'when dossier is linked to a procedure with type_de_champ_public and private' do
|
||||
let(:dossier) { create(:dossier, user: user) }
|
||||
|
||||
it 'build all champs needed' do
|
||||
expect(dossier.champs.count).to eq(1)
|
||||
end
|
||||
|
||||
it 'build all champs_private needed' do
|
||||
expect(dossier.champs_private.count).to eq(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -604,7 +608,7 @@ describe Dossier do
|
|||
|
||||
subject { dossier.ordered_champs }
|
||||
|
||||
it { expect(Champ.where(dossier_id: 0).size).to eq 5 }
|
||||
it { expect(ChampPublic.where(dossier_id: 0).size).to eq 5 }
|
||||
|
||||
describe 'for dossier 1' do
|
||||
let(:dossier) { dossier_1 }
|
||||
|
@ -626,6 +630,48 @@ describe Dossier do
|
|||
|
||||
end
|
||||
|
||||
describe '#ordered_champs_private' do
|
||||
let!(:procedure_1) { create :procedure }
|
||||
let!(:procedure_2) { create :procedure }
|
||||
|
||||
let(:dossier_1) { Dossier.new(id: 0, procedure: procedure_1) }
|
||||
let(:dossier_2) { Dossier.new(id: 0, procedure: procedure_2) }
|
||||
|
||||
before do
|
||||
create :type_de_champ_private, libelle: 'type_1_1', order_place: 1, procedure: dossier_1.procedure
|
||||
create :type_de_champ_private, libelle: 'type_1_2', order_place: 2, procedure: dossier_1.procedure
|
||||
|
||||
create :type_de_champ_private, libelle: 'type_2_1', order_place: 1, procedure: dossier_2.procedure
|
||||
create :type_de_champ_private, libelle: 'type_2_2', order_place: 2, procedure: dossier_2.procedure
|
||||
create :type_de_champ_private, libelle: 'type_2_3', order_place: 3, procedure: dossier_2.procedure
|
||||
|
||||
dossier_1.build_default_champs
|
||||
dossier_2.build_default_champs
|
||||
end
|
||||
|
||||
subject { dossier.ordered_champs_private }
|
||||
|
||||
it { expect(ChampPrivate.where(dossier_id: 0).size).to eq 5 }
|
||||
|
||||
describe 'for dossier 1' do
|
||||
let(:dossier) { dossier_1 }
|
||||
|
||||
it { expect(subject.size).to eq 2 }
|
||||
it { expect(subject.first.type_de_champ.libelle).to eq 'type_1_1' }
|
||||
it { expect(subject.last.type_de_champ.libelle).to eq 'type_1_2' }
|
||||
end
|
||||
|
||||
describe 'for dossier 2' do
|
||||
let(:dossier) { dossier_2 }
|
||||
|
||||
it { expect(subject.size).to eq 3 }
|
||||
|
||||
it { expect(subject.first.type_de_champ.libelle).to eq 'type_2_1' }
|
||||
it { expect(subject.second.type_de_champ.libelle).to eq 'type_2_2' }
|
||||
it { expect(subject.last.type_de_champ.libelle).to eq 'type_2_3' }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#total_follow' do
|
||||
let(:dossier) { create(:dossier, :with_entreprise, user: user) }
|
||||
let(:dossier2) { create(:dossier, :with_entreprise, user: user) }
|
||||
|
|
|
@ -19,7 +19,7 @@ describe 'admin/types_de_champ/show.html.haml', type: :view do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'arrow button' do
|
||||
describe 'elements presents or not' do
|
||||
subject do
|
||||
procedure.reload
|
||||
assign(:procedure, procedure)
|
||||
|
@ -27,24 +27,33 @@ describe 'admin/types_de_champ/show.html.haml', type: :view do
|
|||
render
|
||||
rendered
|
||||
end
|
||||
context 'when there is no field in database' do
|
||||
it { expect(subject).not_to have_css('.fa-chevron-down') }
|
||||
it { expect(subject).not_to have_css('.fa-chevron-up') }
|
||||
|
||||
describe 'mandatory checkbox' do
|
||||
it 'no mandatory checkbox are present' do
|
||||
expect(subject).not_to have_css('.form-group.mandatory')
|
||||
end
|
||||
end
|
||||
context 'when there is only one field in database' do
|
||||
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) }
|
||||
it { expect(subject).not_to have_css('#btn_down_0') }
|
||||
it { expect(subject).not_to have_css('#btn_up_0') }
|
||||
it { expect(subject).not_to have_css('#btn_up_1') }
|
||||
it { expect(subject).not_to have_css('#btn_down_1') }
|
||||
end
|
||||
context 'when there are 2 fields in database' do
|
||||
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) }
|
||||
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) }
|
||||
it { expect(subject).to have_css('#btn_down_0') }
|
||||
it { expect(subject).not_to have_css('#btn_up_0') }
|
||||
it { expect(subject).to have_css('#btn_up_1') }
|
||||
it { expect(subject).not_to have_css('#btn_down_1') }
|
||||
|
||||
describe 'arrow button' do
|
||||
context 'when there is no field in database' do
|
||||
it { expect(subject).not_to have_css('.fa-chevron-down') }
|
||||
it { expect(subject).not_to have_css('.fa-chevron-up') }
|
||||
end
|
||||
context 'when there is only one field in database' do
|
||||
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) }
|
||||
it { expect(subject).not_to have_css('#btn_down_0') }
|
||||
it { expect(subject).not_to have_css('#btn_up_0') }
|
||||
it { expect(subject).not_to have_css('#btn_up_1') }
|
||||
it { expect(subject).not_to have_css('#btn_down_1') }
|
||||
end
|
||||
context 'when there are 2 fields in database' do
|
||||
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) }
|
||||
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) }
|
||||
it { expect(subject).to have_css('#btn_down_0') }
|
||||
it { expect(subject).not_to have_css('#btn_up_0') }
|
||||
it { expect(subject).to have_css('#btn_up_1') }
|
||||
it { expect(subject).not_to have_css('#btn_down_1') }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue