# frozen_string_literal: true require 'spec_helper' module Datacite module Mapping describe Description do describe '#load_from_xml' do it 'reads XML' do xml_text = ' XML example of all DataCite Metadata Schema v3.1 properties. ' desc = Description.parse_xml(xml_text) expected_lang = 'en-us' expected_type = DescriptionType::ABSTRACT expected_value = 'XML example of all DataCite Metadata Schema v3.1 properties.' expect(desc.language).to eq(expected_lang) expect(desc.type).to eq(expected_type) expect(desc.value).to eq(expected_value) end it 'handles escaped HTML' do xml_text = ' <p>This is HTML text</p><p><small>despite the advice in the standard</small></p> ' desc = Description.parse_xml(xml_text) expected_value = '

This is HTML text

despite the advice in the standard

' expect(desc.value).to eq(expected_value) end it 'strips extra whitespace' do xml_text = ' This is the value ' desc = Description.parse_xml(xml_text) expect(desc.value).to eq('This is the value') end it 'allows un-escaped
and

tags' do xml_text = ' I am an

abstract
full
of <br/>s
' desc = Description.parse_xml(xml_text) expected_value = 'I am an
abstract
full
of
s' expect(desc.value.strip).to eq(expected_value) end end describe '#save_to_xml' do it 'writes XML' do desc = Description.new(language: 'en-us', type: DescriptionType::ABSTRACT, value: 'foo') expected_xml = 'foo' expect(desc.save_to_xml).to be_xml(expected_xml) end it 'escapes HTML' do desc = Description.new(type: DescriptionType::ABSTRACT, value: '

This is HTML text

') expected_xml = '<p>This is HTML text</p>' expect(desc.save_to_xml).to be_xml(expected_xml) end it 'preserves
and

tags' do desc = Description.new(type: DescriptionType::ABSTRACT, value: '
<br/> abstract

full
of

s') expected_xml = '
&lt;br/&gt; abstract
full
of
s
' expect(desc.save_to_xml).to be_xml(expected_xml) end end it 'round-trips to XML' do xml_text = 'foo' desc = Description.parse_xml(xml_text) expect(desc.save_to_xml).to be_xml(xml_text) end it 'un-escapes
tags when round-tripping' do xml_text = '
<br/> abstract

full
of

s
' desc = Description.parse_xml(xml_text) expected_xml = '

abstract

full
of

s
' expect(desc.save_to_xml).to be_xml(expected_xml) end end end end