ruby-lokalise-api 1.1.0 → 2.0.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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -2
  3. data/README.md +172 -10
  4. data/lib/ruby-lokalise-api.rb +2 -0
  5. data/lib/ruby-lokalise-api/client.rb +18 -0
  6. data/lib/ruby-lokalise-api/collections/base.rb +11 -10
  7. data/lib/ruby-lokalise-api/collections/contributor.rb +1 -3
  8. data/lib/ruby-lokalise-api/collections/file.rb +1 -3
  9. data/lib/ruby-lokalise-api/collections/key.rb +8 -3
  10. data/lib/ruby-lokalise-api/collections/key_comment.rb +2 -3
  11. data/lib/ruby-lokalise-api/collections/project.rb +1 -3
  12. data/lib/ruby-lokalise-api/collections/project_comment.rb +1 -3
  13. data/lib/ruby-lokalise-api/collections/project_language.rb +1 -3
  14. data/lib/ruby-lokalise-api/collections/screenshot.rb +1 -3
  15. data/lib/ruby-lokalise-api/collections/snapshot.rb +1 -3
  16. data/lib/ruby-lokalise-api/collections/system_language.rb +1 -3
  17. data/lib/ruby-lokalise-api/collections/task.rb +1 -3
  18. data/lib/ruby-lokalise-api/collections/team.rb +1 -3
  19. data/lib/ruby-lokalise-api/collections/team_user.rb +1 -3
  20. data/lib/ruby-lokalise-api/collections/translation.rb +1 -3
  21. data/lib/ruby-lokalise-api/error.rb +2 -0
  22. data/lib/ruby-lokalise-api/request.rb +11 -3
  23. data/lib/ruby-lokalise-api/resources/base.rb +51 -41
  24. data/lib/ruby-lokalise-api/resources/contributor.rb +6 -4
  25. data/lib/ruby-lokalise-api/resources/file.rb +7 -12
  26. data/lib/ruby-lokalise-api/resources/key.rb +5 -4
  27. data/lib/ruby-lokalise-api/resources/key_comment.rb +6 -4
  28. data/lib/ruby-lokalise-api/resources/project.rb +10 -7
  29. data/lib/ruby-lokalise-api/resources/project_language.rb +5 -4
  30. data/lib/ruby-lokalise-api/resources/screenshot.rb +5 -4
  31. data/lib/ruby-lokalise-api/resources/snapshot.rb +10 -5
  32. data/lib/ruby-lokalise-api/resources/task.rb +5 -4
  33. data/lib/ruby-lokalise-api/resources/team_user.rb +6 -4
  34. data/lib/ruby-lokalise-api/resources/translation.rb +5 -4
  35. data/lib/ruby-lokalise-api/rest/comments.rb +6 -6
  36. data/lib/ruby-lokalise-api/rest/contributors.rb +6 -6
  37. data/lib/ruby-lokalise-api/rest/files.rb +3 -3
  38. data/lib/ruby-lokalise-api/rest/keys.rb +9 -9
  39. data/lib/ruby-lokalise-api/rest/languages.rb +7 -7
  40. data/lib/ruby-lokalise-api/rest/projects.rb +7 -7
  41. data/lib/ruby-lokalise-api/rest/screenshots.rb +6 -6
  42. data/lib/ruby-lokalise-api/rest/snapshots.rb +5 -5
  43. data/lib/ruby-lokalise-api/rest/tasks.rb +6 -6
  44. data/lib/ruby-lokalise-api/rest/team_users.rb +5 -5
  45. data/lib/ruby-lokalise-api/rest/teams.rb +1 -1
  46. data/lib/ruby-lokalise-api/rest/translations.rb +3 -3
  47. data/lib/ruby-lokalise-api/utils/attribute_helpers.rb +19 -5
  48. data/lib/ruby-lokalise-api/utils/endpoint_helpers.rb +12 -0
  49. data/lib/ruby-lokalise-api/utils/string_utils.rb +4 -0
  50. data/lib/ruby-lokalise-api/version.rb +1 -1
  51. data/ruby-lokalise-api.gemspec +1 -0
  52. data/spec/lib/ruby-lokalise-api/rest/comments_spec.rb +22 -5
  53. data/spec/lib/ruby-lokalise-api/rest/contributors_spec.rb +35 -2
  54. data/spec/lib/ruby-lokalise-api/rest/keys_spec.rb +55 -4
  55. data/spec/lib/ruby-lokalise-api/rest/languages_spec.rb +31 -2
  56. data/spec/lib/ruby-lokalise-api/rest/projects_spec.rb +36 -2
  57. data/spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb +45 -8
  58. data/spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb +25 -2
  59. data/spec/lib/ruby-lokalise-api/rest/tasks_spec.rb +38 -2
  60. data/spec/lib/ruby-lokalise-api/rest/team_users_spec.rb +25 -2
  61. data/spec/lib/ruby-lokalise-api/rest/translations_spec.rb +17 -3
  62. metadata +17 -2
