From a03fb01a8c2fe119deb9b48409e5cca2fd982cb9 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 5 Sep 2023 17:04:20 +1000 Subject: [PATCH] List enterprises within groups on DFC API --- .../app/services/enterprise_builder.rb | 12 +++++++++++- .../spec/requests/enterprise_groups_spec.rb | 15 +++++++++++++-- swagger/dfc.yaml | 3 ++- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/engines/dfc_provider/app/services/enterprise_builder.rb b/engines/dfc_provider/app/services/enterprise_builder.rb index 3885cf4d29..a32d63dfcb 100644 --- a/engines/dfc_provider/app/services/enterprise_builder.rb +++ b/engines/dfc_provider/app/services/enterprise_builder.rb @@ -20,10 +20,20 @@ class EnterpriseBuilder < DfcBuilder end def self.enterprise_group(group) + members = group.enterprises.map do |member| + urls.enterprise_url(member.id) + end + DataFoodConsortium::Connector::Enterprise.new( urls.enterprise_group_url(group.id), name: group.name, description: group.description, - ) + ).tap do |enterprise| + # This property has been agreed by the DFC but hasn't made it's way into + # the Connector yet. + enterprise.registerSemanticProperty("dfc-b:affiliatedBy") do + members + end + end end end diff --git a/engines/dfc_provider/spec/requests/enterprise_groups_spec.rb b/engines/dfc_provider/spec/requests/enterprise_groups_spec.rb index 78682c6302..148fd3ae75 100644 --- a/engines/dfc_provider/spec/requests/enterprise_groups_spec.rb +++ b/engines/dfc_provider/spec/requests/enterprise_groups_spec.rb @@ -4,7 +4,13 @@ require_relative "../swagger_helper" describe "EnterpriseGroups", type: :request, swagger_doc: "dfc.yaml", rswag_autodoc: true do let(:user) { create(:oidc_user) } - let(:group) { create(:enterprise_group, id: 60_000) } + let(:group) { + create( + :enterprise_group, + id: 60_000, name: "Sustainable Farmers", enterprises: [enterprise], + ) + } + let(:enterprise) { create(:enterprise, id: 10_000) } before { login_as user } @@ -16,7 +22,12 @@ describe "EnterpriseGroups", type: :request, swagger_doc: "dfc.yaml", rswag_auto response "200", "successful" do let(:id) { group.id } - run_test! + run_test! do + expect(json_response).to include( + "dfc-b:hasName" => "Sustainable Farmers", + "dfc-b:affiliatedBy" => "http://test.host/api/dfc/enterprises/10000", + ) + end end end end diff --git a/swagger/dfc.yaml b/swagger/dfc.yaml index e15d14fdcb..e7939356a3 100644 --- a/swagger/dfc.yaml +++ b/swagger/dfc.yaml @@ -256,9 +256,10 @@ paths: "@context": https://www.datafoodconsortium.org "@id": http://test.host/api/dfc/enterprise_groups/60000 "@type": dfc-b:Enterprise - dfc-b:hasName: Enterprise group + dfc-b:hasName: Sustainable Farmers dfc-b:hasDescription: this is a group dfc-b:VATnumber: '' + dfc-b:affiliatedBy: http://test.host/api/dfc/enterprises/10000 "/api/dfc/enterprises/{id}": get: summary: Show enterprise