dawn-api 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -4
  3. data/lib/dawn/api/authenticate.rb +33 -7
  4. data/lib/dawn/api/base_api.rb +52 -6
  5. data/lib/dawn/api/health_check.rb +14 -0
  6. data/lib/dawn/api/hosts.rb +16 -3
  7. data/lib/dawn/api/models/account.rb +44 -15
  8. data/lib/dawn/api/models/app/domains.rb +30 -6
  9. data/lib/dawn/api/models/app/drains.rb +30 -6
  10. data/lib/dawn/api/models/app/env.rb +19 -5
  11. data/lib/dawn/api/models/app/gears.rb +31 -7
  12. data/lib/dawn/api/models/app/releases.rb +28 -8
  13. data/lib/dawn/api/models/app.rb +93 -16
  14. data/lib/dawn/api/models/domain.rb +36 -11
  15. data/lib/dawn/api/models/drain.rb +33 -19
  16. data/lib/dawn/api/models/gear.rb +45 -25
  17. data/lib/dawn/api/models/key.rb +33 -15
  18. data/lib/dawn/api/models/login.rb +5 -4
  19. data/lib/dawn/api/models/release.rb +32 -14
  20. data/lib/dawn/api/safe/base_api.rb +3 -3
  21. data/lib/dawn/api/safe/safe_extension.rb +20 -5
  22. data/lib/dawn/api/version.rb +5 -5
  23. data/lib/dawn/api.rb +1 -1
  24. data/spec/api/account_spec.rb +21 -0
  25. data/spec/api/app/domains_spec.rb +30 -0
  26. data/spec/api/app/drains_spec.rb +30 -0
  27. data/spec/api/app/gears_spec.rb +38 -0
  28. data/spec/api/app/releases_spec.rb +30 -0
  29. data/spec/api/app_spec.rb +166 -0
  30. data/spec/api/domain_spec.rb +54 -0
  31. data/spec/api/drain_spec.rb +54 -0
  32. data/spec/api/gear_spec.rb +65 -0
  33. data/spec/api/key_spec.rb +54 -0
  34. data/spec/api/release_spec.rb +13 -0
  35. data/spec/api_spec_helper.rb +18 -0
  36. data/spec/references/data.yml +16 -0
  37. data/spec/seed.rb +70 -0
  38. data/spec/seedlog.log +1454 -0
  39. data/spec/support/vcr.rb +11 -0
  40. data/spec/vcr/Dawn_Account/_current/should_retrieve_current_user_account.yml +51 -0
  41. data/spec/vcr/Dawn_Account/_update/should_update_an_account.yml +99 -0
  42. data/spec/vcr/Dawn_App/_all/should_only_have_an_array_of_apps.yml +62 -0
  43. data/spec/vcr/Dawn_App/_all/should_retrieve_all_user_apps.yml +62 -0
  44. data/spec/vcr/Dawn_App/_create/should_create_a_new_app_given_a_name.yml +51 -0
  45. data/spec/vcr/Dawn_App/_create/should_raise_an_Excon_Errors_UnprocessableEntity_when_an_invalid_name_is_given.yml +49 -0
  46. data/spec/vcr/Dawn_App/_destroy/should_destroy_1_app.yml +49 -0
  47. data/spec/vcr/Dawn_App/_destroy/should_fail_to_destroy_non-existant_app.yml +48 -0
  48. data/spec/vcr/Dawn_App/_domains/should_have_domains.yml +51 -0
  49. data/spec/vcr/Dawn_App/_domains/should_retrieve_domains.yml +98 -0
  50. data/spec/vcr/Dawn_App/_drains/should_have_drains.yml +51 -0
  51. data/spec/vcr/Dawn_App/_find/should_fail_to_find_a_non_existant_app.yml +48 -0
  52. data/spec/vcr/Dawn_App/_find/should_retrieve_1_app_by_id.yml +111 -0
  53. data/spec/vcr/Dawn_App/_find/should_retrieve_1_app_by_name.yml +51 -0
  54. data/spec/vcr/Dawn_App/_gears/should_have_gears.yml +51 -0
  55. data/spec/vcr/Dawn_App/_gears/should_restart_gears.yml +98 -0
  56. data/spec/vcr/Dawn_App/_gears/should_retrieve_gears.yml +98 -0
  57. data/spec/vcr/Dawn_App/_logs/should_fail_to_retrieve_logs_uri_for_a_non_existant_app.yml +48 -0
  58. data/spec/vcr/Dawn_App/_logs/should_retrieve_logs_url_for_app.yml +98 -0
  59. data/spec/vcr/Dawn_App/_releases/should_have_releases.yml +51 -0
  60. data/spec/vcr/Dawn_App/_releases/should_retrieve_releases.yml +98 -0
  61. data/spec/vcr/Dawn_App/_restart/should_fail_to_restart_a_non_existant_app.yml +48 -0
  62. data/spec/vcr/Dawn_App/_scale/should_have_updated_formation.yml +51 -0
  63. data/spec/vcr/Dawn_App/_scale/should_raise_an_IndexError_if_app_key_is_missing.yml +51 -0
  64. data/spec/vcr/Dawn_App/_scale/should_scale_app.yml +98 -0
  65. data/spec/vcr/Dawn_App/_update/should_fail_to_update_non-existant_app.yml +48 -0
  66. data/spec/vcr/Dawn_App_Domains/_all/should_have_only_domains.yml +98 -0
  67. data/spec/vcr/Dawn_App_Domains/_all/should_return_all_domains.yml +98 -0
  68. data/spec/vcr/Dawn_App_Domains/_create/should_create_a_new_domain.yml +99 -0
  69. data/spec/vcr/Dawn_App_Drains/_all/should_have_only_drains.yml +98 -0
  70. data/spec/vcr/Dawn_App_Drains/_all/should_return_all_drains.yml +98 -0
  71. data/spec/vcr/Dawn_App_Drains/_create/should_create_a_new_drain.yml +99 -0
  72. data/spec/vcr/Dawn_App_Gears/_all/should_return_all_gears.yml +98 -0
  73. data/spec/vcr/Dawn_App_Releases/_all/should_return_all_releases.yml +98 -0
  74. data/spec/vcr/Dawn_App_Releases/_create/should_create_a_new_release.yml +423 -0
  75. data/spec/vcr/Dawn_Key/_all/should_retrieve_all_user_keys.yml +52 -0
  76. data/spec/vcr/Dawn_Key/_create/should_create_a_new_sshkey.yml +51 -0
  77. data/spec/vcr/Dawn_Key/_create/should_fail_if_sshkey_is_invalid.yml +49 -0
  78. data/spec/vcr/Dawn_Key/_destroy/should_404_if_key_does_not_exist.yml +48 -0
  79. data/spec/vcr/Dawn_Key/_destroy/should_remove_a_key_by_id.yml +98 -0
  80. data/spec/vcr/Dawn_Key/_find/should_404_if_key_does_not_exist.yml +48 -0
  81. data/spec/vcr/Dawn_Key/_find/should_find_a_key_by_id.yml +99 -0
  82. data/spec/vcr/Dawn_Release/_find/should_find_1_release_by_id.yml +48 -0
  83. metadata +62 -3
  84. data/lib/dawn/api/safe.rb +0 -2