@@ -7,7 +7,7 @@ module Lokalise
7
7
  # @param project_id [String]
8
8
  # @param params [Hash]
9
9
  def screenshots(project_id, params = {})
10
- Lokalise::Collections::Screenshot.all self, params, project_id
10
+ c_r Lokalise::Collections::Screenshot, :all, project_id, params
11
11
  end
12
12
 
13
13
  # Returns a single screenshot for the given project
@@ -17,7 +17,7 @@ module Lokalise
17
17
  # @param project_id [String]
18
18
  # @param screenshot_id [String, Integer]
19
19
  def screenshot(project_id, screenshot_id)
20
- Lokalise::Resources::Screenshot.find self, project_id, screenshot_id
20
+ c_r Lokalise::Resources::Screenshot, :find, [project_id, screenshot_id]
21
21
  end
22
22
 
23
23
  # Creates one or more screenshots for the given project
@@ -27,7 +27,7 @@ module Lokalise
27
27
  # @param project_id [String]
28
28
  # @param params [Hash]
29
29
  def create_screenshots(project_id, params = {})
30
- Lokalise::Resources::Screenshot.create self, project_id, params, :screenshots
30
+ c_r Lokalise::Resources::Screenshot, :create, project_id, params, :screenshots
31
31
  end
32
32
 
33
33
  # Updates screenshot
@@ -38,7 +38,7 @@ module Lokalise
38
38
  # @param screenshot_id [String, Integer]
39
39
  # @param params [Hash]
40
40
  def update_screenshot(project_id, screenshot_id, params = {})
41
- Lokalise::Resources::Screenshot.update self, project_id, screenshot_id, params
41
+ c_r Lokalise::Resources::Screenshot, :update, [project_id, screenshot_id], params
42
42
  end
43
43
 
44
44
  # Deletes screenshot
@@ -47,8 +47,8 @@ module Lokalise
47
47
  # @return [Hash]
48
48
  # @param project_id [String]
49
49
  # @param screenshot_id [String, Integer]
50
- def delete_screenshot(project_id, screenshot_id)
51
- Lokalise::Resources::Screenshot.destroy self, project_id, screenshot_id
50
+ def destroy_screenshot(project_id, screenshot_id)
51
+ c_r Lokalise::Resources::Screenshot, :destroy, [project_id, screenshot_id]
52
52
  end
53
53
  end
54
54
  end
@@ -7,7 +7,7 @@ module Lokalise
7
7
  # @param project_id [String]
8
8
  # @param params [Hash]
9
9
  def snapshots(project_id, params = {})
10
- Lokalise::Collections::Snapshot.all self, params, project_id
10
+ c_r Lokalise::Collections::Snapshot, :all, project_id, params
11
11
  end
12
12
 
13
13
  # Creates snapshot for the given project
@@ -17,7 +17,7 @@ module Lokalise
17
17
  # @param project_id [String]
18
18
  # @param params [Hash]
19
19
  def create_snapshot(project_id, params = {})
20
- Lokalise::Resources::Snapshot.create self, project_id, params
20
+ c_r Lokalise::Resources::Snapshot, :create, project_id, params
21
21
  end
22
22
 
23
23
  # Restore project from the given snapshot by producing project's copy
@@ -27,7 +27,7 @@ module Lokalise
27
27
  # @param project_id [String]
28
28
  # @param snapshot_id [String, Integer]
29
29
  def restore_snapshot(project_id, snapshot_id)
