require 'rails_helper'

describe Api::NonprofitsController, type: :request do

  let(:user) { create(:user)}
  let(:nonprofit_admin_role) do
     role = user.roles.build(host: nonprofit, name: 'nonprofit_admin')
     role.save!
     role
  end
  let(:nonprofit) {create(:nm_justice)}

  describe 'get' do
  end

  describe 'create' do
    around(:each) do |example|
      @old_bp = Houdini.default_bp
      example.run
      Houdini.default_bp = @old_bp
    end

    it 'validates and returns correct errors' do
      input = {}
      post '/api/nonprofits', params: input, xhr: true
      expect(response).to have_http_status :unprocessable_entity
      expect(response.parsed_body['errors'].keys).to match_array ['name', 'city', 'state_code', 'slug', 'user_id']
    end

    it 'succeeds' do
      input =  { name: 'n', state_code: 'WI', city: 'appleton', zip_code: 54_915, user_id: user.id, phone: '920-555-5555' }
      sign_in user
      bp = force_create(:billing_plan)
      Houdini.default_bp = bp.id

      sign_in user

      post '/api/nonprofits', params: input, xhr: true
      expect(response).to have_http_status :created

      expected_np = {
        name: 'n',
        state_code: 'WI',
        city: 'appleton',
        zip_code: '54915',
        state_code_slug: 'wi',
        city_slug: 'appleton',
        slug: 'n',
        phone: '920-555-5555',
        email: nil,
        website: nil,
        urls: {plain_url: "http://www.example.com/nonprofits/1", slug_url: "http://www.example.com/wi/appleton/n"}
      }.with_indifferent_access
      
      expect(response.parsed_body['id']).to be > 0
      expect(response.parsed_body.except('id')).to eq expected_np

      expect(Nonprofit.find(1).billing_plan).to_not be_nil
    end
  end
end