# frozen_string_literal: true RSpec.describe Api::V0::EnterprisesController do render_views let(:enterprise) { create(:distributor_enterprise) } context "as an admin user" do let(:admin) { create(:admin_user) } let!(:enterprise) { create(:distributor_enterprise) } before do allow(controller).to receive(:spree_current_user) { admin } end describe "updating an enterprise" do let(:enterprise_params) do { external_billing_id: 'INV123456' } end it "changes the external_billing_id field" do api_put :update, id: enterprise.id, enterprise: enterprise_params expect(response).to have_http_status :ok expect(enterprise.reload.external_billing_id).to eq('INV123456') end end end context "as an enterprise owner" do let(:enterprise_owner) { create(:user) } let!(:enterprise) { create(:distributor_enterprise, owner: enterprise_owner) } before do allow(controller).to receive(:spree_current_user) { enterprise_owner } end describe "creating an enterprise" do let(:australia) { Spree::Country.find_by(name: 'Australia') } let(:new_enterprise_params) do { name: 'name', contact_name: 'Sheila', address_attributes: { address1: '123 Abc Street', city: 'Northcote', zipcode: '3070', state_id: australia.states.first.id, country_id: australia.id } } end it "creates as sells=any when it is not a producer" do api_post :create, { enterprise: new_enterprise_params } expect(response).to have_http_status :created enterprise = Enterprise.last expect(enterprise.sells).to eq('any') end it "creates a visible=hidden enterprise" do api_post :create, { enterprise: new_enterprise_params } expect(response).to have_http_status :created enterprise = Enterprise.last expect(enterprise.visible).to eq("only_through_links") end it "saves all user ids submitted" do manager1 = create(:user) manager2 = create(:user) api_post :create, { enterprise: new_enterprise_params. merge({ user_ids: [enterprise_owner.id, manager1.id, manager2.id] }) } expect(response).to have_http_status :created enterprise = Enterprise.last expect(enterprise.user_ids).to match_array([enterprise_owner.id, manager1.id, manager2.id]) end context "geocoding" do it "geocodes the address when the :use_geocoder parameter is set" do expect_any_instance_of(AddressGeocoder).to receive(:geocode) api_post :create, { enterprise: new_enterprise_params, use_geocoder: "1" } end it "doesn't geocode the address when the :use_geocoder parameter is not set" do expect_any_instance_of(AddressGeocoder).not_to receive(:geocode) api_post :create, { enterprise: new_enterprise_params, use_geocoder: "0" } end end end end context "as an enterprise manager" do let(:enterprise_manager) { create(:user) } before do enterprise_manager.enterprise_roles.build(enterprise:).save allow(controller).to receive(:spree_current_user) { enterprise_manager } end describe "submitting a valid image" do let!(:logo) { fixture_file_upload("logo.png", "image/png") } before do allow(Enterprise) .to receive(:find_by).with({ permalink: enterprise.id.to_s }) { enterprise } end it "I can update enterprise logo image" do api_post :update_image, logo:, id: enterprise.id expect(response).to have_http_status :ok expect(response.content_type).to eq "text/html" expect(response.body).to match /logo\.png$/ end it "I can update enterprise promo image" do api_post :update_image, promo: logo, id: enterprise.id expect(response).to have_http_status :ok expect(response.content_type).to eq "text/html" expect(response.body).to match /logo\.png$/ end end end context "as an non-managing user" do let(:non_managing_user) { create(:user) } before do allow(Enterprise) .to receive(:find_by).with({ permalink: enterprise.id.to_s }) { enterprise } allow(controller).to receive(:spree_current_user) { non_managing_user } end describe "submitting a valid image" do it "I can't update enterprise image" do api_post :update_image, logo: 'a logo', id: enterprise.id assert_unauthorized! end end end end