30
- Lokalise::Resources::Snapshot.restore self, project_id, snapshot_id
30
+ c_r Lokalise::Resources::Snapshot, :restore, [project_id, snapshot_id]
31
31
  end
32
32
 
33
33
  # Deletes snapshot
@@ -36,8 +36,8 @@ module Lokalise
36
36
  # @return [Hash]
37
37
  # @param project_id [String]
38
38
  # @param snapshot_id [String, Integer]
39
- def delete_snapshot(project_id, snapshot_id)
40
- Lokalise::Resources::Snapshot.destroy self, project_id, snapshot_id
39
+ def destroy_snapshot(project_id, snapshot_id)
40
+ c_r Lokalise::Resources::Snapshot, :destroy, [project_id, snapshot_id]
41
41
  end
42
42
  end
43
43
  end
@@ -7,7 +7,7 @@ module Lokalise
7
7
  # @param project_id [String]
8
8
  # @param params [Hash]
9
9
  def tasks(project_id, params = {})
10
- Lokalise::Collections::Task.all self, params, project_id
10
+ c_r Lokalise::Collections::Task, :all, project_id, params
11
11
  end
12
12
 
13
13
  # Returns a single task for the given project
@@ -17,7 +17,7 @@ module Lokalise
17
17
  # @param project_id [String]
18
18
  # @param task_id [String, Integer]
19
19
  def task(project_id, task_id)
20
- Lokalise::Resources::Task.find self, project_id, task_id
20
+ c_r Lokalise::Resources::Task, :find, [project_id, task_id]
21
21
  end
22
22
 
23
23
  # Creates task for the given project
@@ -27,7 +27,7 @@ module Lokalise
27
27
  # @param project_id [String]
28
28
  # @param params [Hash]
29
29
  def create_task(project_id, params)
30
- Lokalise::Resources::Task.create self, project_id, params
30
+ c_r Lokalise::Resources::Task, :create, project_id, params
31
31
  end
32
32
 
33
33
  # Updates task for the given project
@@ -38,7 +38,7 @@ module Lokalise
38
38
  # @param task_id [String, Integer]
39
39
  # @param params [Hash]
40
40
  def update_task(project_id, task_id, params = {})
41
- Lokalise::Resources::Task.update self, project_id, task_id, params
41
+ c_r Lokalise::Resources::Task, :update, [project_id, task_id], params
42
42
  end
43
43
 
44
44
  # Deletes task for the given project
@@ -47,8 +47,8 @@ module Lokalise
47
47
  # @return [Hash]
48
48
  # @param project_id [String]
49
49
  # @param task_id [String, Integer]
50
- def delete_task(project_id, task_id)
51
- Lokalise::Resources::Task.destroy self, project_id, task_id
50
+ def destroy_task(project_id, task_id)
51
+ c_r Lokalise::Resources::Task, :destroy, [project_id, task_id]
52
52
  end
53
53
  end
54
54
  end
@@ -7,7 +7,7 @@ module Lokalise
7
7
  # @param team_id [String]
8
8
  # @param params [Hash]
9
9
  def team_users(team_id, params = {})
10
- Lokalise::Collections::TeamUser.all self, params, team_id
10
+ c_r Lokalise::Collections::TeamUser, :all, team_id, params
11
11
  end
12
12
 
13
13
  # Returns team user from the given team
@@ -17,7 +17,7 @@ module Lokalise
17
17
  # @param team_id [String]
18
18
  # @param user_id [String, Integer]
19
19
  def team_user(team_id, user_id)
20
- Lokalise::Resources::TeamUser.find self, team_id, user_id
20
+ c_r Lokalise::Resources::TeamUser, :find, [team_id, user_id]
21
21
  end
22
22
 
23
23
  # Updates team user for the given team
@@ -28,7 +28,7 @@ module Lokalise
28
28
  # @param user_id [String, Integer]
29
29
  # @param params [Hash]
30
30
  def update_team_user(team_id, user_id, params)
31
- Lokalise::Resources::TeamUser.update self, team_id, user_id, params
31
+ c_r Lokalise::Resources::TeamUser, :update, [team_id, user_id], params
32
32
  end
33
33
 
34
34
  # Deletes team user from the given team
