scalingo 3.3.0 → 3.5.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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dependabot.yml +17 -0
  3. data/.github/workflows/publish.yml +6 -3
  4. data/.github/workflows/ruby.yml +3 -3
  5. data/.rubocop.yml +9 -21
  6. data/CHANGELOG.md +10 -0
  7. data/README.md +1 -1
  8. data/lib/scalingo/api/client.rb +6 -15
  9. data/lib/scalingo/api/response.rb +3 -3
  10. data/lib/scalingo/auth/tokens.rb +2 -2
  11. data/lib/scalingo/auth.rb +1 -1
  12. data/lib/scalingo/billing.rb +1 -1
  13. data/lib/scalingo/client.rb +6 -6
  14. data/lib/scalingo/configuration.rb +3 -3
  15. data/lib/scalingo/core_client.rb +2 -3
  16. data/lib/scalingo/regional/addons.rb +1 -1
  17. data/lib/scalingo/regional.rb +1 -1
  18. data/lib/scalingo/regional_database/databases.rb +13 -0
  19. data/lib/scalingo/regional_database.rb +1 -1
  20. data/lib/scalingo/token_holder.rb +1 -1
  21. data/lib/scalingo/version.rb +1 -1
  22. data/samples/regional_database/backups/_meta.json +1 -1
  23. data/samples/regional_database/backups/archive-200.json +2 -2
  24. data/samples/regional_database/backups/archive-400.json +1 -1
  25. data/samples/regional_database/backups/create-201.json +1 -1
  26. data/samples/regional_database/backups/create-400.json +1 -1
  27. data/samples/regional_database/backups/for-200.json +1 -1
  28. data/samples/regional_database/backups/for-400.json +1 -1
  29. data/samples/regional_database/databases/_meta.json +1 -1
  30. data/samples/regional_database/databases/find-200.json +5 -3
  31. data/samples/regional_database/databases/find-400.json +1 -1
  32. data/samples/regional_database/databases/upgrade-202.json +39 -0
  33. data/samples/regional_database/databases/upgrade-400.json +24 -0
  34. data/scalingo.gemspec +4 -7
  35. metadata +13 -92
  36. data/spec/scalingo/api/client_spec.rb +0 -256
  37. data/spec/scalingo/api/endpoint_spec.rb +0 -45
  38. data/spec/scalingo/api/response_spec.rb +0 -301
  39. data/spec/scalingo/auth/keys_spec.rb +0 -58
  40. data/spec/scalingo/auth/scm_integrations_spec.rb +0 -58
  41. data/spec/scalingo/auth/tokens_spec.rb +0 -74
  42. data/spec/scalingo/auth/two_factor_auth_spec.rb +0 -69
  43. data/spec/scalingo/auth/user_spec.rb +0 -31
  44. data/spec/scalingo/auth_spec.rb +0 -15
  45. data/spec/scalingo/bearer_token_spec.rb +0 -72
  46. data/spec/scalingo/billing/profile_spec.rb +0 -55
  47. data/spec/scalingo/billing_spec.rb +0 -11
  48. data/spec/scalingo/client_spec.rb +0 -93
  49. data/spec/scalingo/configuration_spec.rb +0 -57
  50. data/spec/scalingo/core_client_spec.rb +0 -23
  51. data/spec/scalingo/regional/addons_spec.rb +0 -169
  52. data/spec/scalingo/regional/apps_spec.rb +0 -137
  53. data/spec/scalingo/regional/autoscalers_spec.rb +0 -84
  54. data/spec/scalingo/regional/collaborators_spec.rb +0 -69
  55. data/spec/scalingo/regional/containers_spec.rb +0 -67
  56. data/spec/scalingo/regional/deployments_spec.rb +0 -45
  57. data/spec/scalingo/regional/domains_spec.rb +0 -84
  58. data/spec/scalingo/regional/environment_spec.rb +0 -77
  59. data/spec/scalingo/regional/events_spec.rb +0 -65
  60. data/spec/scalingo/regional/logs_spec.rb +0 -39
  61. data/spec/scalingo/regional/metrics_spec.rb +0 -46
  62. data/spec/scalingo/regional/notifiers_spec.rb +0 -113
  63. data/spec/scalingo/regional/operations_spec.rb +0 -27
  64. data/spec/scalingo/regional/scm_repo_links_spec.rb +0 -48
  65. data/spec/scalingo/regional_database/backups_spec.rb +0 -58
  66. data/spec/scalingo/regional_database/databases_spec.rb +0 -23
  67. data/spec/scalingo/regional_database_spec.rb +0 -11
  68. data/spec/scalingo/regional_spec.rb +0 -14
  69. data/spec/scalingo/token_holder_spec.rb +0 -81
