# frozen_string_literal: true

RSpec.describe EtablissementHelper, type: :helper do
  let(:code_effectif) { '00' }
  let(:raison_sociale) { 'GRTGaz' }
  let(:enseigne) { "mon enseigne" }
  let(:nom) { 'mon nom' }
  let(:prenom) { 'mon prenom' }
  let(:etat_administratif) { 'actif' }
  let(:etablissement_params) do
    {
      enseigne: enseigne,
      entreprise_capital_social: 123_000,
      entreprise_code_effectif_entreprise: code_effectif,
      entreprise_raison_sociale: raison_sociale,
      entreprise_etat_administratif: etat_administratif,
      entreprise_nom: nom,
      entreprise_prenom: prenom
    }
  end
  let(:etablissement) { create(:etablissement, etablissement_params) }

  describe "#pretty_siret" do
    subject { pretty_siret("12345678900001") }

    it { is_expected.to eq("123 456 789 00001") }
  end

  describe "#extract_resultat_exercice" do
    let(:bilan) { bilans.first }
    context 'having results' do
      let(:bilans) { JSON.parse(File.read('spec/fixtures/files/api_entreprise/bilans_entreprise_bdf_with_bilans.json'))["data"] }

      it 'find value' do
        expect(extract_resultat_exercice(bilan["data"])).to eq("97065000")
      end
    end

    context 'without results' do
      let(:bilans) { JSON.parse(File.read('spec/fixtures/files/api_entreprise/bilans_entreprise_bdf.json'))["data"] }

      it 'does not crash' do
        expect(extract_resultat_exercice(bilan["data"])).to eq(nil)
      end
    end
  end

  describe '#raison_sociale_or_name' do
    subject { raison_sociale_or_name(etablissement) }

    context 'when etablissement is not the siege and enseigne exist' do
      let(:enseigne) { "mon enseigne" }
      it 'display enseigne' do
        expect(subject).to eq(enseigne)
      end
    end

    context 'when raison_sociale exist' do
      let(:raison_sociale) { 'ma super raison_sociale' }
      let(:enseigne) { nil }
      it 'display raison_sociale' do
        expect(subject).to eq(raison_sociale)
      end
    end

    context 'when raison_sociale is nil' do
      let(:raison_sociale) { nil }
      let(:enseigne) { nil }
      it 'display nom and prenom' do
        expect(subject).to eq("#{nom} #{prenom}")
      end
    end
  end

  describe '#effectif' do
    subject { effectif(etablissement) }

    context 'when code_effectif is 00' do
      let(:code_effectif) { '01' }
      it { is_expected.to eq('1 ou 2 salariés') }
    end

    context 'when code_effectif is 32' do
      let(:code_effectif) { '32' }
      it { is_expected.to eq('250 à 499 salariés') }
    end
  end

  describe '#pretty_currency' do
    subject { pretty_currency(etablissement.entreprise_capital_social) }

    it { is_expected.to eq('123 000 €') }
  end

  describe '#pretty_currency with special unit' do
    subject { pretty_currency(12345, unit: 'k€') }

    it { is_expected.to eq('12 345 k€') }
  end
  describe '#pretty_date_exercice' do
    subject { pretty_date_exercice("201908") }
    it { is_expected.to eq("2019") }
  end

  describe "#humanized_entreprise_etat_administratif" do
    subject { humanized_entreprise_etat_administratif(etablissement) }

    context "when etat_administratif is A" do
      let(:etat_administratif) { "actif" }
      it { is_expected.to eq("en activité") }
    end

    context "when etat_administratif is F" do
      let(:etat_administratif) { "fermé" }
      it { is_expected.to eq("fermé") }
    end

    context "when etat_administratif is nil" do
      let(:etat_administratif) { nil }
      it { is_expected.to be_nil }
    end
  end
end