dnsimple 8.4.0 → 8.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/lib/dnsimple/client/clients.rb +3 -2
- data/lib/dnsimple/client/registrar_registrant_changes.rb +109 -0
- data/lib/dnsimple/struct/registrant_change.rb +38 -0
- data/lib/dnsimple/struct/registrant_change_check.rb +20 -0
- data/lib/dnsimple/struct.rb +2 -0
- data/lib/dnsimple/version.rb +1 -1
- data/spec/dnsimple/client/registrar_spec.rb +222 -3
- data/spec/fixtures.http/checkRegistrantChange/error-contactnotfound.http +14 -0
- data/spec/fixtures.http/checkRegistrantChange/error-domainnotfound.http +15 -0
- data/spec/fixtures.http/checkRegistrantChange/success.http +15 -0
- data/spec/fixtures.http/createRegistrantChange/success.http +14 -0
- data/spec/fixtures.http/deleteRegistrantChange/success.http +13 -0
- data/spec/fixtures.http/getRegistrantChange/success.http +15 -0
- data/spec/fixtures.http/listRegistrantChanges/success.http +15 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 446911b281dcecf8ebea06ee9429851c721acb7757b1deee3aef8cd5aa5bf556
|
4
|
+
data.tar.gz: 3bdc28942ca0dde6156122522849bfac6d03bee431a1b952db37b0b11445ffaa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9c8fbf1c0f0a6af73adcf3a2ce7a77755525f60538b3e9ca4d8e6c63642370b480a7b8d3d2d03b2efab18422dc2a111ab677a26700bbffff944c516ec88554c
|
7
|
+
data.tar.gz: 490ad2dca6043a664a7858fb3a6f91880be430d2221c27b9dcc3f00112aa1d0fdca99216f27975996ad1ed7f1f931516c2844b6da36cde84ea44c28464e82e5b
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,16 @@ This project uses [Semantic Versioning 2.0.0](http://semver.org/).
|
|
4
4
|
|
5
5
|
## main
|
6
6
|
|
7
|
+
## 8.5.0
|
8
|
+
|
9
|
+
FEATURES:
|
10
|
+
|
11
|
+
- NEW: Added `Dnsimple::Client::Registrar#check_registrant_change` to retrieves the requirements of a registrant change. (dnsimple/dnsimple-ruby#355)
|
12
|
+
- NEW: Added `Dnsimple::Client::Registrar#get_registrant_change` to retrieves the details of an existing registrant change. (dnsimple/dnsimple-ruby#355)
|
13
|
+
- NEW: Added `Dnsimple::Client::Registrar#create_registrant_change` to start registrant change. (dnsimple/dnsimple-ruby#355)
|
14
|
+
- NEW: Added `Dnsimple::Client::Registrar#list_registrant_changes` to lists the registrant changes for a domain. (dnsimple/dnsimple-ruby#355)
|
15
|
+
- NEW: Added `Dnsimple::Client::Registrar#delete_registrant_change` to cancel an ongoing registrant change from the account. (dnsimple/dnsimple-ruby#355)
|
16
|
+
|
7
17
|
## 8.4.0
|
8
18
|
|
9
19
|
FEATURES:
|
@@ -160,17 +160,18 @@ module Dnsimple
|
|
160
160
|
include Client::Oauth
|
161
161
|
end
|
162
162
|
|
163
|
-
|
164
163
|
require_relative 'registrar'
|
165
164
|
require_relative 'registrar_auto_renewal'
|
166
165
|
require_relative 'registrar_whois_privacy'
|
166
|
+
require_relative 'registrar_registrant_changes'
|
167
167
|
require_relative 'registrar_delegation'
|
168
168
|
|
169
169
|
class RegistrarService < ClientService
|
170
170
|
include Client::Registrar
|
171
171
|
include Client::RegistrarAutoRenewal
|
172
|
-
include Client::RegistrarWhoisPrivacy
|
173
172
|
include Client::RegistrarDelegation
|
173
|
+
include Client::RegistrarRegistrantChanges
|
174
|
+
include Client::RegistrarWhoisPrivacy
|
174
175
|
end
|
175
176
|
|
176
177
|
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dnsimple
|
4
|
+
class Client
|
5
|
+
module RegistrarRegistrantChanges
|
6
|
+
|
7
|
+
# Retrieves the requirements of a registrant change
|
8
|
+
#
|
9
|
+
# @example Check the requirements to change the contact for example.com to contact 1234:
|
10
|
+
# client.registrar.check_registrant_change(1010, { domain_id: "example.com", contact_id: 1234 })
|
11
|
+
#
|
12
|
+
# @param [Integer] account_id the account ID
|
13
|
+
# @param [Hash] attributes the attributes to check the registrant change
|
14
|
+
# @option attributes [String, Integer] :domain_id the domain ID to check
|
15
|
+
# @option attributes [Integer] :contact_id the contact ID to check against
|
16
|
+
# @param [Hash] options
|
17
|
+
# @return [Struct::RegistrantChangeCheck]
|
18
|
+
#
|
19
|
+
# @raise [RequestError] When the request fails.
|
20
|
+
def check_registrant_change(account_id, attributes, options = {})
|
21
|
+
Extra.validate_mandatory_attributes(attributes, [:domain_id, :contact_id])
|
22
|
+
endpoint = Client.versioned("/%s/registrar/registrant_changes/check" % [account_id])
|
23
|
+
response = client.post(endpoint, attributes, options)
|
24
|
+
|
25
|
+
Dnsimple::Response.new(response, Struct::RegistrantChangeCheck.new(response["data"]))
|
26
|
+
end
|
27
|
+
|
28
|
+
# Retrieves the details of an existing registrant change.
|
29
|
+
#
|
30
|
+
# @example Retrieve the registrant change 42:
|
31
|
+
# client.registrar.get_registrant_change(1010, 42)
|
32
|
+
#
|
33
|
+
# @param [Integer] account_id the Account id
|
34
|
+
# @param [#to_s] registrant_change_id the registrant change id
|
35
|
+
# @param [Hash] options
|
36
|
+
#
|
37
|
+
# @return [Struct::RegistrantChange]
|
38
|
+
#
|
39
|
+
# @raise [NotFoundError] When record is not found.
|
40
|
+
# @raise [RequestError] When the request fails.
|
41
|
+
def get_registrant_change(account_id, registrant_change_id, options = {})
|
42
|
+
endpoint = Client.versioned("/%s/registrar/registrant_changes/%s" % [account_id, registrant_change_id])
|
43
|
+
response = client.get(endpoint, options)
|
44
|
+
|
45
|
+
Dnsimple::Response.new(response, Struct::RegistrantChange.new(response["data"]))
|
46
|
+
end
|
47
|
+
|
48
|
+
# Start registrant change.
|
49
|
+
#
|
50
|
+
# @example Start a registrant change for example.com to contact 1234:
|
51
|
+
# including WHOIS privacy for the domain and enabling auto renewal:
|
52
|
+
# client.registrar.create_registrant_change(1010, { domain_id: "example.com", contact_id: 1234, extended_attributes: { "x-fi-registrant-idnumber" => "1234" } })
|
53
|
+
#
|
54
|
+
# @param [Integer] account_id the account ID
|
55
|
+
# @param [Hash] attributes the attributes to start a registrant change
|
56
|
+
# @option attributes [String, Integer] :domain_id the domain ID
|
57
|
+
# @option attributes [Integer] :contact_id the contact ID to change to
|
58
|
+
# @option attributes [Array<Hash>, nil] :extended_attributes the extended attributes to pass to the registry
|
59
|
+
# @param [Hash] options
|
60
|
+
# @return [Struct::RegistrantChange]
|
61
|
+
#
|
62
|
+
# @raise [RequestError] When the request fails.
|
63
|
+
def create_registrant_change(account_id, attributes, options = {})
|
64
|
+
Extra.validate_mandatory_attributes(attributes, [:domain_id, :contact_id])
|
65
|
+
endpoint = Client.versioned("/%s/registrar/registrant_changes" % [account_id])
|
66
|
+
response = client.post(endpoint, attributes, options)
|
67
|
+
|
68
|
+
Dnsimple::Response.new(response, Struct::RegistrantChange.new(response["data"]))
|
69
|
+
end
|
70
|
+
|
71
|
+
# List registrant changes in the account.
|
72
|
+
#
|
73
|
+
# @example List registrant changes for the account:
|
74
|
+
# client.registrar.list_registrant_changes(1010)
|
75
|
+
#
|
76
|
+
# @param [Integer] account_id the account ID
|
77
|
+
# @param [Hash] options
|
78
|
+
# @return [Dnsimple::PaginatedResponse<Struct::DomainRegistration>]
|
79
|
+
#
|
80
|
+
# @raise [NotFoundError] When record is not found.
|
81
|
+
# @raise [RequestError] When the request fails.
|
82
|
+
def list_registrant_changes(account_id, options = {})
|
83
|
+
endpoint = Client.versioned("/%s/registrar/registrant_changes" % [account_id])
|
84
|
+
response = client.get(endpoint, options)
|
85
|
+
|
86
|
+
Dnsimple::PaginatedResponse.new(response, response["data"].map { |r| Struct::RegistrantChange.new(r) })
|
87
|
+
end
|
88
|
+
|
89
|
+
# Cancel an ongoing registrant change from the account.
|
90
|
+
#
|
91
|
+
# @example Cancel a registrant change 42:
|
92
|
+
# client.registrar.delete_registrant_change(1010, 42)
|
93
|
+
#
|
94
|
+
# @param [Integer] account_id the account ID
|
95
|
+
# @param [#to_s] registrant_change_id the registrant change ID
|
96
|
+
# @param [Hash] options
|
97
|
+
# @return [Dnsimple::Response<nil>]
|
98
|
+
#
|
99
|
+
# @raise [NotFoundError] When record is not found.
|
100
|
+
# @raise [RequestError] When the request fails.
|
101
|
+
def delete_registrant_change(account_id, registrant_change_id, options = {})
|
102
|
+
endpoint = Client.versioned("/%s/registrar/registrant_changes/%s" % [account_id, registrant_change_id])
|
103
|
+
response = client.delete(endpoint, nil, options)
|
104
|
+
|
105
|
+
Dnsimple::Response.new(response, nil)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dnsimple
|
4
|
+
module Struct
|
5
|
+
|
6
|
+
class RegistrantChange < Base
|
7
|
+
# @return [Integer] The registrant change ID in DNSimple.
|
8
|
+
attr_accessor :id
|
9
|
+
|
10
|
+
# @return [Integer] The associated account ID.
|
11
|
+
attr_accessor :account_id
|
12
|
+
|
13
|
+
# @return [Integer] The associated contact ID.
|
14
|
+
attr_accessor :contact_id
|
15
|
+
|
16
|
+
# @return [Integer] The associated domain ID.
|
17
|
+
attr_accessor :domain_id
|
18
|
+
|
19
|
+
# @return [String] The registrant change state.
|
20
|
+
attr_accessor :state
|
21
|
+
|
22
|
+
# @return [Hash] The extended attributes.
|
23
|
+
attr_accessor :extended_attributes
|
24
|
+
|
25
|
+
# @return [Boolean] True if the registrant change is a registry owner change.
|
26
|
+
attr_accessor :registry_owner_change
|
27
|
+
|
28
|
+
# @return [String] When the Inter-Registrar Transfer lock (60 days) is going to be lifted.
|
29
|
+
attr_accessor :irt_lock_lifted_by
|
30
|
+
|
31
|
+
# @return [String] When the registrant change was created in DNSimple.
|
32
|
+
attr_accessor :created_at
|
33
|
+
|
34
|
+
# @return [String] When the registrant change was last updated in DNSimple.
|
35
|
+
attr_accessor :updated_at
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dnsimple
|
4
|
+
module Struct
|
5
|
+
|
6
|
+
class RegistrantChangeCheck < Base
|
7
|
+
# @return [Integer] The associated contact ID.
|
8
|
+
attr_accessor :contact_id
|
9
|
+
|
10
|
+
# @return [Integer] The associated domain ID.
|
11
|
+
attr_accessor :domain_id
|
12
|
+
|
13
|
+
# @return [Array<Hash>] The extended attributes.
|
14
|
+
attr_accessor :extended_attributes
|
15
|
+
|
16
|
+
# # @return [Boolean] True if the registrant change is a registry owner change.
|
17
|
+
attr_accessor :registry_owner_change
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/dnsimple/struct.rb
CHANGED
@@ -35,6 +35,8 @@ require_relative 'struct/domain_renewal'
|
|
35
35
|
require_relative 'struct/email_forward'
|
36
36
|
require_relative 'struct/extended_attribute'
|
37
37
|
require_relative 'struct/oauth_token'
|
38
|
+
require_relative 'struct/registrant_change_check'
|
39
|
+
require_relative 'struct/registrant_change'
|
38
40
|
require_relative 'struct/zone_record'
|
39
41
|
require_relative 'struct/service'
|
40
42
|
require_relative 'struct/template'
|
data/lib/dnsimple/version.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Dnsimple::Client, ".registrar" do
|
6
|
-
|
7
6
|
subject { described_class.new(base_url: "https://api.dnsimple.test", access_token: "a1b2c3").registrar }
|
8
7
|
|
9
8
|
|
@@ -283,7 +282,7 @@ describe Dnsimple::Client, ".registrar" do
|
|
283
282
|
result = response.data
|
284
283
|
expect(result).to be_a(Dnsimple::Struct::DomainTransfer)
|
285
284
|
expect(result.id).to eq(361)
|
286
|
-
expect(result.domain_id).to eq(
|
285
|
+
expect(result.domain_id).to eq(182_245)
|
287
286
|
expect(result.registrant_id).to eq(2715)
|
288
287
|
expect(result.state).to eq("cancelled")
|
289
288
|
expect(result.auto_renew).to be(false)
|
@@ -316,7 +315,7 @@ describe Dnsimple::Client, ".registrar" do
|
|
316
315
|
result = response.data
|
317
316
|
expect(result).to be_a(Dnsimple::Struct::DomainTransfer)
|
318
317
|
expect(result.id).to eq(361)
|
319
|
-
expect(result.domain_id).to eq(
|
318
|
+
expect(result.domain_id).to eq(182_245)
|
320
319
|
expect(result.registrant_id).to eq(2715)
|
321
320
|
expect(result.state).to eq("transferring")
|
322
321
|
expect(result.auto_renew).to be(false)
|
@@ -352,4 +351,224 @@ describe Dnsimple::Client, ".registrar" do
|
|
352
351
|
end
|
353
352
|
end
|
354
353
|
|
354
|
+
describe "#check_registrant_change" do
|
355
|
+
let(:account_id) { 1010 }
|
356
|
+
let(:attributes) { { domain_id: "example.com", contact_id: 1234 } }
|
357
|
+
|
358
|
+
before do
|
359
|
+
stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes/check$})
|
360
|
+
.to_return(read_http_fixture("checkRegistrantChange/success.http"))
|
361
|
+
end
|
362
|
+
|
363
|
+
it "builds the correct request" do
|
364
|
+
subject.check_registrant_change(account_id, attributes)
|
365
|
+
|
366
|
+
expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes/check")
|
367
|
+
.with(headers: { "Accept" => "application/json" })
|
368
|
+
.with(body: attributes)
|
369
|
+
end
|
370
|
+
|
371
|
+
it "returns the registrant change check" do
|
372
|
+
response = subject.check_registrant_change(account_id, attributes)
|
373
|
+
expect(response).to be_a(Dnsimple::Response)
|
374
|
+
|
375
|
+
result = response.data
|
376
|
+
expect(result).to be_a(Dnsimple::Struct::RegistrantChangeCheck)
|
377
|
+
expect(result.contact_id).to eq(101)
|
378
|
+
expect(result.domain_id).to eq(101)
|
379
|
+
expect(result.extended_attributes).to be_a(Array)
|
380
|
+
expect(result.extended_attributes).to be_empty
|
381
|
+
expect(result.registry_owner_change).to be(true)
|
382
|
+
end
|
383
|
+
|
384
|
+
context "when the attributes are incomplete" do
|
385
|
+
it "raises ArgumentError" do
|
386
|
+
expect { subject.check_registrant_change(account_id, domain_id: "example.com") }.to raise_error(ArgumentError)
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
context "when the domain is not found" do
|
391
|
+
it "raises a NotFoundError" do
|
392
|
+
stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes/check$})
|
393
|
+
.to_return(read_http_fixture("checkRegistrantChange/error-domainnotfound.http"))
|
394
|
+
|
395
|
+
expect {
|
396
|
+
subject.check_registrant_change(account_id, attributes)
|
397
|
+
}.to raise_error(Dnsimple::NotFoundError)
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
context "when the contact is not found" do
|
402
|
+
it "raises a NotFoundError" do
|
403
|
+
stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes/check$})
|
404
|
+
.to_return(read_http_fixture("checkRegistrantChange/error-contactnotfound.http"))
|
405
|
+
|
406
|
+
expect {
|
407
|
+
subject.check_registrant_change(account_id, attributes)
|
408
|
+
}.to raise_error(Dnsimple::NotFoundError)
|
409
|
+
end
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
describe "#get_registrant_change" do
|
414
|
+
let(:account_id) { 1010 }
|
415
|
+
|
416
|
+
before do
|
417
|
+
stub_request(:get, %r{/v2/#{account_id}/registrar/registrant_changes/.+$})
|
418
|
+
.to_return(read_http_fixture("getRegistrantChange/success.http"))
|
419
|
+
end
|
420
|
+
|
421
|
+
it "builds the correct request" do
|
422
|
+
subject.get_registrant_change(account_id, registrant_change_id = 42)
|
423
|
+
|
424
|
+
expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes/#{registrant_change_id}")
|
425
|
+
.with(headers: { "Accept" => "application/json" })
|
426
|
+
end
|
427
|
+
|
428
|
+
it "returns the registrant change" do
|
429
|
+
response = subject.get_registrant_change(account_id, 42)
|
430
|
+
expect(response).to be_a(Dnsimple::Response)
|
431
|
+
|
432
|
+
result = response.data
|
433
|
+
expect(result).to be_a(Dnsimple::Struct::RegistrantChange)
|
434
|
+
expect(result.id).to eq(101)
|
435
|
+
expect(result.account_id).to eq(101)
|
436
|
+
expect(result.contact_id).to eq(101)
|
437
|
+
expect(result.domain_id).to eq(101)
|
438
|
+
expect(result.state).to eq("new")
|
439
|
+
expect(result.extended_attributes).to be_a(Hash)
|
440
|
+
expect(result.extended_attributes).to be_empty
|
441
|
+
expect(result.registry_owner_change).to be(true)
|
442
|
+
expect(result.irt_lock_lifted_by).to be_nil
|
443
|
+
expect(result.created_at).to eq("2017-02-03T17:43:22Z")
|
444
|
+
expect(result.updated_at).to eq("2017-02-03T17:43:22Z")
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
describe "#create_registrant_change" do
|
449
|
+
let(:account_id) { 1010 }
|
450
|
+
let(:attributes) { { domain_id: "example.com", contact_id: 1234, extended_attributes: { "x-fi-registrant-idnumber" => "1234" } } }
|
451
|
+
|
452
|
+
before do
|
453
|
+
stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes$})
|
454
|
+
.to_return(read_http_fixture("createRegistrantChange/success.http"))
|
455
|
+
end
|
456
|
+
|
457
|
+
it "builds the correct request" do
|
458
|
+
subject.create_registrant_change(account_id, attributes)
|
459
|
+
|
460
|
+
expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes")
|
461
|
+
.with(headers: { "Accept" => "application/json" })
|
462
|
+
.with(body: attributes)
|
463
|
+
end
|
464
|
+
|
465
|
+
it "returns the registrant change" do
|
466
|
+
response = subject.create_registrant_change(account_id, attributes)
|
467
|
+
expect(response).to be_a(Dnsimple::Response)
|
468
|
+
|
469
|
+
result = response.data
|
470
|
+
expect(result).to be_a(Dnsimple::Struct::RegistrantChange)
|
471
|
+
expect(result.id).to eq(101)
|
472
|
+
expect(result.account_id).to eq(101)
|
473
|
+
expect(result.contact_id).to eq(101)
|
474
|
+
expect(result.domain_id).to eq(101)
|
475
|
+
expect(result.state).to eq("new")
|
476
|
+
expect(result.extended_attributes).to be_a(Hash)
|
477
|
+
expect(result.extended_attributes).to be_empty
|
478
|
+
expect(result.registry_owner_change).to be(true)
|
479
|
+
expect(result.irt_lock_lifted_by).to be_nil
|
480
|
+
expect(result.created_at).to eq("2017-02-03T17:43:22Z")
|
481
|
+
expect(result.updated_at).to eq("2017-02-03T17:43:22Z")
|
482
|
+
end
|
483
|
+
|
484
|
+
context "when the attributes are incomplete" do
|
485
|
+
it "raises ArgumentError" do
|
486
|
+
expect { subject.create_registrant_change(account_id, domain_id: "example.com") }.to raise_error(ArgumentError)
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
context "when the domain is not found" do
|
491
|
+
it "raises a NotFoundError" do
|
492
|
+
stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes$})
|
493
|
+
.to_return(read_http_fixture("checkRegistrantChange/error-domainnotfound.http"))
|
494
|
+
|
495
|
+
expect {
|
496
|
+
subject.create_registrant_change(account_id, attributes)
|
497
|
+
}.to raise_error(Dnsimple::NotFoundError)
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
context "when the contact is not found" do
|
502
|
+
it "raises a NotFoundError" do
|
503
|
+
stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes$})
|
504
|
+
.to_return(read_http_fixture("checkRegistrantChange/error-contactnotfound.http"))
|
505
|
+
|
506
|
+
expect {
|
507
|
+
subject.create_registrant_change(account_id, attributes)
|
508
|
+
}.to raise_error(Dnsimple::NotFoundError)
|
509
|
+
end
|
510
|
+
end
|
511
|
+
end
|
512
|
+
|
513
|
+
describe "#list_registrant_changes" do
|
514
|
+
let(:account_id) { 1010 }
|
515
|
+
|
516
|
+
before do
|
517
|
+
stub_request(:get, %r{/v2/#{account_id}/registrar/registrant_changes$})
|
518
|
+
.to_return(read_http_fixture("listRegistrantChanges/success.http"))
|
519
|
+
end
|
520
|
+
|
521
|
+
it "builds the correct request" do
|
522
|
+
subject.list_registrant_changes(account_id)
|
523
|
+
|
524
|
+
expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes")
|
525
|
+
.with(headers: { "Accept" => "application/json" })
|
526
|
+
end
|
527
|
+
|
528
|
+
it "returns the registrant changes" do
|
529
|
+
response = subject.list_registrant_changes(account_id)
|
530
|
+
expect(response).to be_a(Dnsimple::PaginatedResponse)
|
531
|
+
|
532
|
+
results = response.data
|
533
|
+
|
534
|
+
results.each do |result|
|
535
|
+
expect(result).to be_a(Dnsimple::Struct::RegistrantChange)
|
536
|
+
expect(result.id).to be_a(Integer)
|
537
|
+
expect(result.account_id).to be_a(Integer)
|
538
|
+
expect(result.contact_id).to be_a(Integer)
|
539
|
+
expect(result.domain_id).to be_a(Integer)
|
540
|
+
expect(result.state).to be_a(String)
|
541
|
+
expect(result.extended_attributes).to be_a(Hash)
|
542
|
+
expect(result.extended_attributes).to be_empty
|
543
|
+
expect(result.registry_owner_change).to be(true).or be(false)
|
544
|
+
expect(result.irt_lock_lifted_by).to be_nil
|
545
|
+
expect(result.created_at).to be_a(String)
|
546
|
+
expect(result.updated_at).to be_a(String)
|
547
|
+
end
|
548
|
+
end
|
549
|
+
end
|
550
|
+
|
551
|
+
describe "#delete_registrant_change" do
|
552
|
+
let(:account_id) { 1010 }
|
553
|
+
|
554
|
+
before do
|
555
|
+
stub_request(:delete, %r{/v2/#{account_id}/registrar/registrant_changes/.+$})
|
556
|
+
.to_return(read_http_fixture("deleteRegistrantChange/success.http"))
|
557
|
+
end
|
558
|
+
|
559
|
+
it "builds the correct request" do
|
560
|
+
subject.delete_registrant_change(account_id, registrant_change_id = 42)
|
561
|
+
|
562
|
+
expect(WebMock).to have_requested(:delete, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes/#{registrant_change_id}")
|
563
|
+
.with(headers: { "Accept" => "application/json" })
|
564
|
+
end
|
565
|
+
|
566
|
+
it "returns nothing" do
|
567
|
+
response = subject.delete_registrant_change(account_id, 42)
|
568
|
+
expect(response).to be_a(Dnsimple::Response)
|
569
|
+
|
570
|
+
result = response.data
|
571
|
+
expect(result).to be_nil
|
572
|
+
end
|
573
|
+
end
|
355
574
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
HTTP/1.1 404
|
2
|
+
server: nginx
|
3
|
+
date: Tue, 22 Aug 2023 13:59:02 GMT
|
4
|
+
content-type: application/json; charset=utf-8
|
5
|
+
x-ratelimit-limit: 2400
|
6
|
+
x-ratelimit-remaining: 2398
|
7
|
+
x-ratelimit-reset: 1692716201
|
8
|
+
x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
|
9
|
+
cache-control: no-cache
|
10
|
+
x-request-id: b1dd3f42-ebb9-42fd-a121-d595de96f667
|
11
|
+
x-runtime: 0.019122
|
12
|
+
strict-transport-security: max-age=63072000
|
13
|
+
|
14
|
+
{"message":"Contact `21` not found"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 404
|
2
|
+
server: nginx
|
3
|
+
date: Tue, 22 Aug 2023 11:09:40 GMT
|
4
|
+
content-type: application/json; charset=utf-8
|
5
|
+
x-ratelimit-limit: 2400
|
6
|
+
x-ratelimit-remaining: 2395
|
7
|
+
x-ratelimit-reset: 1692705338
|
8
|
+
x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
|
9
|
+
etag: W/"cef1e7d85d0b9bfd25e81b812891d34f"
|
10
|
+
cache-control: max-age=0, private, must-revalidate
|
11
|
+
x-request-id: 5b0d8bfb-7b6a-40b5-a079-b640fd817e34
|
12
|
+
x-runtime: 3.066249
|
13
|
+
strict-transport-security: max-age=63072000
|
14
|
+
|
15
|
+
{"message":"Domain `example.com` not found"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 200
|
2
|
+
server: nginx
|
3
|
+
date: Tue, 22 Aug 2023 11:09:40 GMT
|
4
|
+
content-type: application/json; charset=utf-8
|
5
|
+
x-ratelimit-limit: 2400
|
6
|
+
x-ratelimit-remaining: 2395
|
7
|
+
x-ratelimit-reset: 1692705338
|
8
|
+
x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
|
9
|
+
etag: W/"cef1e7d85d0b9bfd25e81b812891d34f"
|
10
|
+
cache-control: max-age=0, private, must-revalidate
|
11
|
+
x-request-id: 5b0d8bfb-7b6a-40b5-a079-b640fd817e34
|
12
|
+
x-runtime: 3.066249
|
13
|
+
strict-transport-security: max-age=63072000
|
14
|
+
|
15
|
+
{"data":{"domain_id":101,"contact_id":101,"extended_attributes":[],"registry_owner_change":true}}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
HTTP/1.1 202
|
2
|
+
server: nginx
|
3
|
+
date: Tue, 22 Aug 2023 11:11:00 GMT
|
4
|
+
content-type: application/json; charset=utf-8
|
5
|
+
x-ratelimit-limit: 2400
|
6
|
+
x-ratelimit-remaining: 2394
|
7
|
+
x-ratelimit-reset: 1692705339
|
8
|
+
x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
|
9
|
+
cache-control: no-cache
|
10
|
+
x-request-id: 26bf7ff9-2075-42b0-9431-1778c825b6b0
|
11
|
+
x-runtime: 3.408950
|
12
|
+
strict-transport-security: max-age=63072000
|
13
|
+
|
14
|
+
{"data":{"id":101,"account_id":101,"domain_id":101,"contact_id":101,"state":"new","extended_attributes":{},"registry_owner_change":true,"irt_lock_lifted_by":null,"created_at":"2017-02-03T17:43:22Z","updated_at":"2017-02-03T17:43:22Z"}}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
HTTP/1.1 201
|
2
|
+
server: nginx
|
3
|
+
date: Tue, 22 Aug 2023 11:14:44 GMT
|
4
|
+
content-type: application/json; charset=utf-8
|
5
|
+
x-ratelimit-limit: 2400
|
6
|
+
x-ratelimit-remaining: 2391
|
7
|
+
x-ratelimit-reset: 1692705338
|
8
|
+
x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
|
9
|
+
cache-control: no-cache
|
10
|
+
x-request-id: b123e1f0-aa70-4abb-95cf-34f377c83ef4
|
11
|
+
x-runtime: 0.114839
|
12
|
+
strict-transport-security: max-age=63072000
|
13
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 200
|
2
|
+
server: nginx
|
3
|
+
date: Tue, 22 Aug 2023 11:13:58 GMT
|
4
|
+
content-type: application/json; charset=utf-8
|
5
|
+
x-ratelimit-limit: 2400
|
6
|
+
x-ratelimit-remaining: 2392
|
7
|
+
x-ratelimit-reset: 1692705338
|
8
|
+
x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
|
9
|
+
etag: W/"76c5d4c7579b754b94a42ac7fa37a901"
|
10
|
+
cache-control: max-age=0, private, must-revalidate
|
11
|
+
x-request-id: e910cd08-3f9c-4da4-9986-50dbe9c3bc55
|
12
|
+
x-runtime: 0.022006
|
13
|
+
strict-transport-security: max-age=63072000
|
14
|
+
|
15
|
+
{"data":{"id":101,"account_id":101,"domain_id":101,"contact_id":101,"state":"new","extended_attributes":{},"registry_owner_change":true,"irt_lock_lifted_by":null,"created_at":"2017-02-03T17:43:22Z","updated_at":"2017-02-03T17:43:22Z"}}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 200
|
2
|
+
server: nginx
|
3
|
+
date: Tue, 22 Aug 2023 11:12:49 GMT
|
4
|
+
content-type: application/json; charset=utf-8
|
5
|
+
x-ratelimit-limit: 2400
|
6
|
+
x-ratelimit-remaining: 2393
|
7
|
+
x-ratelimit-reset: 1692705338
|
8
|
+
x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
|
9
|
+
etag: W/"0049703ea058b06346df4c0e169eac29"
|
10
|
+
cache-control: max-age=0, private, must-revalidate
|
11
|
+
x-request-id: fd0334ce-414a-4872-8889-e548e0b1410c
|
12
|
+
x-runtime: 0.030759
|
13
|
+
strict-transport-security: max-age=63072000
|
14
|
+
|
15
|
+
{"data":[{"id":101,"account_id":101,"domain_id":101,"contact_id":101,"state":"new","extended_attributes":{},"registry_owner_change":true,"irt_lock_lifted_by":null,"created_at":"2017-02-03T17:43:22Z","updated_at":"2017-02-03T17:43:22Z"}],"pagination":{"current_page":1,"per_page":30,"total_entries":1,"total_pages":1}}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dnsimple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DNSimple
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- lib/dnsimple/client/registrar.rb
|
125
125
|
- lib/dnsimple/client/registrar_auto_renewal.rb
|
126
126
|
- lib/dnsimple/client/registrar_delegation.rb
|
127
|
+
- lib/dnsimple/client/registrar_registrant_changes.rb
|
127
128
|
- lib/dnsimple/client/registrar_whois_privacy.rb
|
128
129
|
- lib/dnsimple/client/services.rb
|
129
130
|
- lib/dnsimple/client/services_domains.rb
|
@@ -162,6 +163,8 @@ files:
|
|
162
163
|
- lib/dnsimple/struct/email_forward.rb
|
163
164
|
- lib/dnsimple/struct/extended_attribute.rb
|
164
165
|
- lib/dnsimple/struct/oauth_token.rb
|
166
|
+
- lib/dnsimple/struct/registrant_change.rb
|
167
|
+
- lib/dnsimple/struct/registrant_change_check.rb
|
165
168
|
- lib/dnsimple/struct/service.rb
|
166
169
|
- lib/dnsimple/struct/template.rb
|
167
170
|
- lib/dnsimple/struct/template_record.rb
|
@@ -227,6 +230,9 @@ files:
|
|
227
230
|
- spec/fixtures.http/checkDomainPremiumPrice/error_400_not_a_premium_domain.http
|
228
231
|
- spec/fixtures.http/checkDomainPremiumPrice/error_400_tld_not_supported.http
|
229
232
|
- spec/fixtures.http/checkDomainPremiumPrice/success.http
|
233
|
+
- spec/fixtures.http/checkRegistrantChange/error-contactnotfound.http
|
234
|
+
- spec/fixtures.http/checkRegistrantChange/error-domainnotfound.http
|
235
|
+
- spec/fixtures.http/checkRegistrantChange/success.http
|
230
236
|
- spec/fixtures.http/checkZoneDistribution/error.http
|
231
237
|
- spec/fixtures.http/checkZoneDistribution/failure.http
|
232
238
|
- spec/fixtures.http/checkZoneDistribution/success.http
|
@@ -239,6 +245,7 @@ files:
|
|
239
245
|
- spec/fixtures.http/createDomain/created.http
|
240
246
|
- spec/fixtures.http/createEmailForward/created.http
|
241
247
|
- spec/fixtures.http/createPrimaryServer/created.http
|
248
|
+
- spec/fixtures.http/createRegistrantChange/success.http
|
242
249
|
- spec/fixtures.http/createSecondaryZone/created.http
|
243
250
|
- spec/fixtures.http/createTemplate/created.http
|
244
251
|
- spec/fixtures.http/createTemplateRecord/created.http
|
@@ -251,6 +258,7 @@ files:
|
|
251
258
|
- spec/fixtures.http/deleteDelegationSignerRecord/success.http
|
252
259
|
- spec/fixtures.http/deleteDomain/success.http
|
253
260
|
- spec/fixtures.http/deleteEmailForward/success.http
|
261
|
+
- spec/fixtures.http/deleteRegistrantChange/success.http
|
254
262
|
- spec/fixtures.http/deleteTemplate/success.http
|
255
263
|
- spec/fixtures.http/deleteTemplateRecord/success.http
|
256
264
|
- spec/fixtures.http/deleteWebhook/success.http
|
@@ -283,6 +291,7 @@ files:
|
|
283
291
|
- spec/fixtures.http/getDomainTransfer/success.http
|
284
292
|
- spec/fixtures.http/getEmailForward/success.http
|
285
293
|
- spec/fixtures.http/getPrimaryServer/success.http
|
294
|
+
- spec/fixtures.http/getRegistrantChange/success.http
|
286
295
|
- spec/fixtures.http/getService/success.http
|
287
296
|
- spec/fixtures.http/getTemplate/success.http
|
288
297
|
- spec/fixtures.http/getTemplateRecord/success.http
|
@@ -309,6 +318,7 @@ files:
|
|
309
318
|
- spec/fixtures.http/listEmailForwards/success.http
|
310
319
|
- spec/fixtures.http/listPrimaryServers/success.http
|
311
320
|
- spec/fixtures.http/listPushes/success.http
|
321
|
+
- spec/fixtures.http/listRegistrantChanges/success.http
|
312
322
|
- spec/fixtures.http/listServices/success.http
|
313
323
|
- spec/fixtures.http/listTemplateRecords/success.http
|
314
324
|
- spec/fixtures.http/listTemplates/success.http
|