require 'rails_helper'

RSpec.describe Controladoria::CentroDeCusto, type: :model do
  it { is_expected.to validate_presence_of :descricao }
  it { is_expected.to belong_to :unidade_gestora }
  it { is_expected.to belong_to :centro_de_custos_mae }
  it { is_expected.to have_many :centro_de_custos_filhos }

  context 'retorna nivel do centro de custo a ser criado' do
    it 'quando nao possui centro de custo mae' do
      centro_de_custo = FactoryBot.create(:controladoria_centro_de_custo)

      expect(centro_de_custo.retorna_nivel).to eq 1
    end
    it 'quando possui centro de custo mae' do
      centro_de_custos_mae = FactoryBot.create(:controladoria_centro_de_custo)
      centro_de_custo = centro_de_custos_mae.centro_de_custos_filhos.create(FactoryBot.attributes_for(:controladoria_centro_de_custo))

      expect(centro_de_custo.retorna_nivel).to eq 2
    end
  end

  context 'calcula codigo do centro de custo' do
    before(:each) do
      unidade_gestora = Loa::UnidadeGestora.create!(FactoryBot.attributes_for(:loa_gestora_hgf, :orcamento_2016))
      @centro_de_custos_mae = unidade_gestora.build_centro_de_custo(FactoryBot.attributes_for(:controladoria_centro_de_custo))
      unidade_gestora.save
      @centro_de_custos_mae.reload
      @centro_de_custo_filho_1 = @centro_de_custos_mae.centro_de_custos_filhos.build(FactoryBot.attributes_for(:controladoria_centro_de_custo, nivel: 2))
      @centro_de_custos_mae.save
      @centro_de_custo_filho_2 = @centro_de_custos_mae.centro_de_custos_filhos.build(FactoryBot.attributes_for(:controladoria_centro_de_custo, nivel: 2))
      @centro_de_custos_mae.save
      @centro_de_custo_filho_2.reload
    end

    it 'nao tem centro de custo mae' do
      expect(@centro_de_custos_mae.codigo).to eq '1'
    end

    it 'tem centro de custo mae' do
      expect(@centro_de_custo_filho_2.codigo).to eq '1.2'
    end
  end
end
