mirror of
https://github.com/internetee/registry.git
synced 2025-06-10 06:34:46 +02:00
Merge pull request #1589 from internetee/add-disputed-domains-to-retained-api
Add disputed domains to retained API
This commit is contained in:
commit
a8cfba6564
3 changed files with 84 additions and 15 deletions
|
@ -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,18 +54,38 @@ class RetainedDomains
|
|||
end
|
||||
end
|
||||
|
||||
def domain_to_jsonable(domain)
|
||||
status = case domain
|
||||
when ReservedDomain then RESERVED
|
||||
when BlockedDomain then BLOCKED
|
||||
end
|
||||
def disputed_domains
|
||||
if %i[all disputed].include?(type)
|
||||
Dispute.order(domain_name: :desc).active
|
||||
else
|
||||
[]
|
||||
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,
|
||||
punycode_name: punycode,
|
||||
}
|
||||
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
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
## GET /repp/v1/retained_domains
|
||||
|
||||
Return a list of reserved and blocked domains, along with total count. You can
|
||||
filter them by type of the domain, which can be either reserved or blocked.
|
||||
Return a list of disputed, reserved and blocked domains, along with total count.
|
||||
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
|
||||
anyone without authentication.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Field name | Required | Type | Allowed values | Description |
|
||||
| ---------- | -------- | ---- | -------------- | ----------- |
|
||||
| type | false | string | ["reserved", "blocked"] | Type of domains to show |
|
||||
| Field name | Required | Type | Allowed values | Description |
|
||||
| ---------- | -------- | ---- | -------------- | ----------- |
|
||||
| type | false | string | ["reserved", "blocked", "disputed"] | Type of domains to show |
|
||||
|
||||
|
||||
#### Request
|
||||
|
|
|
@ -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']
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue