Merge pull request #2142 from betagouv/frederic/fix_1421-leftovers

Frederic/fix 1421 leftovers
This commit is contained in:
Frederic Merizen 2018-06-28 20:11:47 +02:00 committed by GitHub
commit 4f9bf73fe5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 110 additions and 0 deletions

View file

@ -28,8 +28,24 @@ class Champs::LinkedDropDownListChamp < Champ
:primary_value
end
def for_display
string_value
end
def mandatory_and_blank?
mandatory? && (primary_value.blank? || secondary_value.blank?)
end
private
def string_value
[primary_value, secondary_value].compact.join(' / ')
end
def value_for_export
"#{primary_value || ''};#{secondary_value || ''}"
end
def pack_value
self.value = JSON.generate([ primary_value, secondary_value ])
end

View file

@ -0,0 +1,5 @@
class Champs::LinkedDropDownListChampSerializer < ChampSerializer
def value
{ primary: object.primary_value, secondary: object.secondary_value }
end
end

View file

@ -50,6 +50,8 @@
= render partial: "shared/champs/piece_justificative/pj_link", locals: { champ: champ, user_can_upload: true }
- elsif champ.type_champ == 'textarea'
= simple_format(champ.decorate.value)
- elsif champ.type_champ == 'linked_drop_down_list'
= champ.for_display
- else
= sanitize(champ.decorate.value)

View file

@ -15,6 +15,10 @@
- c.value.split(", ").each do |item|
%li
= item
- when "linked_drop_down_list"
%th.libelle
= "#{c.libelle} :"
%td= c.for_display
- when "dossier_link"
%th.libelle
= "#{c.libelle} :"

View file

@ -15,4 +15,87 @@ describe Champs::LinkedDropDownListChamp do
it { expect(champ.value).to eq('["tata","tutu"]') }
end
describe '#for_display' do
let(:champ) { described_class.new(primary_value: primary_value, secondary_value: secondary_value) }
let(:primary_value) { nil }
let(:secondary_value) { nil }
subject { champ.for_display }
context 'with no value' do
it { is_expected.to eq('') }
end
context 'with primary value' do
let(:primary_value) { 'primary' }
it { is_expected.to eq('primary') }
end
context 'with secondary value' do
let(:primary_value) { 'primary' }
let(:secondary_value) { 'secondary' }
it { is_expected.to eq('primary / secondary') }
end
end
describe 'for_export' do
subject { champ.for_export }
context 'with no value' do
let(:champ) { described_class.new }
it { is_expected.to be_nil }
end
context 'with primary value' do
let(:champ) { described_class.new(primary_value: 'primary') }
it { is_expected.to eq('primary;') }
end
context 'with secondary value' do
let(:champ) { described_class.new(primary_value: 'primary', secondary_value: 'secondary') }
it { is_expected.to eq('primary;secondary') }
end
end
describe '#mandatory_and_blank' do
let(:drop_down_list) { build(:drop_down_list, value: "--Primary--\nSecondary") }
subject { described_class.new(type_de_champ: type_de_champ) }
context 'when the champ is not mandatory' do
let(:type_de_champ) { build(:type_de_champ_linked_drop_down_list, drop_down_list: drop_down_list) }
it 'blank is fine' do
is_expected.not_to be_mandatory_and_blank
end
end
context 'when the champ is mandatory' do
let(:type_de_champ) { build(:type_de_champ_linked_drop_down_list, mandatory: true, drop_down_list: drop_down_list) }
context 'when there is no value' do
it { is_expected.to be_mandatory_and_blank }
end
context 'when there is a primary value' do
before { subject.primary_value = 'Primary' }
context 'when there is no secondary value' do
it { is_expected.to be_mandatory_and_blank }
end
context 'when there is a secondary value' do
before { subject.secondary_value = 'Primary' }
it { is_expected.not_to be_mandatory_and_blank }
end
end
end
end
end