@@ -1,37 +1,52 @@
1
1
  require 'dawn/api/base_api'
2
2
 
3
- module Dawn
4
- class Release
5
-
3
+ module Dawn #:nodoc:
4
+ class Release #:nodoc:
6
5
  include BaseApi
7
6
 
8
- attr_reader :data
7
+ # @type [Dawn::App]
9
8
  attr_writer :app
9
+ # @type [String]
10
+ data_key :id, write: false
11
+ # @type [Integer]
12
+ data_key :created_at, write: false
13
+ # @type [Integer]
14
+ data_key :updated_at, write: false
15
+ # @type [String]
16
+ data_key :image, write: false
17
+ # @type [String]
18
+ data_key :app_id, path: "app/id", write: false
10
19
 
20
+ ###
21
+ # @param [Hash] data
22
+ ###
11
23
  def initialize(data)
12
24
  @app = nil
13
25
  @data = data
14
26
  end
15
27
 
16
- data_key :id
17
- data_key :created_at
18
- data_key :updated_at
19
- data_key :image
20
- data_key :app_id, "app/id"
21
-
28
+ ###
29
+ # @return [Dawn::App]
30
+ ###
22
31
  def app
23
32
  @app ||= App.find(id: app_id)
24
33
  end
25
34
 
35
+ ###
36
+ # @return [self]
37
+ ###
26
38
  def refresh
