scalingo 3.4.0 → 3.6.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dependabot.yml +17 -0
  3. data/.github/workflows/publish.yml +1 -1
  4. data/.github/workflows/ruby.yml +3 -3
  5. data/.rubocop.yml +9 -21
  6. data/CHANGELOG.md +10 -0
  7. data/lib/scalingo/api/client.rb +6 -15
  8. data/lib/scalingo/api/response.rb +3 -3
  9. data/lib/scalingo/auth/tokens.rb +2 -2
  10. data/lib/scalingo/auth.rb +1 -1
  11. data/lib/scalingo/billing.rb +1 -1
  12. data/lib/scalingo/client.rb +6 -6
  13. data/lib/scalingo/configuration.rb +3 -3
  14. data/lib/scalingo/core_client.rb +2 -3
  15. data/lib/scalingo/regional/addons.rb +1 -1
  16. data/lib/scalingo/regional.rb +1 -1
  17. data/lib/scalingo/regional_database.rb +1 -1
  18. data/lib/scalingo/token_holder.rb +1 -1
  19. data/lib/scalingo/version.rb +1 -1
  20. data/scalingo.gemspec +5 -8
  21. metadata +13 -97
  22. data/spec/scalingo/api/client_spec.rb +0 -256
  23. data/spec/scalingo/api/endpoint_spec.rb +0 -45
  24. data/spec/scalingo/api/response_spec.rb +0 -301
  25. data/spec/scalingo/auth/keys_spec.rb +0 -58
  26. data/spec/scalingo/auth/scm_integrations_spec.rb +0 -58
  27. data/spec/scalingo/auth/tokens_spec.rb +0 -74
  28. data/spec/scalingo/auth/two_factor_auth_spec.rb +0 -69
  29. data/spec/scalingo/auth/user_spec.rb +0 -31
  30. data/spec/scalingo/auth_spec.rb +0 -15
  31. data/spec/scalingo/bearer_token_spec.rb +0 -72
  32. data/spec/scalingo/billing/profile_spec.rb +0 -55
  33. data/spec/scalingo/billing_spec.rb +0 -11
  34. data/spec/scalingo/client_spec.rb +0 -93
  35. data/spec/scalingo/configuration_spec.rb +0 -57
  36. data/spec/scalingo/core_client_spec.rb +0 -23
  37. data/spec/scalingo/regional/addons_spec.rb +0 -169
  38. data/spec/scalingo/regional/apps_spec.rb +0 -137
  39. data/spec/scalingo/regional/autoscalers_spec.rb +0 -84
  40. data/spec/scalingo/regional/collaborators_spec.rb +0 -69
  41. data/spec/scalingo/regional/containers_spec.rb +0 -67
  42. data/spec/scalingo/regional/deployments_spec.rb +0 -45
  43. data/spec/scalingo/regional/domains_spec.rb +0 -84
  44. data/spec/scalingo/regional/environment_spec.rb +0 -77
  45. data/spec/scalingo/regional/events_spec.rb +0 -65
  46. data/spec/scalingo/regional/logs_spec.rb +0 -39
  47. data/spec/scalingo/regional/metrics_spec.rb +0 -46
  48. data/spec/scalingo/regional/notifiers_spec.rb +0 -113
  49. data/spec/scalingo/regional/operations_spec.rb +0 -27
  50. data/spec/scalingo/regional/scm_repo_links_spec.rb +0 -48
  51. data/spec/scalingo/regional_database/backups_spec.rb +0 -58
  52. data/spec/scalingo/regional_database/databases_spec.rb +0 -39
  53. data/spec/scalingo/regional_database_spec.rb +0 -11
  54. data/spec/scalingo/regional_spec.rb +0 -14
  55. data/spec/scalingo/token_holder_spec.rb +0 -81
