require 'rails_helper'

RSpec.describe Licitacao::DocumentoDaCotacaoDoPedido, type: :model do
	it { is_expected.to belong_to(:usuario) }
	it { is_expected.to belong_to(:pessoa_do_pedido).class_name("Licitacao::PessoaDoPedido") }
	it { is_expected.to belong_to(:modelo_do_documento).class_name("Licitacao::ModeloDeDocumento") }

	[:usuario_id, :tipo_de_documento, :pessoa_do_pedido_id].each do |atributo|
		it { is_expected.to validate_presence_of atributo }
	end

	describe "validate_presence_of documento" do
		subject(:documento_da_cotacao_personalizado) {
			Licitacao::DocumentoDaCotacaoDoPedido.new (FactoryBot.attributes_for(:documento_da_cotacao_personalizado, texto: nil))
		}
		it{ is_expected.to validate_presence_of(:documento) }
	end

	describe "validates_absence_of texto" do
		subject(:documento_da_cotacao_personalizado) {
			Licitacao::DocumentoDaCotacaoDoPedido.new (FactoryBot.attributes_for(:documento_da_cotacao_personalizado, documento_file_name: "teste.pdf", documento_content_type: "application/pdf", documento_file_size: 25093, documento_updated_at: Time.now))
		}
		it{ is_expected.to validate_absence_of(:texto) }
	end

	describe "validates_absence_of texto" do
		subject(:documento_da_cotacao_personalizado) {
			Licitacao::DocumentoDaCotacaoDoPedido.new (FactoryBot.attributes_for(:documento_da_cotacao_personalizado, tipo_de_documento: "personalizado", titulo_personalizado: "Mais um documento"))
		}
		it{ is_expected.to validate_presence_of(:titulo_personalizado) }
	end

	describe '#immutable' do
		it "não permite alterações no atributo tipo_de_documento" do
			documento_da_cotacao = FactoryBot.create( :documento_da_cotacao_personalizado )
			documento_da_cotacao.update(tipo_de_documento: 'cotacao_por_email')
			expect( documento_da_cotacao.errors[:tipo_de_documento] ).to include "não pode ser alterado"
		end
	end

	describe '#titulo' do
		it "personalizado" do
			documento_da_cotacao = FactoryBot.create( :documento_da_cotacao_personalizado )
			expect(documento_da_cotacao.titulo).to eq("TITULOPERSONALIZADO")
		end
		it "não personalizado" do
			documento_da_cotacao = FactoryBot.create( :documento_da_cotacao )
			expect(documento_da_cotacao.titulo).to eq("COTAÇÃO POR E-MAIL - Edital de Convite")
		end
	end

	describe "#titulo_do_modelo" do
		it "mostrando o titulo do modelo" do
			documento_da_cotacao = FactoryBot.create( :documento_da_cotacao_personalizado )
			expect(documento_da_cotacao.titulo_do_modelo).to eq(" - Edital de Convite")
		end
		it "retornando nil" do
			documento_da_cotacao = FactoryBot.create( :documento_da_cotacao_personalizado )
			documento_da_cotacao.update(modelo_do_documento: nil)
			documento_da_cotacao.reload
			expect(documento_da_cotacao.titulo_do_modelo).to be_nil
		end
	end

end
