require 'rails_helper'

RSpec.describe Contabilidade::IrrfPessoaJuridica, type: :model do
	it { is_expected.to belong_to :orcamento }

	it { is_expected.to validate_uniqueness_of( :codigo ).scoped_to( :orcamento_id ) }

	[:orcamento_id, :codigo, :descricao, :aliquota].each { |atributo| it { is_expected.to validate_presence_of atributo } }

	it { is_expected.to validate_numericality_of :codigo }
	it { is_expected.to validate_numericality_of( :aliquota ).is_greater_than(0).is_less_than(99) }

	it 'validates immutable :orcamento_id' do
		irrf_servicos_profissionais = FactoryBot.create :irrf_pessoa_juridica_servicos_profissionais
		irrf_servicos_profissionais.orcamento_id += 1
		irrf_servicos_profissionais.save

		expect(irrf_servicos_profissionais.errors[:orcamento_id]).to include 'não pode ser alterado'
	end

	describe '#atribui_codigo_do_irpj' do
		it 'incrementa automaticamente o código dos serviços relacionados ao irpj' do
			irrf_servicos_profissionais = FactoryBot.create :irrf_pessoa_juridica_servicos_profissionais
			irrf_servicos_profissionais_dois = FactoryBot.create :irrf_pessoa_juridica_servicos_profissionais, codigo: ''

			expect(irrf_servicos_profissionais_dois.codigo).to eq '0002'
		end
	end

	it '#descricao_para_retencao' do
		irrf_servicos_profissionais = FactoryBot.create :irrf_pessoa_juridica_servicos_profissionais
		expect(irrf_servicos_profissionais.descricao_para_retencao).to eq "#{irrf_servicos_profissionais.codigo} - #{irrf_servicos_profissionais.descricao}"
	end

	it '#descricao_para_exibicao' do
		irrf_servicos_profissionais = FactoryBot.create :irrf_pessoa_juridica_servicos_profissionais
		expect(irrf_servicos_profissionais.descricao_para_exibicao).to eq "#{irrf_servicos_profissionais.codigo} - #{irrf_servicos_profissionais.descricao}".truncate(60) + " (Alíquota: #{irrf_servicos_profissionais.aliquota.to_f}%/Base de Cálculo: #{irrf_servicos_profissionais.percentual_da_base_de_calculo.to_f}%)"
	end
end
