describe Manager::ProceduresController, type: :controller do
  let(:super_admin) { create :super_admin }

  before { sign_in super_admin }

  describe '#whitelist' do
    let(:procedure) { create(:procedure) }

    before do
      post :whitelist, params: { id: procedure.id }
      procedure.reload
    end

    it { expect(procedure.whitelisted?).to be_truthy }
  end

  describe '#show' do
    render_views

    let(:procedure) { create(:procedure, :published, :with_repetition) }

    before do
      get :show, params: { id: procedure.id }
    end

    it { expect(response.body).to include('sub type de champ') }
  end

  describe '#discard' do
    let(:dossier) { create(:dossier, :en_construction) }
    let(:procedure) { dossier.procedure }
    let(:deleted_dossier) { DeletedDossier.find_by(dossier_id: dossier.id) }
    let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) }

    before do
      post :discard, params: { id: procedure.id }
      procedure.reload
      dossier.reload
    end

    it { expect(procedure.discarded?).to be_truthy }
    it { expect(dossier.discarded?).to be_truthy }
    it { expect(deleted_dossier).not_to be_nil }
    it { expect(deleted_dossier.reason).to eq("procedure_removed") }
    it { expect(operations).to eq([:supprimer]) }
  end

  describe '#restore' do
    let(:dossier) { create(:dossier, :en_construction, :with_individual) }
    let(:procedure) { dossier.procedure }
    let(:deleted_dossier) { DeletedDossier.find_by(dossier_id: dossier.id) }
    let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) }

    before do
      procedure.discard_and_keep_track!(super_admin)

      post :restore, params: { id: procedure.id }
      procedure.reload
    end

    it { expect(procedure.kept?).to be_truthy }
    it { expect(dossier.kept?).to be_truthy }
    it { expect(deleted_dossier).to be_nil }
    it { expect(operations).to eq([:supprimer, :restaurer]) }
  end

  describe '#index' do
    render_views

    context 'sort by dossiers' do
      let!(:dossier) { create(:dossier) }

      before do
        get :index, params: { procedure: { direction: 'asc', order: 'dossiers' } }
      end

      it { expect(response.body).to include('1 dossier') }
    end
  end
end
