spec/codemeta_spec.rb in bolognese-0.7 vs spec/codemeta_spec.rb in bolognese-0.7.1

- old
+ new

@@ -1,81 +1,161 @@ require 'spec_helper' describe Bolognese::Codemeta, vcr: true do - # let(:id) { "https://blog.datacite.org/eating-your-own-dog-food" } let(:fixture_path) { "spec/fixtures/" } - # - # subject { Bolognese::SchemaOrg.new(id: id) } + let(:id) { "https://github.com/datacite/maremma" } - # context "get metadata" do - # it "BlogPosting" do - # expect(subject.id).to eq("https://doi.org/10.5438/4k3m-nyvg") - # expect(subject.url).to eq("https://blog.datacite.org/eating-your-own-dog-food") - # expect(subject.type).to eq("BlogPosting") - # expect(subject.author).to eq([{"@type"=>"Person", "@id"=>"http://orcid.org/0000-0003-1419-2405", "givenName"=>"Martin", "familyName"=>"Fenner"}]) - # expect(subject.name).to eq("Eating your own Dog Food") - # expect(subject.alternate_name).to eq("MS-49-3632-5083") - # expect(subject.description).to start_with("Eating your own dog food") - # expect(subject.keywords).to eq("datacite, doi, metadata, featured") - # expect(subject.date_published).to eq("2016-12-20") - # expect(subject.date_modified).to eq("2016-12-20") - # expect(subject.is_part_of).to eq("@type"=>"Blog", "@id"=>"https://doi.org/10.5438/0000-00ss", "name"=>"DataCite Blog") - # expect(subject.citation).to eq([{"@type"=>"CreativeWork", "@id"=>"https://doi.org/10.5438/0012"}, - # {"@type"=>"CreativeWork", "@id"=>"https://doi.org/10.5438/55e5-t5c0"}]) - # expect(subject.publisher).to eq("@type"=>"Organization", "name"=>"DataCite") - # end - # - # it "BlogPosting schema.org JSON" do - # json = JSON.parse(subject.as_schema_org) - # expect(json["@id"]).to eq("https://doi.org/10.5438/4k3m-nyvg") - # end - # - # it "not found error" do - # id = "https://doi.org/10.5438/4K3M-NYVGx" - # subject = Bolognese::SchemaOrg.new(id: id) - # expect(subject.id).to be_nil - # expect(subject.exists?).to be false - # end - # end + subject { Bolognese::Codemeta.new(id: id) } + context "get metadata" do + it "maremma" do + expect(subject.id).to eq("https://doi.org/10.5438/qeg0-3gm3") + expect(subject.url).to eq("https://github.com/datacite/maremma") + expect(subject.type).to eq("SoftwareSourceCode") + expect(subject.author).to eq("@id"=>"http://orcid.org/0000-0003-0077-4738", "@type"=>"person", "name"=>"Martin Fenner") + expect(subject.name).to eq("Maremma: a Ruby library for simplified network calls") + expect(subject.description).to start_with("Simplifies network calls") + expect(subject.keywords).to eq("faraday, excon, net/http") + expect(subject.date_created).to eq("2015-11-28") + expect(subject.date_published).to eq("2017-02-24") + expect(subject.date_modified).to eq("2017-02-24") + expect(subject.publisher).to eq("@type"=>"Organization", "name"=>"DataCite") + end + + it "maremma schema.org JSON" do + json = JSON.parse(subject.as_schema_org) + expect(json["@id"]).to eq("https://doi.org/10.5438/qeg0-3gm3") + expect(json["name"]).to eq("Maremma: a Ruby library for simplified network calls") + expect(json["author"]).to eq("@type"=>"person", "@id"=>"http://orcid.org/0000-0003-0077-4738", "name"=>"Martin Fenner") + end + + it "no codemeta.json" do + id = "https://github.com/datacite/homepage" + subject = Bolognese::Codemeta.new(id: id) + expect(subject.id).to be_nil + expect(subject.exists?).to be false + end + + it "not found error" do + id = "https://github.com/datacite/x" + subject = Bolognese::Codemeta.new(id: id) + expect(subject.id).to be_nil + expect(subject.exists?).to be false + end + end + context "get metadata as string" do let(:string) { IO.read(fixture_path + 'codemeta.json') } subject { Bolognese::Codemeta.new(string: string) } - it "SoftwareSourceCode" do + it "rdataone" do expect(subject.id).to eq("https://doi.org/10.5063/f1m61h5x") expect(subject.url).to eq("https://github.com/DataONEorg/rdataone") expect(subject.type).to eq("SoftwareSourceCode") expect(subject.author).to eq([{"@type"=>"person", "@id"=>"http://orcid.org/0000-0003-0077-4738", "name"=>"Matt Jones"}, {"@type"=>"person", "@id"=>"http://orcid.org/0000-0002-2192-403X", "name"=>"Peter Slaughter"}, {"@type"=>"organization", - "@id"=>"http://orcid.org/0000-0002-3957-2474", "name"=>"University of California, Santa Barbara"}]) expect(subject.name).to eq("R Interface to the DataONE REST API") expect(subject.description).to start_with("Provides read and write access to data and metadata") expect(subject.keywords).to eq("data sharing, data repository, DataONE") expect(subject.version).to eq("2.0.0") expect(subject.date_created).to eq("2016-05-27") expect(subject.date_published).to eq("2016-05-27") expect(subject.date_modified).to eq("2016-05-27") expect(subject.publisher).to eq("@type"=>"Organization", "name"=>"https://cran.r-project.org") end + + it "maremma" do + string = IO.read(fixture_path + 'maremma/codemeta.json') + subject = Bolognese::Codemeta.new(string: string) + expect(subject.id).to eq("https://doi.org/10.5438/qeg0-3gm3") + expect(subject.url).to eq("https://github.com/datacite/maremma") + expect(subject.type).to eq("SoftwareSourceCode") + expect(subject.author).to eq("@id"=>"http://orcid.org/0000-0003-0077-4738", "@type"=>"person", "name"=>"Martin Fenner") + expect(subject.name).to eq("Maremma: a Ruby library for simplified network calls") + expect(subject.description).to start_with("Simplifies network calls") + expect(subject.keywords).to eq("faraday, excon, net/http") + expect(subject.date_created).to eq("2015-11-28") + expect(subject.date_published).to eq("2017-02-24") + expect(subject.date_modified).to eq("2017-02-24") + expect(subject.publisher).to eq("@type"=>"Organization", "name"=>"DataCite") + end end context "get metadata as datacite xml" do - let(:string) { IO.read(fixture_path + 'codemeta.json') } - - subject { Bolognese::Codemeta.new(string: string) } - - it "SoftwareSourceCode" do + it "rdataone" do + string = IO.read(fixture_path + 'codemeta.json') + subject = Bolognese::Codemeta.new(string: string) expect(subject.validation_errors).to be_empty datacite = Maremma.from_xml(subject.as_datacite).fetch("resource", {}) expect(datacite.dig("titles", "title")).to eq("R Interface to the DataONE REST API") + expect(datacite.dig("creators", "creator")).to eq([{"creatorName"=>"Matt Jones", + "nameIdentifier"=> + {"schemeURI"=>"http://orcid.org/", + "nameIdentifierScheme"=>"ORCID", + "__content__"=>"http://orcid.org/0000-0003-0077-4738"}}, + {"creatorName"=>"Peter Slaughter", + "nameIdentifier"=> + {"schemeURI"=>"http://orcid.org/", + "nameIdentifierScheme"=>"ORCID", + "__content__"=>"http://orcid.org/0000-0002-2192-403X"}}, + {"creatorName"=>"University of California, Santa Barbara"}]) expect(datacite.fetch("version")).to eq("2.0.0") + end + + it "maremma" do + expect(subject.validation_errors).to be_empty + datacite = Maremma.from_xml(subject.as_datacite).fetch("resource", {}) + expect(datacite.dig("titles", "title")).to eq("Maremma: a Ruby library for simplified network calls") + expect(datacite.dig("creators", "creator")).to eq("creatorName"=>"Martin Fenner", "nameIdentifier"=>{"schemeURI"=>"http://orcid.org/", "nameIdentifierScheme"=>"ORCID", "__content__"=>"http://orcid.org/0000-0003-0077-4738"}) + end + end + + context "get metadata as schema.org JSON" do + it "rdataone" do + string = IO.read(fixture_path + 'codemeta.json') + subject = Bolognese::Codemeta.new(string: string) + json = JSON.parse(subject.as_schema_org) + expect(json["@id"]).to eq("https://doi.org/10.5063/f1m61h5x") + expect(json["@type"]).to eq("SoftwareSourceCode") + expect(json["name"]).to eq("R Interface to the DataONE REST API") + expect(json["author"]).to eq([{"@type"=>"person", + "@id"=>"http://orcid.org/0000-0003-0077-4738", + "name"=>"Matt Jones"}, + {"@type"=>"person", + "@id"=>"http://orcid.org/0000-0002-2192-403X", + "name"=>"Peter Slaughter"}, + {"@type"=>"organization", + "name"=>"University of California, Santa Barbara"}]) + expect(json["version"]).to eq("2.0.0") + end + + it "maremma" do + json = JSON.parse(subject.as_schema_org) + expect(json["@id"]).to eq("https://doi.org/10.5438/qeg0-3gm3") + expect(json["@type"]).to eq("SoftwareSourceCode") + expect(json["name"]).to eq("Maremma: a Ruby library for simplified network calls") + expect(json["author"]).to eq("@type"=>"person", "@id"=>"http://orcid.org/0000-0003-0077-4738", "name"=>"Martin Fenner") + end + end + + context "get metadata as bibtex" do + it "maremma" do + bibtex = BibTeX.parse(subject.as_bibtex).to_a(quotes: '').first + expect(bibtex[:bibtex_type].to_s).to eq("misc") + expect(bibtex[:bibtex_key]).to eq("https://doi.org/10.5438/qeg0-3gm3") + expect(bibtex[:doi]).to eq("10.5438/qeg0-3gm3") + expect(bibtex[:url]).to eq("https://github.com/datacite/maremma") + expect(bibtex[:title]).to eq("Maremma: a Ruby library for simplified network calls") + expect(bibtex[:author]).to eq("Fenner, Martin") + expect(bibtex[:publisher]).to eq("DataCite") + expect(bibtex[:keywords]).to eq("faraday, excon, net/http") + expect(bibtex[:year]).to eq("2017") end end end