require 'rails_helper'

RSpec.describe Contabilidade::ConfiguracaoDoEventoContabil, type: :model do
  it { is_expected.to belong_to(:evento_contabil) }
  it { is_expected.to validate_presence_of(:evento_contabil_id) }

  describe 'Quando é empenho' do
    before{ allow(subject).to receive(:evento_de_empenho?).and_return(true) }

    [:status, :modulo_de_ativacao].each do |atributo|
      it { is_expected.to validate_presence_of(atributo) }
    end
  end

  it { is_expected.to define_enum_for(:status).with_values( [ :solicitado, :enviado_para_controladoria ,:enviado_para_copfin, :enviado_para_contabilidade, :confirmado, :anulado, :recebido, :enviado_para_administrativo, :aguardando_alteracao_do_orcamento, :retornado_pela_controladoria, :retornado_pela_contabilidade ] ) }
  it { is_expected.to define_enum_for(:modalidade_do_empenho).with_values( [:ordinario, :global, :estimativo] )}
  it { is_expected.to define_enum_for(:tipo_de_pessoa).with_values( [:pessoa_fisica, :pessoa_juridica] ) }
  it { is_expected.to define_enum_for(:modulo_de_ativacao).with_values( [:administrativo, :contabilidade, :licitacao, :controladoria, :gestao_de_estoque] ) }

  describe "#evento_de_empenho?" do
    it "retorna true quando ação do sistema é do empenho" do
      configuracao = FactoryBot.build(:contabilidade_configuracao_do_evento_contabil)
      [1, 32, 43, 44, 45, 46].each do |codigo|
        configuracao.evento_contabil.acao_do_sistema.update_attribute(:codigo, codigo)
        configuracao.evento_contabil.reload

        expect(configuracao.evento_de_empenho?).to be_truthy
      end
    end
    it "retorna false quando ação do não é do empenho" do
      configuracao = FactoryBot.build(:contabilidade_configuracao_do_evento_contabil)
      configuracao.evento_contabil.acao_do_sistema.update_attribute(:codigo, 2)
      configuracao.evento_contabil.reload

      expect(configuracao.evento_de_empenho?).to be_falsey
    end
  end
end
