ruby-lokalise-api 6.0.0 → 6.1.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/ruby_lokalise_api/rest/comments.rb +5 -5
- data/lib/ruby_lokalise_api/rest/contributors.rb +5 -5
- data/lib/ruby_lokalise_api/rest/custom_translation_statuses.rb +6 -6
- data/lib/ruby_lokalise_api/rest/files.rb +14 -3
- data/lib/ruby_lokalise_api/rest/keys.rb +7 -7
- data/lib/ruby_lokalise_api/rest/languages.rb +6 -6
- data/lib/ruby_lokalise_api/rest/payment_cards.rb +3 -3
- data/lib/ruby_lokalise_api/rest/projects.rb +6 -6
- data/lib/ruby_lokalise_api/rest/queued_processes.rb +2 -2
- data/lib/ruby_lokalise_api/rest/screenshots.rb +5 -5
- data/lib/ruby_lokalise_api/rest/segments.rb +3 -3
- data/lib/ruby_lokalise_api/rest/snapshots.rb +4 -4
- data/lib/ruby_lokalise_api/rest/tasks.rb +5 -5
- data/lib/ruby_lokalise_api/rest/team_user_billing_details.rb +3 -3
- data/lib/ruby_lokalise_api/rest/team_users.rb +4 -4
- data/lib/ruby_lokalise_api/rest/teams.rb +1 -1
- data/lib/ruby_lokalise_api/rest/translation_providers.rb +2 -2
- data/lib/ruby_lokalise_api/rest/translations.rb +3 -3
- data/lib/ruby_lokalise_api/rest/webhooks.rb +5 -5
- data/lib/ruby_lokalise_api/version.rb +1 -1
- data/ruby-lokalise-api.gemspec +1 -1
- metadata +18 -64
- data/spec/lib/ruby_lokalise_api/client/branches_spec.rb +0 -140
- data/spec/lib/ruby_lokalise_api/client/comments_spec.rb +0 -118
- data/spec/lib/ruby_lokalise_api/client/contributors_spec.rb +0 -132
- data/spec/lib/ruby_lokalise_api/client/custom_translation_statuses_spec.rb +0 -131
- data/spec/lib/ruby_lokalise_api/client/files_spec.rb +0 -66
- data/spec/lib/ruby_lokalise_api/client/keys_spec.rb +0 -199
- data/spec/lib/ruby_lokalise_api/client/languages_spec.rb +0 -134
- data/spec/lib/ruby_lokalise_api/client/orders_spec.rb +0 -113
- data/spec/lib/ruby_lokalise_api/client/payment_cards_spec.rb +0 -92
- data/spec/lib/ruby_lokalise_api/client/projects_spec.rb +0 -150
- data/spec/lib/ruby_lokalise_api/client/queued_processes_spec.rb +0 -57
- data/spec/lib/ruby_lokalise_api/client/screenshots_spec.rb +0 -127
- data/spec/lib/ruby_lokalise_api/client/segments_spec.rb +0 -106
- data/spec/lib/ruby_lokalise_api/client/snapshots_spec.rb +0 -117
- data/spec/lib/ruby_lokalise_api/client/tasks_spec.rb +0 -145
- data/spec/lib/ruby_lokalise_api/client/team_user_billing_details_spec.rb +0 -48
- data/spec/lib/ruby_lokalise_api/client/team_user_groups_spec.rb +0 -278
- data/spec/lib/ruby_lokalise_api/client/team_users_spec.rb +0 -95
- data/spec/lib/ruby_lokalise_api/client/teams_spec.rb +0 -25
- data/spec/lib/ruby_lokalise_api/client/translation_providers_spec.rb +0 -48
- data/spec/lib/ruby_lokalise_api/client/translations_spec.rb +0 -118
- data/spec/lib/ruby_lokalise_api/client/webhooks_spec.rb +0 -126
- data/spec/lib/ruby_lokalise_api/connection_spec.rb +0 -68
- data/spec/lib/ruby_lokalise_api/custom_json_parser_spec.rb +0 -81
- data/spec/lib/ruby_lokalise_api/error_spec.rb +0 -41
- data/spec/lib/ruby_lokalise_api/oauth2/auth_spec.rb +0 -73
- data/spec/lib/ruby_lokalise_api_spec.rb +0 -47
- data/spec/spec_helper.rb +0 -22
- data/spec/support/test_client.rb +0 -15
- data/spec/support/vcr.rb +0 -15
@@ -1,118 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe RubyLokaliseApi::Client do
|
4
|
-
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
5
|
-
let(:translation_id) { 80_015_147 }
|
6
|
-
let(:another_translation_id) { 82_070_312 }
|
7
|
-
|
8
|
-
describe '#translations' do
|
9
|
-
it 'returns all translations' do
|
10
|
-
translations = VCR.use_cassette('translations') do
|
11
|
-
test_client.translations project_id
|
12
|
-
end.collection
|
13
|
-
|
14
|
-
expect(translations.count).to eq(9)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'supports pagination' do
|
18
|
-
translations = VCR.use_cassette('all_translations_pagination') do
|
19
|
-
test_client.translations project_id, limit: 4, page: 2, disable_references: 0,
|
20
|
-
filter_is_reviewed: 0
|
21
|
-
end
|
22
|
-
|
23
|
-
expect(translations.collection.count).to eq(4)
|
24
|
-
expect(translations.total_results).to eq(187)
|
25
|
-
expect(translations.total_pages).to eq(47)
|
26
|
-
expect(translations.results_per_page).to eq(4)
|
27
|
-
expect(translations.current_page).to eq(2)
|
28
|
-
expect(translations.request_params[:page]).to eq(2)
|
29
|
-
expect(translations.request_params[:disable_references]).to eq(0)
|
30
|
-
expect(translations.request_params[:filter_is_reviewed]).to eq(0)
|
31
|
-
|
32
|
-
next_page_trans = VCR.use_cassette('translations_next_page') do
|
33
|
-
translations.next_page
|
34
|
-
end
|
35
|
-
|
36
|
-
expect(next_page_trans).to be_an_instance_of(RubyLokaliseApi::Collections::Translation)
|
37
|
-
expect(next_page_trans.client).to be_an_instance_of(described_class)
|
38
|
-
expect(next_page_trans.request_params[:page]).to eq(3)
|
39
|
-
expect(next_page_trans.request_params[:disable_references]).to eq(0)
|
40
|
-
expect(next_page_trans.total_results).to eq(187)
|
41
|
-
expect(next_page_trans.current_page).to eq(3)
|
42
|
-
expect(next_page_trans.next_page?).to be(true)
|
43
|
-
expect(next_page_trans.prev_page?).to be(true)
|
44
|
-
|
45
|
-
prev_page_trans = VCR.use_cassette('translations_prev_page') do
|
46
|
-
translations.prev_page
|
47
|
-
end
|
48
|
-
|
49
|
-
expect(prev_page_trans).to be_an_instance_of(RubyLokaliseApi::Collections::Translation)
|
50
|
-
expect(prev_page_trans.client).to be_an_instance_of(described_class)
|
51
|
-
expect(prev_page_trans.request_params[:page]).to eq(1)
|
52
|
-
expect(next_page_trans.request_params[:disable_references]).to eq(0)
|
53
|
-
expect(prev_page_trans.total_results).to eq(187)
|
54
|
-
expect(prev_page_trans.current_page).to eq(1)
|
55
|
-
expect(prev_page_trans.next_page?).to be(true)
|
56
|
-
expect(prev_page_trans.prev_page?).to be(false)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
specify '#translation' do
|
61
|
-
translation = VCR.use_cassette('translation') do
|
62
|
-
test_client.translation project_id, 304_581_218
|
63
|
-
end
|
64
|
-
|
65
|
-
expect(translation.translation_id).to eq(304_581_218)
|
66
|
-
expect(translation.key_id).to eq(44_596_059)
|
67
|
-
expect(translation.language_iso).to eq('ru')
|
68
|
-
expect(translation.modified_at).to eq('2020-05-15 10:44:42 (Etc/UTC)')
|
69
|
-
expect(translation.modified_at_timestamp).to eq(1_589_539_482)
|
70
|
-
expect(translation.modified_by).to eq(20_181)
|
71
|
-
expect(translation.modified_by_email).to eq('bodrovis@protonmail.com')
|
72
|
-
expect(translation.translation).to eq('Сообщение')
|
73
|
-
expect(translation.is_fuzzy).to be(false)
|
74
|
-
expect(translation.is_reviewed).to be(false)
|
75
|
-
expect(translation.words).to eq(1)
|
76
|
-
expect(translation.custom_translation_statuses).to eq([])
|
77
|
-
expect(translation.task_id).to be_nil
|
78
|
-
end
|
79
|
-
|
80
|
-
specify '#reload_data' do
|
81
|
-
translation = VCR.use_cassette('translation') do
|
82
|
-
test_client.translation project_id, 304_581_218
|
83
|
-
end
|
84
|
-
|
85
|
-
reloaded_translation = VCR.use_cassette('translation') do
|
86
|
-
translation.reload_data
|
87
|
-
end
|
88
|
-
|
89
|
-
expect(reloaded_translation.translation_id).to eq(translation.translation_id)
|
90
|
-
end
|
91
|
-
|
92
|
-
specify '#update_translation' do
|
93
|
-
translation = VCR.use_cassette('update_translation') do
|
94
|
-
test_client.update_translation project_id, translation_id, translation: 'rspec trans',
|
95
|
-
is_reviewed: true
|
96
|
-
end
|
97
|
-
|
98
|
-
expect(translation.translation_id).to eq(translation_id)
|
99
|
-
expect(translation.translation).to eq('rspec trans')
|
100
|
-
expect(translation.is_reviewed).to be(true)
|
101
|
-
end
|
102
|
-
|
103
|
-
context 'when translation chained methods are used' do
|
104
|
-
it 'supports update' do
|
105
|
-
translation = VCR.use_cassette('another_translation') do
|
106
|
-
test_client.translation project_id, another_translation_id
|
107
|
-
end
|
108
|
-
|
109
|
-
updated_translation = VCR.use_cassette('update_translation_chained') do
|
110
|
-
translation.update translation: 'chained updated'
|
111
|
-
end
|
112
|
-
|
113
|
-
expect(updated_translation.client.token).to eq(test_client.token)
|
114
|
-
expect(updated_translation.translation).to eq('chained updated')
|
115
|
-
expect(updated_translation.translation_id).to eq(translation.translation_id)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
@@ -1,126 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe RubyLokaliseApi::Client do
|
4
|
-
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
5
|
-
let(:webhook_id) { 'c7eb7e6e3c2fb2b26d0b64d0de083a5a71675b3d' }
|
6
|
-
let(:new_webhook_id) { 'b345ccc6499920c490e8f4fe9487b1378dbf1dbf' }
|
7
|
-
let(:serious_webhook_id) { '795565582e5ab15a59bb68156c7e2e9eaa1e8d1a' }
|
8
|
-
|
9
|
-
describe '#webhooks' do
|
10
|
-
it 'returns all webhooks' do
|
11
|
-
webhooks = VCR.use_cassette('webhooks') do
|
12
|
-
test_client.webhooks project_id
|
13
|
-
end.collection
|
14
|
-
|
15
|
-
expect(webhooks.count).to eq(3)
|
16
|
-
expect(webhooks.first.url).to eq('https://serios.webhook')
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'supports pagination' do
|
20
|
-
webhooks = VCR.use_cassette('all_webhooks_pagination') do
|
21
|
-
test_client.webhooks project_id, limit: 1, page: 2
|
22
|
-
end
|
23
|
-
|
24
|
-
expect(webhooks.collection.count).to eq(1)
|
25
|
-
expect(webhooks.total_results).to eq(3)
|
26
|
-
expect(webhooks.total_pages).to eq(3)
|
27
|
-
expect(webhooks.results_per_page).to eq(1)
|
28
|
-
expect(webhooks.current_page).to eq(2)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
specify '#webhook' do
|
33
|
-
webhook = VCR.use_cassette('webhook') do
|
34
|
-
test_client.webhook project_id, webhook_id
|
35
|
-
end
|
36
|
-
|
37
|
-
expect(webhook.webhook_id).to eq(webhook_id)
|
38
|
-
expect(webhook.url).to eq('https://canihaz.hook')
|
39
|
-
expect(webhook.secret).to eq('a62450cd9eeca8dfc84f3c0cf9b7a6a370267d6f')
|
40
|
-
expect(webhook.events).to include('project.snapshot')
|
41
|
-
expect(webhook.event_lang_map.first['event']).to eq('project.translation.updated')
|
42
|
-
end
|
43
|
-
|
44
|
-
specify '#reload_data' do
|
45
|
-
webhook = VCR.use_cassette('webhook') do
|
46
|
-
test_client.webhook project_id, webhook_id
|
47
|
-
end
|
48
|
-
|
49
|
-
reloaded_webhook = VCR.use_cassette('webhook') do
|
50
|
-
webhook.reload_data
|
51
|
-
end
|
52
|
-
|
53
|
-
expect(reloaded_webhook.webhook_id).to eq(webhook.webhook_id)
|
54
|
-
end
|
55
|
-
|
56
|
-
specify '#create_webhook' do
|
57
|
-
webhook = VCR.use_cassette('create_webhook') do
|
58
|
-
test_client.create_webhook project_id,
|
59
|
-
url: 'http://thatz.ahook',
|
60
|
-
events: ['project.imported', 'project.exported']
|
61
|
-
end
|
62
|
-
|
63
|
-
expect(webhook.webhook_id).to eq(new_webhook_id)
|
64
|
-
expect(webhook.url).to eq('http://thatz.ahook')
|
65
|
-
expect(webhook.events).to include('project.imported', 'project.exported')
|
66
|
-
end
|
67
|
-
|
68
|
-
specify '#update_webhook' do
|
69
|
-
webhook = VCR.use_cassette('update_webhook') do
|
70
|
-
test_client.update_webhook project_id,
|
71
|
-
new_webhook_id,
|
72
|
-
url: 'http://ihaz.cheezburger'
|
73
|
-
end
|
74
|
-
|
75
|
-
expect(webhook.webhook_id).to eq(new_webhook_id)
|
76
|
-
expect(webhook.url).to eq('http://ihaz.cheezburger')
|
77
|
-
expect(webhook.events).to include('project.imported', 'project.exported')
|
78
|
-
end
|
79
|
-
|
80
|
-
specify '#destroy_webhook' do
|
81
|
-
response = VCR.use_cassette('destroy_webhook') do
|
82
|
-
test_client.destroy_webhook project_id,
|
83
|
-
new_webhook_id
|
84
|
-
end
|
85
|
-
|
86
|
-
expect(response['project_id']).to eq(project_id)
|
87
|
-
expect(response['webhook_deleted']).to be(true)
|
88
|
-
end
|
89
|
-
|
90
|
-
specify '#regenerate_webhook_secret' do
|
91
|
-
response = VCR.use_cassette('regenerate_webhook_secret') do
|
92
|
-
test_client.regenerate_webhook_secret project_id,
|
93
|
-
serious_webhook_id
|
94
|
-
end
|
95
|
-
|
96
|
-
expect(response['project_id']).to eq(project_id)
|
97
|
-
expect(response['secret']).not_to be_nil
|
98
|
-
end
|
99
|
-
|
100
|
-
context 'when webhook chained methods are used' do
|
101
|
-
it 'supports regenerate_webhook_secret' do
|
102
|
-
webhook = VCR.use_cassette('webhook_2') do
|
103
|
-
test_client.webhook project_id, serious_webhook_id
|
104
|
-
end
|
105
|
-
|
106
|
-
expect(webhook.branch).to eq('master')
|
107
|
-
expect(webhook.webhook_id).to eq(serious_webhook_id)
|
108
|
-
|
109
|
-
response = VCR.use_cassette('regenerate_webhook_secret_2') do
|
110
|
-
webhook.regenerate_secret
|
111
|
-
end
|
112
|
-
|
113
|
-
expect(response['project_id']).to eq(project_id)
|
114
|
-
expect(response['secret']).not_to be_nil
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'supports update and destroy' do
|
118
|
-
webhook = VCR.use_cassette('webhook_2') do
|
119
|
-
test_client.webhook project_id, serious_webhook_id
|
120
|
-
end
|
121
|
-
|
122
|
-
expect(webhook).to respond_to(:update)
|
123
|
-
expect(webhook).to respond_to(:destroy)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
@@ -1,68 +0,0 @@
|
|
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
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'oj'
|
4
|
-
|
5
|
-
RSpec.describe RubyLokaliseApi::JsonHandler do
|
6
|
-
let(:loaded_json) do
|
7
|
-
{'projects' => [{'project_id' => '547879415c01a0e6e0b855.29978928',
|
8
|
-
'name' => 'demo phoenix copy',
|
9
|
-
'description' => '',
|
10
|
-
'created_at' => '2018-11-30 20:43:18 (Etc/UTC)',
|
11
|
-
'created_by' => 20_181,
|
12
|
-
'created_by_email' => 'bodrovis@protonmail.com',
|
13
|
-
'team_id' => 176_692,
|
14
|
-
'statistics' =>
|
15
|
-
{'progress' => 0,
|
16
|
-
'keys' => 1,
|
17
|
-
'team' => 1,
|
18
|
-
'base_words' => 0,
|
19
|
-
'qa_issues' => 1,
|
20
|
-
'languages' =>
|
21
|
-
[{'language_id' => 640, 'language_iso' => 'en', 'progress' => 0, 'words_to_do' => 0},
|
22
|
-
{'language_id' => 597, 'language_iso' => 'ru', 'progress' => 0, 'words_to_do' => 0},
|
23
|
-
{'language_id' => 673, 'language_iso' => 'f_over', 'progress' => 0, 'words_to_do' => 0}]}}]}
|
24
|
-
end
|
25
|
-
|
26
|
-
let(:dumped_json) do
|
27
|
-
'{":name":"rspec proj",":description":"demo project for rspec"}'
|
28
|
-
end
|
29
|
-
|
30
|
-
# rubocop:disable RSpec/LeakyConstantDeclaration, Lint/ConstantDefinitionInBlock
|
31
|
-
before do
|
32
|
-
module RubyLokaliseApi
|
33
|
-
module JsonHandler
|
34
|
-
def custom_dump(obj)
|
35
|
-
Oj.dump obj
|
36
|
-
end
|
37
|
-
|
38
|
-
def custom_load(obj)
|
39
|
-
Oj.load obj
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
after do
|
46
|
-
module RubyLokaliseApi
|
47
|
-
module JsonHandler
|
48
|
-
def custom_dump(obj)
|
49
|
-
JSON.dump obj
|
50
|
-
end
|
51
|
-
|
52
|
-
def custom_load(obj)
|
53
|
-
JSON.parse obj
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
# rubocop:enable RSpec/LeakyConstantDeclaration, Lint/ConstantDefinitionInBlock
|
59
|
-
|
60
|
-
it 'allows to customize #load' do
|
61
|
-
allow(Oj).to receive(:load).and_return(loaded_json)
|
62
|
-
expect(JSON).not_to receive(:parse)
|
63
|
-
projects = VCR.use_cassette('all_projects_pagination') do
|
64
|
-
test_client.projects limit: 1, page: 2
|
65
|
-
end
|
66
|
-
|
67
|
-
expect(projects.collection.count).to eq(1)
|
68
|
-
expect(projects.total_results).to eq(5)
|
69
|
-
expect(projects.collection.first.name).to eq('demo phoenix copy')
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'allows to customize #dump' do
|
73
|
-
allow(Oj).to receive(:dump).and_return(dumped_json)
|
74
|
-
expect(JSON).not_to receive(:dump)
|
75
|
-
project = VCR.use_cassette('new_project') do
|
76
|
-
test_client.create_project name: 'rspec proj', description: 'demo project for rspec'
|
77
|
-
end
|
78
|
-
|
79
|
-
expect(project.name).to eq('rspec proj')
|
80
|
-
end
|
81
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe RubyLokaliseApi::Error do
|
4
|
-
include RubyLokaliseApi::Request
|
5
|
-
|
6
|
-
before { RubyLokaliseApi.reset_client! }
|
7
|
-
|
8
|
-
after { RubyLokaliseApi.reset_client! }
|
9
|
-
|
10
|
-
it 'raises a generic error when the code is unknown' do
|
11
|
-
expect do
|
12
|
-
VCR.use_cassette('error_unknown_code') do
|
13
|
-
get 'projects', RubyLokaliseApi.client('invalid')
|
14
|
-
end
|
15
|
-
end.to raise_error(described_class)
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'handles an exception when the response does not contain an error key' do
|
19
|
-
expect do
|
20
|
-
VCR.use_cassette('error_no_error_key') do
|
21
|
-
get 'projects', RubyLokaliseApi.client('invalid')
|
22
|
-
end
|
23
|
-
end.to raise_error(RubyLokaliseApi::Error::BadRequest)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'raises BadRequest when API token is invalid' do
|
27
|
-
expect do
|
28
|
-
VCR.use_cassette('error_invalid_token') do
|
29
|
-
get 'projects', RubyLokaliseApi.client('invalid')
|
30
|
-
end
|
31
|
-
end.to raise_error(RubyLokaliseApi::Error::BadRequest)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'raises NotFound when the provided path cannot be found' do
|
35
|
-
expect do
|
36
|
-
VCR.use_cassette('error_not_found') do
|
37
|
-
get 'invalid_path', test_client
|
38
|
-
end
|
39
|
-
end.to raise_error(RubyLokaliseApi::Error::NotFound)
|
40
|
-
end
|
41
|
-
end
|
@@ -1,73 +0,0 @@
|
|
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
|
@@ -1,47 +0,0 @@
|
|
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
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'dotenv/load'
|
4
|
-
require 'simplecov'
|
5
|
-
SimpleCov.start do
|
6
|
-
add_filter 'spec/'
|
7
|
-
add_filter '.github/'
|
8
|
-
end
|
9
|
-
|
10
|
-
if ENV['CI'] == 'true'
|
11
|
-
require 'codecov'
|
12
|
-
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
13
|
-
end
|
14
|
-
|
15
|
-
require 'ruby_lokalise_api'
|
16
|
-
|
17
|
-
# Support files
|
18
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each { |f| require f }
|
19
|
-
|
20
|
-
RSpec.configure do |config|
|
21
|
-
config.include TestClient
|
22
|
-
end
|
data/spec/support/test_client.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module TestClient
|
4
|
-
def test_client(token = nil, params = {})
|
5
|
-
RubyLokaliseApi.client(token || ENV['LOKALISE_API_TOKEN'], params)
|
6
|
-
end
|
7
|
-
|
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'])
|
14
|
-
end
|
15
|
-
end
|
data/spec/support/vcr.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'vcr'
|
4
|
-
|
5
|
-
VCR.configure do |c|
|
6
|
-
c.ignore_hosts 'codeclimate.com'
|
7
|
-
c.hook_into :faraday
|
8
|
-
c.cassette_library_dir = File.join(File.dirname(__FILE__), '..', 'fixtures', 'vcr_cassettes')
|
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') }
|
15
|
-
end
|