27
- @data = request(
28
- expects: 200,
29
- method: :get,
39
+ @data = get(
30
40
  path: "/releases/#{id}",
31
41
  query: options
32
42
  )["release"]
43
+ self
33
44
  end
34
45
 
46
+ ###
47
+ # @param [Hash] options
48
+ # @return [Array<Dawn::Release>]
49
+ ###
35
50
  def self.all(options={})
36
51
  get(
37
52
  path: "/releases",
@@ -39,6 +54,10 @@ module Dawn
39
54
  ).map { |hsh| new hsh["release"] }
40
55
  end
41
56
 
57
+ ###
58
+ # @param [Hash] options
59
+ # @return [Dawn::Release]
60
+ ###
42
61
  def self.find(options={})
43
62
  id = id_param(options)
44
63
 
@@ -47,6 +66,5 @@ module Dawn
47
66
  query: options
48
67
  )["release"]
49
68
  end
50
-
51
69
  end
52
70
  end
@@ -1,8 +1,8 @@
1
1
  require "dawn/api/safe/safe_extension"
2
2
 
3
- module Dawn
4
- module BaseApi
5
- module RequestExtension
3
+ module Dawn #:nodoc:
4
+ module BaseApi #:nodoc:
5
+ module RequestExtension #:nodoc:
6
6
  include Dawn::SafeExtension
7
7
  end
8
8
  end
@@ -1,19 +1,25 @@
1
- module Dawn
2
- module SafeExtension
3
- class SafeContext
1
+ module Dawn #:nodoc:
2
+ module SafeExtension #:nodoc:
3
+ class SafeContext #:nodoc:
4
+ # @type [Exception]
4
5
  attr_accessor :last_exception
5
6
 
7
+ ###
8
+ # @param [Object] obj
9
+ ###
6
10
  def initialize(obj)
7
11
  @obj = obj
8
12
  @last_exception = nil
9
13
  end
10
14
 
15
+ # :nodoc:
11
16
  def method_missing(sym, *args, &block)
12
17
  if @obj.respond_to?(sym)
13
18
  begin
14
19
  @obj.send sym, *args, &block
15
20
  rescue => ex
16
21
  self.last_exception = ex
22
+ false
17
23
  end
18
24
  else
19
25
  @obj.method_missing sym, *args, &block
@@ -21,8 +27,17 @@ module Dawn
21
27
  end
22
28
  end
23
29
 
24
- def safe
25
- SafeContext.new(self)
30
+ ###
31
+ # @overload safe
32
+ # Creates a new SafeContext for the object
33
+ # @return [SafeContext]
34
+ # @overload safe(symbol, *args, &block)
35
+ # @return [Object] result from method invocation
36
+ ###
37
+ def safe(*args, &block)
38
+ context = SafeContext.new(self)
39
+ return context.send(*args, &block) unless args.empty?
40
+ context
26
41
  end
27
42
  end
28
43
  end
@@ -1,9 +1,9 @@
1
- module Dawn
2
- module API
3
- module Version
1
+ module Dawn #:nodoc:
2
+ module API #:nodoc:
3
+ module Version #:nodoc:
4
4
  MAJOR = 0
5
- MINOR = 10
6
- PATCH = 1
5
+ MINOR = 11
6
+ PATCH = 0
7
7
  BUILD = nil
8
8
  STRING = [[MAJOR, MINOR, PATCH].compact.join("."), BUILD].compact.join("-").freeze
9
9
  end
