spec/author_utils_spec.rb in commonmeta-ruby-3.3.7 vs spec/author_utils_spec.rb in commonmeta-ruby-3.3.8

- old
+ new

@@ -1,181 +1,222 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Commonmeta::Metadata, vcr: true do let(:subject) do described_class.new end - context 'is_personal_name?' do - it 'has id' do - author = { 'id' => 'http://orcid.org/0000-0003-1419-2405', 'givenName' => 'Martin', 'familyName' => 'Fenner', 'name' => 'Martin Fenner' } - expect(subject.is_personal_name?(name: author['name'])).to be true + context "is_personal_name?" do + it "has id" do + author = { "id" => "http://orcid.org/0000-0003-1419-2405", "givenName" => "Martin", "familyName" => "Fenner", "name" => "Martin Fenner" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'has orcid id' do - author = { 'creatorName' => 'Fenner, Martin', 'givenName' => 'Martin', 'familyName' => 'Fenner', - 'nameIdentifier' => { 'schemeURI' => 'http://orcid.org/', 'nameIdentifierScheme' => 'ORCID', '__content__' => '0000-0003-1419-2405' } } - expect(subject.is_personal_name?(name: author['creatorName'])).to be true + it "has orcid id" do + author = { "creatorName" => "Fenner, Martin", "givenName" => "Martin", "familyName" => "Fenner", + "nameIdentifier" => { "schemeURI" => "http://orcid.org/", "nameIdentifierScheme" => "ORCID", "__content__" => "0000-0003-1419-2405" } } + expect(subject.is_personal_name?(name: author["creatorName"])).to be true end - it 'has family name' do - author = { 'givenName' => 'Martin', 'familyName' => 'Fenner', 'name' => 'Martin Fenner' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "has family name" do + author = { "givenName" => "Martin", "familyName" => "Fenner", "name" => "Martin Fenner" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'has comma' do - author = { 'name' => 'Fenner, Martin' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "has comma" do + author = { "name" => "Fenner, Martin" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'has known given name' do - author = { 'name' => 'Martin Fenner' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "has known given name" do + author = { "name" => "Martin Fenner" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'has unknown given name' do - author = { 'name' => 'Rintze Zelle' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "has unknown given name" do + author = { "name" => "Rintze Zelle" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'has middle initial' do - author = { 'name' => 'Martin H. Fenner' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "has middle initial" do + author = { "name" => "Martin H. Fenner" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'has unknown given name and middle initial' do - author = { 'name' => 'Tejas S. Sathe' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "has unknown given name and middle initial" do + author = { "name" => "Tejas S. Sathe" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'has no info' do - author = { 'name' => 'M Fenner' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "has no info" do + author = { "name" => "M Fenner" } + expect(subject.is_personal_name?(name: author["name"])).to be true end - it 'name with title' do - author = { 'name' => 'Tejas S. Sathe, MD' } - expect(subject.is_personal_name?(name: author['name'])).to be true + it "name with title" do + author = { "name" => "Tejas S. Sathe, MD" } + expect(subject.is_personal_name?(name: author["name"])).to be true end end - context 'cleanup_author' do - it 'Smith J.' do - author = 'Smith J.' - expect(subject.cleanup_author(author)).to eq('Smith, J.') + context "cleanup_author" do + it "Smith J." do + author = "Smith J." + expect(subject.cleanup_author(author)).to eq("Smith, J.") end - it 'Smith, John' do - author = 'Smith, John' - expect(subject.cleanup_author(author)).to eq('Smith, John') + it "Smith, John" do + author = "Smith, John" + expect(subject.cleanup_author(author)).to eq("Smith, John") end - it 'John Smith' do - author = 'John Smith' - expect(subject.cleanup_author(author)).to eq('John Smith') + it "John Smith" do + author = "John Smith" + expect(subject.cleanup_author(author)).to eq("John Smith") end - it 'with email' do - author = 'noreply@blogger.com (Roderic Page)' - expect(subject.cleanup_author(author)).to eq('Roderic Page') + it "with email" do + author = "noreply@blogger.com (Roderic Page)" + expect(subject.cleanup_author(author)).to eq("Roderic Page") end end - context 'get_one_author' do - it 'has type organization' do - author = { 'email' => 'info@ucop.edu', 'name' => 'University of California, Santa Barbara', - 'role' => { 'namespace' => 'http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode', 'roleCode' => 'copyrightHolder' }, 'type' => 'Organization' } + context "get_one_author" do + it "has type organization" do + author = { "email" => "info@ucop.edu", "name" => "University of California, Santa Barbara", + "role" => { "namespace" => "http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode", "roleCode" => "copyrightHolder" }, "type" => "Organization" } response = subject.get_one_author(author) - expect(response).to eq('name' => 'University of California, Santa Barbara', 'type' => 'Organization') + expect(response).to eq("name" => "University of California, Santa Barbara", "type" => "Organization") end - it 'has familyName' do - input = 'https://doi.org/10.5438/4K3M-NYVG' + it "has familyName" do + input = "https://doi.org/10.5438/4K3M-NYVG" subject = described_class.new(input: input) - meta = JSON.parse(subject.raw).dig('data', 'attributes') - response = subject.get_one_author(meta.dig('creators').first) + meta = JSON.parse(subject.raw).dig("data", "attributes") + response = subject.get_one_author(meta.dig("creators").first) expect(response).to eq( - 'id' => 'https://orcid.org/0000-0003-1419-2405', - 'givenName' => 'Martin', 'familyName' => 'Fenner', 'type' => 'Person' + "id" => "https://orcid.org/0000-0003-1419-2405", + "givenName" => "Martin", "familyName" => "Fenner", "type" => "Person", ) end - it 'has name with title' do - author = { 'name' => "Tejas S. Sathe, MD" } + it "has name with title" do + author = { "name" => "Tejas S. Sathe, MD" } response = subject.get_one_author(author) - expect(response).to eq('givenName' => 'Tejas S.', 'familyName' => 'Sathe', 'type' => 'Person') + expect(response).to eq("givenName" => "Tejas S.", "familyName" => "Sathe", "type" => "Person") end - it 'has name in display-order with ORCID' do - input = 'https://doi.org/10.6084/M9.FIGSHARE.4700788' + it "has name in display-order with ORCID" do + input = "https://doi.org/10.6084/M9.FIGSHARE.4700788" subject = described_class.new(input: input) - meta = JSON.parse(subject.raw).dig('data', 'attributes') - response = subject.get_one_author(meta.dig('creators').first) - expect(response).to eq('type' => 'Person', - 'id' => 'https://orcid.org/0000-0003-4881-1606', - 'givenName' => 'Andrea', 'familyName' => 'Bedini') + meta = JSON.parse(subject.raw).dig("data", "attributes") + response = subject.get_one_author(meta.dig("creators").first) + expect(response).to eq("type" => "Person", + "id" => "https://orcid.org/0000-0003-4881-1606", + "givenName" => "Andrea", "familyName" => "Bedini") end - it 'is organization' do - author = { 'email' => 'info@ucop.edu', - 'name' => { '__content__' => 'University of California, Santa Barbara' }, - 'type' => 'Organization', 'role' => { 'namespace' => 'http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode', 'roleCode' => 'copyrightHolder' } } + it "is organization" do + author = { "email" => "info@ucop.edu", + "name" => { "__content__" => "University of California, Santa Barbara" }, + "type" => "Organization", "role" => { "namespace" => "http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode", "roleCode" => "copyrightHolder" } } response = subject.get_one_author(author) - expect(response).to eq('name' => 'University of California, Santa Barbara', - 'type' => 'Organization') + expect(response).to eq("name" => "University of California, Santa Barbara", + "type" => "Organization") end - it 'name with affiliation crossref' do - input = '10.7554/elife.01567' - subject = described_class.new(input: input, from: 'crossref') + it "is another organization" do + author = { "name" => "University of California, Santa Barbara", + "id" => "https://ror.org/02t274463" } + response = subject.get_one_author(author) + expect(response).to eq("id" => "https://ror.org/02t274463", "name" => "University of California, Santa Barbara", "type" => "Organization") + end + + it "is anonymous" do + author = { "id" => "https://ror.org/05745n787" } + response = subject.get_one_author(author) + expect(response).to eq("type" => "Person", "affiliation" => [{"id"=>"https://ror.org/05745n787"}]) + end + + it "name with affiliation crossref" do + input = "10.7554/elife.01567" + subject = described_class.new(input: input, from: "crossref") response = subject.get_one_author(subject.creators.first) - expect(response).to eq('affiliation' => [{ 'name' => 'Department of Plant Molecular Biology, University of Lausanne, Lausanne, Switzerland' }], 'familyName' => 'Sankar', - 'givenName' => 'Martial', - 'type' => 'Person') + expect(response).to eq("affiliation" => [{ "name" => "Department of Plant Molecular Biology, University of Lausanne, Lausanne, Switzerland" }], "familyName" => "Sankar", + "givenName" => "Martial", + "type" => "Person") end - it 'only familyName and givenName' do - input = 'https://doi.pangaea.de/10.1594/PANGAEA.836178' - subject = described_class.new(input: input, from: 'schema_org') + it "only familyName and givenName" do + input = "https://doi.pangaea.de/10.1594/PANGAEA.836178" + subject = described_class.new(input: input, from: "schema_org") response = subject.get_one_author(subject.creators.first) - expect(response).to eq('type' => 'Person', 'givenName' => 'Emma', 'familyName' => 'Johansson') + expect(response).to eq("type" => "Person", "givenName" => "Emma", "familyName" => "Johansson") end + + it "affiliation is space" do + input = "10.1177/0042098011428175" + subject = described_class.new(input: input) + response = subject.get_one_author(subject.creators.first) + expect(response).to eq("familyName"=>"Petrovici", "givenName"=>"Norbert", "type"=>"Person") + end end - context 'authors_as_string' do + context "authors_as_string" do let(:authors) do - [{ 'type' => 'Person', - 'id' => 'https://orcid.org/0000-0003-0077-4738', - 'givenName' => 'Matt', - 'familyName' => 'Jones' }, - { 'type' => 'Person', - 'id' => 'https://orcid.org/0000-0002-2192-403X', - 'givenName' => 'Peter', - 'familyName' => 'Slaughter' }, - { 'type' => 'Organization', - 'id' => 'https://ror.org/02t274463', - 'name' => 'University of California, Santa Barbara' }] + [{ "type" => "Person", + "id" => "https://orcid.org/0000-0003-0077-4738", + "givenName" => "Matt", + "familyName" => "Jones" }, + { "type" => "Person", + "id" => "https://orcid.org/0000-0002-2192-403X", + "givenName" => "Peter", + "familyName" => "Slaughter" }, + { "type" => "Organization", + "id" => "https://ror.org/02t274463", + "name" => "University of California, Santa Barbara" }] end - it 'authors' do + it "authors" do response = subject.authors_as_string(authors[0..1]) - expect(response).to eq('Jones, Matt and Slaughter, Peter') + expect(response).to eq("Jones, Matt and Slaughter, Peter") end - it 'single author' do + it "single author" do response = subject.authors_as_string(authors.first) - expect(response).to eq('Jones, Matt') + expect(response).to eq("Jones, Matt") end - it 'no author' do + it "no author" do response = subject.authors_as_string(nil) expect(response.nil?).to be(true) end - it 'with organization' do + it "with organization" do response = subject.authors_as_string(authors) - expect(response).to eq('Jones, Matt and Slaughter, Peter and {University of California, Santa Barbara}') + expect(response).to eq("Jones, Matt and Slaughter, Peter and {University of California, Santa Barbara}") + end + end + + context "get_affiliations" do + it "name" do + affiliation = [{ 'name' => 'University of Zurich, Zurich, Switzerland' }] + response = subject.get_affiliations(affiliation) + expect(response).to eq([{ 'name' => 'University of Zurich, Zurich, Switzerland' }]) + end + + it "name and ROR ID" do + affiliation = { "id" => "https://ror.org/02t274463", + "name" => "University of California, Santa Barbara" } + response = subject.get_affiliations(affiliation) + expect(response).to eq([{ "name" => "University of California, Santa Barbara" }]) + end + + it "only ROR ID" do + affiliation = { "affiliationIdentifier" => "https://ror.org/02t274463" } + response = subject.get_affiliations(affiliation) + expect(response).to eq([{"id"=>"https://ror.org/02t274463"}]) end end end