122 lines
4.5 KiB
Ruby
122 lines
4.5 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
describe ProcedurePresentation do
|
||
include ActiveSupport::Testing::TimeHelpers
|
||
|
||
let(:procedure) { create(:procedure, :published, types_de_champ_public:, types_de_champ_private: [{}]) }
|
||
let(:procedure_id) { procedure.id }
|
||
let(:types_de_champ_public) { [{}] }
|
||
let(:instructeur) { create(:instructeur) }
|
||
let(:assign_to) { create(:assign_to, procedure:, instructeur:) }
|
||
let(:first_type_de_champ) { assign_to.procedure.active_revision.types_de_champ_public.first }
|
||
let(:first_type_de_champ_id) { first_type_de_champ.stable_id.to_s }
|
||
let(:procedure_presentation) {
|
||
create(:procedure_presentation,
|
||
assign_to:,
|
||
displayed_fields: [
|
||
{ label: "test1", table: "user", column: "email" },
|
||
{ label: "test2", table: "type_de_champ", column: first_type_de_champ_id }
|
||
],
|
||
sort: { table: "user", column: "email", "order" => "asc" },
|
||
filters: filters)
|
||
}
|
||
let(:procedure_presentation_id) { procedure_presentation.id }
|
||
let(:filters) { { "a-suivre" => [], "suivis" => [{ "label" => "label1", "table" => "self", "column" => "created_at" }] } }
|
||
|
||
def to_filter((label, filter)) = FilteredColumn.new(column: procedure.find_column(label: label), filter: filter)
|
||
|
||
describe "#displayed_fields" do
|
||
it { expect(procedure_presentation.displayed_fields).to eq([{ "label" => "test1", "table" => "user", "column" => "email" }, { "label" => "test2", "table" => "type_de_champ", "column" => first_type_de_champ_id }]) }
|
||
end
|
||
|
||
describe "#sort" do
|
||
it { expect(procedure_presentation.sort).to eq({ "table" => "user", "column" => "email", "order" => "asc" }) }
|
||
end
|
||
|
||
describe "#filters" do
|
||
it { expect(procedure_presentation.filters).to eq({ "a-suivre" => [], "suivis" => [{ "label" => "label1", "table" => "self", "column" => "created_at" }] }) }
|
||
end
|
||
|
||
describe 'validation' do
|
||
it { expect(build(:procedure_presentation)).to be_valid }
|
||
|
||
context 'of displayed columns' do
|
||
it do
|
||
pp = build(:procedure_presentation, displayed_columns: [{ table: "user", column: "reset_password_token", procedure_id: }])
|
||
expect { pp.displayed_columns }.to raise_error(ActiveRecord::RecordNotFound)
|
||
end
|
||
end
|
||
|
||
context 'of filters' do
|
||
it 'validates the filter_column objects' do
|
||
expect(build(:procedure_presentation, "suivis_filters": [{ id: { column_id: "user/email", procedure_id: }, "filter": "not so long filter value" }])).to be_valid
|
||
expect(build(:procedure_presentation, "suivis_filters": [{ id: { column_id: "user/email", procedure_id: }, "filter": "exceedingly long filter value" * 400 }])).to be_invalid
|
||
end
|
||
end
|
||
end
|
||
|
||
describe "#human_value_for_filter" do
|
||
let(:filtered_column) { to_filter([first_type_de_champ.libelle, "true"]) }
|
||
|
||
subject do
|
||
procedure_presentation.human_value_for_filter(filtered_column)
|
||
end
|
||
|
||
context 'when type_de_champ text' do
|
||
it 'should passthrough value' do
|
||
expect(subject).to eq("true")
|
||
end
|
||
end
|
||
|
||
context 'when type_de_champ yes_no' do
|
||
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :yes_no }]) }
|
||
|
||
it 'should transform value' do
|
||
expect(subject).to eq("oui")
|
||
end
|
||
end
|
||
|
||
context 'when filter is state' do
|
||
let(:filtered_column) { to_filter(['État du dossier', "en_construction"]) }
|
||
|
||
it 'should get i18n value' do
|
||
expect(subject).to eq("En construction")
|
||
end
|
||
end
|
||
|
||
context 'when filter is a date' do
|
||
let(:filtered_column) { to_filter(['Date de création', "15/06/2023"]) }
|
||
|
||
it 'should get formatted value' do
|
||
expect(subject).to eq("15/06/2023")
|
||
end
|
||
end
|
||
end
|
||
|
||
describe '#update_displayed_fields' do
|
||
let(:en_construction_column) { procedure.find_column(label: 'Date de passage en construction') }
|
||
let(:mise_a_jour_column) { procedure.find_column(label: 'Date du dernier évènement') }
|
||
|
||
let(:procedure_presentation) do
|
||
create(:procedure_presentation, assign_to:).tap do |pp|
|
||
pp.update(sorted_column: SortedColumn.new(column: procedure.find_column(label: 'Demandeur'), order: 'desc'))
|
||
end
|
||
end
|
||
|
||
subject do
|
||
procedure_presentation.update(displayed_columns: [
|
||
en_construction_column.id, mise_a_jour_column.id
|
||
])
|
||
end
|
||
|
||
it 'should update displayed_fields' do
|
||
expect(procedure_presentation.displayed_columns).to eq(procedure.default_displayed_columns)
|
||
|
||
subject
|
||
|
||
expect(procedure_presentation.displayed_columns).to eq([
|
||
en_construction_column, mise_a_jour_column
|
||
])
|
||
end
|
||
end
|
||
end
|