gandirb 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. data/CHANGELOG +1 -0
  2. data/LICENSE +19 -0
  3. data/README +35 -0
  4. data/Rakefile +32 -0
  5. data/gandirb.gemspec +34 -0
  6. data/lib/gandi/base.rb +121 -0
  7. data/lib/gandi/domain.rb +134 -0
  8. data/lib/gandi/domain_modules/contact.rb +36 -0
  9. data/lib/gandi/domain_modules/host.rb +29 -0
  10. data/lib/gandi/domain_modules/mail.rb +80 -0
  11. data/lib/gandi/domain_modules/name_servers.rb +28 -0
  12. data/lib/gandi/domain_modules/operations.rb +30 -0
  13. data/lib/gandi/domain_modules/redirection.rb +25 -0
  14. data/lib/gandi.rb +9 -0
  15. data/rdoc/classes/Gandi/Base.html +397 -0
  16. data/rdoc/classes/Gandi/DataError.html +111 -0
  17. data/rdoc/classes/Gandi/Domain.html +623 -0
  18. data/rdoc/classes/Gandi/DomainModules/Contact.html +246 -0
  19. data/rdoc/classes/Gandi/DomainModules/Host.html +227 -0
  20. data/rdoc/classes/Gandi/DomainModules/NameServers.html +226 -0
  21. data/rdoc/classes/Gandi/DomainModules/Operations.html +229 -0
  22. data/rdoc/classes/Gandi/DomainModules/Redirection.html +215 -0
  23. data/rdoc/classes/Gandi/DomainModules.html +136 -0
  24. data/rdoc/classes/Gandi/ServerError.html +111 -0
  25. data/rdoc/classes/Gandi.html +153 -0
  26. data/rdoc/created.rid +1 -0
  27. data/rdoc/files/README.html +162 -0
  28. data/rdoc/files/lib/gandi/base_rb.html +109 -0
  29. data/rdoc/files/lib/gandi/domain_modules/contact_rb.html +101 -0
  30. data/rdoc/files/lib/gandi/domain_modules/host_rb.html +101 -0
  31. data/rdoc/files/lib/gandi/domain_modules/name_servers_rb.html +101 -0
  32. data/rdoc/files/lib/gandi/domain_modules/operations_rb.html +101 -0
  33. data/rdoc/files/lib/gandi/domain_modules/redirection_rb.html +101 -0
  34. data/rdoc/files/lib/gandi/domain_rb.html +101 -0
  35. data/rdoc/files/lib/gandi_rb.html +101 -0
  36. data/rdoc/fr_class_index.html +38 -0
  37. data/rdoc/fr_file_index.html +36 -0
  38. data/rdoc/fr_method_index.html +83 -0
  39. data/rdoc/index.html +24 -0
  40. data/rdoc/rdoc-style.css +208 -0
  41. data/test/gandi/base_test.rb +188 -0
  42. data/test/gandi/domain_test.rb +302 -0
  43. data/test/gandi_test.rb +9 -0
  44. data/test/test_helper.rb +9 -0
  45. metadata +124 -0
