heroku-api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/.gitignore +4 -0
  2. data/.travis.yml +14 -0
  3. data/Gemfile +4 -0
  4. data/README.md +120 -0
  5. data/Rakefile +23 -0
  6. data/changelog.txt +4 -0
  7. data/heroku-api.gemspec +23 -0
  8. data/lib/heroku-api.rb +1 -0
  9. data/lib/heroku/api.rb +85 -0
  10. data/lib/heroku/api/addons.rb +47 -0
  11. data/lib/heroku/api/apps.rb +62 -0
  12. data/lib/heroku/api/collaborators.rb +33 -0
  13. data/lib/heroku/api/config_vars.rb +33 -0
  14. data/lib/heroku/api/domains.rb +33 -0
  15. data/lib/heroku/api/errors.rb +9 -0
  16. data/lib/heroku/api/keys.rb +42 -0
  17. data/lib/heroku/api/logs.rb +18 -0
  18. data/lib/heroku/api/mock.rb +176 -0
  19. data/lib/heroku/api/mock/addons.rb +153 -0
  20. data/lib/heroku/api/mock/apps.rb +184 -0
  21. data/lib/heroku/api/mock/cache/get_addons.json +1 -0
  22. data/lib/heroku/api/mock/collaborators.rb +55 -0
  23. data/lib/heroku/api/mock/config_vars.rb +46 -0
  24. data/lib/heroku/api/mock/domains.rb +71 -0
  25. data/lib/heroku/api/mock/keys.rb +46 -0
  26. data/lib/heroku/api/mock/logs.rb +20 -0
  27. data/lib/heroku/api/mock/processes.rb +191 -0
  28. data/lib/heroku/api/mock/releases.rb +124 -0
  29. data/lib/heroku/api/mock/stacks.rb +84 -0
  30. data/lib/heroku/api/processes.rb +77 -0
  31. data/lib/heroku/api/releases.rb +33 -0
  32. data/lib/heroku/api/stacks.rb +22 -0
  33. data/lib/heroku/api/vendor/okjson.rb +559 -0
  34. data/lib/heroku/api/version.rb +5 -0
  35. data/test/test_addons.rb +169 -0
  36. data/test/test_apps.rb +119 -0
  37. data/test/test_collaborators.rb +73 -0
  38. data/test/test_config_vars.rb +54 -0
  39. data/test/test_domains.rb +63 -0
  40. data/test/test_helper.rb +35 -0
  41. data/test/test_keys.rb +39 -0
  42. data/test/test_logs.rb +20 -0
  43. data/test/test_processes.rb +245 -0
  44. data/test/test_releases.rb +91 -0
  45. data/test/test_stacks.rb +49 -0
  46. metadata +134 -0