@@ -1,55 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Billing::Profile do
4
- describe_method "show" do
5
- context "existing" do
6
- let(:stub_pattern) { "show-200" }
7
-
8
- it_behaves_like "a singular object response"
9
- end
10
-
11
- context "not yet created" do
12
- let(:stub_pattern) { "show-404" }
13
-
14
- it_behaves_like "a not found response"
15
- end
16
- end
17
-
18
- describe_method "create" do
19
- context "success" do
20
- let(:arguments) { meta[:create][:valid] }
21
- let(:stub_pattern) { "create-201" }
22
-
23
- it_behaves_like "a singular object response", 201
24
- end
25
-
26
- context "already existing" do
27
- let(:stub_pattern) { "create-400" }
28
-
29
- it_behaves_like "a client error"
30
- end
31
-
32
- context "unprocessable" do
33
- let(:arguments) { meta[:create][:invalid] }
34
- let(:stub_pattern) { "create-422" }
35
-
36
- it_behaves_like "an unprocessable request"
37
- end
38
- end
39
-
40
- describe_method "update" do
41
- context "success" do
42
- let(:arguments) { [meta[:id], meta[:update][:valid]] }
43
- let(:stub_pattern) { "update-200" }
44
-
45
- it_behaves_like "a singular object response"
46
- end
47
-
48
- context "unprocessable" do
49
- let(:arguments) { [meta[:id], meta[:update][:invalid]] }
50
- let(:stub_pattern) { "update-422" }
51
-
52
- it_behaves_like "an unprocessable request"
53
- end
54
- end
55
- end
@@ -1,11 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Billing do
4
- subject { described_class.new("url") }
5
-
6
- %w[profile].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,93 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Client do
4
- subject { described_class.new }
5
-
6
- describe "token" do
7
- it "wraps the token in a BearerToken" do
8
- expect(subject.token).to eq nil
9
-
10
- subject.token = "my-token"
11
- expect(subject.token).to be_a(Scalingo::BearerToken)
12
- expect(subject.token.value).to eq "my-token"
13
-
14
- subject.token = Scalingo::BearerToken.new("other-token")
15
- expect(subject.token).to be_a(Scalingo::BearerToken)
16
- expect(subject.token.value).to eq "other-token"
17
- end
18
-
19
- it "can query the authentication status" do
20
- expect(subject).not_to be_authenticated
21
-
22
- subject.token = "my-token"
23
- expect(subject).to be_authenticated
24
-
25
- subject.token = Scalingo::BearerToken.new("other-token")
26
- allow(subject.token).to receive(:expired?).and_return(false)
27
- expect(subject).to be_authenticated
28
-
29
- allow(subject.token).to receive(:expired?).and_return(true)
30
- expect(subject).not_to be_authenticated
31
- end
32
- end
33
-
34
- describe "authenticate_with" do
35
- it "raises without arguments" do
36
- expect { subject.authenticate_with }.to raise_error(ArgumentError)
37
- end
38
-
39
- it "raises with both more than one authentication type" do
40
- expect {
41
- subject.authenticate_with(access_token: :a, bearer_token: :b)
42
- }.to raise_error(ArgumentError)
43
- end
44
-
45
- it "raises if expires_at is supplied for an access_token" do
46
- expect {
47
- subject.authenticate_with(access_token: :a, expires_at: :b)
48
- }.to raise_error(ArgumentError)
49
- end
50
-
51
- context "with access token" do
52
- it "is successful with valid token" do
53
- fake_response = OpenStruct.new(
54
- successful?: true,
55
- data: {token: "response token"},
56
- )
57
-
58
- expect(subject.auth.tokens).to receive(:exchange).and_return(fake_response)
59
-
60
- expect(subject.authenticate_with(access_token: "access token")).to be true
61
- expect(subject.token.value).to eq "response token"
62
- expect(subject.token.expires_at).to be_within(1.second).of(Time.current + Scalingo.config.exchanged_token_validity)
63
- end
64
-
65
- it "fails with invalid token" do
66
- fake_response = OpenStruct.new(
67
- successful?: false,
68
- )
69
-
70
- expect(subject.auth.tokens).to receive(:exchange).and_return(fake_response)
71
-
72
- expect(subject.authenticate_with(access_token: "access token")).to be false
73
- expect(subject.token).to be nil
74
- end
75
- end
76
-
77
- context "with bearer token" do
78
- it "only sets the bearer token according to the arguments" do
79
- expect(subject.authenticate_with(bearer_token: "my token")).to be true
80
- expect(subject.token.value).to eq "my token"
81
- expect(subject.token.expires_at).to eq nil
82
-
83
- expect(subject.authenticate_with(bearer_token: Scalingo::BearerToken.new("my token"))).to be true
84
- expect(subject.token.value).to eq "my token"
85
- expect(subject.token.expires_at).to eq nil
86
-
87
- expect(subject.authenticate_with(bearer_token: "my token", expires_at: Time.now + 1.hour)).to be true
88
- expect(subject.token.value).to eq "my token"
89
- expect(subject.token.expires_at).not_to eq nil
90
- end
91
- end
92
- end
93
- end
@@ -1,57 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Configuration do
4
- subject { described_class.default }
5
-
6
- describe "inheritance" do
7
- it "can inherit configuration from a parent" do
8
- object = described_class.new({}, subject)
9
-
10
- described_class::ATTRIBUTES.each do |attr|
11
- expect(object.public_send(attr)).to eq subject.public_send(attr)
12
- end
13
- end
14
-
15
- it "can uses local configuration when supplied, the parent other wise" do
16
- object = described_class.new({user_agent: "Agent"}, subject)
17
-
18
- (described_class::ATTRIBUTES - [:user_agent]).each do |attr|
19
- expect(object.public_send(attr)).to eq subject.public_send(attr)
20
- end
21
-
22
- expect(object.user_agent).to eq "Agent"
23
- end
24
- end
25
-
26
- describe "faraday adapter" do
27
- let(:scalingo) { Scalingo::Client.new(config).tap { |s| s.authenticate_with(bearer_token: "some-token") } }
28
- let(:client) { Scalingo::API::Client.new("http://example.test", scalingo: scalingo) }
29
-
30
- context "when unspecified" do
31
- let(:config) { {} }
32
-
33
- it "uses the default one when unspecificied" do
34
- expect(client.authenticated_connection.adapter).to eq Faraday::Adapter::NetHttp
35
- expect(client.unauthenticated_connection.adapter).to eq Faraday::Adapter::NetHttp
36
- end
37
- end
38
-
39
- context "when set to an unkown adapter" do
40
- let(:config) { {faraday_adapter: :yo} }
41
-
42
- it "uses the default one when unspecificied" do
43
- expect { client.authenticated_connection.adapter }.to raise_error(Faraday::Error)
44
- expect { client.unauthenticated_connection.adapter }.to raise_error(Faraday::Error)
45
- end
46
- end
47
-
48
- context "when set to a valid adapter" do
49
- let(:config) { {faraday_adapter: :test} }
50
-
51
- it "uses the default one when unspecificied" do
52
- expect(client.authenticated_connection.adapter).to eq Faraday::Adapter::Test
53
- expect(client.unauthenticated_connection.adapter).to eq Faraday::Adapter::Test
54
- end
55
- end
56
- end
57
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::CoreClient do
4
- subject { described_class.new }
5
-
6
- describe "#database_region" do
7
- it "forwards call to the specified region" do
8
- allow(subject).to receive("db_api_osc_secnum_fr1")
9
-
10
- subject.database_region("db_api_osc_secnum_fr1")
11
-
12
- expect(subject).to have_received("db_api_osc_secnum_fr1")
13
- end
14
-
15
- it "forwards call to default db_api region" do
16
- allow(subject).to receive("db_api_#{subject.config.default_region}")
17
-
18
- subject.database_region
19
-
20
- expect(subject).to have_received("db_api_#{subject.config.default_region}")
21
- end
22
- end
23
- end
@@ -1,169 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Addons do
4
- describe_method "categories" do
5
- context "guest" do
6
- subject { guest_endpoint }
7
-
8
- let(:expected_count) { 2 }
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) { 2 }
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 "providers" do
25
- context "guest" do
26
- subject { guest_endpoint }
27
-
28
- let(:expected_count) { 9 }
29
- let(:stub_pattern) { "providers-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) { 11 }
37
- let(:stub_pattern) { "providers-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 "provision" do
45
- context "success" do
46
- let(:arguments) { [meta[:app_id], meta[:provision][:valid]] }
47
- let(:stub_pattern) { "provision-201" }
48
-
49
- it_behaves_like "a singular object response", 201
50
- end
51
-
52
- context "failure" do
53
- let(:arguments) { [meta[:app_id], meta[:provision][:invalid]] }
54
- let(:stub_pattern) { "provision-400" }
55
-
56
- it_behaves_like "a client error"
57
- end
58
- end
59
-
60
- describe_method "for" do
61
- context "success" do
62
- let(:arguments) { meta[:app_id] }
63
- let(:stub_pattern) { "for-200" }
64
-
65
- it_behaves_like "a collection response"
66
- it_behaves_like "a non-paginated collection"
67
- end
68
- end
69
-
70
- describe_method "find" do
71
- context "success" do
72
- let(:arguments) { [meta[:app_id], meta[:id]] }
73
- let(:stub_pattern) { "find-200" }
74
-
75
- it_behaves_like "a singular object response"
76
- end
77
-
78
- context "not found" do
79
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
80
- let(:stub_pattern) { "find-404" }
81
-
82
- it_behaves_like "a not found response"
83
- end
84
- end
85
-
86
- describe_method "sso" do
87
- context "success" do
88
- let(:arguments) { [meta[:app_id], meta[:id]] }
89
- let(:stub_pattern) { "sso-200" }
90
-
91
- it_behaves_like "a singular object response"
92
- end
93
-
94
- context "not found" do
95
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
96
- let(:stub_pattern) { "sso-404" }
97
-
98
- it_behaves_like "a not found response"
99
- end
100
- end
101
-
102
- describe_method "token" do
103
- context "success" do
104
- let(:arguments) { [meta[:app_id], meta[:id]] }
105
- let(:stub_pattern) { "token-200" }
106
-
107
- it_behaves_like "a singular object response"
108
- end
109
-
110
- context "not found" do
111
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
112
- let(:stub_pattern) { "token-404" }
113
-
114
- it_behaves_like "a not found response"
115
- end
116
- end
117
-
118
- describe_method "authenticate!" do
119
- context "success" do
120
- let(:arguments) { [meta[:app_id], meta[:id]] }
121
- let(:stub_pattern) { "token-200" }
122
-
123
- it_behaves_like "a singular object response"
124
- it "authenticates" do
125
- response
126
- expect(scalingo.authenticated_for_database?(meta[:id])).to be true
127
- end
128
- end
129
-
130
- context "not found" do
131
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
132
- let(:stub_pattern) { "token-404" }
133
-
134
- it_behaves_like "a not found response"
135
- end
136
- end
137
-
138
- describe_method "update" do
139
- context "success" do
140
- let(:arguments) { [meta[:app_id], meta[:id], meta[:update][:valid]] }
141
- let(:stub_pattern) { "update-200" }
142
-
143
- it_behaves_like "a singular object response"
144
- end
145
-
146
- context "failure" do
147
- let(:arguments) { [meta[:app_id], meta[:id], meta[:update][:invalid]] }
148
- let(:stub_pattern) { "update-404" }
149
-
150
- it_behaves_like "a not found response"
151
- end
152
- end
153
-
154
- describe_method "destroy" do
155
- context "success" do
156
- let(:arguments) { [meta[:app_id], meta[:id]] }
157
- let(:stub_pattern) { "destroy-204" }
158
-
159
- it_behaves_like "an empty response"
160
- end
161
-
162
- context "not found" do
163
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
164
- let(:stub_pattern) { "destroy-404" }
165
-
166
- it_behaves_like "a not found response"
167
- end
168
- end
169
- end
@@ -1,137 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Apps do
4
- describe_method "all" do
5
- let(:expected_count) { 2 }
6
- let(:stub_pattern) { "all" }
7
-
8
- it_behaves_like "a collection response"
9
- it_behaves_like "a non-paginated collection"
10
- end
11
-
12
- describe_method "create" do
13
- context "success" do
14
- let(:arguments) { meta[:create][:valid] }
15
- let(:stub_pattern) { "create-201" }
16
-
17
- it_behaves_like "a singular object response", 201
18
- end
19
-
20
- context "failure" do
21
- let(:arguments) { meta[:create][:invalid] }
22
- let(:stub_pattern) { "create-422" }
23
-
24
- it_behaves_like "an unprocessable request"
25
- end
26
- end
27
-
28
- describe_method "find" do
29
- context "success" do
30
- let(:arguments) { meta[:id] }
31
- let(:stub_pattern) { "find-200" }
32
-
33
- it_behaves_like "a singular object response"
34
- end
35
-
36
- context "not found" do
37
- let(:arguments) { meta[:not_found_id] }
38
- let(:stub_pattern) { "find-404" }
39
-
40
- it_behaves_like "a not found response"
41
- end
42
- end
43
-
44
- describe_method "update" do
45
- context "success" do
46
- let(:arguments) { [meta[:id], meta[:update][:valid]] }
47
- let(:stub_pattern) { "update-200" }
48
-
49
- it_behaves_like "a singular object response"
50
- end
51
-
52
- context "invalid stack" do
53
- let(:arguments) { [meta[:id], meta[:update][:invalid]] }
54
- let(:stub_pattern) { "update-stack-404" }
55
-
56
- it_behaves_like "a not found response"
57
- end
58
- end
59
-
60
- describe_method "logs_url" do
61
- context "success" do
62
- let(:arguments) { meta[:id] }
63
- let(:stub_pattern) { "logs_url" }
64
-
65
- it_behaves_like "a singular object response"
66
- end
67
- end
68
-
69
- describe_method "destroy" do
70
- context "success" do
71
- let(:arguments) { [meta[:id], meta[:destroy][:valid]] }
72
- let(:stub_pattern) { "destroy-204" }
73
-
74
- it_behaves_like "an empty response"
75
- end
76
-
77
- context "not found" do
78
- let(:arguments) { [meta[:not_found_id], meta[:destroy][:valid]] }
79
- let(:stub_pattern) { "destroy-404" }
80
-
81
- it_behaves_like "a not found response"
82
- end
83
-
84
- context "unprocessable" do
85
- let(:arguments) { [meta[:id], meta[:destroy][:invalid]] }
86
- let(:stub_pattern) { "destroy-422" }
87
-
88
- it_behaves_like "an unprocessable request"
89
- end
90
- end
91
-
92
- describe_method "rename" do
93
- context "success" do
94
- let(:arguments) { [meta[:id], meta[:rename][:valid]] }
95
- let(:stub_pattern) { "rename-200" }
96
-
97
- it_behaves_like "a singular object response"
98
- end
99
-
100
- context "not found" do
101
- let(:arguments) { [meta[:not_found_id], meta[:rename][:valid]] }
102
- let(:stub_pattern) { "rename-404" }
103
-
104
- it_behaves_like "a not found response"
105
- end
106
-
107
- context "unprocessable" do
108
- let(:arguments) { [meta[:id], meta[:rename][:invalid]] }
109
- let(:stub_pattern) { "rename-422" }
110
-
111
- it_behaves_like "an unprocessable request"
112
- end
113
- end
114
-
115
- describe_method "transfer" do
116
- context "success" do
117
- let(:arguments) { [meta[:id], meta[:transfer][:valid]] }
118
- let(:stub_pattern) { "transfer-200" }
119
-
120
- it_behaves_like "a singular object response"
121
- end
122
-
123
- context "not found" do
124
- let(:arguments) { [meta[:not_found_id], meta[:transfer][:valid]] }
125
- let(:stub_pattern) { "transfer-404" }
126
-
127
- it_behaves_like "a not found response"
128
- end
129
-
130
- context "unprocessable" do
131
- let(:arguments) { [meta[:id], meta[:transfer][:invalid]] }
132
- let(:stub_pattern) { "transfer-422" }
133
-
134
- it_behaves_like "an unprocessable request"
135
- end
136
- end
137
- end
@@ -1,84 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Autoscalers do
4
- describe_method "create" do
5
- context "success" do
6
- let(:arguments) { [meta[:app_id], meta[:create][:valid]] }
7
- let(:stub_pattern) { "create-201" }
8
-
9
- it_behaves_like "a singular object response", 201
10
- end
11
-
12
- context "failure" do
13
- let(:arguments) { [meta[:app_id], meta[:create][:invalid]] }
14
- let(:stub_pattern) { "create-500" }
15
-
16
- it_behaves_like "a server error"
17
- end
18
- end
19
-
20
- describe_method "for" do
21
- context "success" do
22
- let(:arguments) { meta[:app_id] }
23
- let(:stub_pattern) { "for-200" }
24
-
25
- it_behaves_like "a collection response"
26
- it_behaves_like "a non-paginated collection"
27
- end
28
- end
29
-
30
- describe_method "find" do
31
- context "success" do
32
- let(:arguments) { [meta[:app_id], meta[:id]] }
33
- let(:stub_pattern) { "find-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]] }
40
- let(:stub_pattern) { "find-404" }
41
-
42
- it_behaves_like "a not found response"
43
- end
44
- end
45
-
46
- describe_method "update" do
47
- context "success" do
48
- let(:arguments) { [meta[:app_id], meta[:id], meta[:update][:valid]] }
49
- let(:stub_pattern) { "update-200" }
50
-
51
- it_behaves_like "a singular object response"
52
- end
53
-
54
- context "failure" do
55
- let(:arguments) { [meta[:app_id], meta[:id], meta[:update][:invalid]] }
56
- let(:stub_pattern) { "update-500" }
57
-
58
- it_behaves_like "a server error"
59
- end
60
-
61
- context "not found" do
62
- let(:arguments) { [meta[:app_id], meta[:not_found_id], meta[:update][:valid]] }
63
- let(:stub_pattern) { "update-404" }
64
-
65
- it_behaves_like "a not found response"
66
- end
67
- end
68
-
69
- describe_method "destroy" do
70
- context "success" do
71
- let(:arguments) { [meta[:app_id], meta[:id]] }
72
- let(:stub_pattern) { "destroy-204" }
73
-
74
- it_behaves_like "an empty response"
75
- end
76
-
77
- context "not found" do
78
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
79
- let(:stub_pattern) { "destroy-404" }
80
-
81
- it_behaves_like "a not found response"
82
- end
83
- end
84
- end
@@ -1,69 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Regional::Collaborators 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 "invite" do
15
- context "success" do
16
- let(:arguments) { [meta[:app_id], meta[:invite][:valid]] }
17
- let(:stub_pattern) { "invite-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[:invite][:invalid]] }
24
- let(:stub_pattern) { "invite-422" }
25
-
26
- it_behaves_like "an unprocessable request"
27
- end
28
- end
29
-
30
- describe_method "accept" do
31
- context "success" do
32
- let(:arguments) { meta[:accept][:valid] }
33
- let(:stub_pattern) { "accept-200" }
34
- let(:expected_keys) { %i[app] }
35
-
36
- it_behaves_like "a singular object response"
37
- end
38
-
39
- context "already collaborating" do
40
- let(:arguments) { meta[:accept][:valid] }
41
- let(:stub_pattern) { "accept-400" }
42
-
43
- it_behaves_like "a client error"
44
- end
45
-
46
- context "not found" do
47
- let(:arguments) { meta[:accept][:invalid] }
48
- let(:stub_pattern) { "accept-404" }
49
-
50
- it_behaves_like "a not found response"
51
- end
52
- end
53
-
54
- describe_method "destroy" do
55
- context "success" do
56
- let(:arguments) { [meta[:app_id], meta[:id]] }
57
- let(:stub_pattern) { "destroy-204" }
58
-
59
- it_behaves_like "an empty response"
60
- end
61
-
62
- context "not found" do
63
- let(:arguments) { [meta[:app_id], meta[:not_found_id]] }
64
- let(:stub_pattern) { "destroy-404" }
65
-
66
- it_behaves_like "a not found response"
67
- end
68
- end
69
- end