@@ -37,8 +37,8 @@ module Lokalise
37
37
  # @return [Lokalise::Resources::TeamUser]
38
38
  # @param team_id [String]
39
39
  # @param user_id [String, Integer]
40
- def delete_team_user(team_id, user_id)
41
- Lokalise::Resources::TeamUser.destroy self, team_id, user_id
40
+ def destroy_team_user(team_id, user_id)
41
+ c_r Lokalise::Resources::TeamUser, :destroy, [team_id, user_id]
42
42
  end
43
43
  end
44
44
  end
@@ -6,7 +6,7 @@ module Lokalise
6
6
  # @return [Lokalise::Collection::Team<Lokalise::Resources::Team>]
7
7
  # @param params [Hash]
8
8
  def teams(params = {})
9
- Lokalise::Collections::Team.all self, params
9
+ c_r Lokalise::Collections::Team, :all, nil, params
10
10
  end
11
11
  end
12
12
  end
@@ -7,7 +7,7 @@ module Lokalise
7
7
  # @param project_id [String]
8
8
  # @param params [Hash]
9
9
  def translations(project_id, params = {})
10
- Lokalise::Collections::Translation.all self, params, project_id
10
+ c_r Lokalise::Collections::Translation, :all, project_id, params
11
11
  end
12
12
 
13
13
  # Returns translation of the given project
@@ -18,7 +18,7 @@ module Lokalise
18
18
  # @param translation_id [String, Integer]
19
19
  # @param params [Hash]
20
20
  def translation(project_id, translation_id, params = {})
21
- Lokalise::Resources::Translation.find self, project_id, translation_id, params
21
+ c_r Lokalise::Resources::Translation, :find, [project_id, translation_id], params
22
22
  end
23
23
 
24
24
  # Updates translation of the given project
@@ -29,7 +29,7 @@ module Lokalise
29
29
  # @param translation_id [String, Integer]
30
30
  # @param params [Hash]
31
31
  def update_translation(project_id, translation_id, params)
32
- Lokalise::Resources::Translation.update self, project_id, translation_id, params
32
+ c_r Lokalise::Resources::Translation, :update, [project_id, translation_id], params
33
33
  end
34
34
  end
35
35
  end
@@ -12,17 +12,23 @@ module Lokalise
12
12
  # @param model_class [String]
13
13
  # @param plural [Boolean] Should the returned value be pluralized?
14
14
  def data_key_for(model_class, plural = false)
15
- data_key = if Module.const_defined? "Lokalise::Resources::#{model_class}::DATA_KEY"
16
- Module.const_get "Lokalise::Resources::#{model_class}::DATA_KEY"
17
- else
18
- model_class
19
- end.snakecase
15
+ data_key = get_key 'DATA_KEY', model_class
20
16
 
21
17
  return data_key unless plural
22
18
 
23
19
  data_key + 's'
24
20
  end
25
21
 
22
+ # Returns key used to determine resource id (for example `user_id` or `project_id`).
23
+ # Most ids corresponds to resources' class names, but some may differ (for instance,
24
+ # `Contributor` has `user_id` attribute).
25
+ #
26
+ # @return [String]
27
+ # @param model_class [String]
28
+ def id_key_for(model_class)
29
+ get_key('ID_KEY', model_class) + '_id'
30
+ end
31
+
26
32
  # Loads attributes for the given resource based on its name
27
33
  #
28
34
  # @return [Array<String>]
@@ -37,6 +43,14 @@ module Lokalise
37
43
 
38
44
  private
39
45
 
46
+ def get_key(name, model_class)
47
+ if Module.const_defined? "Lokalise::Resources::#{model_class}::#{name}"
48
+ Module.const_get "Lokalise::Resources::#{model_class}::#{name}"
49
+ else
50
+ model_class
51
+ end.snakecase
52
+ end
53
+
40
54
  # Unify some resources' names (eg, `ProjectComment` and `KeyComment` have the same attributes which are stored under `comment`)
41
55
  #
42
56
  # @return [String]
@@ -0,0 +1,12 @@
1
+ module Lokalise
2
+ module Utils
3
+ module EndpointHelpers
4
+ def path_from(raw_mapping)
5
+ template = Addressable::Template.new '{/segments*}'
6
+ template.expand(
7
+ segments: raw_mapping.to_a.flatten
8
+ ).to_s
9
+ end
10
+ end
11
+ end
12
+ end
@@ -18,4 +18,8 @@ class String
18
18
  def base_class_name