@@ -1,77 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Environment do
4
- describe_method "for" do
5
- context "success" do
6
- let(:arguments) { meta[:app_id] }
7
- let(:stub_pattern) { "for-200" }
8
-
9
- it_behaves_like "a collection response"
10
- it_behaves_like "a non-paginated collection"
11
- end
12
- end
13
-
14
- describe_method "create" do
15
- context "success" do
16
- let(:arguments) { [meta[:app_id], meta[:create][:valid]] }
17
- let(:stub_pattern) { "create-201" }
18
-
19
- it_behaves_like "a singular object response", 201
20
- end
21
-
22
- context "failure" do
23
- let(:arguments) { [meta[:app_id], meta[:create][:invalid]] }
24
- let(:stub_pattern) { "create-422" }
25
-
26
- it_behaves_like "an unprocessable request"
27
- end
28
- end
29
-
30
- describe_method "update" do
31
- context "success" do
32
- let(:arguments) { [meta[:app_id], meta[:id], meta[:update][:valid]] }
33
- let(:stub_pattern) { "update-200" }
34
-
35
- it_behaves_like "a singular object response"
36
- end
37
-
38
- context "not found" do
39
- let(:arguments) { [meta[:app_id], meta[:not_found_id], meta[:update][:valid]] }
40
- let(:stub_pattern) { "update-404" }
41
-
42
- it_behaves_like "a not found response"
43
- end
44
- end
45
-
46
- describe_method "bulk_update" do
47
- let(:arguments) { [meta[:app_id], meta[:update][:bulk]] }
48
- let(:expected_count) { 4 }
49
- let(:stub_pattern) { "bulk-update-200" }
50
-
51
- it_behaves_like "a collection response"
52
- it_behaves_like "a non-paginated collection"
53
- end
54
-
55
- describe_method "destroy" do
56
- context "success" do
57
- let(:arguments) { [meta[:app_id], meta[:id]] }
58
- let(:stub_pattern) { "destroy-204" }
59
-
60
- it_behaves_like "an empty response"
61
- end
62
-
63
- context "not found" do
64
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
65
- let(:stub_pattern) { "destroy-404" }
66
-
67
- it_behaves_like "a not found response"
68
- end
69
- end
70
-
71
- describe_method "bulk_destroy" do
72
- let(:arguments) { [meta[:app_id], meta[:destroy][:bulk]] }
73
- let(:stub_pattern) { "bulk-destroy-204" }
74
-
75
- it_behaves_like "an empty response"
76
- end
77
- end
@@ -1,65 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Events do
4
- describe_method "categories" do
5
- context "guest" do
6
- subject { guest_endpoint }
7
-
8
- let(:expected_count) { 7 }
9
- let(:stub_pattern) { "categories-guest" }
10
-
11
- it_behaves_like "a collection response"
12
- it_behaves_like "a non-paginated collection"
13
- end
14
-
15
- context "logged" do
16
- let(:expected_count) { 7 }
17
- let(:stub_pattern) { "categories-logged" }
18
-
19
- it_behaves_like "a collection response"
20
- it_behaves_like "a non-paginated collection"
21
- end
22
- end
23
-
24
- describe_method "types" do
25
- context "guest" do
26
- subject { guest_endpoint }
27
-
28
- let(:expected_count) { 33 }
29
- let(:stub_pattern) { "types-guest" }
30
-
31
- it_behaves_like "a collection response"
32
- it_behaves_like "a non-paginated collection"
33
- end
34
-
35
- context "logged" do
36
- let(:expected_count) { 33 }
37
- let(:stub_pattern) { "types-logged" }
38
-
39
- it_behaves_like "a collection response"
40
- it_behaves_like "a non-paginated collection"
41
- end
42
- end
43
-
44
- describe_method "all" do
45
- context "success" do
46
- let(:arguments) { {} }
47
- let(:expected_count) { 30 }
48
- let(:stub_pattern) { "all-200" }
49
-
50
- it_behaves_like "a collection response"
51
- it_behaves_like "a paginated collection"
52
- end
53
- end
54
-
55
- describe_method "for" do
56
- context "success" do
57
- let(:arguments) { [meta[:app_id], {}] }
58
- let(:expected_count) { 18 }
59
- let(:stub_pattern) { "for-200" }
60
-
61
- it_behaves_like "a collection response"
62
- it_behaves_like "a paginated collection"
63
- end
64
- end
65
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Logs do
4
- describe_method "get" do
5
- context "guest" do
6
- subject { guest_endpoint }
7
-
8
- let(:arguments) { [meta[:urls][:guest], {}] }
9
- let(:stub_pattern) { "get-guest-200" }
10
-
11
- it_behaves_like "a singular object response"
12
- end
13
-
14
- context "logged" do
15
- let(:arguments) { [meta[:urls][:logged], {}] }
16
- let(:stub_pattern) { "get-logged-200" }
17
-
18
- it_behaves_like "a singular object response"
19
- end
20
-
21
- context "with limit" do
22
- let(:arguments) { [meta[:urls][:with_limit], meta[:options]] }
23
- let(:stub_pattern) { "get-with-limit-200" }
24
-
25
- it_behaves_like "a singular object response"
26
- end
27
- end
28
-
29
- describe_method "archives" do
30
- context "success" do
31
- let(:arguments) { meta[:app_id] }
32
- let(:expected_count) { 0 }
33
- let(:stub_pattern) { "archives-200" }
34
-
35
- it_behaves_like "a collection response"
36
- it_behaves_like "a non-paginated collection"
37
- end
38
- end
39
- end
@@ -1,46 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Metrics do
4
- describe_method "types" do
5
- context "guest" do
6
- subject { guest_endpoint }
7
-
8
- let(:stub_pattern) { "types-guest" }
9
-
10
- it_behaves_like "a singular object response"
11
- end
12
-
13
- context "logged" do
14
- let(:stub_pattern) { "types-logged" }
15
-
16
- it_behaves_like "a singular object response"
17
- end
18
- end
19
-
20
- describe_method "for" do
21
- let(:expected_keys) { %i[time value] }
22
-
23
- context "cpu" do
24
- let(:arguments) { [meta[:app_id], meta[:for][:valid_cpu]] }
25
- let(:expected_count) { 181 }
26
- let(:stub_pattern) { "for-valid-cpu-200" }
27
-
28
- it_behaves_like "a collection response"
29
- it_behaves_like "a non-paginated collection"
30
- end
31
-
32
- context "router" do
33
- let(:arguments) { [meta[:app_id], meta[:for][:valid_router]] }
34
- let(:stub_pattern) { "for-valid-router-404" }
35
-
36
- it_behaves_like "a not found response"
37
- end
38
-
39
- context "invalid" do
40
- let(:arguments) { [meta[:app_id], meta[:for][:invalid]] }
41
- let(:stub_pattern) { "for-invalid-400" }
42
-
43
- it_behaves_like "a client error"
44
- end
45
- end
46
- end
@@ -1,113 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Notifiers do
4
- describe_method "platforms" do
5
- context "guest" do
6
- subject { guest_endpoint }
7
-
8
- let(:expected_count) { 4 }
9
- let(:stub_pattern) { "platforms-guest" }
10
-
11
- it_behaves_like "a collection response"
12
- it_behaves_like "a non-paginated collection"
13
- end
14
-
15
- context "logged" do
16
- let(:expected_count) { 4 }
17
- let(:stub_pattern) { "platforms-logged" }
18
-
19
- it_behaves_like "a collection response"
20
- it_behaves_like "a non-paginated collection"
21
- end
22
- end
23
-
24
- describe_method "for" do
25
- context "success" do
26
- let(:arguments) { meta[:app_id] }
27
- let(:stub_pattern) { "for-200" }
28
-
29
- it_behaves_like "a collection response"
30
- it_behaves_like "a non-paginated collection"
31
- end
32
- end
33
-
34
- describe_method "find" do
35
- context "success" do
36
- let(:arguments) { [meta[:app_id], meta[:id]] }
37
- let(:stub_pattern) { "find-200" }
38
-
39
- it_behaves_like "a singular object response"
40
- end
41
-
42
- context "not found" do
43
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
44
- let(:stub_pattern) { "find-404" }
45
-
46
- it_behaves_like "a not found response"
47
- end
48
- end
49
-
50
- describe_method "create" do
51
- context "success" do
52
- let(:arguments) { [meta[:app_id], meta[:create][:valid]] }
53
- let(:stub_pattern) { "create-201" }
54
-
55
- it_behaves_like "a singular object response", 201
56
- end
57
-
58
- context "not found" do
59
- let(:arguments) { [meta[:app_id], meta[:create][:not_found]] }
60
- let(:stub_pattern) { "create-404" }
61
-
62
- it_behaves_like "a not found response"
63
- end
64
-
65
- context "failure" do
66
- let(:arguments) { [meta[:app_id], meta[:create][:invalid]] }
67
- let(:stub_pattern) { "create-422" }
68
-
69
- it_behaves_like "an unprocessable request"
70
- end
71
- end
72
-
73
- describe_method "test" do
74
- context "success" do
75
- let(:arguments) { [meta[:app_id], meta[:id]] }
76
- let(:stub_pattern) { "test-200" }
77
-
78
- it_behaves_like "a singular object response"
79
- end
80
-
81
- context "not found" do
82
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
83
- let(:stub_pattern) { "test-404" }
84
-
85
- it_behaves_like "a not found response"
86
- end
87
- end
88
-
89
- describe_method "update" do
90
- context "success" do
91
- let(:arguments) { [meta[:app_id], meta[:id], meta[:update][:valid]] }
92
- let(:stub_pattern) { "update-200" }
93
-
94
- it_behaves_like "a singular object response"
95
- end
96
- end
97
-
98
- describe_method "destroy" do
99
- context "success" do
100
- let(:arguments) { [meta[:app_id], meta[:id]] }
101
- let(:stub_pattern) { "destroy-204" }
102
-
103
- it_behaves_like "an empty response"
104
- end
105
-
106
- context "not found" do
107
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
108
- let(:stub_pattern) { "destroy-404" }
109
-
110
- it_behaves_like "a not found response"
111
- end
112
- end
113
- end
@@ -1,27 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Operations do
4
- describe_method "get" do
5
- context "success" do
6
- let(:arguments) { "apps/#{meta[:app_id]}/operations/#{meta[:id]}" }
7
- let(:stub_pattern) { "find-200" }
8
-
9
- it_behaves_like "a singular object response"
10
- end
11
-
12
- context "failure" do
13
- let(:arguments) { "apps/#{meta[:app_id]}/operations/#{meta[:not_found_id]}" }
14
- let(:stub_pattern) { "find-404" }
15
-
16
- it_behaves_like "a not found response"
17
- end
18
- end
19
-
20
- describe_method "find" do
21
- it "delegates to get" do
22
- expect(subject).to receive(:get).with("apps/a/operations/b", :headers).once
23
-
24
- subject.find(:a, :b, :headers)
25
- end
26
- end
27
- end
@@ -1,48 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::ScmRepoLinks do
4
- describe_method "show" do
5
- context "success" do
6
- let(:arguments) { meta[:app_id] }
7
- let(:stub_pattern) { "show-200" }
8
-
9
- it_behaves_like "a singular object response"
10
- end
11
- end
12
-
13
- describe_method "create" do
14
- context "success" do
15
- let(:arguments) { [meta[:app_id], meta[:create][:valid]] }
16
- let(:stub_pattern) { "create-201" }
17
-
18
- it_behaves_like "a singular object response", 201
19
- end
20
- end
21
-
22
- describe_method "update" do
23
- context "success" do
24
- let(:arguments) { [meta[:app_id], meta[:update][:valid]] }
25
- let(:stub_pattern) { "update-200" }
26
-
27
- it_behaves_like "a singular object response"
28
- end
29
- end
30
-
31
- describe_method "deploy" do
32
- context "success" do
33
- let(:arguments) { [meta[:app_id], meta[:deploy][:valid]] }
34
- let(:stub_pattern) { "manual-deploy-200" }
35
-
36
- it_behaves_like "a singular object response"
37
- end
38
- end
39
-
40
- describe_method "destroy" do
41
- context "success" do
42
- let(:arguments) { meta[:app_id] }
43
- let(:stub_pattern) { "destroy-204" }
44
-
45
- it_behaves_like "an empty response"
46
- end
47
- end
48
- end
@@ -1,58 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::RegionalDatabase::Backups do
4
- before do
5
- scalingo.add_database_token(meta[:addon_id], "the-bearer-token")
6
- end
7
-
8
- describe_method "create" do
9
- context "success" do
10
- let(:arguments) { [meta[:addon_id]] }
11
- let(:stub_pattern) { "create-201" }
12
-
13
- it_behaves_like "a singular object response", 201
14
- end
15
-
16
- context "failure" do
17
- let(:arguments) { [meta[:addon_id]] }
18
- let(:stub_pattern) { "create-400" }
19
-
20
- it_behaves_like "a client error"
21
- end
22
- end
23
-
24
- describe_method "for" do
25
- context "success" do
26
- let(:arguments) { [meta[:addon_id]] }
27
- let(:stub_pattern) { "for-200" }
28
- let(:expected_count) { 3 }
29
-
30
- it_behaves_like "a collection response"
31
- it_behaves_like "a non-paginated collection"
32
- end
33
-
34
- context "failure" do
35
- let(:arguments) { [meta[:addon_id]] }
36
- let(:stub_pattern) { "for-400" }
37
-
38
- it_behaves_like "a client error"
39
- end
40
- end
41
-
42
- describe_method "archive" do
43
- context "success" do
44
- let(:arguments) { [meta[:addon_id], meta[:backup_id]] }
45
- let(:stub_pattern) { "archive-200" }
46
- let(:expected_keys) { %i[download_url] }
47
-
48
- it_behaves_like "a singular object response"
49
- end
50
-
51
- context "failure" do
52
- let(:arguments) { [meta[:addon_id], meta[:backup_id]] }
53
- let(:stub_pattern) { "archive-400" }
54
-
55
- it_behaves_like "a client error"
56
- end
57
- end
58
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::RegionalDatabase::Databases do
4
- before do
5
- scalingo.add_database_token(meta[:id], "the-bearer-token")
6
- end
7
-
8
- describe_method "find" do
9
- context "success" do
10
- let(:arguments) { [meta[:id]] }
11
- let(:stub_pattern) { "find-200" }
12
-
13
- it_behaves_like "a singular object response"
14
- end
15
-
16
- context "failure" do
17
- let(:arguments) { [meta[:id]] }
18
- let(:stub_pattern) { "find-400" }
19
-
20
- it_behaves_like "a client error"
21
- end
22
- end
23
-
24
- describe_method "upgrade" do
25
- context "success" do
26
- let(:arguments) { [meta[:id]] }
27
- let(:stub_pattern) { "upgrade-202" }
28
-
29
- it_behaves_like "a singular object response", 202
30
- end
31
-
32
- context "failure" do
33
- let(:arguments) { [meta[:id]] }
34
- let(:stub_pattern) { "upgrade-400" }
35
-
36
- it_behaves_like "a client error"
37
- end
38
- end
39
- end
@@ -1,11 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::RegionalDatabase do
4
- subject { described_class.new("url") }
5
-
6
- %w[databases backups].each do |section|
7
- it "handles requests for #{section}" do
8
- expect(subject.respond_to?(section)).to be true
9
- end
10
- end
11
- end
@@ -1,14 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional do
4
- subject { described_class.new("url") }
5
-
6
- %w[
7
- addons apps autoscalers collaborators containers deployments domains
8
- environment events logs metrics notifiers operations scm_repo_links
9
- ].each do |section|
10
- it "handles requests for #{section}" do
11
- expect(subject.respond_to?(section)).to be true
12
- end
13
- end
14
- end
@@ -1,81 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::TokenHolder do
4
- subject(:token_holder_dummy_class) do
5
- Class.new {
6
- include(Scalingo::TokenHolder)
7
- attr_accessor :config
8
- }
9
- end
10
-
11
- describe "authenticate_with_bearer_token" do
12
- subject { token_holder.authenticate_with_bearer_token(token, expires_at: expires_at, raise_on_expired_token: false) }
13
-
14
- let(:token_holder) do
15
- holder = token_holder_dummy_class.new
16
- holder.config = Scalingo::Configuration.new
17
-
18
- holder
19
- end
20
-
21
- context "without expiration date" do
22
- let(:token) { "1234" }
23
- let(:expires_at) { nil }
24
-
25
- it "set the auth token" do
26
- expect(token_holder.authenticated?).to be false
27
- subject
28
- expect(token_holder.authenticated?).to be true
29
- end
30
- end
31
-
32
- context "with an expiration date" do
33
- let(:token) { "1234" }
34
- let(:expires_at) { Time.now + 1.hour }
35
-
36
- it "refresh the auth token" do
37
- token_holder.authenticate_with_bearer_token(token, expires_at: 1.hour.ago, raise_on_expired_token: false)
38
- expect(token_holder.authenticated?).to be false
39
-
40
- subject
41
- expect(token_holder.authenticated?).to be true
42
- end
43
- end
44
- end
45
-
46
- describe "authenticate_database_with_bearer_token" do
47
- subject { token_holder.authenticate_database_with_bearer_token(database_id, token, expires_at: expires_at, raise_on_expired_token: false) }
48
-
49
- let(:token_holder) do
50
- holder = token_holder_dummy_class.new
51
- holder.config = Scalingo::Configuration.new
52
-
53
- holder
54
- end
55
-
56
- let(:database_id) { "db-id-1234" }
57
-
58
- context "without expiration date" do
59
- let(:token) { "1234" }
60
- let(:expires_at) { nil }
61
-
62
- it "set the database auth token" do
63
- expect(token_holder.authenticated_for_database?(database_id)).to be false
64
- subject
65
- expect(token_holder.authenticated_for_database?(database_id)).to be true
66
- end
67
- end
68
-
69
- context "with an expiration date" do
70
- let(:token) { "1234" }
71
- let(:expires_at) { Time.now + 1.hour }
72
-
73
- it "refresh the database token" do
74
- token_holder.authenticate_database_with_bearer_token(database_id, token, expires_at: 1.hour.ago, raise_on_expired_token: false)
75
- expect(token_holder.authenticated_for_database?(database_id)).to be false
76
- subject
77
- expect(token_holder.authenticated_for_database?(database_id)).to be true
78
- end
79
- end
80
- end
81
- end