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,58 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Auth::ScmIntegrations do
4
- describe_method "all" do
5
- let(:stub_pattern) { "all-200" }
6
-
7
- it_behaves_like "a collection response"
8
- it_behaves_like "a non-paginated collection"
9
- end
10
-
11
- describe_method "create" do
12
- context "success" do
13
- let(:arguments) { meta[:create][:valid] }
14
- let(:stub_pattern) { "create-201" }
15
-
16
- it_behaves_like "a singular object response", 201
17
- end
18
-
19
- context "failure" do
20
- let(:arguments) { meta[:create][:invalid] }
21
- let(:stub_pattern) { "create-422" }
22
-
23
- it_behaves_like "an unprocessable request"
24
- end
25
- end
26
-
27
- describe_method "show" do
28
- context "success" do
29
- let(:arguments) { meta[:id] }
30
- let(:stub_pattern) { "show-200" }
31
-
32
- it_behaves_like "a singular object response"
33
- end
34
-
35
- context "not found" do
36
- let(:arguments) { meta[:not_found_id] }
37
- let(:stub_pattern) { "show-404" }
38
-
39
- it_behaves_like "a not found response"
40
- end
41
- end
42
-
43
- describe_method "destroy" do
44
- context "success" do
45
- let(:arguments) { meta[:id] }
46
- let(:stub_pattern) { "destroy-204" }
47
-
48
- it_behaves_like "an empty response"
49
- end
50
-
51
- context "not found" do
52
- let(:arguments) { meta[:not_found_id] }
53
- let(:stub_pattern) { "destroy-404" }
54
-
55
- it_behaves_like "a not found response"
56
- end
57
- end
58
- end
@@ -1,74 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Auth::Tokens do
4
- describe_method "exchange" do
5
- subject { auth_guest.tokens }
6
-
7
- context "with a valid token" do
8
- let(:arguments) { meta[:exchange][:valid] }
9
- let(:stub_pattern) { "exchange-200" }
10
-
11
- it "should be successful" do
12
- expect(response).to be_successful
13
- expect(response.data[:token]).to be_present
14
- end
15
- end
16
-
17
- context "with an invalid token" do
18
- let(:arguments) { meta[:exchange][:invalid] }
19
- let(:stub_pattern) { "exchange-401" }
20
-
21
- it "should be rejected with an valid token" do
22
- expect(response.status).to eq 401
23
- end
24
- end
25
- end
26
-
27
- describe_method "all" do
28
- let(:stub_pattern) { "all-200" }
29
-
30
- it_behaves_like "a collection response"
31
- it_behaves_like "a non-paginated collection"
32
- end
33
-
34
- describe_method "create" do
35
- context "success" do
36
- let(:arguments) { meta[:create][:valid] }
37
- let(:stub_pattern) { "create-201" }
38
-
39
- it_behaves_like "a singular object response", 201
40
- end
41
- end
42
-
43
- describe_method "renew" do
44
- context "success" do
45
- let(:arguments) { meta[:id] }
46
- let(:stub_pattern) { "renew-200" }
47
-
48
- it_behaves_like "a singular object response"
49
- end
50
-
51
- context "not found" do
52
- let(:arguments) { meta[:not_found_id] }
53
- let(:stub_pattern) { "renew-404" }
54
-
55
- it_behaves_like "a not found response"
56
- end
57
- end
58
-
59
- describe_method "destroy" do
60
- context "success" do
61
- let(:arguments) { meta[:id] }
62
- let(:stub_pattern) { "destroy-204" }
63
-
64
- it_behaves_like "an empty response"
65
- end
66
-
67
- context "not found" do
68
- let(:arguments) { meta[:not_found_id] }
69
- let(:stub_pattern) { "destroy-404" }
70
-
71
- it_behaves_like "a not found response"
72
- end
73
- end
74
- end
@@ -1,69 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Auth::TwoFactorAuth do
4
- describe_method "status" do
5
- let(:stub_pattern) { "status" }
6
-
7
- it_behaves_like "a singular object response"
8
- end
9
-
10
- describe_method "initiate" do
11
- context "success" do
12
- let(:arguments) { Scalingo::Auth::TwoFactorAuth::DEFAULT_PROVIDER }
13
- let(:stub_pattern) { "initiate-success" }
14
-
15
- it_behaves_like "a singular object response", 201
16
- end
17
-
18
- context "wrong provider" do
19
- let(:arguments) { meta[:initiate][:invalid] }
20
- let(:stub_pattern) { "initiate-wrong-provider" }
21
-
22
- it_behaves_like "a client error"
23
- end
24
-
25
- context "already enabled" do
26
- let(:stub_pattern) { "initiate-already-enabled" }
27
-
28
- it_behaves_like "a client error"
29
- end
30
- end
31
-
32
- describe_method "validate" do
33
- context "success" do
34
- let(:arguments) { meta[:validate][:valid] }
35
- let(:stub_pattern) { "validate-success" }
36
- let(:expected_keys) { %i[codes user] }
37
-
38
- it_behaves_like "a singular object response", 201
39
- end
40
-
41
- context "wrong provider" do
42
- let(:arguments) { meta[:validate][:invalid] }
43
- let(:stub_pattern) { "validate-wrong" }
44
-
45
- it_behaves_like "a client error"
46
- end
47
-
48
- context "already enabled" do
49
- let(:arguments) { meta[:validate][:invalid] }
50
- let(:stub_pattern) { "validate-not-initiated" }
51
-
52
- it_behaves_like "a client error"
53
- end
54
- end
55
-
56
- describe_method "disable" do
57
- context "success" do
58
- let(:stub_pattern) { "disable-success" }
59
-
60
- it_behaves_like "a singular object response"
61
- end
62
-
63
- context "not enabled" do
64
- let(:stub_pattern) { "disable-not-initiated" }
65
-
66
- it_behaves_like "a client error"
67
- end
68
- end
69
- end
@@ -1,31 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Auth::User do
4
- describe_method "self" do
5
- let(:stub_pattern) { "self" }
6
-
7
- it_behaves_like "a singular object response"
8
- end
9
-
10
- describe_method "update" do
11
- context "success" do
12
- let(:arguments) { meta[:update][:valid] }
13
- let(:stub_pattern) { "update-200" }
14
-
15
- it_behaves_like "a singular object response"
16
- end
17
-
18
- context "unprocessable" do
19
- let(:arguments) { meta[:update][:invalid] }
20
- let(:stub_pattern) { "update-422" }
21
-
22
- it_behaves_like "an unprocessable request"
23
- end
24
- end
25
-
26
- describe_method "stop_free_trial" do
27
- let(:stub_pattern) { "stop-free-trial" }
28
-
29
- it_behaves_like "a successful response"
30
- end
31
- end
@@ -1,15 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::Auth do
4
- subject { described_class.new("url") }
5
-
6
- %w[keys scm_integrations tokens two_factor_auth user].each do |section|
7
- it "handles requests for #{section}" do
8
- expect(subject.respond_to?(section)).to be true
9
- end
10
- end
11
-
12
- it "aliases tfa" do
13
- expect(subject.tfa).to eq(subject.two_factor_auth)
14
- end
15
- end
@@ -1,72 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Scalingo::BearerToken do
4
- let(:value) { "my-token" }
5
- let(:expires_at) { nil }
6
- let(:raise_on_expired) { false }
7
-
8
- subject { described_class.new(value, expires_at: expires_at, raise_on_expired: raise_on_expired) }
9
-
10
- describe "initialize" do
11
- it "stores the value" do
12
- instance = described_class.new(:value)
13
-
14
- expect(instance.value).to eq(:value)
15
- expect(instance.expires_at).to eq nil
16
- end
17
-
18
- it "stores the expiration" do
19
- expiration = Time.now + 1.hour
20
- instance = described_class.new(:value, expires_at: expiration)
21
-
22
- expect(instance.value).to eq(:value)
23
- expect(instance.expires_at).to eq expiration
24
- end
25
- end
26
-
27
- describe "expired?" do
28
- context "without expiration" do
29
- it { expect(subject).not_to be_expired }
30
- end
31
-
32
- context "with the expiration in the future" do
33
- let(:expires_at) { Time.current + 1.hour }
34
- it { expect(subject).not_to be_expired }
35
- end
36
-
37
- context "with the expiration in the past" do
38
- let(:expires_at) { Time.current - 1.minute }
39
- it { expect(subject).to be_expired }
40
- end
41
- end
42
-
43
- describe "value" do
44
- context "when raising on expired token" do
45
- let(:raise_on_expired) { true }
46
-
47
- it "raises when expired" do
48
- expect(subject).to receive(:expired?).and_return(true)
49
- expect { subject.value }.to raise_error(Scalingo::Error::ExpiredToken)
50
- end
51
-
52
- it "returns the value when not expired" do
53
- expect(subject).to receive(:expired?).and_return(false)
54
- expect(subject.value).to eq(value)
55
- end
56
- end
57
-
58
- context "when not raising on expired token" do
59
- let(:raise_on_expired) { false }
60
-
61
- it "returns the value when expired" do
62
- expect(subject).to receive(:expired?).and_return(true)
63
- expect(subject.value).to eq(value)
64
- end
65
-
66
- it "returns the value when not expired" do
67
- expect(subject).to receive(:expired?).and_return(false)
68
- expect(subject.value).to eq(value)
69
- end
70
- end
71
- end
72
- end
@@ -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