# frozen_string_literal: true require 'spec_helper' module Datacite module Mapping describe Subject do describe '#initialize' do it 'sets the value' do value = 'Mammals--Embryology' subject = Subject.new(value: value, language: 'en-us') expect(subject.value).to eq(value) end it 'sets the language' do lang = 'en-us' subject = Subject.new(value: 'Mammals--Embryology', language: lang) expect(subject.language).to eq(lang) end it 'sets the scheme' do scheme = 'LCSH' subject = Subject.new(value: 'Mammals--Embryology', language: 'en-us', scheme: scheme) expect(subject.scheme).to eq(scheme) end it 'sets the schemeURI' do scheme_uri = URI('http://id.loc.gov/authorities/subjects') subject = Subject.new(value: 'Mammals--Embryology', language: 'en-us', scheme: 'LCSH', scheme_uri: scheme_uri) expect(subject.scheme_uri).to eq(scheme_uri) end it 'defaults to a nil scheme' do subject = Subject.new(value: 'Mammals--Embryology', language: 'en-us') expect(subject.scheme).to be_nil end it 'defaults to a nil schemeURI' do subject = Subject.new(value: 'Mammals--Embryology', language: 'en-us') expect(subject.scheme_uri).to be_nil end it 'defaults language to nil' do subject = Subject.new(value: 'Mammals--Embryology') expect(subject.language).to be_nil end it 'strips whitespace' do subject = Subject.new(value: ' Mammals--Embryology ', language: 'en-us') expect(subject.value).to eq('Mammals--Embryology') end end describe 'lang=' do it 'sets the language' do subject = Subject.new(value: 'Mammals--Embryology', language: 'en') new_lang = 'en-us' subject.language = new_lang expect(subject.language).to eq(new_lang) end it 'allows nil' do subject = Subject.new(value: 'Mammals--Embryology', language: 'en-us') subject.language = nil expect(subject.language).to be_nil end end describe '#load_from_xml' do it 'parses XML' do xml_text = 'Mammals--Embryology' subject = Subject.parse_xml(xml_text) value = 'Mammals--Embryology' lang = 'en-us' scheme = 'LCSH' scheme_uri = URI('http://id.loc.gov/authorities/subjects') expect(subject.value).to eq(value) expect(subject.language).to eq(lang) expect(subject.scheme).to eq(scheme) expect(subject.scheme_uri).to eq(scheme_uri) end it 'treats missing language as nil' do xml_text = 'Mammals--Embryology' subject = Subject.parse_xml(xml_text) expect(subject.language).to be_nil end end describe '#save_to_xml' do it 'writes XML' do value = 'Mammals--Embryology' lang = 'en-us' scheme = 'LCSH' scheme_uri = URI('http://id.loc.gov/authorities/subjects') subject = Subject.new( language: lang, scheme: scheme, scheme_uri: scheme_uri, value: value ) expected_xml = 'Mammals--Embryology' expect(subject.save_to_xml).to be_xml(expected_xml) end end end end end