require 'rails_helper'

RSpec.describe Contabilidade::ItemDaNotaFiscal, type: :model do

	it{ is_expected.to belong_to(:liquidacao).required }
	it{ is_expected.to belong_to(:item).class_name("Base::Item").required }
	it { is_expected.to delegate_method(:descricao_do_item).to(:item) }

	it{ is_expected.to validate_presence_of :liquidacao_id}
	it{ is_expected.to validate_presence_of :item_id}
	it{ is_expected.to validate_presence_of :quantidade}
	it{ is_expected.to validate_presence_of :valor_unitario}
	it{ is_expected.to validate_presence_of :total}

	it { is_expected.to validate_numericality_of(:quantidade).is_greater_than(0) }
	it { is_expected.to validate_numericality_of(:valor_unitario).is_greater_than(0) }
	it { is_expected.to validate_numericality_of(:total).is_greater_than(0) }

	describe "existe_no_empenho?" do
		it "existe" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho, valor: 8.00)
			item_da_nota_fiscal = FactoryBot.create(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 1, valor_unitario: 9.99, total: 9.99, item_id: item_do_empenho_caderno.item_id)

			expect(item_da_nota_fiscal.existe_no_empenho?).to eq(item_do_empenho_caderno)
		end
	end

	describe "limite_do_total_digitado_pelo_calculo" do
		it "valor dentro do limite" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho , valor: 8.00)
			item_da_nota_fiscal = FactoryBot.build(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 1, valor_unitario: 9.99, total: 9.99, item_id: item_do_empenho_caderno.item_id)

			item_da_nota_fiscal.validate
			expect(item_da_nota_fiscal.errors[:total]).not_to include("não pode ser mais que 10 centavos do valor calculado da quantidade x preço unitário")
			expect(item_da_nota_fiscal.errors[:total]).not_to include("não pode ser menos que 10 centavos do valor calculado da quantidade x preço unitário")
		end

		it "valor acima do limite" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho , valor: 8.00)
			item_da_nota_fiscal = FactoryBot.build(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 10000, valor_unitario: 9.99, total: 9.80, item_id: item_do_empenho_caderno.item_id)
			item_da_nota_fiscal.validate


			expect(item_da_nota_fiscal.errors[:total]).to include("não pode ser menos que 10 centavos do valor calculado da quantidade x preço unitário")
		end

		it "valor abaixo do limite" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho , valor: 8.00)
			item_da_nota_fiscal = FactoryBot.build(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 1, valor_unitario: 9.99, total: 9.80, item_id: item_do_empenho_caderno.item_id)
			item_da_nota_fiscal.validate
			expect(item_da_nota_fiscal.errors[:total]).to include("não pode ser menos que 10 centavos do valor calculado da quantidade x preço unitário")
		end
	end

	describe "quantidade_disponivel" do
		# JÁ É TESTADO NA TABELA ITEM DO EMPENHO
	end

	describe "quantidade_do_item_em_relacao_ao_item_no_empenho" do
		it "não existe item do empenho correspondente" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho , valor: 8.00)
			item_da_nota_fiscal = FactoryBot.build(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 1, valor_unitario: 9.99, total: 9.80, item_id: item_do_empenho_caderno.item_id)
			item_da_nota_fiscal.validate

			expect(item_da_nota_fiscal.errors[:quantidade]).not_to include("não pode ser maior que o saldo de itens para o empenho")
		end

		it "quantidade não é maior" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
 			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho, valor: 8.00)
			item_da_nota_fiscal = FactoryBot.create(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 1, valor_unitario: 9.99, total: 9.99, item_id: item_do_empenho_caderno.item_id)

			expect(item_da_nota_fiscal.errors[:quantidade]).not_to include("não pode ser maior que o saldo de itens para o empenho")
		end

		it "quantidade é maior" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
 			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho, valor: 8.00, descrimina_itens_processo_ou_empenho: true)
			item_da_nota_fiscal = FactoryBot.build(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 1100, valor_unitario: 9.99, total: 9.99, item_id: item_do_empenho_caderno.item_id)
			item_da_nota_fiscal.validate

			expect(item_da_nota_fiscal.errors[:quantidade]).to include("não pode ser maior que o saldo de itens para o empenho")
		end

		it "valor do item é menor" do
			item_do_empenho_caderno = FactoryBot.create( :item_do_empenho_caderno, quantidade: 1, valor_unitario: 9.99, total: 9.99)
			liquidacao = FactoryBot.create(:liquidacao_001, empenho: item_do_empenho_caderno.empenho, valor: 8.00)
			item_da_nota_fiscal = FactoryBot.build(:item_da_nota_fiscal_caderno, liquidacao: liquidacao, quantidade: 1, valor_unitario: 0, total: 2, item_id: item_do_empenho_caderno.item_id)
			item_da_nota_fiscal.validate

			expect(item_da_nota_fiscal.errors[:valor_unitario]).to include("deve ser maior que 0")
		end

	end
end
