mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-06 22:36:07 +00:00
181 lines
5.2 KiB
Ruby
181 lines
5.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "../swagger_helper"
|
|
|
|
RSpec.describe "Enterprises", swagger_doc: "dfc.yaml" do
|
|
let(:Authorization) { nil }
|
|
let!(:user) { create(:oidc_user) }
|
|
let!(:enterprise) do
|
|
create(
|
|
:distributor_enterprise, :with_logo_image, :with_promo_image,
|
|
id: 10_000, owner: user, abn: "123 456", name: "Fred's Farm",
|
|
description: "This is an awesome enterprise",
|
|
contact_name: "Fred Farmer",
|
|
facebook: "https://facebook.com/user",
|
|
email_address: "hello@example.org",
|
|
phone: "0404 444 000 200",
|
|
website: "https://openfoodnetwork.org",
|
|
address:,
|
|
)
|
|
end
|
|
let(:address) {
|
|
build(
|
|
:address,
|
|
id: 40_000, address1: "42 Doveton Street",
|
|
latitude: -25.345376, longitude: 131.0312006,
|
|
)
|
|
}
|
|
let!(:other_enterprise) do
|
|
create(
|
|
:distributor_enterprise,
|
|
id: 10_001, owner: user, abn: "123 457", name: "Fred's Icecream",
|
|
description: "We use our strawberries to make icecream.",
|
|
address: build(:address, id: 40_001, address1: "42 Doveton Street"),
|
|
)
|
|
end
|
|
let!(:enterprise_group) do
|
|
create(
|
|
:enterprise_group,
|
|
id: 60_000, owner: user, name: "Local Farmers",
|
|
enterprises: [enterprise],
|
|
)
|
|
end
|
|
let!(:product) {
|
|
create(
|
|
:product_with_image,
|
|
id: 90_000, name: "Apple", description: "Round",
|
|
variants: [variant],
|
|
primary_taxon: non_local_vegetable
|
|
)
|
|
}
|
|
let(:non_local_vegetable) {
|
|
build(
|
|
:taxon,
|
|
name: "Non Local Vegetable",
|
|
dfc_id: "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/productTypes.rdf#non-local-vegetable"
|
|
)
|
|
}
|
|
let(:variant) {
|
|
build(:base_variant, id: 10_001, unit_value: 1, sku: "APP", supplier: enterprise)
|
|
}
|
|
|
|
before { login_as user }
|
|
|
|
path "/api/dfc/enterprises" do
|
|
get "List enterprises" do
|
|
produces "application/json"
|
|
|
|
response "200", "successful" do
|
|
context "as platform user" do
|
|
include_context "authenticated as platform"
|
|
|
|
context "without permissions" do
|
|
run_test! do
|
|
expect(response.body).to eq ""
|
|
end
|
|
end
|
|
|
|
context "with access to one enterprise" do
|
|
before do
|
|
DfcPermission.create!(
|
|
user:, enterprise_id: enterprise.id,
|
|
scope: "ReadEnterprise", grantee: "cqcm-dev",
|
|
)
|
|
end
|
|
|
|
run_test! do
|
|
expect(response.body).to include "Fred's Farm"
|
|
expect(response.body).not_to include "Fred's Icecream"
|
|
end
|
|
end
|
|
|
|
context "with access to two enterprises" do
|
|
before do
|
|
DfcPermission.create!(
|
|
user:, enterprise_id: enterprise.id,
|
|
scope: "ReadEnterprise", grantee: "cqcm-dev",
|
|
)
|
|
DfcPermission.create!(
|
|
user:, enterprise_id: other_enterprise.id,
|
|
scope: "ReadEnterprise", grantee: "cqcm-dev",
|
|
)
|
|
end
|
|
|
|
run_test! do
|
|
expect(response.body).to include "Fred's Farm"
|
|
expect(response.body).to include "Fred's Icecream"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "as user owning two enterprises" do
|
|
run_test! do
|
|
expect(response.body).to include "Fred's Farm"
|
|
expect(response.body).to include "Fred's Icecream"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
path "/api/dfc/enterprises/{id}" do
|
|
get "Show enterprise" do
|
|
parameter name: :id, in: :path, type: :string
|
|
produces "application/json"
|
|
|
|
response "200", "successful" do
|
|
context "as platform user" do
|
|
include_context "authenticated as platform"
|
|
|
|
let(:id) { 10_000 }
|
|
|
|
before {
|
|
DfcPermission.create!(
|
|
user:, enterprise_id: id,
|
|
scope: "ReadEnterprise", grantee: "cqcm-dev",
|
|
)
|
|
}
|
|
|
|
run_test!
|
|
end
|
|
|
|
context "without enterprise id" do
|
|
let(:id) { "default" }
|
|
|
|
run_test! do
|
|
expect(response.body).to include("Apple")
|
|
expect(response.body).to include("APP")
|
|
expect(response.body).to include("offers/10001")
|
|
end
|
|
end
|
|
|
|
context "given an enterprise id" do
|
|
let(:id) { enterprise.id }
|
|
|
|
run_test! do
|
|
expect(response.body).to include "Fred's Farm"
|
|
expect(response.body).to include "This is an awesome enterprise"
|
|
expect(response.body).to include "123 456"
|
|
expect(response.body).to include "Apple"
|
|
expect(response.body).to include "42 Doveton Street"
|
|
|
|
expect(json_response["@graph"][0]).to include(
|
|
"dfc-b:affiliates" => "http://test.host/api/dfc/enterprise_groups/60000",
|
|
"dfc-b:websitePage" => "https://openfoodnetwork.org",
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
response "404", "not found" do
|
|
let(:id) { other_enterprise.id }
|
|
let(:other_enterprise) { create(:distributor_enterprise) }
|
|
|
|
run_test! do
|
|
expect(response.body).not_to include "Apple"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|