From bbd5421d5f1b3beba567e63b34ae9b448c41f70b Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Tue, 2 Oct 2018 11:12:36 +0300 Subject: [PATCH] Add serializer for domain objects --- lib/serializers/registrant_api/domain.rb | 45 ++++++++++++++++ .../serializers/registrant_api/domain_test.rb | 54 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 lib/serializers/registrant_api/domain.rb create mode 100644 test/lib/serializers/registrant_api/domain_test.rb diff --git a/lib/serializers/registrant_api/domain.rb b/lib/serializers/registrant_api/domain.rb new file mode 100644 index 000000000..02dbbca64 --- /dev/null +++ b/lib/serializers/registrant_api/domain.rb @@ -0,0 +1,45 @@ +module Serializers + module RegistrantApi + class Domain + attr_reader :domain + + def initialize(domain) + @domain = domain + end + + def to_json + { + id: @domain.uuid, + name: @domain.name, + registrar: @domain.registrar.name, + registered_at: @domain.registered_at, + valid_to: @domain.valid_to, + created_at: @domain.created_at, + updated_at: @domain.updated_at, + registrant: @domain.registrant_name, + transfer_code: @domain.transfer_code, + name_dirty: @domain.name_dirty, + name_puny: @domain.name_puny, + period: @domain.period, + period_unit: @domain.period_unit, + creator_str: @domain.creator_str, + updator_str: @domain.updator_str, + legacy_id: @domain.legacy_id, + legacy_registrar_id: @domain.legacy_registrar_id, + legacy_registrant_id: @domain.legacy_registrant_id, + outzone_at: @domain.outzone_at, + delete_at: @domain.delete_at, + registrant_verification_asked_at: @domain.registrant_verification_asked_at, + registrant_verification_token: @domain.registrant_verification_token, + pending_json: @domain.pending_json, + force_delete_at: @domain.force_delete_at, + statuses: @domain.statuses, + locked_by_registrant_at: @domain.locked_by_registrant_at, + reserved: @domain.reserved, + status_notes: @domain.status_notes, + nameservers: @domain.nameservers.map(&:hostname), + } + end + end + end +end diff --git a/test/lib/serializers/registrant_api/domain_test.rb b/test/lib/serializers/registrant_api/domain_test.rb new file mode 100644 index 000000000..74facf87c --- /dev/null +++ b/test/lib/serializers/registrant_api/domain_test.rb @@ -0,0 +1,54 @@ +require 'test_helper' +require 'serializers/registrant_api/domain' + +class SerializersRegistrantApiDomainTest < ApplicationIntegrationTest + def setup + @domain = domains(:airport) + @serializer = Serializers::RegistrantApi::Domain.new(@domain) + @json = @serializer.to_json + end + + def test_returns_uuid_as_id + assert_equal(@domain.uuid, @json[:id]) + end + + def test_returns_domain_locked_by_registrant_time_or_nil + assert_not(@json[:locked_by_registrant_at]) + + travel_to Time.zone.parse('2010-07-05 10:30') + @domain.apply_registry_lock + serializer_for_locked_domain = Serializers::RegistrantApi::Domain.new(@domain.reload) + new_json = serializer_for_locked_domain.to_json + + assert_equal(Time.zone.parse('2010-07-05 10:30'), new_json[:locked_by_registrant_at]) + travel_back + end + + def test_returns_registrar_name + assert_equal('Best Names', @json[:registrar]) + end + + def test_returns_nameserver_hostnames_or_an_empty_array + expected_nameservers = ['ns1.bestnames.test', 'ns2.bestnames.test'] + assert_equal(expected_nameservers.to_set, @json[:nameservers].to_set) + + other_domain = domains(:hospital) + other_serializer = Serializers::RegistrantApi::Domain.new(other_domain) + new_json = other_serializer.to_json + + assert_equal([], new_json[:nameservers]) + end + + def test_other_fields_are_also_present + keys = %i[id name registrar registered_at valid_to created_at updated_at + registrant transfer_code name_dirty name_puny period period_unit + creator_str updator_str legacy_id legacy_registrar_id legacy_registrant_id + outzone_at delete_at registrant_verification_asked_at + registrant_verification_token pending_json force_delete_at statuses + locked_by_registrant_at reserved status_notes nameservers] + + pp @json + + assert_equal(keys, @json.keys & keys) + end +end