Add disputes to the list of retained domains

This commit is contained in:
Maciej Szlosarczyk 2020-05-28 13:33:52 +03:00
parent f7f810ad0e
commit 011967d8ea
No known key found for this signature in database
GPG key ID: 41D62D42D3B0D765
2 changed files with 64 additions and 5 deletions

View file

@ -3,6 +3,7 @@
class RetainedDomains
RESERVED = 'reserved'.freeze
BLOCKED = 'blocked'.freeze
DISPUTED = 'disputed'.freeze
attr_reader :domains,
:type
@ -26,14 +27,15 @@ class RetainedDomains
case type
when RESERVED then :reserved
when BLOCKED then :blocked
when DISPUTED then :disputed
else :all
end
end
def gather_domains
domains = blocked_domains.to_a.union(reserved_domains.to_a)
domains.sort_by(&:name)
blocked_domains.to_a
.union(reserved_domains.to_a)
.union(disputed_domains.to_a)
end
def blocked_domains
@ -52,16 +54,30 @@ class RetainedDomains
end
end
def disputed_domains
if %i[all disputed].include?(type)
Dispute.order(domain_name: :desc).active
else
[]
end
end
def domain_to_jsonable(domain)
status = case domain
when ReservedDomain then RESERVED
when BlockedDomain then BLOCKED
when Dispute then DISPUTED
end
punycode = SimpleIDN.to_ascii(domain.name)
domain_name = case domain
when Dispute then domain.domain_name
else domain.name
end
punycode = SimpleIDN.to_ascii(domain_name)
{
name: domain.name,
name: domain_name,
status: status,
punycode_name: punycode,
}

View file

@ -37,6 +37,49 @@ class ReppV1RetainedDomainsTest < ActionDispatch::IntegrationTest
assert_equal response_json[:domains], expected_objects
end
def test_get_index_disputed_type
dispute = Dispute.new(domain_name: 'disputed.test', starts_at: Time.zone.today, password: 'disputepw')
dispute.save
get repp_v1_retained_domains_path({ 'type' => 'disputed' })
response_json = JSON.parse(response.body, symbolize_names: true)
assert response_json[:count] == 1
expected_objects = [{ name: 'disputed.test',
status: 'disputed',
punycode_name: 'disputed.test' }]
assert_equal response_json[:domains], expected_objects
end
# A disputed domain can be also reserved, and according
# to business rules it should appear on the list twice.
def test_domain_can_appear_twice_if_it_is_disputed_and_reserved
dispute = Dispute.new(domain_name: 'reserved.test', starts_at: Time.zone.today, password: 'disputepw')
dispute.save
get repp_v1_retained_domains_path
response_json = JSON.parse(response.body, symbolize_names: true)
assert response_json[:count] == 4
expected_objects = [{ name: 'blocked.test',
status: 'blocked',
punycode_name: 'blocked.test' },
{ name: 'blockedäöüõ.test',
status: 'blocked',
punycode_name: 'xn--blocked-cxa7mj0e.test' },
{ name: 'reserved.test',
status: 'reserved',
punycode_name: 'reserved.test' },
{ name: 'reserved.test',
status: 'disputed',
punycode_name: 'reserved.test' }]
assert_equal response_json[:domains], expected_objects
end
def test_etags_cache
get repp_v1_retained_domains_path({ 'type' => 'reserved' })
etag = response.headers['ETag']