19
19
  split('::').last
20
20
  end
21
+
22
+ def remove_trailing_slash
23
+ gsub %r{/\z}, ''
24
+ end
21
25
  end
@@ -1,3 +1,3 @@
1
1
  module Lokalise
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.extra_rdoc_files = ['README.md']
21
21
  spec.require_paths = ['lib']
22
22
 
23
+ spec.add_dependency 'addressable', '~> 2.5'
23
24
  spec.add_dependency 'faraday', '~> 0.13'
24
25
  spec.add_dependency 'multi_json', '~> 1.12'
25
26
 
@@ -1,6 +1,7 @@
1
1
  RSpec.describe Lokalise::Client do
2
2
  let(:project_id) { '803826145ba90b42d5d860.46800099' }
3
3
  let(:key_id) { 15_305_182 }
4
+ let(:another_key_id) { 15_519_786 }
4
5
 
5
6
  describe '#comments' do
6
7
  it 'should return all comments' do
@@ -28,19 +29,18 @@ RSpec.describe Lokalise::Client do
28
29
  expect(comments.prev_page?).to eq(true)
29
30
  expect(comments.first_page?).to eq(false)
30
31
 
31
- expect(comments.ids).to include(project_id, key_id)
32
32
  expect(comments.client).to be_an_instance_of(Lokalise::Client)
33
33
  end
34
34
  end
35
35
 
36
36
  specify '#comment' do
37
37
  comment = VCR.use_cassette('comment') do
38
- test_client.comment project_id, '15519786', '800746'
38
+ test_client.comment project_id, another_key_id, '800746'
39
39
  end
40
40
 
41
41
  expect(comment.comment).to eq('rspec comment')
42
42
  expect(comment.comment_id).to eq(800_746)
43
- expect(comment.key_id).to eq(15_519_786)
43
+ expect(comment.key_id).to eq(another_key_id)
44
44
  expect(comment.added_by).to eq(20_181)
45
45
  expect(comment.added_by_email).to eq('bodrovis@protonmail.com')
46
46
  expect(comment.added_at).to eq('2018-12-09 19:41:44 (Etc/UTC)')
@@ -76,11 +76,28 @@ RSpec.describe Lokalise::Client do
76
76
  expect(comment.comment_id).to eq(767_938)
77
77
  end
78
78
 
79
- specify '#delete_comment' do
79
+ specify '#destroy_comment' do
80
80
  response = VCR.use_cassette('delete_comment') do
81
- test_client.delete_comment project_id, key_id, 767_938
81
+ test_client.destroy_comment project_id, key_id, 767_938
82
82
  end
83
83
  expect(response['project_id']).to eq(project_id)
84
84
  expect(response['comment_deleted']).to eq(true)
85
85
  end
86
+
87
+ context 'comment chained methods' do
88
+ it 'should support destroy' do
89
+ comment = VCR.use_cassette('create_another_comment') do
90
+ test_client.create_comments project_id, another_key_id, comment: 'chained comment'
91
+ end.collection.first
92
+
93
+ expect(comment.comment).to eq('chained comment')
94
+
95
+ delete_response = VCR.use_cassette('delete_comment_chained') do
96
+ comment.destroy
97
+ end
98
+
99
+ expect(delete_response['project_id']).to eq(project_id)
100
+ expect(delete_response['comment_deleted']).to eq(true)
101
+ end
102
+ end
86
103
  end
@@ -74,11 +74,44 @@ RSpec.describe Lokalise::Client do
74
74
  expect(contributor.languages.length).to eq(1)
75
75
  end
76
76
 
77
- specify '#delete_contributor' do
77
+ specify '#destroy_contributor' do
78
78
  response = VCR.use_cassette('delete_contributor') do
79
- test_client.delete_contributor project_id, contributor_id
79
+ test_client.destroy_contributor project_id, contributor_id
80
80
  end
81
81
  expect(response['project_id']).to eq(project_id)
82
82
  expect(response['contributor_deleted']).to eq(true)
83
83
  end
