require "rails_helper"

RSpec.describe PrincipalMailer, type: :mailer do

	describe 'testa se o email foi enviado e se no corpo do email enviado contém o que se espera' do
		it '#ppa_participativo_status_da_proposta' do
			FactoryBot.create(:configuracao)
			ppa_proposta = Ppa::Proposta.new( FactoryBot.attributes_for( :ppa_proposta ) )
			ppa_proposta.save(validate: false)

			# Cria o mailer e o salva em uma variável para testar os asserts
			mailer = PrincipalMailer.ppa_participativo_status_da_proposta( ppa_proposta.id )

			# Envia o e-mail, então testa se ele entrou em fila
			assert_emails 1 do
				mailer.deliver_now
			end

			# Testa se o corpo do email enviado contém o que esperamos que ele contenha
			assert_equal ['naoresponder@speedgov.com.br'], mailer.from
			assert_equal ["#{ppa_proposta.cidadao.email}"], mailer.to
			assert_equal "Status da sua proposta no PPA Participativo", mailer.subject
		end
	end

	describe '#solicitar_cotacao' do
		let(:pessoa_pedido) { FactoryBot.create :pessoa_do_pedido }
		let(:mailer) { PrincipalMailer.solicitar_cotacao(pessoa_pedido.id).deliver_now }
		before(:each) do
			@configuracao = FactoryBot.create(:configuracao)
		end

		it 'renderiza o assunto' do
			expect(mailer.subject).to eq("Solicitação de Proposta de Preço para #{@configuracao.nome_da_prefeitura}")
		end

		it 'renderiza o destinatário do email' do
			expect(mailer.to).to eq([pessoa_pedido.pessoa.email])
		end

		it 'renderiza o remetente do email' do
			expect(mailer.from).to eq(['naoresponder@speedgov.com.br'])
		end

		it 'renderiza o nome da pessoa' do
			expect(mailer.body).to match(pessoa_pedido.pessoa.nome)
		end

		it 'renderiza o link com código de acesso' do
			expect(mailer.body).to match(cotar_licitacao_pessoas_do_pedido_path(codigo_de_acesso: pessoa_pedido.codigo_de_acesso))
		end
	end

	describe '#confirmar_cotacao' do
		let(:pessoa_pedido) { FactoryBot.create :pessoa_do_pedido }
		let(:mailer) { PrincipalMailer.confirmar_cotacao(pessoa_pedido.id, false).deliver_now }
		let(:mailer_atualizar) { PrincipalMailer.confirmar_cotacao(pessoa_pedido.id, true).deliver_now }

		before(:each) do
			@configuracao = FactoryBot.create(:configuracao)
		end

		it 'renderiza o assunto' do
			expect(mailer.subject).to eq("Confirmação da Proposta de Preço para #{@configuracao.nome_da_prefeitura}")
		end

		it 'renderiza o destinatário do email' do
			expect(mailer.to).to eq([pessoa_pedido.pessoa.email])
		end

		it 'renderiza o remetente do email' do
			expect(mailer.from).to eq(['naoresponder@speedgov.com.br'])
		end

		it 'renderiza o nome da pessoa' do
			expect(mailer.body).to match(pessoa_pedido.pessoa.nome)
		end

		it 'renderiza o link com código de acesso' do
			expect(mailer.body).to match(cotar_licitacao_pessoas_do_pedido_path(codigo_de_acesso: pessoa_pedido.codigo_de_acesso))
		end

		context 'quando é a primeira vez que os dados são enviados' do
			it 'renderiza o verbo "enviar"' do
				expect(mailer.body).to match("enviar")
			end
			it 'renderiza o verbo "atualizar"' do
				expect(mailer_atualizar.body).to match("atualizar")
			end
		end
	end
end
