require 'spec_helper'

describe 'backoffice/dossiers/index.html.haml', type: :view do
  let(:administrateur) { create(:administrateur) }
  let(:gestionnaire) { create(:gestionnaire, administrateurs: [administrateur]) }

  let!(:procedure) { create(:procedure, :published, administrateur: administrateur) }

  let!(:decorate_dossier_en_construction) { create(:dossier, :with_entreprise, procedure: procedure, state: 'en_construction').decorate }
  let!(:decorate_dossier_en_instruction) { create(:dossier, :with_entreprise, procedure: procedure, state: 'en_instruction').decorate }
  let!(:decorate_dossier_accepte) { create(:dossier, :with_entreprise, procedure: procedure, state: 'accepte').decorate }
  let!(:decorate_dossier_refuse) { create(:dossier, :with_entreprise, procedure: procedure, state: 'refuse').decorate }
  let!(:decorate_dossier_sans_suite) { create(:dossier, :with_entreprise, procedure: procedure, state: 'sans_suite').decorate }

  let(:dossiers_list_facade) { DossiersListFacades.new gestionnaire, nil }

  let(:new_dossiers_list) { dossiers_list_facade.service.nouveaux }
  let(:follow_dossiers_list) { dossiers_list_facade.service.suivi }
  let(:all_state_dossiers_list) { dossiers_list_facade.service.all_state }

  before do
    decorate_dossier_en_instruction.entreprise.update_column(:raison_sociale, 'plup')
    decorate_dossier_accepte.entreprise.update_column(:raison_sociale, 'plyp')
    decorate_dossier_refuse.entreprise.update_column(:raison_sociale, 'plzp')
    decorate_dossier_sans_suite.entreprise.update_column(:raison_sociale, 'plnp')

    create :preference_list_dossier,
      gestionnaire: gestionnaire,
      table: nil,
      attr: 'state',
      attr_decorate: 'display_state'

    create :preference_list_dossier,
      gestionnaire: gestionnaire,
      table: 'procedure',
      attr: 'libelle',
      attr_decorate: 'libelle'

    create :preference_list_dossier,
      gestionnaire: gestionnaire,
      table: 'entreprise',
      attr: 'raison_sociale',
      attr_decorate: 'raison_sociale'

    create :preference_list_dossier,
      gestionnaire: gestionnaire,
      table: nil,
      attr: 'last_update',
      attr_decorate: 'last_update'

    create :assign_to, gestionnaire: gestionnaire, procedure: procedure
    sign_in gestionnaire

    assign :facade_data_view, dossiers_list_facade

    assign(:new_dossiers, (smart_listing_create :new_dossiers,
      new_dossiers_list,
      partial: "backoffice/dossiers/list",
      array: true))

    assign(:follow_dossiers, (smart_listing_create :follow_dossiers,
      follow_dossiers_list,
      partial: "backoffice/dossiers/list",
      array: true))

    assign(:all_state_dossiers, (smart_listing_create :all_state_dossiers,
      all_state_dossiers_list,
      partial: "backoffice/dossiers/list",
      array: true))

    render
  end

  subject { rendered }

  it { is_expected.to have_content('Nouveaux dossiers 1 dossier') }
  it { is_expected.to have_content('Dossiers suivis 0 dossiers') }
  it { is_expected.to have_content('Tous les dossiers 5 dossiers') }

  it { is_expected.to have_content('État') }
  it { is_expected.to have_content('Libellé procédure') }
  it { is_expected.to have_content('Raison sociale') }
  it { is_expected.to have_content('Mise à jour le') }

  it { is_expected.to have_content('plup') }
  it { is_expected.to have_content('plyp') }
end