demarches-normaliennes/spec/components/dossiers/export_link_component_spec.rb
2024-10-15 16:09:09 +02:00

86 lines
3.2 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Dossiers::ExportLinkComponent, type: :component do
let(:procedure) { create(:procedure) }
let(:groupe_instructeur) { create(:groupe_instructeur, procedure: procedure, instructeurs: [build(:instructeur)]) }
let(:export_url) { double("ExportUrl", call: "/some/fake/path") }
let(:assign_to) { create(:assign_to, procedure: procedure, instructeur: groupe_instructeur.instructeurs.first) }
let(:procedure_presentation) { create(:procedure_presentation, procedure: procedure, assign_to: assign_to) }
let(:component) { described_class.new(procedure:, exports: [export], export_url:) }
describe "rendering" do
subject { render_inline(component).to_html }
context "when the export is available" do
let(:export) { create(:export, :generated, groupe_instructeurs: [groupe_instructeur], updated_at: 5.minutes.ago, created_at: 10.minutes.ago) }
before do
attachment = ActiveStorage::Attachment.new(name: "export", record: export, blob: ActiveStorage::Blob.new(byte_size: 10.kilobytes, content_type: "text/csv", filename: "export.csv"))
allow(export).to receive(:file).and_return(attachment)
end
it "displays the time info" do
expect(subject).to include("généré il y a 5 minutes")
end
it "displays the download button with the correct label" do
expect(subject).to include("Télécharger")
expect(subject).to include("CSV")
expect(subject).to include("10 ko")
end
context 'when export is for everything' do
it 'not display the exact dossiers count' do
expect(subject).to include("tous les dossiers")
end
end
context 'when export is from a presentation' do
before do
export.update!(sorted_column: procedure.default_sorted_column)
end
it 'display the persisted dossiers count' do
expect(subject).to include("10 dossiers")
end
end
end
context "when the export is not available" do
let(:export) { create(:export, :pending, groupe_instructeurs: [groupe_instructeur], sorted_column: procedure.default_sorted_column, created_at: 10.minutes.ago) }
before do
create_list(:dossier, 3, :en_construction, procedure: procedure, groupe_instructeur: groupe_instructeur)
end
it "displays the pending label" do
expect(subject).to include("demandé il y a 10 minutes")
end
it "displays a refresh page button" do
expect(subject).to include("Recharger")
end
it 'displays the current dossiers count' do
expect(subject).to include("3 dossiers")
end
context "when export is generated, but file not yet available" do
let(:export) { create(:export, :generated, groupe_instructeurs: [groupe_instructeur], procedure_presentation: procedure_presentation) }
it "displays the pending label" do
expect(subject).to include("demandé il y a")
end
end
end
context "when the export has failed" do
let(:export) { create(:export, :failed) }
it "displays the refresh old export button" do
expect(subject).to include("Regénérer")
end
end
end
end