require 'rails_helper'

RSpec.describe Licitacao::Ocorrencia, type: :model do

	it { is_expected.to belong_to(:processo) }
	it { is_expected.to belong_to(:ata_da_sessao) }

	it { is_expected.to validate_presence_of :data_da_ocorrencia }
	it { is_expected.to validate_presence_of :horario_da_ocorrencia }
	it { is_expected.to validate_presence_of :tipo }
	it { is_expected.to validate_presence_of :motivo }
	it { is_expected.to validate_presence_of :projeto_id }
	it { is_expected.to validate_presence_of :ata_da_sessao_id }

	describe '#atribui_numero' do
		before(:each) do
			@projeto = FactoryBot.create(:licitacao_projeto, modalidade_de_licitacao: :pregao_eletronico )
		end
		context 'quando é a primeira ocorrencia criada' do
			it 'salva numero 1' do
				ocorrencia = @projeto.ocorrencias.create
				expect(ocorrencia.numero).to eq 1
			end
		end
		context 'quando é a segunda ocorrencia criada' do
			it 'salva numero 2' do
				#criando primeira ocorrência
				ocorrencia_um = FactoryBot.create(:licitacao_ocorrencia, projeto_id: @projeto.id)
				#criando segunda ocorrência
				ocorrencia_dois = ocorrencia_um = FactoryBot.create(:licitacao_ocorrencia, projeto_id: @projeto.id)
				expect(ocorrencia_dois.numero).to eq 2
			end
		end
	end

	describe "#atribui_ata_da_sessao" do
		before(:each) do
			@projeto = FactoryBot.create(:licitacao_projeto, modalidade_de_licitacao: :pregao_eletronico )
		end
		context "se for retomada, deve criar uma nova ata da sessão" do
			it "cria a atribui nova ata da sessão" do
				expect(@projeto.atas_das_sessoes.count).to eq 1
				ocorrencia = FactoryBot.create(:licitacao_ocorrencia, tipo: 'retomada', projeto_id: @projeto.id, ata_da_sessao_id: nil)
				expect(ocorrencia.ata_da_sessao).to_not be_nil
				expect(@projeto.atas_das_sessoes.count).to eq 2
			end
		end
		context "se NÂO for retomada, deve atribuir a última ata da sessão do projeto" do
			it "não cria ata da sessão, e atribui a última ata da sessão do projeto" do
				expect(@projeto.atas_das_sessoes.count).to eq 1
				ocorrencia = FactoryBot.create(:licitacao_ocorrencia, tipo: 'credenciamento', projeto_id: @projeto.id, ata_da_sessao_id: nil)
				expect(ocorrencia.ata_da_sessao).to_not be_nil
				expect(@projeto.atas_das_sessoes.count).to eq 1
			end
		end
	end

	describe "#suspender_ou_retomar_sessao_do_processo" do
		context "se a ocorrencia for suspensao" do
			it "deve suspender o processo" do
				@projeto = FactoryBot.create(:licitacao_projeto, status: 'em_sessao', modalidade_de_licitacao: :pregao_eletronico )
				expect(@projeto.em_sessao?).to be_truthy
				ocorrencia = FactoryBot.create(:licitacao_ocorrencia, tipo: 'suspensao', projeto_id: @projeto.id, ata_da_sessao_id: nil)
				@projeto.reload
				expect(@projeto.suspenso?).to be_truthy
			end
		end
		context "se a ocorrencia for retomada" do
			it "deve retomar o processo para em_sessao" do
				@projeto = FactoryBot.create(:licitacao_projeto, status: 'suspenso', modalidade_de_licitacao: :pregao_eletronico )
				expect(@projeto.suspenso?).to be_truthy
				ocorrencia = FactoryBot.create(:licitacao_ocorrencia, tipo: 'retomada', projeto_id: @projeto.id, ata_da_sessao_id: nil)
				@projeto.reload
				expect(@projeto.em_sessao?).to be_truthy
			end
		end
	end

end
