require 'rails_helper'

RSpec.describe Ppa::ValoresDoConvenioController, type: :controller do
	sign_in_admin
	set_ppa_id_na_sessao
	cria_tipos_de_despesa

	describe "GET #edit" do
		before {
			@ppa = Ppa::Ppa.find_or_create_by!( FactoryBot.attributes_for( :ppa_fortaleza_2014 ) )
			@convenio = FactoryBot.create( :ppa_convenio )
		}

		it "renderiza o convênio requisitado" do
			get :edit, ppa_id: @ppa.id, convenio_id: @convenio.id

			expect( assigns(:convenio) ).to eq @convenio
		end

		it "renderiza os valores do convênio do tipo despesa corrente e despesa de capital, do convênio requisitado" do
			get :edit, ppa_id: @ppa.id, convenio_id: @convenio.id

			expect( assigns(:valores_correntes_do_convenio) ).to eq (@convenio.valores_do_convenio.convenios_correntes)
			expect( assigns(:valores_de_capital_do_convenio) ).to eq (@convenio.valores_do_convenio.convenios_de_capital)
		end

		it "renderiza o template 'edit'" do
			get :edit, ppa_id: @ppa.id, convenio_id: @convenio.id

			expect( response ).to render_template('edit')
		end
	end

	describe "PUT #update" do
		before {
			@convenio = FactoryBot.create( :ppa_convenio, valor: 900 )
		}

		it 'atualiza os valores do convênio, do convênio requisitado' do
			valor_do_convenio = @convenio.valores_do_convenio.first
			outro_valor_do_convenio = @convenio.valores_do_convenio.last

			atributos =  {
				"valores_do_convenio_attributes" => {
						"0" => {
							"id" => valor_do_convenio.id,
							"valor" => "400"
						},
						"1" => {
							 "id" => outro_valor_do_convenio.id,
							"valor" => "500"
						}
				}
			}

			expect {
				put :update, convenio_id: @convenio.id, ppa_convenio: atributos
			}.to change{@convenio.valores_do_convenio.sum(:valor)}.from(0).to( 900 )

		end
	end
end
