Files
openfoodnetwork/spec/controllers/api/enterprises_controller_spec.rb
Cillian O'Ruanaidh f20cea7e4f Allow people to set enterprise latitude/longitude manually or automatically.
This for new changes to the enterprise registration/signup flow where a map will be displayed when people are filling in their address. On this map people can check the geocoder has geocoded their address correctly and if not they can manually adjust their latitude/longitude on the map.

But currently every time someone changes their address in the Admin > Enterprise > Address section the address would automatically be geocoded so this could overwrite the latitude/longitude that was set during sign up. To prevent the latitude/longitude from being overwritten this add's a checkbox which people need to explicity click if they want their address to be automatically geocoded, otherwise it will just use the manually configured latitude/longitude.

Note this new feature which allows people to select their location on a map during registration only works with Google maps so far. So if an instance is using Open Street Map this change also adds support for passing a :use_geocoder parameter to the Api::EnterprisesController during registration so that the address will be geocoded on the backend without the use of a map.
2021-03-19 21:43:29 +00:00

108 lines
3.3 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
describe Api::EnterprisesController, type: :controller do
render_views
let(:enterprise) { create(:distributor_enterprise) }
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 be_success
enterprise = Enterprise.last
expect(enterprise.sells).to eq('any')
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 be_success
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: enterprise).save
allow(controller).to receive(:spree_current_user) { enterprise_manager }
end
describe "submitting a valid image" do
before do
allow(Enterprise)
.to receive(:find_by).with({ permalink: enterprise.id.to_s }) { enterprise }
allow(enterprise).to receive(:update).and_return(true)
end
it "I can update enterprise image" do
api_post :update_image, logo: 'a logo', id: enterprise.id
expect(response).to be_success
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