# frozen_string_literal: true require 'spec_helper' describe Briard::Metadata, vcr: true do context 'write metadata as cff' do it 'SoftwareSourceCode Zenodo' do input = 'https://doi.org/10.5281/zenodo.10164' subject = described_class.new(input: input, from: 'datacite') expect(subject.valid?).to be true json = Psych.safe_load(subject.cff, permitted_classes: [Date]) expect(json['doi']).to eq('https://doi.org/10.5281/zenodo.10164') expect(json['authors']).to eq([{ 'affiliation' => 'Juelich Supercomputing Centre, Jülich, Germany', 'family-names' => 'Klatt', 'given-names' => 'Torbjörn' }, { 'affiliation' => 'Juelich Supercomputing Centre, Jülich, Germany', 'family-names' => 'Moser', 'given-names' => 'Dieter' }, { 'affiliation' => 'Juelich Supercomputing Centre, Jülich, Germany', 'family-names' => 'Speck', 'given-names' => 'Robert' }]) expect(json['title']).to eq('Pypint -- Python Framework For Parallel-In-Time Methods') expect(json['abstract']).to eq('PyPinT is a framework for Parallel-in-Time integration routines. The main purpose of PyPinT is to provide a framework for educational use and prototyping new parallel-in-time algorithms. As well it will aid in developing a high-performance C++ implementation for massively parallel computers providing the benefits of parallel-in-time routines to a zoo of time integrators in various applications.') expect(json['date-released']).to eq('2014-05-27') expect(json['repository-code']).to eq('https://zenodo.org/record/10164') expect(json['keywords']).to eq(['parallel-in-time integration', 'spectral deferred corrections', 'multigrid', 'multi-level spectral deferred corrections', 'python framework']) expect(json['license'].nil?).to be(true) expect(json['references']).to eq('identifiers' => [{ 'type' => 'url', 'value' => 'https://github.com/Parallel-in-Time/PyPinT/tree/release-v0.0.4' }]) end it 'SoftwareSourceCode also Zenodo' do input = 'https://doi.org/10.5281/zenodo.15497' subject = described_class.new(input: input, from: 'datacite') expect(subject.valid?).to be true json = Psych.safe_load(subject.cff, permitted_classes: [Date]) expect(json['doi']).to eq('https://doi.org/10.5281/zenodo.15497') expect(json['authors']).to eq([{ 'affiliation' => 'Instituut voor Kern- en Stralingsfysica, KU Leuven, 3001 Leuven, België', 'family-names' => 'Gins', 'given-names' => 'Wouter' }, { 'affiliation' => 'Instituut voor Kern- en Stralingsfysica, KU Leuven, 3001 Leuven, België', 'family-names' => 'de Groote', 'given-names' => 'Ruben' }, { 'affiliation' => 'Instituut voor Kern- en Stralingsfysica, KU Leuven, 3001 Leuven, België', 'family-names' => 'Heylen', 'given-names' => 'Hanne' }]) expect(json['title']).to eq('Satlas: Simulation And Analysis Toolbox For Laser Spectroscopy And Nmr Experiments') expect(json['abstract']).to eq('Initial release of the satlas Python package for the analysis and simulation for laser spectroscopy experiments. For the documentation, see http://woutergins.github.io/satlas/') expect(json['date-released']).to eq('2015-02-18') expect(json['repository-code']).to eq('https://zenodo.org/record/15497') expect(json['keywords'].nil?).to be(true) expect(json['license'].nil?).to be(true) expect(json['references']).to eq('identifiers' => [{ 'type' => 'url', 'value' => 'https://github.com/woutergins/satlas/tree/v1.0.0' }]) end it 'ruby-cff' do input = 'https://github.com/citation-file-format/ruby-cff' subject = described_class.new(input: input) expect(subject.valid?).to be true json = Psych.safe_load(subject.cff, permitted_classes: [Date]) expect(json['doi']).to eq('https://doi.org/10.5281/zenodo.1184077') expect(json['authors']).to eq([{ 'affiliation' => 'The University of Manchester, UK', 'family-names' => 'Haines', 'given-names' => 'Robert', 'orcid' => 'https://orcid.org/0000-0002-9538-7919' }, { 'name' => 'The Ruby Citation File Format Developers' }]) expect(json['title']).to eq('Ruby CFF Library') expect(json['abstract']).to eq('This library provides a Ruby interface to manipulate Citation File Format files') expect(json['date-released']).to eq('2021-08-18') expect(json['repository-code']).to eq('https://github.com/citation-file-format/ruby-cff') expect(json['keywords']).to eq(['ruby', 'credit', 'software citation', 'research software', 'software sustainability', 'metadata', 'citation file format', 'cff']) expect(json['license']).to eq('apache-2.0') expect(json['references']).to eq('identifiers' => [{ 'type' => 'doi', 'value' => '10.5281/zenodo.1003149' }]) end it 'Collection of Jupyter notebooks' do input = 'https://doi.org/10.14454/fqq6-w751' subject = described_class.new(input: input, from: 'datacite') expect(subject.valid?).to be true json = Psych.safe_load(subject.cff, permitted_classes: [Date]) expect(json['doi']).to eq('https://doi.org/10.14454/fqq6-w751') expect(json['authors']).to eq([{ 'family-names' => 'Petryszak', 'given-names' => 'Robert', 'orcid' => 'https://orcid.org/0000-0001-6333-2182' }, { 'affiliation' => 'DataCite', 'family-names' => 'Fenner', 'given-names' => 'Martin', 'orcid' => 'https://orcid.org/0000-0003-1419-2405' }, { 'affiliation' => 'Science and Technology Facilities Council', 'family-names' => 'Lambert', 'given-names' => 'Simon', 'orcid' => 'https://orcid.org/0000-0001-9570-8121' }, { 'affiliation' => 'European Bioinformatics Institute', 'family-names' => 'Llinares', 'given-names' => 'Manuel Bernal', 'orcid' => 'https://orcid.org/0000-0002-7368-180X' }, { 'affiliation' => 'British Library', 'family-names' => 'Madden', 'given-names' => 'Frances', 'orcid' => 'https://orcid.org/0000-0002-5432-6116' }]) expect(json['title']).to eq('FREYA PID Graph Jupyter Notebooks') expect(json['abstract']).to eq('Jupyter notebooks that use GraphQL to implement EC-funded FREYA Project PID Graph user stories.') expect(json['date-released']).to eq('2020-05-08') expect(json['repository-code']).to eq('https://github.com/datacite/pidgraph-notebooks-python') expect(json['keywords']).to eq(['pid graph', 'pid', 'graphql', 'freya', 'jupyter', 'FOS: Computer and information sciences']) expect(json['license'].nil?).to be(true) expect(json['references'].nil?).to be(true) end end end