84
+
85
+ context 'contributor chained methods' do
86
+ it 'should support update and destroy' do
87
+ contributor = VCR.use_cassette('create_another_contributor') do
88
+ test_client.create_contributors project_id,
89
+ email: 'demo@test.com',
90
+ fullname: 'chained',
91
+ languages: [{lang_iso: 'en'}]
92
+ end.collection.first
93
+
94
+ expect(contributor.client).to eq(test_client)
95
+ expect(contributor.fullname).to eq('chained')
96
+
97
+ id = contributor.user_id
98
+ path = contributor.path
99
+
100
+ updated_contributor = VCR.use_cassette('update_contributor_chained') do
101
+ contributor.update fullname: 'updated!'
102
+ end
103
+
104
+ expect(updated_contributor.client).to eq(test_client)
105
+ expect(updated_contributor.fullname).to eq('updated!')
106
+ expect(updated_contributor.user_id).to eq(id)
107
+ expect(updated_contributor.path).to eq(path)
108
+
109
+ delete_response = VCR.use_cassette('delete_contributor_chained') do
110
+ updated_contributor.destroy
111
+ end
112
+
113
+ expect(delete_response['project_id']).to eq(project_id)
114
+ expect(delete_response['contributor_deleted']).to eq(true)
115
+ end
116
+ end
84
117
  end
@@ -108,21 +108,72 @@ RSpec.describe Lokalise::Client do
108
108
  expect(second_key.description).to eq('bulk updated')
109
109
  end
110
110
 
111
- specify '#delete_key' do
111
+ specify '#destroy_key' do
112
112
  response = VCR.use_cassette('delete_key') do
113
- test_client.delete_key project_id, '15519771'
113
+ test_client.destroy_key project_id, '15519771'
114
114
  end
115
115
 
116
116
  expect(response['project_id']).to eq(project_id)
117
117
  expect(response['key_removed']).to eq(true)
118
118
  end
119
119
 
120
- specify '#delete_keys' do
120
+ specify '#destroy_keys' do
121
121
  response = VCR.use_cassette('delete_keys') do
122
- test_client.delete_keys project_id, [new_key_id, key_id]
122
+ test_client.destroy_keys project_id, [new_key_id, key_id]
123
123
  end
124
124
 
125
125
  expect(response['project_id']).to eq(project_id)
126
126
  expect(response['keys_removed']).to eq(true)
127
127
  end
128
+
129
+ context 'key chained methods' do
130
+ it 'should support update and destroy' do
131
+ key = VCR.use_cassette('create_another_key') do
132
+ test_client.create_keys project_id, key_name: 'chained_k', platforms: %w[ios]
133
+ end.collection.first
134
+
135
+ expect(key.key_name['ios']).to eq('chained_k')
136
+
137
+ path = key.path
138
+
139
+ updated_key = VCR.use_cassette('update_key_chained') do
140
+ key.update key_name: 'updated!'
141
+ end
142
+
143
+ expect(updated_key.client).to eq(test_client)
144
+ expect(updated_key.key_name['ios']).to eq('updated!')
145
+ expect(updated_key.path).to eq(path)
146
+
147
+ delete_response = VCR.use_cassette('delete_key_chained') do
148
+ updated_key.destroy
149
+ end
150
+
151
+ expect(delete_response['project_id']).to eq(project_id)
152
+ expect(delete_response['key_removed']).to eq(true)
153
+ end
154
+ end
155
+
156
+ context 'keys collection chained methods' do
157
+ it 'should support destroy_all' do
158
+ keys = VCR.use_cassette('create_keys_collection') do
159
+ test_client.create_keys project_id, [
160
+ {
161
+ key_name: 'key_collect1', platforms: %w[ios]
162
+ },
163
+ {
164
+ key_name: 'key_collect2', platforms: %w[ios]
165
+ }
166
+ ]
167
+ end
168
+
169
+ expect(keys.collection.length).to eq(2)
170
+
171
+ delete_response = VCR.use_cassette('delete_all_keys_chained') do
172
+ keys.destroy_all
173
+ end
174
+
175
+ expect(delete_response['project_id']).to eq(project_id)
176
+ expect(delete_response['keys_removed']).to eq(true)
177
+ end
178
+ end
128
179
  end