require 'rails_helper'

RSpec.describe PpaParticipativo::Cidadao, type: :model do
	it { is_expected.to validate_presence_of :nome }
	it { is_expected.to validate_presence_of :cpf_cnpj }
	it { is_expected.to validate_uniqueness_of(:cpf_cnpj).scoped_to(:email) }

	describe "ao criar cidadao" do
		context 'com cnpj valido e sem provedor' do
			it 'retorna cidadao valido' do
				cidadao = FactoryBot.build :cidadao
				expect( cidadao.validate ).to eq true
			end
		end

		context 'com cnpj valido e com provedor' do
			it 'retorna cidadao valido' do
				cidadao = FactoryBot.build(:cidadao, provider: 'facebook')
				expect( cidadao.validate ).to eq true
			end
		end

		context 'com aceitou_os_termos_de_uso false' do
			it 'retorna falso' do
				cidadao = FactoryBot.build(:cidadao, aceitou_os_termos_de_uso: false)
				expect( cidadao.aceitou_os_termos_de_uso ).to be false
			end
		end

		context 'com cnpj invalido e sem provedor' do
			it 'retorna mensagem de erro' do
				cidadao = FactoryBot.build(:cidadao, cpf_cnpj: '999999999999')
				cidadao.validate
				expect( cidadao.errors[:cpf_cnpj] ).to include "não é válido"
			end
		end

		context 'com cnpj invalido e com provedor' do
			it 'retorna cidadao valido' do
				cidadao = FactoryBot.build(:cidadao, cpf_cnpj: '999999999999', provider: 'facebook')
				expect( cidadao.validate ).to eq true
			end
		end
	end

	describe "ao atualizar cidadao" do
		context 'com cnpj valido' do
			it 'retorna mensagem de sucesso' do
				cidadao = FactoryBot.create(:cidadao, cpf_cnpj: '999999999999', provider: 'facebook')
				expect( cidadao.update(cpf_cnpj: '614.444.112-33') ).to eq true
			end
		end

		context 'com cnpj invalido' do
			it 'retorna mensagem erro' do
				cidadao = FactoryBot.create(:cidadao, cpf_cnpj: '614.444.112-33', provider: 'facebook')
				cidadao.update(cpf_cnpj: '999999999999')

				expect( cidadao.errors[:cpf_cnpj] ).to include "não é válido"
			end
		end
	end

	describe '#cpf_cnpj_formatado' do
		context 'quando o cpf_cnpj está em branco' do
			it "retorna avisando que foi autenticado via Facebook" do
				cidadao = FactoryBot.build(:cidadao, provider: 'facebook', cpf_cnpj: nil)
				expect(cidadao.cpf_cnpj_formatado).to eq "(Autenticado via Facebook)"
			end
		end
		context 'quando o cpf_cnpj contém um cpf' do
			it "retorna cpf formatado" do
				cpf = Faker::CPF.numeric
				cpf_formatado = Cpf.new(cpf)
				cidadao = FactoryBot.build(:cidadao, cpf_cnpj: cpf)
				expect(cidadao.cpf_cnpj_formatado).to eq cpf_formatado
			end
		end
		context 'quando o cpf_cnpj contém um cnpj' do
			it "retorna cnpj formatado" do
				cnpj = Faker::CNPJ.numeric
				cnpj_formatado = Cnpj.new(cnpj)
				cidadao = FactoryBot.build(:cidadao, cpf_cnpj: cnpj)
				expect(cidadao.cpf_cnpj_formatado).to eq cnpj_formatado
			end
		end
	end
end