@@ -0,0 +1,5 @@
1
+ module Heroku
2
+ class API
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,169 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ class TestAddons < MiniTest::Unit::TestCase
4
+
5
+ def test_delete_addon_addon_not_found
6
+ with_app do |app_data|
7
+ assert_raises(Heroku::API::Errors::Error) do
8
+ heroku.delete_addon(app_data['name'], random_name)
9
+ end
10
+ end
11
+ end
12
+
13
+ def test_delete_addon_addon_not_installed
14
+ with_app do |app_data|
15
+ assert_raises(Heroku::API::Errors::Error) do
16
+ heroku.delete_addon(app_data['name'], 'custom_domains:basic')
17
+ end
18
+ end
19
+ end
20
+
21
+ def test_delete_addon_app_not_found
22
+ assert_raises(Heroku::API::Errors::NotFound) do
23
+ heroku.delete_addon(random_name, 'logging:basic')
24
+ end
25
+ end
26
+
27
+ def test_delete_addon
28
+ with_app do |app_data|
29
+ heroku.post_addon(app_data['name'], 'custom_domains:basic')
30
+ response = heroku.delete_addon(app_data['name'], 'custom_domains:basic')
31
+
32
+ assert_equal(200, response.status)
33
+ assert_equal({
34
+ 'message' => nil,
35
+ 'price' => 'free',
36
+ 'status' => 'Uninstalled'
37
+ }, response.body)
38
+ end
39
+ end
40
+
41
+ def test_get_addons
42
+ skip unless MOCK
43
+ response = heroku.get_addons
44
+ data = File.read("#{File.dirname(__FILE__)}/../lib/heroku/api/mock/cache/get_addons.json")
45
+
46
+ assert_equal(200, response.status)
47
+ assert_equal(Heroku::API::OkJson.decode(data), response.body)
48
+ end
49
+
50
+ def test_get_addons_with_app
51
+ with_app do |app_data|
52
+ response = heroku.get_addons(app_data['name'])
53
+
54
+ assert_equal(200, response.status)
55
+ assert_equal([{
56
+ 'beta' => false,
57
+ 'configured' => true,
58
+ 'description' => 'Logging Basic',
59
+ 'name' => 'logging:basic',
60
+ 'url' => 'https://addons.heroku.com/addons/logging:basic',
61
+ 'state' => 'public'
62
+ },
63
+ {
64
+ 'beta' => false,
65
+ 'configured' => true,
66
+ 'description' => 'Shared Database 5MB',
67
+ 'name' => 'shared-database:5mb',
68
+ 'state' => 'public',
69
+ 'url' => nil
70
+ }], response.body)
71
+ end
72
+ end
73
+
74
+ def test_get_addons_with_app_app_not_found
75
+ assert_raises(Heroku::API::Errors::NotFound) do
76
+ heroku.get_addons(random_name)
77
+ end
78
+ end
79
+
80
+ def test_post_addon
81
+ with_app do |app_data|
82
+ response = heroku.post_addon(app_data['name'], 'custom_domains:basic')
83
+
84
+ assert_equal(200, response.status)
85
+ assert_equal({
86
+ 'message' => nil,
87
+ 'price' => 'free',
88
+ 'status' => 'Installed'
89
+ }, response.body)
90
+ end
91
+ end
92
+
93
+ def test_post_addon_addon_already_installed
94
+ with_app do |app_data|
95
+ assert_raises(Heroku::API::Errors::Error) do
96
+ heroku.post_addon(app_data['name'], 'logging:basic')
97
+ heroku.post_addon(app_data['name'], 'logging:basic')
98
+ end
99
+ end
100
+ end
101
+
102
+ def test_post_addon_addon_type_already_installed
103
+ with_app do |app_data|
104
+ assert_raises(Heroku::API::Errors::Error) do
105
+ heroku.post_addon(app_data['name'], 'logging:basic')
106
+ heroku.post_addon(app_data['name'], 'logging:expanded')
107
+ end
108
+ end
109
+ end
110
+
111
+ def test_post_addon_addon_not_found
112
+ with_app do |app_data|
113
+ assert_raises(Heroku::API::Errors::Error) do
114
+ heroku.post_addon(app_data['name'], random_name)
115
+ end
116
+ end
117
+ end
118
+
119
+ def test_post_addon_app_not_found
120
+ assert_raises(Heroku::API::Errors::NotFound) do
121
+ heroku.post_addon(random_name, 'shared-database:5mb')
122
+ end
123
+ end
124
+
125
+ def test_put_addon
126
+ with_app do |app_data|
127
+ response = heroku.put_addon(app_data['name'], 'logging:expanded')
128
+
129
+ assert_equal(200, response.status)
130
+ assert_equal({
131
+ 'message' => nil,
132
+ 'price' => 'free',
133
+ 'status' => 'Updated'
134
+ }, response.body)
135
+ end
136
+ end
137
+
138
+ def test_put_addon_addon_already_installed
139
+ with_app do |app_data|
140
+ assert_raises(Heroku::API::Errors::Error) do
141
+ heroku.post_addon(app_data['name'], 'logging:basic')
142
+ heroku.put_addon(app_data['name'], 'logging:basic')
143
+ end
144
+ end
145
+ end
146
+
147
+ def test_put_addon_addon_not_found
148
+ with_app do |app_data|
149
+ assert_raises(Heroku::API::Errors::Error) do
150
+ heroku.put_addon(app_data['name'], random_name)
151
+ end
152
+ end
153
+ end
154
+
155
+ def test_put_addon_addon_type_not_installed
156
+ with_app do |app_data|
157
+ assert_raises(Heroku::API::Errors::Error) do
158
+ heroku.put_addon(app_data['name'], 'releases:basic')
159
+ end
160
+ end
161
+ end
162
+
163
+ def test_put_addon_app_not_found
164
+ assert_raises(Heroku::API::Errors::NotFound) do
165
+ heroku.put_addon(random_name, 'logging:basic')
166
+ end
167
+ end
168
+
169
+ end
data/test/test_apps.rb ADDED
@@ -0,0 +1,119 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ class TestApps < MiniTest::Unit::TestCase
4
+
5
+ def test_delete_app
6
+ with_app do |app_data|
7
+ response = heroku.delete_app(app_data['name'])
8
+ assert_equal({}, response.body)
9
+ assert_equal(200, response.status)
10
+ end
11
+ end
12
+
13
+ def test_delete_app_not_found
14
+ assert_raises(Heroku::API::Errors::NotFound) do
15
+ heroku.delete_app(random_name)
16
+ end
17
+ end
18
+
19
+ def test_get_apps
20
+ with_app do |app_data|
21
+ response = heroku.get_apps
22
+ assert_equal(200, response.status)
23
+ assert(response.body.detect {|app| app['name'] == app_data['name']})
24
+ end
25
+ end
26
+
27
+ def test_get_app
28
+ with_app do |app_data|
29
+ response = heroku.get_app(app_data['name'])
30
+ assert_equal(200, response.status)
31
+ assert_equal(app_data['name'], response.body['name'])
32
+ end
33
+ end
34
+
35
+ def test_get_app_not_found
36
+ assert_raises(Heroku::API::Errors::NotFound) do
37
+ heroku.get_app(random_name)
38
+ end
39
+ end
40
+
41
+ def test_post_app
42
+ response = heroku.post_app
43
+
44
+ assert_equal(202, response.status)
45
+
46
+ heroku.delete_app(response.body['name'])
47
+ end
48
+
49
+ def test_post_app_with_name
50
+ name = random_name
51
+ response = heroku.post_app('name' => name)
52
+
53
+ assert_equal(202, response.status)
54
+ assert_equal(name, response.body['name'])
55
+
56
+ heroku.delete_app(name)
57
+ end
58
+
59
+ def test_post_app_with_duplicate_name
60
+ name = random_name
61
+ response = heroku.post_app('name' => name)
62
+
63
+ assert_raises(Heroku::API::Errors::Error) do
64
+ heroku.post_app('name' => name)
65
+ end
66
+
67
+ heroku.delete_app(name)
68
+ end
69
+
70
+ def test_post_app_with_stack
71
+ response = heroku.post_app('stack' => 'cedar')
72
+
73
+ assert_equal(202, response.status)
74
+ assert_equal('cedar', response.body['stack'])
75
+
76
+ heroku.delete_app(response.body['name'])
77
+ end
78
+
79
+ def test_put_app_not_found
80
+ name = random_name
81
+ assert_raises(Heroku::API::Errors::NotFound) do
82
+ heroku.put_app(name, 'name' => random_name)
83
+ end
84
+ end
85
+
86
+ def test_put_app_with_name
87
+ with_app do |app_data|
88
+ new_name = random_name
89
+ response = heroku.put_app(app_data['name'], 'name' => new_name)
90
+
91
+ assert_equal(200, response.status)
92
+ assert_equal({'name' => new_name}, response.body)
93
+
94
+ heroku.delete_app(new_name)
95
+ end
96
+ end
97
+
98
+ def test_put_app_with_transfer_owner_non_collaborator
99
+ with_app do |app_data|
100
+ assert_raises(Heroku::API::Errors::Error) do
101
+ heroku.put_app(app_data['name'], 'transfer_owner' => random_email_address)
102
+ end
103
+ end
104
+ end
105
+
106
+ def test_put_app_with_transfer_owner
107
+ with_app do |app_data|
108
+ email_address = 'wesley+heroku.rb@heroku.com'
109
+ heroku.post_collaborator(app_data['name'], email_address)
110
+ response = heroku.put_app(app_data['name'], 'transfer_owner' => email_address)
111
+
112
+ assert_equal(200, response.status)
113
+ assert_equal({'name' => app_data['name']}, response.body)
114
+
115
+ heroku.delete_collaborator(app_data['name'], email_address)
116
+ end
117
+ end
118
+
119
+ end
@@ -0,0 +1,73 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ class TestCollaborators < MiniTest::Unit::TestCase
4
+
5
+ def test_delete_collaborator
6
+ with_app do |app_data|
7
+ email_address = 'wesley+heroku.rb@heroku.com'
8
+ heroku.post_collaborator(app_data['name'], email_address)
9
+
10
+ response = heroku.delete_collaborator(app_data['name'], email_address)
11
+
12
+ assert_equal(200, response.status)
13
+ assert_equal(
14
+ "#{email_address} has been removed as collaborator on #{app_data['name']}",
15
+ response.body
16
+ )
17
+ end
18
+ end
19
+
20
+ def test_delete_collaborator_app_not_found
21
+ assert_raises(Heroku::API::Errors::NotFound) do
22
+ heroku.delete_collaborator(random_name, random_email_address)
23
+ end
24
+ end
25
+
26
+ def test_delete_collaborator_user_not_found
27
+ with_app do |app_data|
28
+ assert_raises(Heroku::API::Errors::NotFound) do
29
+ heroku.delete_collaborator(app_data['name'], random_email_address)
30
+ end
31
+ end
32
+ end
33
+
34
+ def test_get_collaborators
35
+ with_app do |app_data|
36
+ response = heroku.get_collaborators(app_data['name'])
37
+
38
+ assert_equal(200, response.status)
39
+ assert_equal(
40
+ [{'access' => 'edit', 'email' => app_data['owner_email']}],
41
+ response.body
42
+ )
43
+ end
44
+ end
45
+
46
+ def test_get_collaborators_app_not_found
47
+ assert_raises(Heroku::API::Errors::NotFound) do
48
+ heroku.get_collaborators(random_name)
49
+ end
50
+ end
51
+
52
+ def test_post_collaborator
53
+ with_app do |app_data|
54
+ email_address = 'wesley+heroku.rb@heroku.com'
55
+ response = heroku.post_collaborator(app_data['name'], email_address)
56
+
57
+ assert_equal(200, response.status)
58
+ assert_equal(
59
+ "#{email_address} added as a collaborator on #{app_data['name']}.",
60
+ response.body
61
+ )
62
+
63
+ heroku.delete_collaborator(app_data['name'], email_address)
64
+ end
65
+ end
66
+
67
+ def test_post_collaborator_app_not_found
68
+ assert_raises(Heroku::API::Errors::NotFound) do
69
+ heroku.post_collaborator(random_name, random_email_address)
70
+ end
71
+ end
72
+
73
+ end
@@ -0,0 +1,54 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ class TestConfigVars < MiniTest::Unit::TestCase
4
+
5
+ def test_delete_app_config_var
6
+ with_app('stack' => 'cedar') do |app_data|
7
+ heroku.put_config_vars(app_data['name'], {'KEY' => 'value'})
8
+
9
+ response = heroku.delete_config_var(app_data['name'], 'KEY')
10
+
11
+ assert_equal(200, response.status)
12
+ assert_equal({}, response.body)
13
+ end
14
+ end
15
+
16
+ def test_delete_app_config_var_app_not_found
17
+ assert_raises(Heroku::API::Errors::NotFound) do
18
+ heroku.delete_config_var(random_name, 'key')
19
+ end
20
+ end
21
+
22
+ def test_get_app_config_vars
23
+ with_app('stack' => 'cedar') do |app_data|
24
+ response = heroku.get_config_vars(app_data['name'])
25
+
26
+ assert_equal(200, response.status)
27
+ assert_equal({}, response.body)
28
+ end
29
+ end
30
+
31
+ def test_get_app_config_vars_app_not_found
32
+ assert_raises(Heroku::API::Errors::NotFound) do
33
+ heroku.get_config_vars(random_name)
34
+ end
35
+ end
36
+
37
+ def test_put_app_config_vars
38
+ with_app('stack' => 'cedar') do |app_data|
39
+ response = heroku.put_config_vars(app_data['name'], {'KEY' => 'value'})
40
+
41
+ assert_equal(200, response.status)
42
+ assert_equal({'KEY' => 'value'}, response.body)
43
+
44
+ heroku.delete_config_var(app_data['name'], 'KEY')
45
+ end
46
+ end
47
+
48
+ def test_put_app_config_vars_app_not_found
49
+ assert_raises(Heroku::API::Errors::NotFound) do
50
+ heroku.put_config_vars(random_name, {'KEY' => 'value'})
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,63 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ class TestDomains < MiniTest::Unit::TestCase
4
+
5
+ def test_delete_domain_app_not_found
6
+ assert_raises(Heroku::API::Errors::NotFound) do
7
+ heroku.delete_domain(random_name, 'example.com')
8
+ end
9
+ end
10
+
11
+ def test_delete_domain
12
+ with_app do |app_data|
13
+ heroku.post_addon(app_data['name'], 'custom_domains:basic')
14
+ heroku.post_domain(app_data['name'], 'example.com')
15
+ response = heroku.delete_domain(app_data['name'], 'example.com')
16
+
17
+ assert_equal(200, response.status)
18
+ assert_equal({}, response.body)
19
+ end
20
+ end
21
+
22
+ def test_get_domains
23
+ with_app do |app_data|
24
+ response = heroku.get_domains(app_data['name'])
25
+
26
+ assert_equal(200, response.status)
27
+ assert_equal([], response.body)
28
+ end
29
+ end
30
+
31
+ def test_get_domains_app_not_found
32
+ assert_raises(Heroku::API::Errors::NotFound) do
33
+ heroku.get_domains(random_name)
34
+ end
35
+ end
36
+
37
+ def test_post_domain
38
+ with_app do |app_data|
39
+ heroku.post_addon(app_data['name'], 'custom_domains:basic')
40
+ response = heroku.post_domain(app_data['name'], 'example.com')
41
+
42
+ assert_equal(201, response.status)
43
+ assert_equal({'domain' => 'example.com'}, response.body)
44
+
45
+ heroku.delete_domain(app_data['name'], 'example.com')
46
+ end
47
+ end
48
+
49
+ def test_post_domain_addon_not_installed
50
+ with_app do |app_data|
51
+ assert_raises(Heroku::API::Errors::Error) do
52
+ heroku.post_domain(app_data['name'], 'example.com')
53
+ end
54
+ end
55
+ end
56
+
57
+ def test_post_domain_app_not_found
58
+ assert_raises(Heroku::API::Errors::NotFound) do
59
+ heroku.post_domain(random_name, 'example.com')
60
+ end
61
+ end
62
+
63
+ end