@@ -0,0 +1,38 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Classes
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Classes</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Classes</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/Gandi.html">Gandi</a><br />
24
+ <a href="classes/Gandi/Base.html">Gandi::Base</a><br />
25
+ <a href="classes/Gandi/DataError.html">Gandi::DataError</a><br />
26
+ <a href="classes/Gandi/Domain.html">Gandi::Domain</a><br />
27
+ <a href="classes/Gandi/DomainModules.html">Gandi::DomainModules</a><br />
28
+ <a href="classes/Gandi/DomainModules/Contact.html">Gandi::DomainModules::Contact</a><br />
29
+ <a href="classes/Gandi/DomainModules/Host.html">Gandi::DomainModules::Host</a><br />
30
+ <a href="classes/Gandi/DomainModules/Mail.html">Gandi::DomainModules::Mail</a><br />
31
+ <a href="classes/Gandi/DomainModules/NameServers.html">Gandi::DomainModules::NameServers</a><br />
32
+ <a href="classes/Gandi/DomainModules/Operations.html">Gandi::DomainModules::Operations</a><br />
33
+ <a href="classes/Gandi/DomainModules/Redirection.html">Gandi::DomainModules::Redirection</a><br />
34
+ <a href="classes/Gandi/ServerError.html">Gandi::ServerError</a><br />
35
+ </div>
36
+ </div>
37
+ </body>
38
+ </html>
@@ -0,0 +1,36 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Files
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Files</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Files</h1>
22
+ <div id="index-entries">
23
+ <a href="files/README.html">README</a><br />
24
+ <a href="files/lib/gandi_rb.html">lib/gandi.rb</a><br />
25
+ <a href="files/lib/gandi/base_rb.html">lib/gandi/base.rb</a><br />
26
+ <a href="files/lib/gandi/domain_rb.html">lib/gandi/domain.rb</a><br />
27
+ <a href="files/lib/gandi/domain_modules/contact_rb.html">lib/gandi/domain_modules/contact.rb</a><br />
28
+ <a href="files/lib/gandi/domain_modules/host_rb.html">lib/gandi/domain_modules/host.rb</a><br />
29
+ <a href="files/lib/gandi/domain_modules/mail_rb.html">lib/gandi/domain_modules/mail.rb</a><br />
30
+ <a href="files/lib/gandi/domain_modules/name_servers_rb.html">lib/gandi/domain_modules/name_servers.rb</a><br />
31
+ <a href="files/lib/gandi/domain_modules/operations_rb.html">lib/gandi/domain_modules/operations.rb</a><br />
32
+ <a href="files/lib/gandi/domain_modules/redirection_rb.html">lib/gandi/domain_modules/redirection.rb</a><br />
33
+ </div>
34
+ </div>
35
+ </body>
36
+ </html>
@@ -0,0 +1,83 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Methods
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Methods</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Methods</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/Gandi/Base.html#M000055">account_balance (Gandi::Base)</a><br />
24
+ <a href="classes/Gandi/Base.html#M000056">account_currency (Gandi::Base)</a><br />
25
+ <a href="classes/Gandi/Base.html#M000051">call (Gandi::Base)</a><br />
26
+ <a href="classes/Gandi/DomainModules/Contact.html#M000001">contact_create (Gandi::DomainModules::Contact)</a><br />
27
+ <a href="classes/Gandi/DomainModules/Contact.html#M000003">contact_del (Gandi::DomainModules::Contact)</a><br />
28
+ <a href="classes/Gandi/DomainModules/Contact.html#M000004">contact_info (Gandi::DomainModules::Contact)</a><br />
29
+ <a href="classes/Gandi/DomainModules/Contact.html#M000002">contact_update (Gandi::DomainModules::Contact)</a><br />
30
+ <a href="classes/Gandi/Domain.html#M000034">domain_available (Gandi::Domain)</a><br />
31
+ <a href="classes/Gandi/Domain.html#M000048">domain_change_contact (Gandi::Domain)</a><br />
32
+ <a href="classes/Gandi/Domain.html#M000047">domain_change_owner (Gandi::Domain)</a><br />
33
+ <a href="classes/Gandi/Domain.html#M000039">domain_create (Gandi::Domain)</a><br />
34
+ <a href="classes/Gandi/Domain.html#M000041">domain_del (Gandi::Domain)</a><br />
35
+ <a href="classes/Gandi/DomainModules/Mail.html#M000009">domain_forward_delete (Gandi::DomainModules::Mail)</a><br />
36
+ <a href="classes/Gandi/DomainModules/Mail.html#M000007">domain_forward_list (Gandi::DomainModules::Mail)</a><br />
37
+ <a href="classes/Gandi/DomainModules/Mail.html#M000008">domain_forward_set (Gandi::DomainModules::Mail)</a><br />
38
+ <a href="classes/Gandi/DomainModules/Mail.html#M000005">domain_gandimail_activate (Gandi::DomainModules::Mail)</a><br />
39
+ <a href="classes/Gandi/DomainModules/Mail.html#M000006">domain_gandimail_deactivate (Gandi::DomainModules::Mail)</a><br />
40
+ <a href="classes/Gandi/Domain.html#M000037">domain_info (Gandi::Domain)</a><br />
41
+ <a href="classes/Gandi/Domain.html#M000033">domain_list (Gandi::Domain)</a><br />
42
+ <a href="classes/Gandi/Domain.html#M000035">domain_lock (Gandi::Domain)</a><br />
43
+ <a href="classes/Gandi/DomainModules/Mail.html#M000012">domain_mailbox_add (Gandi::DomainModules::Mail)</a><br />
44
+ <a href="classes/Gandi/DomainModules/Mail.html#M000015">domain_mailbox_alias_list (Gandi::DomainModules::Mail)</a><br />
45
+ <a href="classes/Gandi/DomainModules/Mail.html#M000016">domain_mailbox_alias_set (Gandi::DomainModules::Mail)</a><br />
46
+ <a href="classes/Gandi/DomainModules/Mail.html#M000014">domain_mailbox_delete (Gandi::DomainModules::Mail)</a><br />
47
+ <a href="classes/Gandi/DomainModules/Mail.html#M000011">domain_mailbox_info (Gandi::DomainModules::Mail)</a><br />
48
+ <a href="classes/Gandi/DomainModules/Mail.html#M000010">domain_mailbox_list (Gandi::DomainModules::Mail)</a><br />
49
+ <a href="classes/Gandi/DomainModules/Mail.html#M000017">domain_mailbox_purge (Gandi::DomainModules::Mail)</a><br />
50
+ <a href="classes/Gandi/DomainModules/Mail.html#M000013">domain_mailbox_update (Gandi::DomainModules::Mail)</a><br />
51
+ <a href="classes/Gandi/DomainModules/NameServers.html#M000026">domain_ns_add (Gandi::DomainModules::NameServers)</a><br />
52
+ <a href="classes/Gandi/DomainModules/NameServers.html#M000027">domain_ns_del (Gandi::DomainModules::NameServers)</a><br />
53
+ <a href="classes/Gandi/DomainModules/NameServers.html#M000025">domain_ns_list (Gandi::DomainModules::NameServers)</a><br />
54
+ <a href="classes/Gandi/DomainModules/NameServers.html#M000028">domain_ns_set (Gandi::DomainModules::NameServers)</a><br />
55
+ <a href="classes/Gandi/Domain.html#M000038">domain_renew (Gandi::Domain)</a><br />
56
+ <a href="classes/Gandi/Domain.html#M000040">domain_restore (Gandi::Domain)</a><br />
57
+ <a href="classes/Gandi/Domain.html#M000046">domain_trade (Gandi::Domain)</a><br />
58
+ <a href="classes/Gandi/Domain.html#M000044">domain_transfer_in (Gandi::Domain)</a><br />
59
+ <a href="classes/Gandi/Domain.html#M000042">domain_transfer_in_available (Gandi::Domain)</a><br />
60
+ <a href="classes/Gandi/Domain.html#M000043">domain_transfer_in_available? (Gandi::Domain)</a><br />
61
+ <a href="classes/Gandi/Domain.html#M000045">domain_transfer_out (Gandi::Domain)</a><br />
62
+ <a href="classes/Gandi/Domain.html#M000036">domain_unlock (Gandi::Domain)</a><br />
63
+ <a href="classes/Gandi/DomainModules/Redirection.html#M000023">domain_web_redir_add (Gandi::DomainModules::Redirection)</a><br />
64
+ <a href="classes/Gandi/DomainModules/Redirection.html#M000024">domain_web_redir_del (Gandi::DomainModules::Redirection)</a><br />
65
+ <a href="classes/Gandi/DomainModules/Redirection.html#M000022">domain_web_redir_list (Gandi::DomainModules::Redirection)</a><br />
66
+ <a href="classes/Gandi/DomainModules/Host.html#M000031">host_create (Gandi::DomainModules::Host)</a><br />
67
+ <a href="classes/Gandi/DomainModules/Host.html#M000032">host_delete (Gandi::DomainModules::Host)</a><br />
68
+ <a href="classes/Gandi/DomainModules/Host.html#M000030">host_info (Gandi::DomainModules::Host)</a><br />
69
+ <a href="classes/Gandi/DomainModules/Host.html#M000029">host_list (Gandi::DomainModules::Host)</a><br />
70
+ <a href="classes/Gandi/Base.html#M000057">login (Gandi::Base)</a><br />
71
+ <a href="classes/Gandi/Base.html#M000052">login (Gandi::Base)</a><br />
72
+ <a href="classes/Gandi/Base.html#M000050">new (Gandi::Base)</a><br />
73
+ <a href="classes/Gandi/DomainModules/Operations.html#M000021">operation_cancel (Gandi::DomainModules::Operations)</a><br />
74
+ <a href="classes/Gandi/DomainModules/Operations.html#M000019">operation_details (Gandi::DomainModules::Operations)</a><br />
75
+ <a href="classes/Gandi/DomainModules/Operations.html#M000018">operation_list (Gandi::DomainModules::Operations)</a><br />
76
+ <a href="classes/Gandi/DomainModules/Operations.html#M000020">operation_relaunch (Gandi::DomainModules::Operations)</a><br />
77
+ <a href="classes/Gandi/Base.html#M000054">password (Gandi::Base)</a><br />
78
+ <a href="classes/Gandi/Base.html#M000053">su (Gandi::Base)</a><br />
79
+ <a href="classes/Gandi/Domain.html#M000049">tld_list (Gandi::Domain)</a><br />
80
+ </div>
81
+ </div>
82
+ </body>
83
+ </html>
data/rdoc/index.html ADDED
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
+
6
+ <!--
7
+
8
+ Gandirb
9
+
10
+ -->
11
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
+ <head>
13
+ <title>Gandirb</title>
14
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
15
+ </head>
16
+ <frameset rows="20%, 80%">
17
+ <frameset cols="25%,35%,45%">
18
+ <frame src="fr_file_index.html" title="Files" name="Files" />
19
+ <frame src="fr_class_index.html" name="Classes" />
20
+ <frame src="fr_method_index.html" name="Methods" />
21
+ </frameset>
22
+ <frame src="files/README.html" name="docwin" />
23
+ </frameset>
24
+ </html>
@@ -0,0 +1,208 @@
1
+
2
+ body {
3
+ font-family: Verdana,Arial,Helvetica,sans-serif;
4
+ font-size: 90%;
5
+ margin: 0;
6
+ margin-left: 40px;
7
+ padding: 0;
8
+ background: white;
9
+ }
10
+
11
+ h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
+ h1 { font-size: 150%; }
13
+ h2,h3,h4 { margin-top: 1em; }
14
+
15
+ a { background: #eef; color: #039; text-decoration: none; }
16
+ a:hover { background: #039; color: #eef; }
17
+
18
+ /* Override the base stylesheet's Anchor inside a table cell */
19
+ td > a {
20
+ background: transparent;
21
+ color: #039;
22
+ text-decoration: none;
23
+ }
24
+
25
+ /* and inside a section title */
26
+ .section-title > a {
27
+ background: transparent;
28
+ color: #eee;
29
+ text-decoration: none;
30
+ }
31
+
32
+ /* === Structural elements =================================== */
33
+
34
+ div#index {
35
+ margin: 0;
36
+ margin-left: -40px;
37
+ padding: 0;
38
+ font-size: 90%;
39
+ }
40
+
41
+
42
+ div#index a {
43
+ margin-left: 0.7em;
44
+ }
45
+
46
+ div#index .section-bar {
47
+ margin-left: 0px;
48
+ padding-left: 0.7em;
49
+ background: #ccc;
50
+ font-size: small;
51
+ }
52
+
53
+
54
+ div#classHeader, div#fileHeader {
55
+ width: auto;
56
+ color: white;
57
+ padding: 0.5em 1.5em 0.5em 1.5em;
58
+ margin: 0;
59
+ margin-left: -40px;
60
+ border-bottom: 3px solid #006;
61
+ }
62
+
63
+ div#classHeader a, div#fileHeader a {
64
+ background: inherit;
65
+ color: white;
66
+ }
67
+
68
+ div#classHeader td, div#fileHeader td {
69
+ background: inherit;
70
+ color: white;
71
+ }
72
+
73
+
74
+ div#fileHeader {
75
+ background: #057;
76
+ }
77
+
78
+ div#classHeader {
79
+ background: #048;
80
+ }
81
+
82
+
83
+ .class-name-in-header {
84
+ font-size: 180%;
85
+ font-weight: bold;
86
+ }
87
+
88
+
89
+ div#bodyContent {
90
+ padding: 0 1.5em 0 1.5em;
91
+ }
92
+
93
+ div#description {
94
+ padding: 0.5em 1.5em;
95
+ background: #efefef;
96
+ border: 1px dotted #999;
97
+ }
98
+
99
+ div#description h1,h2,h3,h4,h5,h6 {
100
+ color: #125;;
101
+ background: transparent;
102
+ }
103
+
104
+ div#validator-badges {
105
+ text-align: center;
106
+ }
107
+ div#validator-badges img { border: 0; }
108
+
109
+ div#copyright {
110
+ color: #333;
111
+ background: #efefef;
112
+ font: 0.75em sans-serif;
113
+ margin-top: 5em;
114
+ margin-bottom: 0;
115
+ padding: 0.5em 2em;
116
+ }
117
+
118
+
119
+ /* === Classes =================================== */
120
+
121
+ table.header-table {
122
+ color: white;
123
+ font-size: small;
124
+ }
125
+
126
+ .type-note {
127
+ font-size: small;
128
+ color: #DEDEDE;
129
+ }
130
+
131
+ .xxsection-bar {
132
+ background: #eee;
133
+ color: #333;
134
+ padding: 3px;
135
+ }
136
+
137
+ .section-bar {
138
+ color: #333;
139
+ border-bottom: 1px solid #999;
140
+ margin-left: -20px;
141
+ }
142
+
143
+
144
+ .section-title {
145
+ background: #79a;
146
+ color: #eee;
147
+ padding: 3px;
148
+ margin-top: 2em;
149
+ margin-left: -30px;
150
+ border: 1px solid #999;
151
+ }
152
+
153
+ .top-aligned-row { vertical-align: top }
154
+ .bottom-aligned-row { vertical-align: bottom }
155
+
156
+ /* --- Context section classes ----------------------- */
157
+
158
+ .context-row { }
159
+ .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
+ .context-item-value { font-size: small; color: #448; }
161
+ .context-item-desc { color: #333; padding-left: 2em; }
162
+
163
+ /* --- Method classes -------------------------- */
164
+ .method-detail {
165
+ background: #efefef;
166
+ padding: 0;
167
+ margin-top: 0.5em;
168
+ margin-bottom: 1em;
169
+ border: 1px dotted #ccc;
170
+ }
171
+ .method-heading {
172
+ color: black;
173
+ background: #ccc;
174
+ border-bottom: 1px solid #666;
175
+ padding: 0.2em 0.5em 0 0.5em;
176
+ }
177
+ .method-signature { color: black; background: inherit; }
178
+ .method-name { font-weight: bold; }
179
+ .method-args { font-style: italic; }
180
+ .method-description { padding: 0 0.5em 0 0.5em; }
181
+
182
+ /* --- Source code sections -------------------- */
183
+
184
+ a.source-toggle { font-size: 90%; }
185
+ div.method-source-code {
186
+ background: #262626;
187
+ color: #ffdead;
188
+ margin: 1em;
189
+ padding: 0.5em;
190
+ border: 1px dashed #999;
191
+ overflow: hidden;
192
+ }
193
+
194
+ div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
+
196
+ /* --- Ruby keyword styles --------------------- */
197
+
198
+ .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
+
200
+ .ruby-constant { color: #7fffd4; background: transparent; }
201
+ .ruby-keyword { color: #00ffff; background: transparent; }
202
+ .ruby-ivar { color: #eedd82; background: transparent; }
203
+ .ruby-operator { color: #00ffee; background: transparent; }
204
+ .ruby-identifier { color: #ffdead; background: transparent; }
205
+ .ruby-node { color: #ffa07a; background: transparent; }
206
+ .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
+ .ruby-regexp { color: #ffa07a; background: transparent; }
208
+ .ruby-value { color: #7fffd4; background: transparent; }
@@ -0,0 +1,188 @@
1
+ require 'test_helper'
2
+
3
+ class BaseTest < ActiveSupport::TestCase
4
+ def setup
5
+ @login = 'XX000-Gandi'
6
+ @password = 'dummy'
7
+ @uri = Gandi::Domain::TEST_URL
8
+
9
+ @session_id = "session id"
10
+ end
11
+
12
+ context "an instance of Gandi::Base without an URL provided" do
13
+ should "raise an error when trying to initialize" do
14
+ assert_raise ArgumentError do
15
+ Gandi::Base.new @login, @password
16
+ end
17
+ end
18
+
19
+ should "raise an error when trying to login directly" do
20
+ assert_raise ArgumentError do
21
+ Gandi::Base.login @login, @password
22
+ end
23
+ end
24
+ end
25
+
26
+ context "an instance of Gandi::Base with an URL provided" do
27
+ setup do
28
+ @gandi_base = Gandi::Base.new @login, @password, @uri
29
+ end
30
+
31
+ context "without logging in" do
32
+ should "raise a runtime error error when trying to call an arbitrary method" do
33
+ assert_raise RuntimeError do
34
+ @gandi_base.call "mymethod"
35
+ end
36
+ end
37
+
38
+ should "raise a runtime error error when trying to call an account method" do
39
+ %w(account_balance account_currency).each do |method|
40
+ assert_raise RuntimeError do
41
+ @gandi_base.send(method)
42
+ end
43
+ end
44
+ end
45
+
46
+ should "raise a runtime error error when trying to su or change password" do
47
+ assert_raise RuntimeError do
48
+ @gandi_base.su 'anotherhandle-Gandi'
49
+ end
50
+
51
+ assert_raise RuntimeError do
52
+ @gandi_base.password 'mypassword'
53
+ end
54
+ end
55
+
56
+ should "raise a runtime error error when trying to use raw_call" do
57
+ assert_raise RuntimeError do
58
+ @gandi_base.send :raw_call, "mymethod"
59
+ end
60
+ end
61
+
62
+ should "have a handler set to nil" do
63
+ assert @gandi_base.handler.nil?
64
+ end
65
+
66
+ should "have a session id set to nil" do
67
+ assert @gandi_base.session_id.nil?
68
+ end
69
+ end
70
+
71
+ context "logging in" do
72
+ should "raise an error if the account does not exist" do
73
+ XMLRPC::Client.any_instance.expects(:call).raises(Gandi::DataError.new("DataError: account does not exist [login: #{@login}]"))
74
+ assert_raise Gandi::DataError do
75
+ @gandi_base.login
76
+ end
77
+ end
78
+
79
+ should "raise an error if the password is wrong" do
80
+ XMLRPC::Client.any_instance.expects(:call).raises(Gandi::DataError.new("DataError: invalid value for password [incorrect password]"))
81
+ assert_raise Gandi::DataError do
82
+ @gandi_base.login
83
+ end
84
+ end
85
+
86
+ context "with correct credentials" do
87
+ setup do
88
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).returns(@session_id)
89
+ end
90
+
91
+ should "return a session string when using correct credentials and store it" do
92
+ session_id = @gandi_base.login
93
+ assert session_id.is_a? String
94
+ assert_equal session_id, @gandi_base.session_id
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ context "An instance of Gandi::Base using login directly" do
101
+ setup do
102
+ XMLRPC::Client.any_instance.expects(:call).at_least_once.with("login", @login, @password, false).returns(@session_id)
103
+ @gandi_base = Gandi::Base.login @login, @password, @uri
104
+ end
105
+
106
+ should "have a session id" do
107
+ assert_equal @session_id, @gandi_base.session_id
108
+ end
109
+
110
+ should "have a handler" do
111
+ assert @gandi_base.handler
112
+ end
113
+
114
+ should "get the account balance" do
115
+ @gandi_base.handler.expects(:call).with("account_balance", @session_id).returns(1000)
116
+ assert @gandi_base.account_balance.is_a? Numeric
117
+ end
118
+
119
+ should "get the currency name" do
120
+ @gandi_base.handler.expects(:call).with("account_currency", @session_id).returns("EUR")
121
+ assert_match /\w{3}/, @gandi_base.account_currency
122
+ end
123
+
124
+ should "change the session id when suing to another handle" do
125
+ @gandi_base.handler.expects(:call).with("su", @session_id, "NEWHANDLE-Gandi").returns("new session id")
126
+
127
+ @gandi_base.su "NEWHANDLE-Gandi"
128
+ assert_equal "new session id", @gandi_base.session_id
129
+ end
130
+
131
+ should "change the password" do
132
+ @gandi_base.handler.expects(:call).with("password", @session_id, "newpassword").returns(true)
133
+
134
+ assert @gandi_base.password "newpassword"
135
+ end
136
+ end
137
+
138
+ context "An instance of Gandi::Base expecting failures" do
139
+ setup do
140
+ end
141
+
142
+ should "retry once when failing after a timeout" do
143
+ tries = states('tries').starts_as('none')
144
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).returns('sid1').when(tries.is('none')).then(tries.is('first'))
145
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).returns('sid2').when(tries.is('first')).then(tries.is('second'))
146
+ XMLRPC::Client.any_instance.expects(:call).with("account_balance", 'sid1').raises(EOFError).when(tries.is('first'))
147
+ XMLRPC::Client.any_instance.expects(:call).with("account_balance", 'sid2').returns(1000).when(tries.is('second'))
148
+
149
+ @gandi_base = Gandi::Base.login @login, @password, @uri
150
+ assert_equal 1000, @gandi_base.account_balance
151
+ end
152
+
153
+ should "fail after trying unsuccesfully two times" do
154
+ tries = states('tries').starts_as('none')
155
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).returns('sid1').when(tries.is('none')).then(tries.is('first'))
156
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).returns('sid2').when(tries.is('first')).then(tries.is('second'))
157
+ XMLRPC::Client.any_instance.expects(:call).with("account_balance", 'sid1').raises(EOFError).when(tries.is('first'))
158
+ XMLRPC::Client.any_instance.expects(:call).with("account_balance", 'sid2').raises(Errno::EPIPE).when(tries.is('second'))
159
+
160
+ @gandi_base = Gandi::Base.login @login, @password, @uri
161
+
162
+ assert_raise *Gandi::Base::TIMEOUT_EXCEPTIONS do
163
+ @gandi_base.account_balance
164
+ end
165
+ end
166
+
167
+ should "fail when directly failing on login" do
168
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).raises(EOFError)
169
+
170
+ assert_raise *Gandi::Base::TIMEOUT_EXCEPTIONS do
171
+ @gandi_base = Gandi::Base.login @login, @password, @uri
172
+ end
173
+ end
174
+
175
+ should "fail after trying to login when retrying" do
176
+ tries = states('tries').starts_as('none')
177
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).returns('sid1').when(tries.is('none')).then(tries.is('first'))
178
+ XMLRPC::Client.any_instance.expects(:call).with("login", @login, @password, false).raises(EOFError).when(tries.is('first')).then(tries.is('second'))
179
+ XMLRPC::Client.any_instance.expects(:call).with("account_balance", 'sid1').raises(EOFError).when(tries.is('first'))
180
+
181
+ @gandi_base = Gandi::Base.login @login, @password, @uri
182
+
183
+ assert_raise *Gandi::Base::TIMEOUT_EXCEPTIONS do
184
+ @gandi_base.account_balance
185
+ end
186
+ end
187
+ end
188
+ end