# frozen_string_literal: true
require 'spec_helper'
module Datacite
module Mapping
describe Rights do
describe '#initialize' do
it 'sets the value' do
rights = Rights.new(value: 'CC0 1.0 Universal')
expect(rights.value).to eq('CC0 1.0 Universal')
end
it 'sets the URI' do
rights = Rights.new(value: 'CC0 1.0 Universal', uri: URI('http://creativecommons.org/publicdomain/zero/1.0/'))
expect(rights.uri).to eq(URI('http://creativecommons.org/publicdomain/zero/1.0/'))
end
it 'requires a value' do
expect { Rights.new(uri: URI('http://creativecommons.org/publicdomain/zero/1.0/')) }.to raise_error(ArgumentError)
end
end
describe '#value=' do
it 'sets the value' do
rights = Rights.allocate
rights.value = 'CC0 1.0 Universal'
expect(rights.value).to eq('CC0 1.0 Universal')
end
it 'requires a value' do
rights = Rights.new(value: 'CC0 1.0 Universal')
expect { rights.value = nil }.to raise_error(ArgumentError)
expect(rights.value).to eq('CC0 1.0 Universal')
end
it 'requires a non-empty value' do
rights = Rights.new(value: 'CC0 1.0 Universal')
expect { rights.value = '' }.to raise_error(ArgumentError)
expect(rights.value).to eq('CC0 1.0 Universal')
end
end
describe '#uri=' do
it 'sets the URI' do
rights = Rights.allocate
rights.uri = URI('http://creativecommons.org/publicdomain/zero/1.0/')
expect(rights.uri).to eq(URI('http://creativecommons.org/publicdomain/zero/1.0/'))
end
it 'allows a nil URI' do
rights = Rights.new(value: 'CC0 1.0 Universal', uri: URI('http://creativecommons.org/publicdomain/zero/1.0/'))
rights.uri = nil
expect(rights.uri).to be_nil
end
end
describe '#load_from_xml' do
it 'reads XML' do
xml_text = 'CC0 1.0 Universal'
rights = Rights.parse_xml(xml_text)
expect(rights.value).to eq('CC0 1.0 Universal')
expect(rights.uri).to eq(URI('http://creativecommons.org/publicdomain/zero/1.0/'))
end
it 'trims the value' do
xml_text = '
CC0 1.0 Universal
'
rights = Rights.parse_xml(xml_text)
expect(rights.value).to eq('CC0 1.0 Universal')
end
end
describe '#save_to_xml' do
it 'writes XML' do
rights = Rights.new(value: 'CC0 1.0 Universal', uri: URI('http://creativecommons.org/publicdomain/zero/1.0/'))
expected_xml = 'CC0 1.0 Universal'
expect(rights.save_to_xml).to be_xml(expected_xml)
end
it 'works with convenience constants' do
rights = Rights::CC_ZERO
expected_xml = 'CC0 1.0 Universal (CC0 1.0) Public Domain Dedication'
expect(rights.save_to_xml).to be_xml(expected_xml)
rights = Rights::CC_BY
expected_xml = 'Creative Commons Attribution 4.0 International (CC BY 4.0)'
expect(rights.save_to_xml).to be_xml(expected_xml)
%i[CC_ZERO CC_BY].each do |c|
r = Rights.const_get(c)
puts "#{c.to_s.downcase.gsub('_zero', '0')}:"
puts " uri: #{r.uri}"
puts " name: #{r.value}"
end
end
end
end
end
end