diff --git a/lib/deserializers/xml/contact.rb b/lib/deserializers/xml/contact.rb new file mode 100644 index 000000000..d0a2ce8f4 --- /dev/null +++ b/lib/deserializers/xml/contact.rb @@ -0,0 +1,39 @@ +module Deserializers + module Xml + class Contact + attr_reader :frame + + def initialize(frame) + @frame = frame + end + + def call + attributes = { + name: if_present('postalInfo name'), + org: if_present('postalInfo org'), + email: if_present('email'), + fax: if_present('fax'), + phone: if_present('voice'), + + # Address fields + city: if_present('postalInfo addr city'), + zip: if_present('postalInfo addr pc'), + street: if_present('postalInfo addr street'), + state: if_present('postalInfo addr sp'), + country_code: if_present('postalInfo addr cc'), + + # Auth info + auth_info: if_present('authInfo pw'), + } + + attributes.compact + end + + def if_present(css_path) + return unless frame.css(css_path).present? + + frame.css(css_path).text + end + end + end +end diff --git a/test/lib/deserializers/xml/contact_test.rb b/test/lib/deserializers/xml/contact_test.rb new file mode 100644 index 000000000..c755e8f24 --- /dev/null +++ b/test/lib/deserializers/xml/contact_test.rb @@ -0,0 +1,73 @@ +require 'test_helper' +require 'deserializers/xml/contact' + +class DeserializersXmlContactTest < ActiveSupport::TestCase + def test_trims_empty_values + xml_string = <<-XML + XML + + nokogiri_frame = Nokogiri::XML(xml_string).remove_namespaces! + instance = ::Deserializers::Xml::Contact.new(nokogiri_frame) + assert_equal instance.call, {} + end + + def test_handles_update + xml_string = <<-XML + + + + + + john-001 + + + new name + + +123.4 + new-email@inbox.test + + + + + + XML + + nokogiri_frame = Nokogiri::XML(xml_string).remove_namespaces! + instance = ::Deserializers::Xml::Contact.new(nokogiri_frame) + assert_equal instance.call, { name: 'new name', + email: 'new-email@inbox.test', + phone: '+123.4' } + end + + def test_handles_create + name = 'new' + email = 'new@registrar.test' + phone = '+1.2' + + xml_string = <<-XML + + + + + + + #{name} + + #{phone} + #{email} + + + + + any + + + + + XML + + nokogiri_frame = Nokogiri::XML(xml_string).remove_namespaces! + instance = ::Deserializers::Xml::Contact.new(nokogiri_frame) + assert_equal instance.call, { name: 'new', email: 'new@registrar.test', phone: '+1.2' } + end +end