ruby-lokalise-api 4.5.0 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -3
- data/lib/ruby_lokalise_api/base_request.rb +24 -0
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/client.rb +25 -26
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/base.rb +10 -10
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/branch.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/contributor.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/custom_translation_status.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/file.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/key.rb +2 -2
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/key_comment.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/order.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/payment_card.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/project.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/project_comment.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/project_language.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/queued_process.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/screenshot.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/segment.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/snapshot.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/system_language.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/task.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/team.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/team_user.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/team_user_group.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/translation.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/translation_provider.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/collections/webhook.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/connection.rb +4 -3
- data/lib/ruby_lokalise_api/data/attributes.yml +235 -0
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/error.rb +15 -15
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/json_handler.rb +1 -1
- data/lib/ruby_lokalise_api/oauth2/auth.rb +62 -0
- data/lib/ruby_lokalise_api/oauth2/connection.rb +25 -0
- data/lib/ruby_lokalise_api/oauth2/request.rb +23 -0
- data/lib/{ruby-lokalise-api/oauth_client.rb → ruby_lokalise_api/oauth2_client.rb} +2 -2
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/request.rb +5 -16
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/base.rb +8 -8
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/branch.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/contributor.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/custom_translation_status.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/file.rb +2 -2
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/key.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/key_comment.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/order.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/payment_card.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/project.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/project_comment.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/project_language.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/queued_process.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/screenshot.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/segment.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/snapshot.rb +2 -2
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/system_language.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/task.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/team.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/team_user.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/team_user_billing_details.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/team_user_group.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/translation.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/translation_provider.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/resources/webhook.rb +1 -1
- data/lib/ruby_lokalise_api/rest/branches.rb +69 -0
- data/lib/ruby_lokalise_api/rest/comments.rb +61 -0
- data/lib/ruby_lokalise_api/rest/contributors.rb +58 -0
- data/lib/ruby_lokalise_api/rest/custom_translation_statuses.rb +67 -0
- data/lib/ruby_lokalise_api/rest/files.rb +38 -0
- data/lib/ruby_lokalise_api/rest/keys.rb +79 -0
- data/lib/ruby_lokalise_api/rest/languages.rb +67 -0
- data/lib/ruby_lokalise_api/rest/orders.rb +37 -0
- data/lib/ruby_lokalise_api/rest/payment_cards.rb +43 -0
- data/lib/ruby_lokalise_api/rest/projects.rb +62 -0
- data/lib/ruby_lokalise_api/rest/queued_processes.rb +28 -0
- data/lib/ruby_lokalise_api/rest/screenshots.rb +58 -0
- data/lib/ruby_lokalise_api/rest/segments.rb +45 -0
- data/lib/ruby_lokalise_api/rest/snapshots.rb +47 -0
- data/lib/ruby_lokalise_api/rest/tasks.rb +58 -0
- data/lib/ruby_lokalise_api/rest/team_user_billing_details.rb +36 -0
- data/lib/ruby_lokalise_api/rest/team_user_groups.rb +109 -0
- data/lib/ruby_lokalise_api/rest/team_users.rb +48 -0
- data/lib/ruby_lokalise_api/rest/teams.rb +16 -0
- data/lib/ruby_lokalise_api/rest/translation_providers.rb +27 -0
- data/lib/ruby_lokalise_api/rest/translations.rb +39 -0
- data/lib/ruby_lokalise_api/rest/webhooks.rb +69 -0
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/utils/attribute_helpers.rb +7 -7
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/utils/endpoint_helpers.rb +1 -1
- data/lib/{ruby-lokalise-api → ruby_lokalise_api}/utils/string_utils.rb +1 -1
- data/lib/ruby_lokalise_api/version.rb +5 -0
- data/lib/ruby_lokalise_api.rb +50 -0
- data/ruby-lokalise-api.gemspec +8 -7
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/branches_spec.rb +13 -13
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/comments_spec.rb +7 -7
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/contributors_spec.rb +11 -11
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/custom_translation_statuses_spec.rb +7 -7
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/files_spec.rb +2 -2
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/keys_spec.rb +15 -15
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/languages_spec.rb +6 -6
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/orders_spec.rb +1 -1
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/payment_cards_spec.rb +7 -7
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/projects_spec.rb +24 -11
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/queued_processes_spec.rb +1 -1
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/screenshots_spec.rb +5 -5
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/segments_spec.rb +4 -4
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/snapshots_spec.rb +9 -9
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/tasks_spec.rb +14 -14
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/team_user_billing_details_spec.rb +1 -1
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/team_user_groups_spec.rb +7 -7
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/team_users_spec.rb +4 -4
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/teams_spec.rb +1 -1
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/translation_providers_spec.rb +2 -2
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/translations_spec.rb +11 -11
- data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/webhooks_spec.rb +2 -2
- data/spec/lib/ruby_lokalise_api/connection_spec.rb +68 -0
- data/spec/lib/{ruby-lokalise-api → ruby_lokalise_api}/custom_json_parser_spec.rb +3 -3
- data/spec/lib/{ruby-lokalise-api → ruby_lokalise_api}/error_spec.rb +10 -10
- data/spec/lib/ruby_lokalise_api/oauth2/auth_spec.rb +73 -0
- data/spec/lib/ruby_lokalise_api_spec.rb +47 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/test_client.rb +7 -3
- data/spec/support/vcr.rb +5 -0
- metadata +168 -148
- data/lib/ruby-lokalise-api/data/attributes.json +0 -259
- data/lib/ruby-lokalise-api/rest/branches.rb +0 -67
- data/lib/ruby-lokalise-api/rest/comments.rb +0 -59
- data/lib/ruby-lokalise-api/rest/contributors.rb +0 -56
- data/lib/ruby-lokalise-api/rest/custom_translation_statuses.rb +0 -65
- data/lib/ruby-lokalise-api/rest/files.rb +0 -36
- data/lib/ruby-lokalise-api/rest/keys.rb +0 -77
- data/lib/ruby-lokalise-api/rest/languages.rb +0 -65
- data/lib/ruby-lokalise-api/rest/orders.rb +0 -35
- data/lib/ruby-lokalise-api/rest/payment_cards.rb +0 -41
- data/lib/ruby-lokalise-api/rest/projects.rb +0 -60
- data/lib/ruby-lokalise-api/rest/queued_processes.rb +0 -26
- data/lib/ruby-lokalise-api/rest/screenshots.rb +0 -56
- data/lib/ruby-lokalise-api/rest/segments.rb +0 -43
- data/lib/ruby-lokalise-api/rest/snapshots.rb +0 -45
- data/lib/ruby-lokalise-api/rest/tasks.rb +0 -56
- data/lib/ruby-lokalise-api/rest/team_user_billing_details.rb +0 -34
- data/lib/ruby-lokalise-api/rest/team_user_group.rb +0 -107
- data/lib/ruby-lokalise-api/rest/team_users.rb +0 -46
- data/lib/ruby-lokalise-api/rest/teams.rb +0 -14
- data/lib/ruby-lokalise-api/rest/translation_providers.rb +0 -25
- data/lib/ruby-lokalise-api/rest/translations.rb +0 -37
- data/lib/ruby-lokalise-api/rest/webhooks.rb +0 -67
- data/lib/ruby-lokalise-api/version.rb +0 -5
- data/lib/ruby-lokalise-api.rb +0 -101
- data/spec/lib/ruby-lokalise-api/connection_spec.rb +0 -89
- data/spec/lib/ruby-lokalise-api_spec.rb +0 -54
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe RubyLokaliseApi::Client do
|
4
4
|
let(:team_id) { 176_692 }
|
5
5
|
let(:group_id) { 515 }
|
6
6
|
let(:second_group_id) { 690 }
|
@@ -39,7 +39,7 @@ RSpec.describe Lokalise::Client do
|
|
39
39
|
|
40
40
|
expect(group.group_id).to eq(group_id)
|
41
41
|
expect(group.name).to eq('Demo')
|
42
|
-
expect(group.permissions['is_admin']).to
|
42
|
+
expect(group.permissions['is_admin']).to be(true)
|
43
43
|
expect(group.created_at).to eq('2019-03-19 19:53:04 (Etc/UTC)')
|
44
44
|
expect(group.created_at_timestamp).to eq(1_553_025_184)
|
45
45
|
expect(group.team_id).to eq(team_id)
|
@@ -81,8 +81,8 @@ RSpec.describe Lokalise::Client do
|
|
81
81
|
|
82
82
|
expect(group.name).to eq('updated rspec')
|
83
83
|
expect(group.team_id).to eq(team_id)
|
84
|
-
expect(group.permissions['is_admin']).to
|
85
|
-
expect(group.permissions['is_reviewer']).to
|
84
|
+
expect(group.permissions['is_admin']).to be(true)
|
85
|
+
expect(group.permissions['is_reviewer']).to be(true)
|
86
86
|
end
|
87
87
|
|
88
88
|
specify '#destroy_team_user_group' do
|
@@ -90,7 +90,7 @@ RSpec.describe Lokalise::Client do
|
|
90
90
|
test_client.destroy_team_user_group team_id, second_group_id
|
91
91
|
end
|
92
92
|
expect(response['team_id']).to eq(team_id)
|
93
|
-
expect(response['group_deleted']).to
|
93
|
+
expect(response['group_deleted']).to be(true)
|
94
94
|
end
|
95
95
|
|
96
96
|
specify '#add_projects_to_group' do
|
@@ -184,7 +184,7 @@ RSpec.describe Lokalise::Client do
|
|
184
184
|
end
|
185
185
|
|
186
186
|
expect(group.group_id).to eq(third_group_id)
|
187
|
-
expect(group.permissions['is_admin']).to
|
187
|
+
expect(group.permissions['is_admin']).to be(true)
|
188
188
|
expect(group.name).to eq('another group updated')
|
189
189
|
|
190
190
|
response = VCR.use_cassette('destroy_another_team_user_group') do
|
@@ -192,7 +192,7 @@ RSpec.describe Lokalise::Client do
|
|
192
192
|
end
|
193
193
|
|
194
194
|
expect(response['team_id']).to eq(team_id)
|
195
|
-
expect(response['group_deleted']).to
|
195
|
+
expect(response['group_deleted']).to be(true)
|
196
196
|
end
|
197
197
|
|
198
198
|
it 'supports project management' do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe RubyLokaliseApi::Client do
|
4
4
|
let(:team_id) { 176_692 }
|
5
5
|
let(:team_user_id) { 25_953 }
|
6
6
|
let(:another_user_id) { 26_265 }
|
@@ -68,7 +68,7 @@ RSpec.describe Lokalise::Client do
|
|
68
68
|
test_client.destroy_team_user team_id, team_user_id
|
69
69
|
end
|
70
70
|
expect(response['team_id']).to eq(team_id)
|
71
|
-
expect(response['team_user_deleted']).to
|
71
|
+
expect(response['team_user_deleted']).to be(true)
|
72
72
|
end
|
73
73
|
|
74
74
|
context 'when team user methods are chained' do
|
@@ -81,7 +81,7 @@ RSpec.describe Lokalise::Client do
|
|
81
81
|
team_user.update role: 'admin'
|
82
82
|
end
|
83
83
|
|
84
|
-
expect(updated_team_user.client).to eq(test_client)
|
84
|
+
expect(updated_team_user.client.token).to eq(test_client.token)
|
85
85
|
expect(updated_team_user.role).to eq('admin')
|
86
86
|
|
87
87
|
delete_response = VCR.use_cassette('delete_team_user_chained') do
|
@@ -89,7 +89,7 @@ RSpec.describe Lokalise::Client do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
expect(delete_response['team_id']).to eq(team_id)
|
92
|
-
expect(delete_response['team_user_deleted']).to
|
92
|
+
expect(delete_response['team_user_deleted']).to be(true)
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
data/spec/lib/{ruby-lokalise-api/rest → ruby_lokalise_api/client}/translation_providers_spec.rb
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe RubyLokaliseApi::Client do
|
4
4
|
let(:team_id) { 176_692 }
|
5
5
|
|
6
6
|
describe '#translation_providers' do
|
@@ -36,7 +36,7 @@ RSpec.describe Lokalise::Client do
|
|
36
36
|
expect(provider.slug).to eq('gengo')
|
37
37
|
expect(provider.price_pair_min).to eq('0.00')
|
38
38
|
expect(provider.website_url).to eq('https://gengo.com')
|
39
|
-
expect(provider.description.start_with?('At')).to
|
39
|
+
expect(provider.description.start_with?('At')).to be(true)
|
40
40
|
expect(provider.tiers.first['title']).to eq('Native speaker')
|
41
41
|
expect(provider.pairs.first['price_per_word']).to eq('0.05')
|
42
42
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe RubyLokaliseApi::Client do
|
4
4
|
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
5
5
|
let(:translation_id) { 80_015_147 }
|
6
6
|
let(:another_translation_id) { 82_070_312 }
|
@@ -33,27 +33,27 @@ RSpec.describe Lokalise::Client do
|
|
33
33
|
translations.next_page
|
34
34
|
end
|
35
35
|
|
36
|
-
expect(next_page_trans).to be_an_instance_of(
|
36
|
+
expect(next_page_trans).to be_an_instance_of(RubyLokaliseApi::Collections::Translation)
|
37
37
|
expect(next_page_trans.client).to be_an_instance_of(described_class)
|
38
38
|
expect(next_page_trans.request_params[:page]).to eq(3)
|
39
39
|
expect(next_page_trans.request_params[:disable_references]).to eq(0)
|
40
40
|
expect(next_page_trans.total_results).to eq(187)
|
41
41
|
expect(next_page_trans.current_page).to eq(3)
|
42
|
-
expect(next_page_trans.next_page?).to
|
43
|
-
expect(next_page_trans.prev_page?).to
|
42
|
+
expect(next_page_trans.next_page?).to be(true)
|
43
|
+
expect(next_page_trans.prev_page?).to be(true)
|
44
44
|
|
45
45
|
prev_page_trans = VCR.use_cassette('translations_prev_page') do
|
46
46
|
translations.prev_page
|
47
47
|
end
|
48
48
|
|
49
|
-
expect(prev_page_trans).to be_an_instance_of(
|
49
|
+
expect(prev_page_trans).to be_an_instance_of(RubyLokaliseApi::Collections::Translation)
|
50
50
|
expect(prev_page_trans.client).to be_an_instance_of(described_class)
|
51
51
|
expect(prev_page_trans.request_params[:page]).to eq(1)
|
52
52
|
expect(next_page_trans.request_params[:disable_references]).to eq(0)
|
53
53
|
expect(prev_page_trans.total_results).to eq(187)
|
54
54
|
expect(prev_page_trans.current_page).to eq(1)
|
55
|
-
expect(prev_page_trans.next_page?).to
|
56
|
-
expect(prev_page_trans.prev_page?).to
|
55
|
+
expect(prev_page_trans.next_page?).to be(true)
|
56
|
+
expect(prev_page_trans.prev_page?).to be(false)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -70,8 +70,8 @@ RSpec.describe Lokalise::Client do
|
|
70
70
|
expect(translation.modified_by).to eq(20_181)
|
71
71
|
expect(translation.modified_by_email).to eq('bodrovis@protonmail.com')
|
72
72
|
expect(translation.translation).to eq('Сообщение')
|
73
|
-
expect(translation.is_fuzzy).to
|
74
|
-
expect(translation.is_reviewed).to
|
73
|
+
expect(translation.is_fuzzy).to be(false)
|
74
|
+
expect(translation.is_reviewed).to be(false)
|
75
75
|
expect(translation.words).to eq(1)
|
76
76
|
expect(translation.custom_translation_statuses).to eq([])
|
77
77
|
expect(translation.task_id).to be_nil
|
@@ -97,7 +97,7 @@ RSpec.describe Lokalise::Client do
|
|
97
97
|
|
98
98
|
expect(translation.translation_id).to eq(translation_id)
|
99
99
|
expect(translation.translation).to eq('rspec trans')
|
100
|
-
expect(translation.is_reviewed).to
|
100
|
+
expect(translation.is_reviewed).to be(true)
|
101
101
|
end
|
102
102
|
|
103
103
|
context 'when translation chained methods are used' do
|
@@ -110,7 +110,7 @@ RSpec.describe Lokalise::Client do
|
|
110
110
|
translation.update translation: 'chained updated'
|
111
111
|
end
|
112
112
|
|
113
|
-
expect(updated_translation.client).to eq(test_client)
|
113
|
+
expect(updated_translation.client.token).to eq(test_client.token)
|
114
114
|
expect(updated_translation.translation).to eq('chained updated')
|
115
115
|
expect(updated_translation.translation_id).to eq(translation.translation_id)
|
116
116
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe RubyLokaliseApi::Client do
|
4
4
|
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
5
5
|
let(:webhook_id) { 'c7eb7e6e3c2fb2b26d0b64d0de083a5a71675b3d' }
|
6
6
|
let(:new_webhook_id) { 'b345ccc6499920c490e8f4fe9487b1378dbf1dbf' }
|
@@ -84,7 +84,7 @@ RSpec.describe Lokalise::Client do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
expect(response['project_id']).to eq(project_id)
|
87
|
-
expect(response['webhook_deleted']).to
|
87
|
+
expect(response['webhook_deleted']).to be(true)
|
88
88
|
end
|
89
89
|
|
90
90
|
specify '#regenerate_webhook_secret' do
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RubyLokaliseApi::Connection do
|
4
|
+
let(:dummy) { Class.new { include RubyLokaliseApi::Connection }.new }
|
5
|
+
|
6
|
+
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
7
|
+
let(:key_id) { 44_596_059 }
|
8
|
+
|
9
|
+
before { RubyLokaliseApi.reset_client! }
|
10
|
+
|
11
|
+
after { RubyLokaliseApi.reset_client! }
|
12
|
+
|
13
|
+
it 'Authorization header must be present for OAuth2 client' do
|
14
|
+
conn = dummy.connection test_oauth2_client
|
15
|
+
expect(conn.headers['Authorization']).to eq(test_oauth2_client.token)
|
16
|
+
expect(conn.headers['X-api-token']).to be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'timeouts are not be set by default but the token must be present' do
|
20
|
+
conn = dummy.connection test_client
|
21
|
+
expect(conn.options.timeout).to be_nil
|
22
|
+
expect(conn.options.open_timeout).to be_nil
|
23
|
+
expect(conn.headers['X-api-token']).to eq(test_client.token)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'allows to customize timeouts' do
|
27
|
+
custom_client = RubyLokaliseApi.client(ENV['LOKALISE_API_TOKEN'],
|
28
|
+
open_timeout: 100, timeout: 500)
|
29
|
+
conn = dummy.connection custom_client
|
30
|
+
expect(conn.options.timeout).to eq(500)
|
31
|
+
expect(conn.options.open_timeout).to eq(100)
|
32
|
+
expect(conn.headers['X-api-token']).to eq(custom_client.token)
|
33
|
+
|
34
|
+
custom_client.timeout = 300
|
35
|
+
custom_client.open_timeout = 200
|
36
|
+
another_conn = dummy.connection custom_client
|
37
|
+
expect(another_conn.options.timeout).to eq(300)
|
38
|
+
expect(another_conn.options.open_timeout).to eq(200)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'works with gzip compression' do
|
42
|
+
gzip_client = RubyLokaliseApi.client(ENV['LOKALISE_API_TOKEN'])
|
43
|
+
keys = VCR.use_cassette('all_keys_gzip') do
|
44
|
+
gzip_client.keys project_id, limit: 30
|
45
|
+
end.collection
|
46
|
+
|
47
|
+
expect(keys.first.key_id).to eq(key_id)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'gzip compression is on by default' do
|
51
|
+
custom_client = RubyLokaliseApi.client(ENV['LOKALISE_API_TOKEN'])
|
52
|
+
conn = dummy.connection custom_client
|
53
|
+
expect(conn.headers['X-api-token']).to eq(custom_client.token)
|
54
|
+
expect(conn.builder.handlers).to include(Faraday::Gzip::Middleware)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'is possible to customize adapter' do
|
58
|
+
conn = dummy.connection test_client
|
59
|
+
expect(conn.builder.adapter).to eq(Faraday::Adapter::NetHttp)
|
60
|
+
|
61
|
+
Faraday.default_adapter = :test
|
62
|
+
|
63
|
+
another_conn = dummy.connection test_client
|
64
|
+
|
65
|
+
expect(another_conn.builder.adapter).to eq(Faraday::Adapter::Test)
|
66
|
+
expect(conn.builder.adapter).to eq(Faraday::Adapter::NetHttp)
|
67
|
+
end
|
68
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'oj'
|
4
4
|
|
5
|
-
RSpec.describe
|
5
|
+
RSpec.describe RubyLokaliseApi::JsonHandler do
|
6
6
|
let(:loaded_json) do
|
7
7
|
{'projects' => [{'project_id' => '547879415c01a0e6e0b855.29978928',
|
8
8
|
'name' => 'demo phoenix copy',
|
@@ -29,7 +29,7 @@ RSpec.describe Lokalise::JsonHandler do
|
|
29
29
|
|
30
30
|
# rubocop:disable RSpec/LeakyConstantDeclaration, Lint/ConstantDefinitionInBlock
|
31
31
|
before do
|
32
|
-
module
|
32
|
+
module RubyLokaliseApi
|
33
33
|
module JsonHandler
|
34
34
|
def custom_dump(obj)
|
35
35
|
Oj.dump obj
|
@@ -43,7 +43,7 @@ RSpec.describe Lokalise::JsonHandler do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
after do
|
46
|
-
module
|
46
|
+
module RubyLokaliseApi
|
47
47
|
module JsonHandler
|
48
48
|
def custom_dump(obj)
|
49
49
|
JSON.dump obj
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe
|
4
|
-
include
|
3
|
+
RSpec.describe RubyLokaliseApi::Error do
|
4
|
+
include RubyLokaliseApi::Request
|
5
5
|
|
6
|
-
before {
|
6
|
+
before { RubyLokaliseApi.reset_client! }
|
7
7
|
|
8
|
-
after {
|
8
|
+
after { RubyLokaliseApi.reset_client! }
|
9
9
|
|
10
10
|
it 'raises a generic error when the code is unknown' do
|
11
11
|
expect do
|
12
12
|
VCR.use_cassette('error_unknown_code') do
|
13
|
-
get 'projects',
|
13
|
+
get 'projects', RubyLokaliseApi.client('invalid')
|
14
14
|
end
|
15
15
|
end.to raise_error(described_class)
|
16
16
|
end
|
@@ -18,17 +18,17 @@ RSpec.describe Lokalise::Error do
|
|
18
18
|
it 'handles an exception when the response does not contain an error key' do
|
19
19
|
expect do
|
20
20
|
VCR.use_cassette('error_no_error_key') do
|
21
|
-
get 'projects',
|
21
|
+
get 'projects', RubyLokaliseApi.client('invalid')
|
22
22
|
end
|
23
|
-
end.to raise_error(
|
23
|
+
end.to raise_error(RubyLokaliseApi::Error::BadRequest)
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'raises BadRequest when API token is invalid' do
|
27
27
|
expect do
|
28
28
|
VCR.use_cassette('error_invalid_token') do
|
29
|
-
get 'projects',
|
29
|
+
get 'projects', RubyLokaliseApi.client('invalid')
|
30
30
|
end
|
31
|
-
end.to raise_error(
|
31
|
+
end.to raise_error(RubyLokaliseApi::Error::BadRequest)
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'raises NotFound when the provided path cannot be found' do
|
@@ -36,6 +36,6 @@ RSpec.describe Lokalise::Error do
|
|
36
36
|
VCR.use_cassette('error_not_found') do
|
37
37
|
get 'invalid_path', test_client
|
38
38
|
end
|
39
|
-
end.to raise_error(
|
39
|
+
end.to raise_error(RubyLokaliseApi::Error::NotFound)
|
40
40
|
end
|
41
41
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RubyLokaliseApi::OAuth2::Auth do
|
4
|
+
describe '#auth' do
|
5
|
+
it 'returns auth code' do
|
6
|
+
uri = auth_client.auth scope: 'read_projects'
|
7
|
+
expect(uri).to include(described_class::BASE_URL.to_s)
|
8
|
+
expect(uri).to include('auth?client_id=')
|
9
|
+
expect(uri).to include('&scope=read_projects')
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'allows to pass an array of scopes' do
|
13
|
+
scopes = %w[write_projects write_team_groups write_tasks]
|
14
|
+
uri = auth_client.auth scope: scopes
|
15
|
+
expect(uri).to include(described_class::BASE_URL.to_s)
|
16
|
+
expect(uri).to include('auth?client_id=')
|
17
|
+
expect(uri).to include("&scope=#{scopes.join('+')}")
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'allows to set redirect_uri' do
|
21
|
+
uri = auth_client.auth scope: 'read_projects', redirect_uri: 'http://example.com/callback'
|
22
|
+
expect(uri).to include(described_class::BASE_URL.to_s)
|
23
|
+
expect(uri).to include('example.com%2Fcallback')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'allows to set state' do
|
27
|
+
state = '123abc'
|
28
|
+
uri = auth_client.auth scope: 'read_projects', state: state
|
29
|
+
expect(uri).to include(described_class::BASE_URL.to_s)
|
30
|
+
expect(uri).to include(state)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#token' do
|
35
|
+
it 'returns an OAuth2 token' do
|
36
|
+
resp = VCR.use_cassette('oauth2/token') do
|
37
|
+
auth_client.token ENV['OAUTH2_CODE']
|
38
|
+
end
|
39
|
+
expect(resp['access_token']).not_to be_nil
|
40
|
+
expect(resp['refresh_token']).not_to be_nil
|
41
|
+
expect(resp['expires_in']).to eq(3600)
|
42
|
+
expect(resp['token_type']).to eq('Bearer')
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'raises an error when the code is invalid' do
|
46
|
+
expect do
|
47
|
+
VCR.use_cassette('oauth2/token_error') do
|
48
|
+
auth_client.token 'incorrect_code'
|
49
|
+
end
|
50
|
+
end.to raise_error(RubyLokaliseApi::Error::BadRequest)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#refresh' do
|
55
|
+
it 'returns a refreshed OAuth2 token' do
|
56
|
+
resp = VCR.use_cassette('oauth2/refresh') do
|
57
|
+
auth_client.refresh ENV['OAUTH2_REFRESH_TOKEN']
|
58
|
+
end
|
59
|
+
expect(resp['access_token']).not_to be_nil
|
60
|
+
expect(resp['refresh_token']).to be_nil
|
61
|
+
expect(resp['expires_in']).to eq(3600)
|
62
|
+
expect(resp['token_type']).to eq('Bearer')
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'raises an error when the token is invalid' do
|
66
|
+
expect do
|
67
|
+
VCR.use_cassette('oauth2/refresh_error') do
|
68
|
+
auth_client.refresh 'incorrect_token'
|
69
|
+
end
|
70
|
+
end.to raise_error(RubyLokaliseApi::Error::BadRequest)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RubyLokaliseApi do
|
4
|
+
specify '.client' do
|
5
|
+
expect(test_client).to be_an_instance_of(RubyLokaliseApi::Client)
|
6
|
+
expect(test_client.token).to eq(ENV['LOKALISE_API_TOKEN'])
|
7
|
+
expect(test_client.timeout).to be_nil
|
8
|
+
expect(test_client.open_timeout).to be_nil
|
9
|
+
end
|
10
|
+
|
11
|
+
specify '.reset_client!' do
|
12
|
+
expect(test_client).to be_an_instance_of(RubyLokaliseApi::Client)
|
13
|
+
described_class.reset_client!
|
14
|
+
current_client = described_class.instance_variable_get :@client
|
15
|
+
expect(current_client).to be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
specify '.oauth2_client' do
|
19
|
+
expect(test_oauth2_client).to be_an_instance_of(RubyLokaliseApi::OAuth2Client)
|
20
|
+
expect(test_oauth2_client.token).to eq("Bearer #{ENV['OAUTH2_TOKEN']}")
|
21
|
+
expect(test_oauth2_client.timeout).to be_nil
|
22
|
+
expect(test_oauth2_client.open_timeout).to be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
specify '.reset_oauth2_client!' do
|
26
|
+
expect(test_oauth2_client).to be_an_instance_of(RubyLokaliseApi::OAuth2Client)
|
27
|
+
described_class.reset_oauth2_client!
|
28
|
+
current_oauth_client = described_class.instance_variable_get :@oauth2_client
|
29
|
+
expect(current_oauth_client).to be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with client params' do
|
33
|
+
before { described_class.reset_client! }
|
34
|
+
|
35
|
+
after { described_class.reset_client! }
|
36
|
+
|
37
|
+
it 'is possible to customize timeout' do
|
38
|
+
custom_client = described_class.client(ENV['LOKALISE_API_TOKEN'], timeout: 600)
|
39
|
+
expect(custom_client.timeout).to eq(600)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'is possible to customize open timeout' do
|
43
|
+
custom_client = described_class.client(ENV['LOKALISE_API_TOKEN'], open_timeout: 100)
|
44
|
+
expect(custom_client.open_timeout).to eq(100)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/test_client.rb
CHANGED
@@ -2,10 +2,14 @@
|
|
2
2
|
|
3
3
|
module TestClient
|
4
4
|
def test_client(token = nil, params = {})
|
5
|
-
|
5
|
+
RubyLokaliseApi.client(token || ENV['LOKALISE_API_TOKEN'], params)
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
9
|
-
|
8
|
+
def test_oauth2_client(token = nil, params = {})
|
9
|
+
RubyLokaliseApi.oauth2_client(token || ENV['OAUTH2_TOKEN'], params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def auth_client
|
13
|
+
RubyLokaliseApi.auth_client(ENV['OAUTH2_CLIENT_ID'], ENV['OAUTH2_CLIENT_SECRET'])
|
10
14
|
end
|
11
15
|
end
|
data/spec/support/vcr.rb
CHANGED
@@ -7,4 +7,9 @@ VCR.configure do |c|
|
|
7
7
|
c.hook_into :faraday
|
8
8
|
c.cassette_library_dir = File.join(File.dirname(__FILE__), '..', 'fixtures', 'vcr_cassettes')
|
9
9
|
c.filter_sensitive_data('<LOKALISE_TOKEN>') { ENV.fetch('LOKALISE_API_TOKEN') }
|
10
|
+
c.filter_sensitive_data('<OAUTH2_CLIENT_ID>') { ENV.fetch('OAUTH2_CLIENT_ID') }
|
11
|
+
c.filter_sensitive_data('<OAUTH2_CLIENT_SECRET>') { ENV.fetch('OAUTH2_CLIENT_SECRET') }
|
12
|
+
c.filter_sensitive_data('<OAUTH2_TOKEN>') { ENV.fetch('OAUTH2_TOKEN') }
|
13
|
+
c.filter_sensitive_data('<OAUTH2_CODE>') { ENV.fetch('OAUTH2_CODE') }
|
14
|
+
c.filter_sensitive_data('<OAUTH2_REFRESH_TOKEN>') { ENV.fetch('OAUTH2_REFRESH_TOKEN') }
|
10
15
|
end
|