Merge pull request #1589 from internetee/add-disputed-domains-to-retained-api

Add disputed domains to retained API
This commit is contained in:
Timo Võhmar 2020-05-28 17:49:19 +03:00 committed by GitHub
commit a8cfba6564
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 84 additions and 15 deletions

View file

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

View file

@ -1,16 +1,20 @@
## GET /repp/v1/retained_domains ## GET /repp/v1/retained_domains
Return a list of reserved and blocked domains, along with total count. You can Return a list of disputed, reserved and blocked domains, along with total count.
filter them by type of the domain, which can be either reserved or blocked. You can filter them by type of the domain, which can be: `reserved`, `blocked`
or `disputed`.
NB! A domain name can be both `disputed` and `reserved` at the same time, and it
will appear on the list as two separate objects.
In contrast with other endpoints in REPP, this one is publicly available for In contrast with other endpoints in REPP, this one is publicly available for
anyone without authentication. anyone without authentication.
#### Parameters #### Parameters
| Field name | Required | Type | Allowed values | Description | | Field name | Required | Type | Allowed values | Description |
| ---------- | -------- | ---- | -------------- | ----------- | | ---------- | -------- | ---- | -------------- | ----------- |
| type | false | string | ["reserved", "blocked"] | Type of domains to show | | type | false | string | ["reserved", "blocked", "disputed"] | Type of domains to show |
#### Request #### Request

View file

@ -37,6 +37,49 @@ class ReppV1RetainedDomainsTest < ActionDispatch::IntegrationTest
assert_equal response_json[:domains], expected_objects assert_equal response_json[:domains], expected_objects
end 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 def test_etags_cache
get repp_v1_retained_domains_path({ 'type' => 'reserved' }) get repp_v1_retained_domains_path({ 'type' => 'reserved' })
etag = response.headers['ETag'] etag = response.headers['ETag']