dnsimple-ruby 1.4.1 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +0 -3
- data/.ruby-version +1 -1
- data/.travis.yml +1 -0
- data/CHANGELOG.md +8 -0
- data/README.md +2 -4
- data/dnsimple-ruby.gemspec +3 -6
- data/features/README.md +9 -0
- data/lib/dnsimple/certificate.rb +37 -36
- data/lib/dnsimple/client.rb +7 -4
- data/lib/dnsimple/contact.rb +49 -48
- data/lib/dnsimple/domain.rb +79 -79
- data/lib/dnsimple/extended_attribute.rb +1 -1
- data/lib/dnsimple/record.rb +7 -12
- data/lib/dnsimple/service.rb +2 -2
- data/lib/dnsimple/template.rb +11 -17
- data/lib/dnsimple/template_record.rb +4 -4
- data/lib/dnsimple/transfer_order.rb +1 -1
- data/lib/dnsimple/user.rb +6 -14
- data/lib/dnsimple/version.rb +1 -1
- data/spec/ci/.dnsimple.test +1 -1
- data/spec/dnsimple/certificate_spec.rb +40 -30
- data/spec/dnsimple/client_spec.rb +9 -9
- data/spec/dnsimple/contact_spec.rb +34 -26
- data/spec/dnsimple/domain_spec.rb +21 -74
- data/spec/dnsimple/extended_attributes_spec.rb +42 -9
- data/spec/dnsimple/record_spec.rb +35 -43
- data/spec/dnsimple/template_spec.rb +27 -5
- data/spec/dnsimple/user_spec.rb +22 -14
- data/spec/files/certificates/index/success.http +19 -0
- data/spec/files/certificates/show/notfound.http +17 -0
- data/spec/files/certificates/show/success.http +19 -0
- data/spec/files/contacts/show/notfound.http +17 -0
- data/spec/files/contacts/show/success.http +19 -0
- data/spec/files/domains/show/notfound.http +17 -0
- data/spec/files/domains/show/success.http +19 -0
- data/spec/files/extended_attributes/ca.http +19 -0
- data/spec/files/extended_attributes/com.http +19 -0
- data/spec/files/extended_attributes/success.http +19 -0
- data/spec/files/records/index/success.http +19 -0
- data/spec/files/records/show/notfound.http +17 -0
- data/spec/files/records/show/success.http +19 -0
- data/spec/files/templates/show/notfound.http +17 -0
- data/spec/files/templates/show/success.http +19 -0
- data/spec/files/users/me/success.http +19 -0
- data/spec/spec_helper.rb +14 -17
- data/spec/support/helpers.rb +15 -0
- data/spec/support/webmock.rb +11 -0
- metadata +65 -84
- data/features/README +0 -12
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_all.yml +0 -57
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_purchase.yml +0 -57
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_submit.yml +0 -57
- data/fixtures/vcr_cassettes/DNSimple_Contact/a_new_contact.yml +0 -50
- data/fixtures/vcr_cassettes/DNSimple_Contact/an_existing_contact.yml +0 -50
- data/fixtures/vcr_cassettes/DNSimple_Domain/_all.yml +0 -149
- data/fixtures/vcr_cassettes/DNSimple_Domain/applying_templates.yml +0 -246
- data/fixtures/vcr_cassettes/DNSimple_Domain/creating_a_new_domain.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_id.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_name.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_a_new_registrant_contact.yml +0 -52
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_an_existing_contact.yml +0 -52
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_ca.yml +0 -273
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_com.yml +0 -46
- data/fixtures/vcr_cassettes/DNSimple_Record/_all.yml +0 -195
- data/fixtures/vcr_cassettes/DNSimple_Record/creating_a_new_record.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Record/find_a_record.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Template/a_template.yml +0 -53
- data/fixtures/vcr_cassettes/DNSimple_User/_me.yml +0 -49
- data/spec/README +0 -10
@@ -38,7 +38,7 @@ module DNSimple
|
|
38
38
|
|
39
39
|
# Find the extended attributes for the given TLD
|
40
40
|
def self.find(tld, options={})
|
41
|
-
response = DNSimple::Client.get("extended_attributes/#{tld}", options)
|
41
|
+
response = DNSimple::Client.get("/v1/extended_attributes/#{tld}", options)
|
42
42
|
|
43
43
|
case response.code
|
44
44
|
when 200
|
data/lib/dnsimple/record.rb
CHANGED
@@ -7,18 +7,13 @@ module DNSimple
|
|
7
7
|
}
|
8
8
|
|
9
9
|
attr_accessor :id
|
10
|
-
|
11
10
|
attr_accessor :domain
|
12
|
-
|
13
11
|
attr_accessor :name
|
14
|
-
|
15
12
|
attr_accessor :content
|
16
|
-
|
17
|
-
attr_accessor :record_type
|
18
|
-
|
19
13
|
attr_accessor :ttl
|
20
|
-
|
21
14
|
attr_accessor :prio
|
15
|
+
attr_accessor :record_type
|
16
|
+
|
22
17
|
|
23
18
|
def fqdn
|
24
19
|
[name, domain.name].delete_if { |v| v !~ DNSimple::BLANK_REGEX }.join(".")
|
@@ -32,7 +27,7 @@ module DNSimple
|
|
32
27
|
|
33
28
|
options.merge!(:body => {:record => record_hash})
|
34
29
|
|
35
|
-
response = DNSimple::Client.put("domains/#{domain.id}/records/#{id}", options)
|
30
|
+
response = DNSimple::Client.put("/v1/domains/#{domain.id}/records/#{id}", options)
|
36
31
|
|
37
32
|
case response.code
|
38
33
|
when 200
|
@@ -43,7 +38,7 @@ module DNSimple
|
|
43
38
|
end
|
44
39
|
|
45
40
|
def delete(options={})
|
46
|
-
DNSimple::Client.delete("domains/#{domain.id}/records/#{id}", options)
|
41
|
+
DNSimple::Client.delete("/v1/domains/#{domain.id}/records/#{id}", options)
|
47
42
|
end
|
48
43
|
alias :destroy :delete
|
49
44
|
|
@@ -59,7 +54,7 @@ module DNSimple
|
|
59
54
|
|
60
55
|
options.merge!({:body => {:record => record_hash}})
|
61
56
|
|
62
|
-
response = DNSimple::Client.post("domains/#{domain.name}/records", options)
|
57
|
+
response = DNSimple::Client.post("/v1/domains/#{domain.name}/records", options)
|
63
58
|
|
64
59
|
case response.code
|
65
60
|
when 201
|
@@ -72,7 +67,7 @@ module DNSimple
|
|
72
67
|
end
|
73
68
|
|
74
69
|
def self.find(domain, id, options={})
|
75
|
-
response = DNSimple::Client.get("domains/#{domain.name}/records/#{id}", options)
|
70
|
+
response = DNSimple::Client.get("/v1/domains/#{domain.name}/records/#{id}", options)
|
76
71
|
|
77
72
|
case response.code
|
78
73
|
when 200
|
@@ -85,7 +80,7 @@ module DNSimple
|
|
85
80
|
end
|
86
81
|
|
87
82
|
def self.all(domain, options={})
|
88
|
-
response = DNSimple::Client.get("domains/#{domain.name}/records", options)
|
83
|
+
response = DNSimple::Client.get("/v1/domains/#{domain.name}/records", options)
|
89
84
|
|
90
85
|
case response.code
|
91
86
|
when 200
|
data/lib/dnsimple/service.rb
CHANGED
@@ -14,7 +14,7 @@ module DNSimple
|
|
14
14
|
# Find a service by its ID or short name
|
15
15
|
def self.find(id_or_short_name, options={})
|
16
16
|
id = id_or_short_name
|
17
|
-
response = DNSimple::Client.get("services/#{id}", options)
|
17
|
+
response = DNSimple::Client.get("/v1/services/#{id}", options)
|
18
18
|
|
19
19
|
case response.code
|
20
20
|
when 200
|
@@ -28,7 +28,7 @@ module DNSimple
|
|
28
28
|
|
29
29
|
# Get all of the services that can be applied to a domain
|
30
30
|
def self.all(options={})
|
31
|
-
response = DNSimple::Client.get("services", options)
|
31
|
+
response = DNSimple::Client.get("/v1/services", options)
|
32
32
|
|
33
33
|
case response.code
|
34
34
|
when 200
|
data/lib/dnsimple/template.rb
CHANGED
@@ -1,25 +1,11 @@
|
|
1
1
|
module DNSimple
|
2
|
-
|
3
2
|
class Template < Base
|
4
3
|
|
5
|
-
# The template ID in DNSimple
|
6
4
|
attr_accessor :id
|
7
|
-
|
8
|
-
# The template name
|
9
5
|
attr_accessor :name
|
10
|
-
|
11
|
-
# The template short name
|
12
6
|
attr_accessor :short_name
|
13
|
-
|
14
|
-
# The template description
|
15
7
|
attr_accessor :description
|
16
8
|
|
17
|
-
# Delete the template from DNSimple. WARNING: this cannot
|
18
|
-
# be undone.
|
19
|
-
def delete(options={})
|
20
|
-
DNSimple::Client.delete("templates/#{id}", options)
|
21
|
-
end
|
22
|
-
alias :destroy :delete
|
23
9
|
|
24
10
|
def self.create(name, short_name, description=nil, options={})
|
25
11
|
template_hash = {
|
@@ -30,7 +16,7 @@ module DNSimple
|
|
30
16
|
|
31
17
|
options.merge!(:body => {:dns_template => template_hash})
|
32
18
|
|
33
|
-
response = DNSimple::Client.post("templates", options)
|
19
|
+
response = DNSimple::Client.post("/v1/templates", options)
|
34
20
|
|
35
21
|
case response.code
|
36
22
|
when 201
|
@@ -42,7 +28,7 @@ module DNSimple
|
|
42
28
|
|
43
29
|
def self.find(id_or_short_name, options={})
|
44
30
|
id = id_or_short_name
|
45
|
-
response = DNSimple::Client.get("templates/#{id}", options)
|
31
|
+
response = DNSimple::Client.get("/v1/templates/#{id}", options)
|
46
32
|
|
47
33
|
case response.code
|
48
34
|
when 200
|
@@ -55,7 +41,7 @@ module DNSimple
|
|
55
41
|
end
|
56
42
|
|
57
43
|
def self.all(options={})
|
58
|
-
response = DNSimple::Client.get("templates", options)
|
44
|
+
response = DNSimple::Client.get("/v1/templates", options)
|
59
45
|
|
60
46
|
case response.code
|
61
47
|
when 200
|
@@ -65,5 +51,13 @@ module DNSimple
|
|
65
51
|
end
|
66
52
|
end
|
67
53
|
|
54
|
+
|
55
|
+
# Delete the template from DNSimple.
|
56
|
+
# WARNING: this cannot be undone.
|
57
|
+
def delete(options={})
|
58
|
+
DNSimple::Client.delete("/v1/templates/#{id}", options)
|
59
|
+
end
|
60
|
+
alias :destroy :delete
|
61
|
+
|
68
62
|
end
|
69
63
|
end
|
@@ -25,7 +25,7 @@ module DNSimple
|
|
25
25
|
attr_accessor :prio
|
26
26
|
|
27
27
|
def delete(options={})
|
28
|
-
DNSimple::Client.delete("templates/#{template.id}/template_records/#{id}", options)
|
28
|
+
DNSimple::Client.delete("/v1/templates/#{template.id}/template_records/#{id}", options)
|
29
29
|
end
|
30
30
|
alias :destroy :delete
|
31
31
|
|
@@ -38,7 +38,7 @@ module DNSimple
|
|
38
38
|
|
39
39
|
options.merge!({:query => {:dns_template_record => record_hash}})
|
40
40
|
|
41
|
-
response = DNSimple::Client.post("templates/#{template.id}/template_records", options)
|
41
|
+
response = DNSimple::Client.post("/v1/templates/#{template.id}/template_records", options)
|
42
42
|
|
43
43
|
case response.code
|
44
44
|
when 201
|
@@ -50,7 +50,7 @@ module DNSimple
|
|
50
50
|
|
51
51
|
def self.find(short_name, id, options={})
|
52
52
|
template = DNSimple::Template.find(short_name)
|
53
|
-
response = DNSimple::Client.get("templates/#{template.id}/template_records/#{id}", options)
|
53
|
+
response = DNSimple::Client.get("/v1/templates/#{template.id}/template_records/#{id}", options)
|
54
54
|
|
55
55
|
case response.code
|
56
56
|
when 200
|
@@ -66,7 +66,7 @@ module DNSimple
|
|
66
66
|
# given short name.
|
67
67
|
def self.all(short_name, options={})
|
68
68
|
template = DNSimple::Template.find(short_name)
|
69
|
-
response = DNSimple::Client.get("templates/#{template.id}/template_records", options)
|
69
|
+
response = DNSimple::Client.get("/v1/templates/#{template.id}/template_records", options)
|
70
70
|
|
71
71
|
case response.code
|
72
72
|
when 200
|
data/lib/dnsimple/user.rb
CHANGED
@@ -2,29 +2,21 @@ module DNSimple
|
|
2
2
|
class User < Base
|
3
3
|
|
4
4
|
attr_accessor :id
|
5
|
-
|
6
|
-
attr_accessor :created_at
|
7
|
-
|
8
|
-
attr_accessor :updated_at
|
9
|
-
|
10
5
|
attr_accessor :email
|
11
|
-
|
6
|
+
attr_accessor :domain_count
|
7
|
+
attr_accessor :domain_limit
|
12
8
|
attr_accessor :login_count
|
13
|
-
|
14
9
|
attr_accessor :failed_login_count
|
10
|
+
attr_accessor :created_at
|
11
|
+
attr_accessor :updated_at
|
15
12
|
|
16
|
-
attr_accessor :domain_count
|
17
|
-
|
18
|
-
attr_accessor :domain_limit
|
19
13
|
|
20
|
-
def self.me
|
21
|
-
response = DNSimple::Client.get("users/me"
|
14
|
+
def self.me
|
15
|
+
response = DNSimple::Client.get("/v1/users/me")
|
22
16
|
|
23
17
|
case response.code
|
24
18
|
when 200
|
25
19
|
new(response["user"])
|
26
|
-
when 404
|
27
|
-
raise RecordNotFound, "Could not find account with current credentials"
|
28
20
|
else
|
29
21
|
raise RequestError.new("Error finding account", response)
|
30
22
|
end
|
data/lib/dnsimple/version.rb
CHANGED
data/spec/ci/.dnsimple.test
CHANGED
@@ -1,45 +1,55 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe DNSimple::Certificate do
|
4
|
-
let(:domain_name) { 'example.com' }
|
5
|
-
let(:domain) { DNSimple::Domain.new(:name => domain_name) }
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
let(:domain) { DNSimple::Domain.new(:name => "example.com") }
|
6
|
+
|
7
|
+
|
8
|
+
describe ".find" do
|
9
|
+
before do
|
10
|
+
stub_request(:get, %r[/v1/domains/example.com/certificates/2]).
|
11
|
+
to_return(read_fixture("certificates/show/success.http"))
|
12
12
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
|
14
|
+
it "builds the correct request" do
|
15
|
+
described_class.find(domain, "2")
|
16
|
+
|
17
|
+
WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com/certificates/2").
|
18
|
+
with(:headers => { 'Accept' => 'application/json' })
|
17
19
|
end
|
18
|
-
end
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
context "when the certificate exists" do
|
22
|
+
it "returns the certificate" do
|
23
|
+
result = described_class.find(domain, "2")
|
24
|
+
|
25
|
+
expect(result.id).to eq(4576)
|
26
|
+
expect(result.domain).to eq(domain)
|
27
|
+
expect(result.name).to eq("www")
|
28
|
+
expect(result.csr).to eq("-----BEGIN NEW CERTIFICATE REQUEST-----\nRHr2akB4KMba6FMAsvlStnO/2ika16hNx+d3smPNsER+HA==\n-----END NEW CERTIFICATE REQUEST-----\n")
|
29
|
+
expect(result.ssl_certificate).to eq("-----BEGIN CERTIFICATE-----\nXwTkw5UCPpaVyUYcwHlvaprOe9ZbwIyEHm2AT1rW+70=\n-----END CERTIFICATE-----\n")
|
30
|
+
expect(result.private_key).to eq("-----BEGIN RSA PRIVATE KEY-----\nUeXbFi7o+nuPfRhpBFQEKwacKFc3Hnc1hH6UsnC0KY25cUif7yz38A==\n-----END RSA PRIVATE KEY-----\n")
|
31
|
+
expect(result.approver_email).to eq("example@example.net")
|
32
|
+
expect(result.created_at).to eq("2013-09-17T21:54:42Z")
|
33
|
+
expect(result.updated_at).to eq("2013-09-17T22:25:36Z")
|
34
|
+
|
35
|
+
expect(result.available_approver_emails).to be_nil
|
36
|
+
expect(result.certificate_status).to be_nil
|
37
|
+
end
|
26
38
|
end
|
27
39
|
end
|
28
40
|
|
29
|
-
|
30
|
-
|
31
|
-
it "
|
32
|
-
|
33
|
-
|
34
|
-
|
41
|
+
|
42
|
+
describe "#fqdn" do
|
43
|
+
it "joins the name and domain name" do
|
44
|
+
certificate = described_class.new(:name => 'www')
|
45
|
+
certificate.domain = domain
|
46
|
+
expect(certificate.fqdn).to eq("www.#{domain.name}")
|
35
47
|
end
|
36
|
-
end
|
37
48
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
certificate.submit("admin@example.com")
|
49
|
+
it "strips blank parts from name" do
|
50
|
+
certificate = described_class.new(:name => '')
|
51
|
+
certificate.domain = domain
|
52
|
+
expect(certificate.fqdn).to eq(domain.name)
|
43
53
|
end
|
44
54
|
end
|
45
55
|
|
@@ -26,40 +26,40 @@ describe DNSimple::Client do
|
|
26
26
|
DNSimple::Client.username = 'user'
|
27
27
|
DNSimple::Client.password = 'pass'
|
28
28
|
DNSimple::Client.api_token = nil
|
29
|
-
DNSimple::Client.base_uri = 'https://
|
29
|
+
DNSimple::Client.base_uri = 'https://api.example.com/'
|
30
30
|
|
31
31
|
HTTParty.expects(method).
|
32
|
-
with('https://
|
32
|
+
with('https://api.example.com/domains',
|
33
33
|
:format => :json, :headers => {'Accept' => 'application/json'},
|
34
|
-
:basic_auth => {:username => 'user', :password => 'pass'}).
|
34
|
+
:basic_auth => { :username => 'user', :password => 'pass'}).
|
35
35
|
returns(response)
|
36
36
|
|
37
|
-
DNSimple::Client.send(method, 'domains')
|
37
|
+
DNSimple::Client.send(method, '/domains')
|
38
38
|
end
|
39
39
|
|
40
40
|
it "uses header authentication if there's an api token provided" do
|
41
41
|
DNSimple::Client.username = 'user'
|
42
42
|
DNSimple::Client.password = nil
|
43
43
|
DNSimple::Client.api_token = 'token'
|
44
|
-
DNSimple::Client.base_uri = 'https://
|
44
|
+
DNSimple::Client.base_uri = 'https://api.example.com/'
|
45
45
|
|
46
46
|
HTTParty.expects(method).
|
47
|
-
with('https://
|
47
|
+
with('https://api.example.com/domains',
|
48
48
|
:format => :json, :headers => {'Accept' => 'application/json',
|
49
49
|
'X-DNSimple-Token' => 'user:token'}).
|
50
50
|
returns(response)
|
51
51
|
|
52
|
-
DNSimple::Client.send(method, 'domains')
|
52
|
+
DNSimple::Client.send(method, '/domains')
|
53
53
|
end
|
54
54
|
|
55
55
|
it "raises an error if there's no password or api token provided" do
|
56
56
|
DNSimple::Client.username = 'user'
|
57
57
|
DNSimple::Client.password = nil
|
58
58
|
DNSimple::Client.api_token = nil
|
59
|
-
DNSimple::Client.base_uri = 'https://
|
59
|
+
DNSimple::Client.base_uri = 'https://api.example.com/'
|
60
60
|
|
61
61
|
lambda {
|
62
|
-
DNSimple::Client.send(method, 'domains')
|
62
|
+
DNSimple::Client.send(method, '/domains')
|
63
63
|
}.should raise_error(DNSimple::Error, 'A password or API token is required for all API requests.')
|
64
64
|
end
|
65
65
|
end
|
@@ -2,35 +2,43 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe DNSimple::Contact do
|
4
4
|
|
5
|
-
describe "
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
{
|
10
|
-
:first_name => 'John',
|
11
|
-
:last_name => 'Doe',
|
12
|
-
:address1 => '1 SW 1st Street',
|
13
|
-
:city => 'Miami',
|
14
|
-
:state_province => 'FL',
|
15
|
-
:postal_code => '33143',
|
16
|
-
:country => 'US',
|
17
|
-
:email_address => 'john.doe@example.com',
|
18
|
-
:phone => '305 111 2222'
|
19
|
-
}
|
20
|
-
}
|
21
|
-
it "has specific attributes" do
|
22
|
-
contact = DNSimple::Contact.create(contact_attributes)
|
23
|
-
contact.first_name.should eql(contact_attributes[:first_name])
|
24
|
-
contact.id.should_not be_nil
|
5
|
+
describe ".find" do
|
6
|
+
before do
|
7
|
+
stub_request(:get, %r[/v1/contacts/2]).
|
8
|
+
to_return(read_fixture("contacts/show/success.http"))
|
25
9
|
end
|
26
|
-
end
|
27
10
|
|
28
|
-
|
29
|
-
|
11
|
+
it "builds the correct request" do
|
12
|
+
described_class.find("2")
|
13
|
+
|
14
|
+
WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/contacts/2").
|
15
|
+
with(:headers => { 'Accept' => 'application/json' })
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when the contact exists" do
|
19
|
+
it "returns the contact" do
|
20
|
+
result = described_class.find("2")
|
21
|
+
|
22
|
+
expect(result).to be_a(described_class)
|
23
|
+
expect(result.id).to eq(2)
|
24
|
+
expect(result.first_name).to eq("Simone")
|
25
|
+
expect(result.last_name).to eq("Carletti")
|
26
|
+
expect(result.job_title).to eq("Underwater Programmer")
|
27
|
+
expect(result.organization_name).to eq("DNSimple")
|
28
|
+
expect(result.email_address).to eq("example@example.com")
|
29
|
+
expect(result.phone).to eq("+1 111 000000")
|
30
|
+
expect(result.fax).to eq("+1 222 000000")
|
31
|
+
expect(result.address1).to eq("Awesome Street")
|
32
|
+
expect(result.address2).to eq("c/o Someone")
|
33
|
+
expect(result.city).to eq("Rome")
|
34
|
+
expect(result.state_province).to eq("RM")
|
35
|
+
expect(result.postal_code).to eq("00171")
|
36
|
+
expect(result.country).to eq("IT")
|
37
|
+
expect(result.created_at).to eq("2013-11-08T17:23:15Z")
|
38
|
+
expect(result.updated_at).to eq("2013-11-08T17:23:15Z")
|
30
39
|
|
31
|
-
|
32
|
-
|
33
|
-
contact.should_not be_nil
|
40
|
+
expect(result.phone_ext).to be_nil
|
41
|
+
end
|
34
42
|
end
|
35
43
|
end
|
36
44
|
|