From 68fcdf6b54e630025953d00bffe757b7b345d25f Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Sun, 7 Jul 2024 21:59:56 +0200 Subject: [PATCH 1/5] implement ontology agents endpoint --- controllers/agents_controller.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/controllers/agents_controller.rb b/controllers/agents_controller.rb index 1bf86321..5a00af66 100644 --- a/controllers/agents_controller.rb +++ b/controllers/agents_controller.rb @@ -22,6 +22,24 @@ class AgentsController < ApplicationController reply agents end + get '/ontologies/:acronym/agents' do + ont = Ontology.find(params["acronym"]).first + latest = ont.latest_submission(status: :any) + latest.bring(OntologySubmission.agents_attrs) + properties_agents= {} + OntologySubmission.agents_attrs.each do |attr| + properties_agents[attr] = Array(latest.send(attr)) + end + + agents = properties_agents.values.flatten.uniq {|x| x.id } + + if includes_param.include?(:all) || includes_param.include?(:usages) + LinkedData::Models::Agent.load_agents_usages(agents) + end + + reply agents + end + # Display a single agent get '/:id' do check_last_modified_collection(LinkedData::Models::Agent) From 2eded9021d614451f4069cf3a22d990ea820bf29 Mon Sep 17 00:00:00 2001 From: Bilel KIHAL Date: Tue, 16 Jul 2024 13:11:28 +0200 Subject: [PATCH 2/5] Move ontology agents method out of agents namespace in agents_controller --- Gemfile.lock | 2 +- controllers/agents_controller.rb | 38 ++++++++++--------- .../controllers/test_ontologies_controller.rb | 9 +++++ 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 023fd1b4..ccb0b5ee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -57,7 +57,7 @@ GIT GIT remote: https://github.com/ontoportal-lirmm/ontologies_linked_data.git - revision: a5b56a68e6dc8ecfc9db708d44350342dac38ce6 + revision: fd78d689dac4a7393e20a36ac930c6c9d191a619 branch: development specs: ontologies_linked_data (0.0.1) diff --git a/controllers/agents_controller.rb b/controllers/agents_controller.rb index 5a00af66..59be81cb 100644 --- a/controllers/agents_controller.rb +++ b/controllers/agents_controller.rb @@ -1,5 +1,24 @@ class AgentsController < ApplicationController + # Ontology agents + get '/ontologies/:acronym/agents' do + ont = Ontology.find(params["acronym"]).first + latest = ont.latest_submission(status: :any) + latest.bring(OntologySubmission.agents_attrs) + properties_agents= {} + OntologySubmission.agents_attrs.each do |attr| + properties_agents[attr] = Array(latest.send(attr)) + end + + agents = properties_agents.values.flatten.uniq {|x| x.id } + + if includes_param.include?(:all) || includes_param.include?(:usages) + LinkedData::Models::Agent.load_agents_usages(agents) + end + + reply agents + end + %w[/agents /Agents].each do |namespace| namespace namespace do # Display all agents @@ -22,23 +41,6 @@ class AgentsController < ApplicationController reply agents end - get '/ontologies/:acronym/agents' do - ont = Ontology.find(params["acronym"]).first - latest = ont.latest_submission(status: :any) - latest.bring(OntologySubmission.agents_attrs) - properties_agents= {} - OntologySubmission.agents_attrs.each do |attr| - properties_agents[attr] = Array(latest.send(attr)) - end - - agents = properties_agents.values.flatten.uniq {|x| x.id } - - if includes_param.include?(:all) || includes_param.include?(:usages) - LinkedData::Models::Agent.load_agents_usages(agents) - end - - reply agents - end # Display a single agent get '/:id' do @@ -165,4 +167,4 @@ def update_agent(agent, params) end end -end \ No newline at end of file +end diff --git a/test/controllers/test_ontologies_controller.rb b/test/controllers/test_ontologies_controller.rb index ad062742..f5859234 100644 --- a/test/controllers/test_ontologies_controller.rb +++ b/test/controllers/test_ontologies_controller.rb @@ -282,6 +282,15 @@ def test_detach_a_view assert_equal onto["viewOf"], ont.id.to_s end + def test_ontology_agents + get '/ontologies/TEST-ONT-1/latest_submission?display=all' + submission = MultiJson.load(last_response.body) + agent = agent_data(type: 'person') + submission["hasCreator"] = agent + get '/ontologies/TEST-ONT-1/agents' + binding.pry + end + private def check400(response) From b89ae7c78035545afa21c6b753f8962140aae936 Mon Sep 17 00:00:00 2001 From: Bilel KIHAL Date: Tue, 16 Jul 2024 16:37:01 +0200 Subject: [PATCH 3/5] return a list of uniq values, for the endpoint '/ontologies/:acronym/agents' that contains all the agents of the ontology using agents_attrs list --- controllers/agents_controller.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/controllers/agents_controller.rb b/controllers/agents_controller.rb index 59be81cb..0efc35e6 100644 --- a/controllers/agents_controller.rb +++ b/controllers/agents_controller.rb @@ -1,16 +1,19 @@ class AgentsController < ApplicationController - # Ontology agents get '/ontologies/:acronym/agents' do ont = Ontology.find(params["acronym"]).first latest = ont.latest_submission(status: :any) - latest.bring(OntologySubmission.agents_attrs) + latest.bring(*OntologySubmission.agents_attrs) properties_agents= {} OntologySubmission.agents_attrs.each do |attr| properties_agents[attr] = Array(latest.send(attr)) end - agents = properties_agents.values.flatten.uniq {|x| x.id } + agents = [] + properties_agents.each do |key, value| + agents.concat(value.map{ |agent| agent.bring_remaining}) + end + agents.uniq! if includes_param.include?(:all) || includes_param.include?(:usages) LinkedData::Models::Agent.load_agents_usages(agents) From bc9a27086736ed5e42d8058f3016767b80c08b1a Mon Sep 17 00:00:00 2001 From: Bilel KIHAL Date: Tue, 16 Jul 2024 16:37:31 +0200 Subject: [PATCH 4/5] test for ontology agents endpoing --- .../controllers/test_ontologies_controller.rb | 92 +++++++++++++++++-- 1 file changed, 86 insertions(+), 6 deletions(-) diff --git a/test/controllers/test_ontologies_controller.rb b/test/controllers/test_ontologies_controller.rb index f5859234..f9821b95 100644 --- a/test/controllers/test_ontologies_controller.rb +++ b/test/controllers/test_ontologies_controller.rb @@ -283,12 +283,82 @@ def test_detach_a_view end def test_ontology_agents - get '/ontologies/TEST-ONT-1/latest_submission?display=all' - submission = MultiJson.load(last_response.body) - agent = agent_data(type: 'person') - submission["hasCreator"] = agent - get '/ontologies/TEST-ONT-1/agents' - binding.pry + ontologies_and_submissions = create_ontologies_and_submissions(ont_count: 1, submission_count: 1, process_submission: true) + submission = ontologies_and_submissions[2].first.submissions.last + ontology_acronym = ontologies_and_submissions[1].first + submission.bring(*OntologySubmission.agents_attrs) + submission.publisher = [_create_agent(name: 'Bilel', type: 'person'), _create_agent(name: 'Syphax', type: 'person')] + submission.hasContributor = [_create_agent(name: 'Clement', type: 'person'), _create_agent(name: 'Syphax', type: 'person')] + submission.save + get "/ontologies/#{ontology_acronym}/agents" + + expected_result = [{"agentType"=>"person", + "name"=>"Bilel", + "creator"=>"http://data.bioontology.org/users/tim", + "id"=>"http://data.bioontology.org/Agents/35e85b80-25ae-013d-fc07-2cde48001122", + "homepage"=>nil, + "acronym"=>nil, + "email"=>nil, + "identifiers"=>[], + "affiliations"=>[], + "@id"=>"http://data.bioontology.org/Agents/35e85b80-25ae-013d-fc07-2cde48001122", + "@type"=>"http://xmlns.com/foaf/0.1/Agent", + "@context"=> + {"@vocab"=>"http://data.bioontology.org/metadata/", + "agentType"=>"http://data.bioontology.org/metadata/agentType", + "name"=>"http://xmlns.com/foaf/0.1/name", + "homepage"=>"http://xmlns.com/foaf/0.1/homepage", + "acronym"=>"http://www.w3.org/2004/02/skos/core#altLabel", + "email"=>"http://xmlns.com/foaf/0.1/mbox", + "identifiers"=>"http://www.w3.org/ns/adms#identifier", + "affiliations"=>"http://www.w3.org/ns/org#memberOf", + "creator"=>{"@id"=>"http://data.bioontology.org/metadata/User", "@type"=>"@id"}, + "@language"=>"en"}}, + {"agentType"=>"person", + "name"=>"Syphax", + "creator"=>"http://data.bioontology.org/users/tim", + "id"=>"http://data.bioontology.org/Agents/35fbe2b0-25ae-013d-fc07-2cde48001122", + "homepage"=>nil, + "acronym"=>nil, + "email"=>nil, + "identifiers"=>[], + "affiliations"=>[], + "@id"=>"http://data.bioontology.org/Agents/35fbe2b0-25ae-013d-fc07-2cde48001122", + "@type"=>"http://xmlns.com/foaf/0.1/Agent", + "@context"=> + {"@vocab"=>"http://data.bioontology.org/metadata/", + "agentType"=>"http://data.bioontology.org/metadata/agentType", + "name"=>"http://xmlns.com/foaf/0.1/name", + "homepage"=>"http://xmlns.com/foaf/0.1/homepage", + "acronym"=>"http://www.w3.org/2004/02/skos/core#altLabel", + "email"=>"http://xmlns.com/foaf/0.1/mbox", + "identifiers"=>"http://www.w3.org/ns/adms#identifier", + "affiliations"=>"http://www.w3.org/ns/org#memberOf", + "creator"=>{"@id"=>"http://data.bioontology.org/metadata/User", "@type"=>"@id"}, + "@language"=>"en"}}, + {"agentType"=>"person", + "name"=>"Clement", + "creator"=>"http://data.bioontology.org/users/tim", + "id"=>"http://data.bioontology.org/Agents/360ed240-25ae-013d-fc07-2cde48001122", + "homepage"=>nil, + "acronym"=>nil, + "email"=>nil, + "identifiers"=>[], + "affiliations"=>[], + "@id"=>"http://data.bioontology.org/Agents/360ed240-25ae-013d-fc07-2cde48001122", + "@type"=>"http://xmlns.com/foaf/0.1/Agent", + "@context"=> + {"@vocab"=>"http://data.bioontology.org/metadata/", + "agentType"=>"http://data.bioontology.org/metadata/agentType", + "name"=>"http://xmlns.com/foaf/0.1/name", + "homepage"=>"http://xmlns.com/foaf/0.1/homepage", + "acronym"=>"http://www.w3.org/2004/02/skos/core#altLabel", + "email"=>"http://xmlns.com/foaf/0.1/mbox", + "identifiers"=>"http://www.w3.org/ns/adms#identifier", + "affiliations"=>"http://www.w3.org/ns/org#memberOf", + "creator"=>{"@id"=>"http://data.bioontology.org/metadata/User", "@type"=>"@id"}, + "@language"=>"en"}}] + assert expected_result, MultiJson.load(last_response.body) end private @@ -298,4 +368,14 @@ def check400(response) assert MultiJson.load(response.body)["errors"] end + def _create_agent(name: 'name', type: 'person') + agent = LinkedData::Models::Agent.new({ + agentType: type, + name: name, + creator: User.find('tim').first + }) + agent.save + agent + end + end From 8d47007b658a818312cb324f64e908bf79d44ac9 Mon Sep 17 00:00:00 2001 From: Bilel KIHAL Date: Tue, 23 Jul 2024 11:26:05 +0200 Subject: [PATCH 5/5] add another ontologyin test ontology agents test, and assert only the number of results and the names --- .../controllers/test_ontologies_controller.rb | 113 ++++++------------ 1 file changed, 37 insertions(+), 76 deletions(-) diff --git a/test/controllers/test_ontologies_controller.rb b/test/controllers/test_ontologies_controller.rb index f9821b95..681ab93b 100644 --- a/test/controllers/test_ontologies_controller.rb +++ b/test/controllers/test_ontologies_controller.rb @@ -283,82 +283,43 @@ def test_detach_a_view end def test_ontology_agents - ontologies_and_submissions = create_ontologies_and_submissions(ont_count: 1, submission_count: 1, process_submission: true) - submission = ontologies_and_submissions[2].first.submissions.last - ontology_acronym = ontologies_and_submissions[1].first - submission.bring(*OntologySubmission.agents_attrs) - submission.publisher = [_create_agent(name: 'Bilel', type: 'person'), _create_agent(name: 'Syphax', type: 'person')] - submission.hasContributor = [_create_agent(name: 'Clement', type: 'person'), _create_agent(name: 'Syphax', type: 'person')] - submission.save - get "/ontologies/#{ontology_acronym}/agents" - - expected_result = [{"agentType"=>"person", - "name"=>"Bilel", - "creator"=>"http://data.bioontology.org/users/tim", - "id"=>"http://data.bioontology.org/Agents/35e85b80-25ae-013d-fc07-2cde48001122", - "homepage"=>nil, - "acronym"=>nil, - "email"=>nil, - "identifiers"=>[], - "affiliations"=>[], - "@id"=>"http://data.bioontology.org/Agents/35e85b80-25ae-013d-fc07-2cde48001122", - "@type"=>"http://xmlns.com/foaf/0.1/Agent", - "@context"=> - {"@vocab"=>"http://data.bioontology.org/metadata/", - "agentType"=>"http://data.bioontology.org/metadata/agentType", - "name"=>"http://xmlns.com/foaf/0.1/name", - "homepage"=>"http://xmlns.com/foaf/0.1/homepage", - "acronym"=>"http://www.w3.org/2004/02/skos/core#altLabel", - "email"=>"http://xmlns.com/foaf/0.1/mbox", - "identifiers"=>"http://www.w3.org/ns/adms#identifier", - "affiliations"=>"http://www.w3.org/ns/org#memberOf", - "creator"=>{"@id"=>"http://data.bioontology.org/metadata/User", "@type"=>"@id"}, - "@language"=>"en"}}, - {"agentType"=>"person", - "name"=>"Syphax", - "creator"=>"http://data.bioontology.org/users/tim", - "id"=>"http://data.bioontology.org/Agents/35fbe2b0-25ae-013d-fc07-2cde48001122", - "homepage"=>nil, - "acronym"=>nil, - "email"=>nil, - "identifiers"=>[], - "affiliations"=>[], - "@id"=>"http://data.bioontology.org/Agents/35fbe2b0-25ae-013d-fc07-2cde48001122", - "@type"=>"http://xmlns.com/foaf/0.1/Agent", - "@context"=> - {"@vocab"=>"http://data.bioontology.org/metadata/", - "agentType"=>"http://data.bioontology.org/metadata/agentType", - "name"=>"http://xmlns.com/foaf/0.1/name", - "homepage"=>"http://xmlns.com/foaf/0.1/homepage", - "acronym"=>"http://www.w3.org/2004/02/skos/core#altLabel", - "email"=>"http://xmlns.com/foaf/0.1/mbox", - "identifiers"=>"http://www.w3.org/ns/adms#identifier", - "affiliations"=>"http://www.w3.org/ns/org#memberOf", - "creator"=>{"@id"=>"http://data.bioontology.org/metadata/User", "@type"=>"@id"}, - "@language"=>"en"}}, - {"agentType"=>"person", - "name"=>"Clement", - "creator"=>"http://data.bioontology.org/users/tim", - "id"=>"http://data.bioontology.org/Agents/360ed240-25ae-013d-fc07-2cde48001122", - "homepage"=>nil, - "acronym"=>nil, - "email"=>nil, - "identifiers"=>[], - "affiliations"=>[], - "@id"=>"http://data.bioontology.org/Agents/360ed240-25ae-013d-fc07-2cde48001122", - "@type"=>"http://xmlns.com/foaf/0.1/Agent", - "@context"=> - {"@vocab"=>"http://data.bioontology.org/metadata/", - "agentType"=>"http://data.bioontology.org/metadata/agentType", - "name"=>"http://xmlns.com/foaf/0.1/name", - "homepage"=>"http://xmlns.com/foaf/0.1/homepage", - "acronym"=>"http://www.w3.org/2004/02/skos/core#altLabel", - "email"=>"http://xmlns.com/foaf/0.1/mbox", - "identifiers"=>"http://www.w3.org/ns/adms#identifier", - "affiliations"=>"http://www.w3.org/ns/org#memberOf", - "creator"=>{"@id"=>"http://data.bioontology.org/metadata/User", "@type"=>"@id"}, - "@language"=>"en"}}] - assert expected_result, MultiJson.load(last_response.body) + ontologies_and_submissions = create_ontologies_and_submissions(ont_count: 2, submission_count: 1, process_submission: true) + submission1 = ontologies_and_submissions[2].first.submissions.last + submission2 = ontologies_and_submissions[2].last.submissions.last + + ontology_acronym1 = ontologies_and_submissions[1].first + ontology_acronym2 = ontologies_and_submissions[1].last + + submission1.bring(*OntologySubmission.agents_attrs) + submission2.bring(*OntologySubmission.agents_attrs) + + # To insure that we don't have duplicated agents in the response + agent_syphax = _create_agent(name: 'Syphax', type: 'person') + + submission1.publisher = [_create_agent(name: 'Bilel', type: 'person'), agent_syphax] + submission1.hasContributor = [_create_agent(name: 'Clement', type: 'person'), agent_syphax] + + submission2.publisher = [_create_agent(name: 'Imad', type: 'person'), _create_agent(name: 'Serine', type: 'person')] + + submission1.save + submission2.save + + + get "/ontologies/#{ontology_acronym1}/agents" + + response = MultiJson.load(last_response.body) + assert_equal response.length, 3 + response.each do |r| + assert_includes ['Bilel', 'Syphax', 'Clement'], r["name"] + end + + get "/ontologies/#{ontology_acronym2}/agents" + + response = MultiJson.load(last_response.body) + assert_equal response.length, 2 + response.each do |r| + assert_includes ['Imad', 'Serine'], r["name"] + end end private