data/lib/dawn/api.rb CHANGED
@@ -3,4 +3,4 @@ require 'json'
3
3
  require 'dawn/api/version'
4
4
  require 'dawn/api/authenticate'
5
5
  require 'dawn/api/models'
6
-
6
+ require 'dawn/api/health_check'
@@ -0,0 +1,21 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::Account, :vcr do
4
+ subject { Dawn::Account }
5
+
6
+ it { should be_a Class }
7
+
8
+ describe ".current" do
9
+ it "should retrieve current user account" do
10
+ Dawn::Account.current
11
+ end
12
+ end
13
+
14
+ describe "#update" do
15
+ subject { Dawn::Account.current }
16
+
17
+ it "should update an account" do
18
+ subject.update(account: { username: "MyNameIs" })
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::App::Domains, :vcr do
4
+ subject { Dawn::App::Domains }
5
+
6
+ let(:app) { Dawn::App.find(name: "domains-test") }
7
+
8
+ it { should be_a Class }
9
+
10
+ ###
11
+ context "#all" do
12
+ subject { app.domains }
13
+
14
+ it "should return all domains" do
15
+ subject.all
16
+ end
17
+
18
+ it "should have only domains" do
19
+ subject.all.all? { |domain| expect(domain).to be_an_instance_of(Dawn::Domain) }
20
+ end
21
+ end
22
+
23
+ context "#create" do
24
+ subject { app.domains }
25
+
26
+ it "should create a new domain" do
27
+ subject.create(domain: { url: "http://wearepeople.io" })
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::App::Drains, :vcr do
4
+ subject { Dawn::App::Drains }
5
+
6
+ let(:app) { Dawn::App.find(name: "drains-test") }
7
+
8
+ it { should be_a Class }
9
+
10
+ ###
11
+ context "#all" do
12
+ subject { app.drains }
13
+
14
+ it "should return all drains" do
15
+ subject.all
16
+ end
17
+
18
+ it "should have only drains" do
19
+ subject.all.all? { |drain| expect(drain).to be_an_instance_of(Dawn::Drain) }
20
+ end
21
+ end
22
+
23
+ context "#create" do
24
+ subject { app.drains }
25
+
26
+ it "should create a new drain" do
27
+ subject.create(drain: { url: "http://flush.it" })
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,38 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::App::Gears, :vcr do
4
+ subject { Dawn::App::Gears }
5
+
6
+ let(:app) { Dawn::App.find(name: "gears-test") }
7
+
8
+ it { should be_a Class }
9
+
10
+ ###
11
+ context "#all" do
12
+ subject { app.gears }
13
+
14
+ it "should return all gears" do
15
+ subject.all
16
+ end
17
+
18
+ it "should have only gears" do
19
+ subject.all.all? { |gear| expect(gear).to be_an_instance_of(Dawn::Gear) }
20
+ end
21
+ end
22
+
23
+ context "#restart" do
24
+ subject { app.gears }
25
+
26
+ it "should restart all gears" do
27
+ subject.restart
28
+ end
29
+ end
30
+
31
+ context "#create" do
32
+ subject { app.gears }
33
+
34
+ it "should create a new gear" do
35
+ subject.create
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,30 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::App::Releases, :vcr do
4
+ subject { Dawn::App::Releases }
5
+
6
+ let(:app) { Dawn::App.find(name: "releases-test") }
7
+
8
+ it { should be_a Class }
9
+
10
+ ###
11
+ context "#all" do
12
+ subject { app.releases }
13
+
14
+ it "should return all releases" do
15
+ subject.all
16
+ end
17
+
18
+ it "should have only releases" do
19
+ subject.all.all? { |release| expect(release).to be_an_instance_of(Dawn::Release) }
20
+ end
21
+ end
22
+
23
+ context "#create" do
24
+ subject { app.releases }
25
+
26
+ it "should create a new release" do
27
+ subject.create
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,166 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::App, :vcr do
4
+ subject { Dawn::App }
5
+
6
+ let(:app_name1) { "cookie-crushers" }
7
+ let(:app_name2) { "cookie-crushers2" }
8
+ let(:app_name3) { "some-app" }
9
+ let(:app_name4) { "some-app-thing" }
10
+ let(:invalid_app_name) { "ThaTunaCorps" }
11
+
12
+ let(:app) { Dawn::App.find(name: app_name1) }
13
+
14
+ it { should be_a Class }
15
+
16
+ describe ".all" do
17
+ it "should retrieve all user apps" do
18
+ subject.all
19
+ end
20
+
21
+ it "should only have an array of apps" do
22
+ subject.all.all? { |o| expect(o).to be_an_instance_of(Dawn::App) }
23
+ end
24
+ end
25
+
26
+ describe ".create" do
27
+ it "should raise an IndexError if app key is missing" do
28
+ expect { subject.create(blurp: { name: app_name1 }) }.to raise_error(IndexError)
29
+ end
30
+
31
+ it "should create a new app, given a name" do
32
+ subject.create(app: { name: app_name1 })
33
+ end
34
+
35
+ it "should raise an Excon::Errors::UnprocessableEntity when an invalid name is given" do
36
+ expect { subject.create(app: { name: invalid_app_name }) }.to raise_error(Excon::Errors::UnprocessableEntity)
37
+ end
38
+ end
39
+
40
+ describe ".find" do
41
+ it "should retrieve 1 app by id" do
42
+ app = subject.all.first
43
+ subject.find(id: app.id)
44
+ end
45
+
46
+ it "should retrieve 1 app by name" do
47
+ subject.find(name: app_name1)
48
+ end
49
+
50
+ it "should fail to find a non existant app" do
51
+ expect { subject.find(id: -1) }.to raise_error(Excon::Errors::NotFound)
52
+ end
53
+ end
54
+
55
+ describe ".update" do
56
+ it "should raise an IndexError if app key is missing" do
57
+ expect { subject.update(name: app_name1, blurp: { name: app_name2 }) }.to raise_error(IndexError)
58
+ end
59
+
60
+ it "should fail to update non-existant app" do
61
+ expect { subject.update(name: app_name3, app: { name: app_name4 }) }.to raise_error(Excon::Errors::NotFound)
62
+ end
63
+ end
64
+
65
+ describe ".destroy" do
66
+ it "should fail to destroy non-existant app" do
67
+ expect { subject.destroy(name: app_name3) }.to raise_error(Excon::Errors::NotFound)
68
+ end
69
+ end
70
+
71
+ describe ".restart" do
72
+ it "should fail to restart a non existant app" do
73
+ expect { subject.restart(id: -1) }.to raise_error(Excon::Errors::NotFound)
74
+ end
75
+ end
76
+
77
+ describe ".logs" do
78
+ it "should fail to retrieve logs uri for a non existant app" do
79
+ expect { subject.logs(id: -1) }.to raise_error(Excon::Errors::NotFound)
80
+ end
81
+ end
82
+
83
+ describe "#restart" do
84
+ it "should restart the the app" do
85
+ app.restart
86
+ end
87
+ end
88
+
89
+ describe "#logs" do
90
+ it "should retrieve logs url for app" do
91
+ app.logs
92
+ end
93
+ end
94
+
95
+ describe "#scale" do
96
+ it "should raise an IndexError if app key is missing" do
97
+ expect { app.scale blurp: { formation: { web: 2 } } }.to raise_error(IndexError)
98
+ end
99
+
100
+ it "should scale app" do
101
+ app.scale app: { formation: { web: 2 } }
102
+ end
103
+
104
+ it "should have updated formation" do
105
+ app.formation["web"].should eq("2")
106
+ end
107
+ end
108
+
109
+ describe "#gears" do
110
+ it "should have gears" do
111
+ expect(app.gears).to be_an_instance_of(Dawn::App::Gears)
112
+ end
113
+
114
+ it "should retrieve gears" do
115
+ app.gears.all
116
+ end
117
+
118
+ it "should restart gears" do
119
+ app.gears.restart
120
+ end
121
+ end
122
+
123
+ describe "#drains" do
124
+ it "should have drains" do
125
+ expect(app.drains).to be_an_instance_of(Dawn::App::Drains)
126
+ end
127
+
128
+ it "should retrieve drains" do
129
+ app.drains.all
130
+ end
131
+ end
132
+
133
+ describe "#domains" do
134
+ it "should have domains" do
135
+ expect(app.domains).to be_an_instance_of(Dawn::App::Domains)
136
+ end
137
+
138
+ it "should retrieve domains" do
139
+ app.domains.all
140
+ end
141
+ end
142
+
143
+ describe "#releases" do
144
+ it "should have releases" do
145
+ expect(app.releases).to be_an_instance_of(Dawn::App::Releases)
146
+ end
147
+
148
+ it "should retrieve releases" do
149
+ app.releases.all
150
+ end
151
+ end
152
+
153
+ describe "#update" do
154
+ it "should update 1 app" do
155
+ app = subject.find(name: "cookie-crushers")
156
+ app.update(app: { name: "bread-crushers" })
157
+ end
158
+ end
159
+
160
+ describe "#destroy" do
161
+ it "should destroy 1 app" do
162
+ app = subject.find(name: "bread-crushers")
163
+ app.destroy(name: "bread-crushers")
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,54 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::Domain, :vcr do
4
+ subject { Dawn::Domain }
5
+
6
+ before :all do
7
+ $test_store.test_domain_app ||= Dawn::App.find(id: $test_store.ref["apps"]["domain-test"])
8
+ $test_store.test_domain1 ||= Dawn::Domain.find(id: $test_store.ref["domains"]["cc-rushers.io"])
9
+ $test_store.test_domain2 ||= Dawn::Domain.find(id: $test_store.ref["domains"]["cookiecrushers.com"])
10
+ $test_store.test_domain3 ||= Dawn::Domain.find(id: $test_store.ref["domains"]["cookie-crusher.net"])
11
+ end
12
+
13
+ after :all do
14
+ $test_store.delete_field(:test_domain1) rescue nil
15
+ $test_store.delete_field(:test_domain2) rescue nil
16
+ $test_store.delete_field(:test_domain3) rescue nil
17
+ end
18
+
19
+ it { should be_a Class }
20
+
21
+ describe ".find" do
22
+ it "should raise an Excon::Errors::NotFound when Domain cannot be found" do
23
+ expect { subject.find(id: -1) }.to raise_error(Excon::Errors::NotFound)
24
+ end
25
+
26
+ it "should find 1 domain by id" do
27
+ subject.find(id: $test_store.test_domain1.id)
28
+ end
29
+
30
+ it "should find 1 domain by url" do
31
+ subject.find(url: $test_store.test_domain2.url)
32
+ end
33
+ end
34
+
35
+ describe ".destroy" do
36
+ it "should raise an Excon::Errors::NotFound when Domain cannot be found" do
37
+ expect { subject.destroy(id: -1) }.to raise_error(Excon::Errors::NotFound)
38
+ end
39
+
40
+ it "should destroy 1 domain by id" do
41
+ subject.destroy(id: $test_store.test_domain1.id)
42
+ end
43
+
44
+ it "should destroy 1 domain by url" do
45
+ subject.destroy(url: $test_store.test_domain2.url)
46
+ end
47
+ end
48
+
49
+ describe "#destroy" do
50
+ it "should destroy the domain" do
51
+ $test_store.test_domain3.destroy
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::Drain, :vcr do
4
+ subject { Dawn::Drain }
5
+
6
+ before :all do
7
+ $test_store.test_drain_app ||= Dawn::App.find(id: $test_store.ref["apps"]["drain-test"])
8
+ $test_store.test_drain1 ||= Dawn::Drain.find(id: $test_store.ref["drains"]["flushme.io"])
9
+ $test_store.test_drain2 ||= Dawn::Drain.find(id: $test_store.ref["drains"]["toil.com"])
10
+ $test_store.test_drain3 ||= Dawn::Drain.find(id: $test_store.ref["drains"]["downthedrain.net"])
11
+ end
12
+
13
+ after :all do
14
+ $test_store.delete_field(:test_drain1) rescue nil
15
+ $test_store.delete_field(:test_drain2) rescue nil
16
+ $test_store.delete_field(:test_drain3) rescue nil
17
+ end
18
+
19
+ it { should be_a Class }
20
+
21
+ describe ".find" do
22
+ it "should raise an Excon::Errors::NotFound when Drain cannot be found" do
23
+ expect { subject.find(id: -1) }.to raise_error(Excon::Errors::NotFound)
24
+ end
25
+
26
+ it "should find 1 drain by id" do
27
+ subject.find id: $test_store.test_drain1.id
28
+ end
29
+
30
+ it "should find 1 drain by url" do
31
+ subject.find url: $test_store.test_drain2.url
32
+ end
33
+ end
34
+
35
+ describe ".destroy" do
36
+ it "should raise an Excon::Errors::NotFound when Drain cannot be found" do
37
+ expect { subject.destroy(id: -1) }.to raise_error(Excon::Errors::NotFound)
38
+ end
39
+
40
+ it "should destroy 1 drain by id" do
41
+ subject.destroy(id: $test_store.test_drain1.id)
42
+ end
43
+
44
+ it "should destroy 1 drain by url" do
45
+ subject.destroy(url: $test_store.test_drain2.url)
46
+ end
47
+ end
48
+
49
+ describe "#destroy" do
50
+ it "should destroy the drain" do
51
+ $test_store.test_drain3.destroy
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,65 @@
1
+ require 'api_spec_helper'
2
+
3
+ describe Dawn::Gear, :vcr do
4
+ subject { Dawn::Gear }
5
+
6
+ before :all do
7
+ $test_store.test_gear_app ||= Dawn::App.find(id: $test_store.ref["apps"]["gear-test"])
8
+ $test_store.test_gear1 ||= Dawn::Gear.find(id: $test_store.ref["gears"][0])
9
+ $test_store.test_gear2 ||= Dawn::Gear.find(id: $test_store.ref["gears"][1])
10
+ $test_store.test_gear3 ||= Dawn::Gear.find(id: $test_store.ref["gears"][2])
11
+ end
12
+
13
+ after :all do
14
+ STDERR.puts "cleaning up"
15
+ $test_store.delete_field(:test_gear1) rescue nil
16
+ $test_store.delete_field(:test_gear2) rescue nil
17
+ $test_store.delete_field(:test_gear3) rescue nil
18
+ end
19
+
20
+ it { should be_a Class }
21
+
22
+ describe ".find" do
23
+ it "should raise an Excon::Errors::NotFound when Gear cannot be found" do
24
+ expect { subject.find(id: -1) }.to raise_error(Excon::Errors::NotFound)
25
+ end
26
+
27
+ it "should find 1 gear by id" do
28
+ subject.find(id: $test_store.test_gear1.id)
29
+ end
30
+
31
+ it "should find 1 gear by url" do
32
+ subject.find(url: $test_store.test_gear2.url)
33
+ end
34
+ end
35
+
36
+ describe ".destroy" do
37
+ it "should raise an Excon::Errors::NotFound when Gear cannot be found" do
38
+ expect { subject.destroy(id: -1) }.to raise_error(Excon::Errors::NotFound)
39
+ end
40
+
41
+ it "should destroy 1 gear by id" do
42
+ subject.destroy(id: $test_store.test_gear1.id)
43
+ end
44
+
45
+ it "should destroy 1 gear by url" do
46
+ subject.destroy(url: $test_store.test_gear2.url)
47
+ end
48
+ end
49
+
50
+ describe ".restart" do
51
+ it "should restart 1 gear by id" do
52
+ subject.restart(id: 1)
53
+ end
54
+
55
+ it "should 404 if gear does not exist" do
56
+ expect { subject.restart(id: -1) }.to raise_error(Excon::Errors::NotFound)
57
+ end
58
+ end
59
+
60
+ describe "#destroy" do
61
+ it "should destroy the gear" do
62
+ $test_store.test_gear3.destroy
63
+ end
64
+ end
65
+ end