diff --git a/.rubocop_styleguide.yml b/.rubocop_styleguide.yml index 9672766f62..11f6917250 100644 --- a/.rubocop_styleguide.yml +++ b/.rubocop_styleguide.yml @@ -93,6 +93,8 @@ Naming/VariableNumber: AllowedIdentifiers: - street_address_1 - street_address_2 + AllowedPatterns: + - _v[\d]+ Bundler/DuplicatedGem: Enabled: false diff --git a/spec/lib/data_food_consortium/connector/importer_spec.rb b/spec/lib/data_food_consortium/connector/importer_spec.rb index 3ac97a7f1f..e14674596a 100644 --- a/spec/lib/data_food_consortium/connector/importer_spec.rb +++ b/spec/lib/data_food_consortium/connector/importer_spec.rb @@ -25,6 +25,59 @@ describe DataFoodConsortium::Connector::Importer, vcr: true do totalTheoreticalStock: 3, ) end + let(:product_data) do + <<~JSON + { + "@context":"http://static.datafoodconsortium.org/ontologies/context.json", + "@id":"https://example.net/tomato", + "@type":"dfc-b:SuppliedProduct", + "dfc-b:name":"Tomato", + "dfc-b:description":"Awesome tomato", + "dfc-b:alcoholPercentage":0.0, + "dfc-b:lifetime":"", + "dfc-b:usageOrStorageCondition":"", + "dfc-b:totalTheoreticalStock":3 + } + JSON + end + let(:product_data_with_context) do + <<~JSON + { + "@context": { + "dfc-b": "http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#", + "dfc-m": "http://static.datafoodconsortium.org/data/measures.rdf#", + "dfc-pt": "http://static.datafoodconsortium.org/data/productTypes.rdf#" + }, + "@id":"https://example.net/tomato", + "@type":"dfc-b:SuppliedProduct", + "dfc-b:name":"Tomato", + "dfc-b:description":"Awesome tomato", + "dfc-b:alcoholPercentage":0.0, + "dfc-b:lifetime":"", + "dfc-b:usageOrStorageCondition":"", + "dfc-b:totalTheoreticalStock":3 + } + JSON + end + let(:product_data_with_context_v1_8) do + <<~JSON + { + "@context": { + "dfc-b": "https://github.com/datafoodconsortium/ontology/releases/latest/download/DFC_BusinessOntology.owl#", + "dfc-m": "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/measures.rdf#", + "dfc-pt": "https://github.com/datafoodconsortium/taxonomies/releases/latest/download/productTypes.rdf#" + }, + "@id":"https://example.net/tomato", + "@type":"dfc-b:SuppliedProduct", + "dfc-b:name":"Tomato", + "dfc-b:description":"Awesome tomato", + "dfc-b:alcoholPercentage":0.0, + "dfc-b:lifetime":"", + "dfc-b:usageOrStorageCondition":"", + "dfc-b:totalTheoreticalStock":3 + } + JSON + end let(:second_product) do DataFoodConsortium::Connector::SuppliedProduct.new( "https://example.net/ocra", @@ -55,6 +108,39 @@ describe DataFoodConsortium::Connector::Importer, vcr: true do expect(result.totalTheoreticalStock).to eq 3 end + it "imports an object with referenced context" do + result = connector.import(product_data) + + expect(result.class).to eq DataFoodConsortium::Connector::SuppliedProduct + expect(result.semanticType).to eq "http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#SuppliedProduct" + expect(result.semanticId).to eq "https://example.net/tomato" + expect(result.name).to eq "Tomato" + expect(result.description).to eq "Awesome tomato" + expect(result.totalTheoreticalStock).to eq 3 + end + + it "imports an object with included context" do + result = connector.import(product_data_with_context) + + expect(result.class).to eq DataFoodConsortium::Connector::SuppliedProduct + expect(result.semanticType).to eq "http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#SuppliedProduct" + expect(result.semanticId).to eq "https://example.net/tomato" + expect(result.name).to eq "Tomato" + expect(result.description).to eq "Awesome tomato" + expect(result.totalTheoreticalStock).to eq 3 + end + + xit "imports an object with DFC v1.8 context" do + result = connector.import(product_data_with_context_v1_8) + + expect(result.class).to eq DataFoodConsortium::Connector::SuppliedProduct + expect(result.semanticType).to eq "http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#SuppliedProduct" + expect(result.semanticId).to eq "https://example.net/tomato" + expect(result.name).to eq "Tomato" + expect(result.description).to eq "Awesome tomato" + expect(result.totalTheoreticalStock).to eq 3 + end + it "imports a graph with multiple objects" do result = import(catalog_item, product)