require 'rails_helper'

RSpec.describe Licitacao::DocumentoDoPedido, type: :model do
	it { is_expected.to belong_to(:pedido).class_name("Licitacao::Pedido") }
	it { is_expected.to belong_to(:usuario) }
	it { is_expected.to belong_to(:modelo_do_documento).class_name("Licitacao::ModeloDeDocumento") }

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

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

	describe "validates_absence_of texto" do
		subject(:licitacao_documento_do_pedido) {
			Licitacao::DocumentoDoPedido.new (FactoryBot.attributes_for(:licitacao_documento_do_pedido, 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(:licitacao_documento_do_pedido) {
			Licitacao::DocumentoDoPedido.new (FactoryBot.attributes_for(:licitacao_documento_do_pedido, 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_do_pedido = FactoryBot.create( :licitacao_documento_do_pedido )
			documento_do_pedido.update(tipo_de_documento: 'termo_de_referencia')
			expect( documento_do_pedido.errors[:tipo_de_documento] ).to include "não pode ser alterado"
		end
	end

	describe '#titulo' do
		it "personalizado" do
			documento_do_pedido = FactoryBot.create( :licitacao_documento_do_pedido )
			expect(documento_do_pedido.titulo).to eq("TITULOPERSONALIZADO")
		end
		it "não personalizado" do
			documento_do_pedido = FactoryBot.create( :licitacao_documento_do_pedido_outro )
			expect(documento_do_pedido.titulo).to eq("OUTROS DOCUMENTOS - Edital de Convite")
		end
	end

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

end
