txgh 3.0.0 → 4.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.
- checksums.yaml +4 -4
- data/lib/txgh/handlers/github/delete_handler.rb +1 -1
- data/lib/txgh/transifex_api.rb +46 -35
- data/lib/txgh/version.rb +1 -1
- data/spec/handlers/github/delete_handler_spec.rb +1 -1
- data/spec/transifex_api_spec.rb +276 -138
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 500294b033cfebc1c6c9c52a28b75cc5e564bd13
|
|
4
|
+
data.tar.gz: 5a3b866c7976246ec5e0c5532c69d044ff7b7dc2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 56e81d08e7020c5c9aa292d5eb7801da5afab2d28509cffbe8b261c0248d0e48c9dea7aeb694b7694f6a8e689efa480454d325e6570caaeb1a4a386086d9ade2
|
|
7
|
+
data.tar.gz: c2b1b2ff73af79c5aa0bfd0acc29e7fbfba37ef839c30ef7c4c7c90241fc9024e280f33fc1bb2eba007368fb47cf323cb65e37297dd04276c920c9796ef022aa
|
data/lib/txgh/transifex_api.rb
CHANGED
|
@@ -65,93 +65,105 @@ module Txgh
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
url = "#{API_ROOT}/project/#{tx_resource.project_slug}/resources/"
|
|
68
|
-
|
|
69
|
-
raise_error!(response)
|
|
68
|
+
post(url, payload)
|
|
70
69
|
end
|
|
71
70
|
|
|
72
|
-
def
|
|
71
|
+
def delete_resource(tx_resource)
|
|
73
72
|
url = "#{API_ROOT}/project/#{tx_resource.project_slug}/resource/#{tx_resource.resource_slug}/"
|
|
74
|
-
|
|
73
|
+
delete(url)
|
|
75
74
|
end
|
|
76
75
|
|
|
77
76
|
def update_content(tx_resource, content)
|
|
78
77
|
content_io = get_content_io(tx_resource, content)
|
|
79
78
|
payload = { content: content_io }
|
|
80
79
|
url = "#{API_ROOT}/project/#{tx_resource.project_slug}/resource/#{tx_resource.resource_slug}/content/"
|
|
81
|
-
|
|
82
|
-
raise_error!(response)
|
|
80
|
+
put(url, payload)
|
|
83
81
|
end
|
|
84
82
|
|
|
85
83
|
def update_details(tx_resource, details = {})
|
|
86
84
|
url = "#{API_ROOT}/project/#{tx_resource.project_slug}/resource/#{tx_resource.resource_slug}/"
|
|
87
|
-
|
|
88
|
-
raise_error!(response)
|
|
85
|
+
put(url, details)
|
|
89
86
|
end
|
|
90
87
|
|
|
91
88
|
def resource_exists?(tx_resource)
|
|
92
89
|
project = tx_resource.project_slug
|
|
93
90
|
slug = tx_resource.resource_slug
|
|
94
|
-
response =
|
|
91
|
+
response = get("#{API_ROOT}/project/#{project}/resource/#{slug}/")
|
|
95
92
|
response.status == 200
|
|
93
|
+
rescue TransifexNotFoundError
|
|
94
|
+
false
|
|
96
95
|
end
|
|
97
96
|
|
|
98
97
|
def download(tx_resource, lang)
|
|
99
98
|
project_slug = tx_resource.project_slug
|
|
100
99
|
resource_slug = tx_resource.resource_slug
|
|
101
|
-
|
|
100
|
+
|
|
101
|
+
json_data = get_json(
|
|
102
102
|
"#{API_ROOT}/project/#{project_slug}/resource/#{resource_slug}/translation/#{lang}/"
|
|
103
103
|
)
|
|
104
104
|
|
|
105
|
-
raise_error!(response)
|
|
106
|
-
|
|
107
|
-
json_data = JSON.parse(response.body)
|
|
108
105
|
json_data['content']
|
|
109
106
|
end
|
|
110
107
|
|
|
111
108
|
def get_resource(project_slug, resource_slug)
|
|
112
109
|
url = "#{API_ROOT}/project/#{project_slug}/resource/#{resource_slug}/"
|
|
113
|
-
|
|
114
|
-
raise_error!(response)
|
|
115
|
-
JSON.parse(response.body)
|
|
110
|
+
get_json(url)
|
|
116
111
|
end
|
|
117
112
|
|
|
118
113
|
def get_resources(project_slug)
|
|
119
114
|
url = "#{API_ROOT}/project/#{project_slug}/resources/"
|
|
120
|
-
|
|
121
|
-
raise_error!(response)
|
|
122
|
-
JSON.parse(response.body)
|
|
115
|
+
get_json(url)
|
|
123
116
|
end
|
|
124
117
|
|
|
125
118
|
def get_languages(project_slug)
|
|
126
119
|
url = "#{API_ROOT}/project/#{project_slug}/languages/"
|
|
127
|
-
|
|
128
|
-
raise_error!(response)
|
|
129
|
-
JSON.parse(response.body)
|
|
120
|
+
get_json(url)
|
|
130
121
|
end
|
|
131
122
|
|
|
132
123
|
def get_project(project_slug)
|
|
133
124
|
url = "#{API_ROOT}/project/#{project_slug}/"
|
|
134
|
-
|
|
135
|
-
raise_error!(response)
|
|
136
|
-
JSON.parse(response.body)
|
|
125
|
+
get_json(url)
|
|
137
126
|
end
|
|
138
127
|
|
|
139
128
|
def get_formats
|
|
140
129
|
url = "#{API_ROOT}/formats/"
|
|
141
|
-
|
|
142
|
-
raise_error!(response)
|
|
143
|
-
JSON.parse(response.body)
|
|
130
|
+
get_json(url)
|
|
144
131
|
end
|
|
145
132
|
|
|
146
133
|
def get_stats(project_slug, resource_slug)
|
|
147
134
|
url = "#{API_ROOT}/project/#{project_slug}/resource/#{resource_slug}/stats/"
|
|
148
|
-
|
|
149
|
-
raise_error!(response)
|
|
150
|
-
JSON.parse(response.body)
|
|
135
|
+
get_json(url)
|
|
151
136
|
end
|
|
152
137
|
|
|
153
138
|
private
|
|
154
139
|
|
|
140
|
+
def get(url)
|
|
141
|
+
act(:get, url)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def post(url, body)
|
|
145
|
+
act(:post, url, body)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def put(url, body)
|
|
149
|
+
act(:put, url, body)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def delete(url)
|
|
153
|
+
act(:delete, url)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def get_json(url)
|
|
157
|
+
response = get(url)
|
|
158
|
+
JSON.parse(response.body)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def act(verb, url, body = nil)
|
|
162
|
+
response = connection.send(verb, url, body)
|
|
163
|
+
raise_error!(response)
|
|
164
|
+
response
|
|
165
|
+
end
|
|
166
|
+
|
|
155
167
|
def get_content_io(tx_resource, content)
|
|
156
168
|
content_io = StringIO::new(content)
|
|
157
169
|
content_io.set_encoding(Encoding::UTF_8.name)
|
|
@@ -163,16 +175,15 @@ module Txgh
|
|
|
163
175
|
def raise_error!(response)
|
|
164
176
|
case response.status
|
|
165
177
|
when 401
|
|
166
|
-
raise TransifexUnauthorizedError
|
|
178
|
+
raise TransifexUnauthorizedError, "401 Unauthorized: #{response.env.url}"
|
|
167
179
|
when 404
|
|
168
|
-
raise TransifexNotFoundError
|
|
180
|
+
raise TransifexNotFoundError, "404 Not Found: #{response.env.url}"
|
|
169
181
|
else
|
|
170
182
|
if (response.status / 100) != 2
|
|
171
183
|
raise TransifexApiError,
|
|
172
|
-
"
|
|
184
|
+
"HTTP #{response.status}: #{response.env.url}, body: #{response.body}"
|
|
173
185
|
end
|
|
174
186
|
end
|
|
175
187
|
end
|
|
176
188
|
end
|
|
177
189
|
end
|
|
178
|
-
|
data/lib/txgh/version.rb
CHANGED
|
@@ -39,7 +39,7 @@ describe DeleteHandler do
|
|
|
39
39
|
receive(:get_resources).and_return(resource_api_response)
|
|
40
40
|
)
|
|
41
41
|
|
|
42
|
-
expect(transifex_api).to receive(:
|
|
42
|
+
expect(transifex_api).to receive(:delete_resource) do |tx_resource|
|
|
43
43
|
expect(tx_resource.project_slug).to eq(project_name)
|
|
44
44
|
expect(tx_resource.resource_slug).to eq(resource_slug_with_branch)
|
|
45
45
|
end
|
data/spec/transifex_api_spec.rb
CHANGED
|
@@ -4,12 +4,37 @@ require 'helpers/standard_txgh_setup'
|
|
|
4
4
|
include Txgh
|
|
5
5
|
|
|
6
6
|
describe TransifexApi do
|
|
7
|
+
FakeEnv = Struct.new(:url)
|
|
8
|
+
FakeRequest = Struct.new(:body)
|
|
9
|
+
FakeResponse = Struct.new(:env, :status, :body)
|
|
10
|
+
|
|
11
|
+
class FakeConnection
|
|
12
|
+
%w(get post put delete).each do |verb|
|
|
13
|
+
define_method(:"on_#{verb}") do |&block|
|
|
14
|
+
callbacks[verb] = block
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
define_method(verb) do |url, body = nil|
|
|
18
|
+
env = FakeEnv.new(url)
|
|
19
|
+
request = FakeRequest.new(body)
|
|
20
|
+
response = FakeResponse.new(env)
|
|
21
|
+
callbacks[verb].call(request, response)
|
|
22
|
+
response
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def callbacks
|
|
29
|
+
@callbacks ||= {}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
7
33
|
include StandardTxghSetup
|
|
8
34
|
|
|
9
|
-
let(:connection) {
|
|
35
|
+
let(:connection) { FakeConnection.new }
|
|
10
36
|
let(:api) { TransifexApi.create_from_connection(connection) }
|
|
11
37
|
let(:resource) { tx_config.resource(resource_slug) }
|
|
12
|
-
let(:response) { double(:response) }
|
|
13
38
|
|
|
14
39
|
describe '#create_or_update' do
|
|
15
40
|
context 'with a preexisting resource' do
|
|
@@ -48,159 +73,188 @@ describe TransifexApi do
|
|
|
48
73
|
context 'with a non-existent resource' do
|
|
49
74
|
before(:each) do
|
|
50
75
|
expect(api).to receive(:resource_exists?).and_return(false)
|
|
76
|
+
expect(connection).to receive(:post).and_call_original
|
|
51
77
|
end
|
|
52
78
|
|
|
53
79
|
it 'makes a request with the correct parameters' do
|
|
54
|
-
|
|
55
|
-
|
|
80
|
+
connection.on_post do |request, response|
|
|
81
|
+
response.status = 200
|
|
82
|
+
response.body = '{}'
|
|
83
|
+
|
|
84
|
+
expect(response.env.url).to(
|
|
56
85
|
end_with("project/#{project_name}/resources/")
|
|
57
86
|
)
|
|
58
87
|
|
|
59
|
-
expect(
|
|
60
|
-
expect(
|
|
61
|
-
expect(
|
|
62
|
-
|
|
63
|
-
response
|
|
88
|
+
expect(request.body[:slug]).to eq(resource_slug)
|
|
89
|
+
expect(request.body[:name]).to eq(resource.source_file)
|
|
90
|
+
expect(request.body[:i18n_type]).to eq('YML')
|
|
64
91
|
end
|
|
65
92
|
|
|
66
|
-
allow(response).to receive(:status).and_return(200)
|
|
67
|
-
allow(response).to receive(:body).and_return("{}")
|
|
68
93
|
api.create_or_update(resource, 'new_content')
|
|
69
94
|
end
|
|
70
95
|
end
|
|
71
96
|
end
|
|
72
97
|
|
|
73
98
|
describe '#create' do
|
|
99
|
+
before(:each) do
|
|
100
|
+
expect(connection).to receive(:post).and_call_original
|
|
101
|
+
end
|
|
102
|
+
|
|
74
103
|
it 'makes a request with the correct parameters' do
|
|
75
|
-
|
|
76
|
-
|
|
104
|
+
connection.on_post do |request, response|
|
|
105
|
+
response.status = 200
|
|
106
|
+
|
|
107
|
+
expect(response.env.url).to(
|
|
77
108
|
end_with("project/#{project_name}/resources/")
|
|
78
109
|
)
|
|
79
110
|
|
|
80
|
-
expect(
|
|
81
|
-
expect(
|
|
82
|
-
expect(
|
|
83
|
-
response
|
|
111
|
+
expect(request.body[:name]).to eq('sample.yml')
|
|
112
|
+
expect(request.body[:content].io.string).to eq('new_content')
|
|
113
|
+
expect(request.body[:categories]).to eq('abc def')
|
|
84
114
|
end
|
|
85
115
|
|
|
86
|
-
allow(response).to receive(:status).and_return(200)
|
|
87
116
|
api.create(resource, 'new_content', ['abc', 'def'])
|
|
88
117
|
end
|
|
89
118
|
|
|
90
119
|
it 'submits de-duped categories' do
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
120
|
+
connection.on_post do |request, response|
|
|
121
|
+
response.status = 200
|
|
122
|
+
expect(request.body[:categories]).to eq('abc')
|
|
94
123
|
end
|
|
95
124
|
|
|
96
|
-
allow(response).to receive(:status).and_return(200)
|
|
97
125
|
api.create(resource, 'new_content', ['abc', 'abc'])
|
|
98
126
|
end
|
|
99
127
|
|
|
100
128
|
it 'raises an exception if the api responds with an error code' do
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
129
|
+
connection.on_post do |_, response|
|
|
130
|
+
response.status = 404
|
|
131
|
+
response.body = '{}'
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
expect { api.create(resource, 'new_content') }.to(
|
|
135
|
+
raise_error(TransifexApiError)
|
|
136
|
+
)
|
|
105
137
|
end
|
|
106
138
|
|
|
107
139
|
context 'with a branch-based resource' do
|
|
108
140
|
let(:resource) { tx_config.resource(resource_slug, ref) }
|
|
109
141
|
|
|
110
142
|
it "includes the branch in the resource's name" do
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
143
|
+
connection.on_post do |request, response|
|
|
144
|
+
response.status = 200
|
|
145
|
+
expect(request.body[:name]).to eq('sample.yml (heads/master)')
|
|
114
146
|
end
|
|
115
147
|
|
|
116
|
-
allow(response).to receive(:status).and_return(200)
|
|
117
148
|
api.create(resource, 'new_content')
|
|
118
149
|
end
|
|
119
150
|
end
|
|
120
151
|
end
|
|
121
152
|
|
|
122
|
-
describe '#
|
|
153
|
+
describe '#delete_resource' do
|
|
154
|
+
before(:each) do
|
|
155
|
+
expect(connection).to receive(:delete).and_call_original
|
|
156
|
+
end
|
|
157
|
+
|
|
123
158
|
it 'deletes the given resource' do
|
|
124
|
-
|
|
125
|
-
|
|
159
|
+
connection.on_delete do |_, response|
|
|
160
|
+
response.status = 200
|
|
161
|
+
|
|
162
|
+
expect(response.env.url).to(
|
|
126
163
|
end_with("project/#{project_name}/resource/#{resource_slug}/")
|
|
127
164
|
)
|
|
128
165
|
end
|
|
129
166
|
|
|
130
|
-
api.
|
|
167
|
+
api.delete_resource(resource)
|
|
131
168
|
end
|
|
132
169
|
end
|
|
133
170
|
|
|
134
171
|
describe '#update_content' do
|
|
172
|
+
before(:each) do
|
|
173
|
+
expect(connection).to receive(:put).and_call_original
|
|
174
|
+
end
|
|
175
|
+
|
|
135
176
|
it 'makes a request with the correct parameters' do
|
|
136
|
-
|
|
137
|
-
|
|
177
|
+
connection.on_put do |request, response|
|
|
178
|
+
response.status = 200
|
|
179
|
+
|
|
180
|
+
expect(response.env.url).to(
|
|
138
181
|
end_with("project/#{project_name}/resource/#{resource_slug}/content/")
|
|
139
182
|
)
|
|
140
183
|
|
|
141
|
-
expect(
|
|
142
|
-
response
|
|
184
|
+
expect(request.body[:content].io.string).to eq('new_content')
|
|
143
185
|
end
|
|
144
186
|
|
|
145
|
-
allow(response).to receive(:status).and_return(200)
|
|
146
187
|
api.update_content(resource, 'new_content')
|
|
147
188
|
end
|
|
148
189
|
|
|
149
190
|
it 'raises an exception if the api responds with an error code' do
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
191
|
+
connection.on_put do |_, response|
|
|
192
|
+
response.status = 404
|
|
193
|
+
response.body = '{}'
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
expect { api.update_content(resource, 'new_content') }.to(
|
|
197
|
+
raise_error(TransifexApiError)
|
|
198
|
+
)
|
|
154
199
|
end
|
|
155
200
|
end
|
|
156
201
|
|
|
157
202
|
describe '#update_details' do
|
|
203
|
+
before(:each) do
|
|
204
|
+
expect(connection).to receive(:put).and_call_original
|
|
205
|
+
end
|
|
206
|
+
|
|
158
207
|
it 'makes a request with the correct parameters' do
|
|
159
|
-
|
|
160
|
-
|
|
208
|
+
connection.on_put do |request, response|
|
|
209
|
+
response.status = 200
|
|
210
|
+
|
|
211
|
+
expect(response.env.url).to(
|
|
161
212
|
end_with("project/#{project_name}/resource/#{resource_slug}/")
|
|
162
213
|
)
|
|
163
214
|
|
|
164
|
-
expect(
|
|
165
|
-
expect(
|
|
166
|
-
response
|
|
215
|
+
expect(request.body[:i18n_type]).to eq('FOO')
|
|
216
|
+
expect(request.body[:categories]).to eq(['abc'])
|
|
167
217
|
end
|
|
168
218
|
|
|
169
|
-
allow(response).to receive(:status).and_return(200)
|
|
170
219
|
api.update_details(resource, i18n_type: 'FOO', categories: ['abc'])
|
|
171
220
|
end
|
|
172
221
|
|
|
173
222
|
it 'raises an exception if the api responds with an error code' do
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
223
|
+
connection.on_put do |_, response|
|
|
224
|
+
response.status = 404
|
|
225
|
+
response.body = '{}'
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
expect { api.update_details(resource, {}) }.to(
|
|
229
|
+
raise_error(TransifexApiError)
|
|
230
|
+
)
|
|
178
231
|
end
|
|
179
232
|
end
|
|
180
233
|
|
|
181
234
|
describe '#resource_exists?' do
|
|
235
|
+
before(:each) do
|
|
236
|
+
expect(connection).to receive(:get).and_call_original
|
|
237
|
+
end
|
|
238
|
+
|
|
182
239
|
it 'makes a request with the correct parameters' do
|
|
183
|
-
|
|
184
|
-
|
|
240
|
+
connection.on_get do |_, response|
|
|
241
|
+
response.status = 200
|
|
242
|
+
|
|
243
|
+
expect(response.env.url).to(
|
|
185
244
|
end_with("project/#{project_name}/resource/#{resource_slug}/")
|
|
186
245
|
)
|
|
187
|
-
|
|
188
|
-
response
|
|
189
246
|
end
|
|
190
247
|
|
|
191
|
-
allow(response).to receive(:status).and_return(200)
|
|
192
248
|
api.resource_exists?(resource)
|
|
193
249
|
end
|
|
194
250
|
|
|
195
251
|
it 'returns true if the api responds with a 200 status code' do
|
|
196
|
-
|
|
197
|
-
allow(response).to receive(:status).and_return(200)
|
|
252
|
+
connection.on_get { |_, response| response.status = 200 }
|
|
198
253
|
expect(api.resource_exists?(resource)).to eq(true)
|
|
199
254
|
end
|
|
200
255
|
|
|
201
256
|
it 'returns false if the api does not respond with a 200 status code' do
|
|
202
|
-
|
|
203
|
-
allow(response).to receive(:status).and_return(404)
|
|
257
|
+
connection.on_get { |_, response| response.status = 404 }
|
|
204
258
|
expect(api.resource_exists?(resource)).to eq(false)
|
|
205
259
|
end
|
|
206
260
|
end
|
|
@@ -208,38 +262,40 @@ describe TransifexApi do
|
|
|
208
262
|
describe '#download' do
|
|
209
263
|
let(:language) { 'pt-BR' }
|
|
210
264
|
|
|
265
|
+
before(:each) do
|
|
266
|
+
expect(connection).to receive(:get).and_call_original
|
|
267
|
+
end
|
|
268
|
+
|
|
211
269
|
it 'makes a request with the correct parameters' do
|
|
212
|
-
|
|
213
|
-
|
|
270
|
+
connection.on_get do |_, response|
|
|
271
|
+
response.status = 200
|
|
272
|
+
response.body = '{"content": "foobar"}'
|
|
273
|
+
|
|
274
|
+
expect(response.env.url).to(
|
|
214
275
|
end_with("project/#{project_name}/resource/#{resource_slug}/translation/#{language}/")
|
|
215
276
|
)
|
|
216
|
-
|
|
217
|
-
response
|
|
218
277
|
end
|
|
219
278
|
|
|
220
|
-
allow(response).to receive(:status).and_return(200)
|
|
221
|
-
allow(response).to receive(:body).and_return('{}')
|
|
222
|
-
api.download(resource, language)
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
it 'parses and returns the response content' do
|
|
226
|
-
allow(connection).to receive(:get).and_return(response)
|
|
227
|
-
allow(response).to receive(:status).and_return(200)
|
|
228
|
-
allow(response).to receive(:body).and_return('{"content": "foobar"}')
|
|
229
279
|
expect(api.download(resource, language)).to eq('foobar')
|
|
230
280
|
end
|
|
231
281
|
|
|
232
282
|
it 'raises an exception if the api responds with an error code' do
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
283
|
+
connection.on_get do |_, response|
|
|
284
|
+
response.status = 401
|
|
285
|
+
response.body = '{}'
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
expect { api.download(resource, language) }.to(
|
|
289
|
+
raise_error(TransifexApiError)
|
|
290
|
+
)
|
|
237
291
|
end
|
|
238
292
|
|
|
239
293
|
it 'raises a specific exception if the api responds with a 404 not found' do
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
294
|
+
connection.on_get do |_, response|
|
|
295
|
+
response.status = 404
|
|
296
|
+
response.body = '{}'
|
|
297
|
+
end
|
|
298
|
+
|
|
243
299
|
expect { api.download(resource, language) }.to raise_error(
|
|
244
300
|
TransifexNotFoundError
|
|
245
301
|
)
|
|
@@ -247,136 +303,218 @@ describe TransifexApi do
|
|
|
247
303
|
end
|
|
248
304
|
|
|
249
305
|
describe '#get_resource' do
|
|
306
|
+
before(:each) do
|
|
307
|
+
expect(connection).to receive(:get).and_call_original
|
|
308
|
+
end
|
|
309
|
+
|
|
250
310
|
it 'makes a request with the correct parameters' do
|
|
251
|
-
|
|
252
|
-
|
|
311
|
+
connection.on_get do |_, response|
|
|
312
|
+
response.status = 200
|
|
313
|
+
response.body = '{"foo":"bar"}'
|
|
314
|
+
|
|
315
|
+
expect(response.env.url).to(
|
|
253
316
|
end_with("project/#{project_name}/resource/#{resource_slug}/")
|
|
254
317
|
)
|
|
255
|
-
|
|
256
|
-
response
|
|
257
318
|
end
|
|
258
319
|
|
|
259
|
-
allow(response).to receive(:status).and_return(200)
|
|
260
|
-
allow(response).to receive(:body).and_return('{"foo":"bar"}')
|
|
261
320
|
expect(api.get_resource(*resource.slugs)).to eq({ 'foo' => 'bar' })
|
|
262
321
|
end
|
|
263
322
|
|
|
264
323
|
it 'raises an exception if the api responds with an error code' do
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
324
|
+
connection.on_get do |_, response|
|
|
325
|
+
response.status = 404
|
|
326
|
+
response.body = '{}'
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
expect { api.get_resource(*resource.slugs) }.to(
|
|
330
|
+
raise_error(TransifexApiError)
|
|
331
|
+
)
|
|
269
332
|
end
|
|
270
333
|
end
|
|
271
334
|
|
|
272
335
|
describe '#get_resources' do
|
|
336
|
+
before(:each) do
|
|
337
|
+
expect(connection).to receive(:get).and_call_original
|
|
338
|
+
end
|
|
339
|
+
|
|
273
340
|
it 'makes a request with the correct parameters' do
|
|
274
|
-
|
|
275
|
-
|
|
341
|
+
connection.on_get do |_, response|
|
|
342
|
+
response.status = 200
|
|
343
|
+
response.body = '{"foo":"bar"}'
|
|
344
|
+
|
|
345
|
+
expect(response.env.url).to(
|
|
276
346
|
end_with("project/#{project_name}/resources/")
|
|
277
347
|
)
|
|
278
|
-
|
|
279
|
-
response
|
|
280
348
|
end
|
|
281
349
|
|
|
282
|
-
allow(response).to receive(:status).and_return(200)
|
|
283
|
-
allow(response).to receive(:body).and_return('{"foo":"bar"}')
|
|
284
350
|
expect(api.get_resources(project_name)).to eq({ 'foo' => 'bar' })
|
|
285
351
|
end
|
|
286
352
|
|
|
287
353
|
it 'raises an exception if the api responds with an error code' do
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
354
|
+
connection.on_get do |_, response|
|
|
355
|
+
response.status = 404
|
|
356
|
+
response.body = '{}'
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
expect { api.get_resources(project_name) }.to(
|
|
360
|
+
raise_error(TransifexApiError)
|
|
361
|
+
)
|
|
292
362
|
end
|
|
293
363
|
end
|
|
294
364
|
|
|
295
365
|
describe '#get_languages' do
|
|
366
|
+
before(:each) do
|
|
367
|
+
expect(connection).to receive(:get).and_call_original
|
|
368
|
+
end
|
|
369
|
+
|
|
296
370
|
it 'makes a request with the correct parameters' do
|
|
297
|
-
|
|
298
|
-
|
|
371
|
+
connection.on_get do |_, response|
|
|
372
|
+
response.status = 200
|
|
373
|
+
response.body = '[{"language_code":"de"}]'
|
|
374
|
+
|
|
375
|
+
expect(response.env.url).to(
|
|
299
376
|
end_with("project/#{project_name}/languages/")
|
|
300
377
|
)
|
|
301
|
-
|
|
302
|
-
response
|
|
303
378
|
end
|
|
304
379
|
|
|
305
|
-
allow(response).to receive(:status).and_return(200)
|
|
306
|
-
allow(response).to receive(:body).and_return('[{"language_code":"de"}]')
|
|
307
380
|
expect(api.get_languages(project_name)).to eq([{ 'language_code' => 'de' }])
|
|
308
381
|
end
|
|
309
382
|
|
|
310
383
|
it 'raises an exception if the api responds with an error code' do
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
384
|
+
connection.on_get do |_, response|
|
|
385
|
+
response.status = 404
|
|
386
|
+
response.body = '{}'
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
expect { api.get_languages(project_name) }.to(
|
|
390
|
+
raise_error(TransifexApiError)
|
|
391
|
+
)
|
|
315
392
|
end
|
|
316
393
|
end
|
|
317
394
|
|
|
318
395
|
describe '#get_project' do
|
|
396
|
+
before(:each) do
|
|
397
|
+
expect(connection).to receive(:get).and_call_original
|
|
398
|
+
end
|
|
399
|
+
|
|
319
400
|
it 'makes a request with the correct parameters' do
|
|
320
|
-
|
|
321
|
-
|
|
401
|
+
connection.on_get do |_, response|
|
|
402
|
+
response.status = 200
|
|
403
|
+
response.body = '{"slug":"projectslug"}'
|
|
404
|
+
|
|
405
|
+
expect(response.env.url).to(
|
|
322
406
|
end_with("project/#{project_name}/")
|
|
323
407
|
)
|
|
324
|
-
|
|
325
|
-
response
|
|
326
408
|
end
|
|
327
409
|
|
|
328
|
-
allow(response).to receive(:status).and_return(200)
|
|
329
|
-
allow(response).to receive(:body).and_return('{"slug":"projectslug"}')
|
|
330
410
|
expect(api.get_project(project_name)).to eq({ 'slug' => 'projectslug' })
|
|
331
411
|
end
|
|
332
412
|
|
|
333
413
|
it 'raises an exception if the api responds with an error code' do
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
414
|
+
connection.on_get do |_, response|
|
|
415
|
+
response.status = 404
|
|
416
|
+
response.body = '{}'
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
expect { api.get_project(project_name) }.to(
|
|
420
|
+
raise_error(TransifexApiError)
|
|
421
|
+
)
|
|
338
422
|
end
|
|
339
423
|
end
|
|
340
424
|
|
|
341
425
|
describe '#get_formats' do
|
|
426
|
+
before(:each) do
|
|
427
|
+
expect(connection).to receive(:get).and_call_original
|
|
428
|
+
end
|
|
429
|
+
|
|
342
430
|
it 'makes a request with the correct parameters' do
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
response
|
|
431
|
+
connection.on_get do |_, response|
|
|
432
|
+
response.status = 200
|
|
433
|
+
response.body = '{}'
|
|
434
|
+
|
|
435
|
+
expect(response.env.url).to(
|
|
436
|
+
end_with('formats/')
|
|
437
|
+
)
|
|
346
438
|
end
|
|
347
439
|
|
|
348
|
-
allow(response).to receive(:status).and_return(200)
|
|
349
|
-
allow(response).to receive(:body).and_return('{}')
|
|
350
440
|
expect(api.get_formats).to eq({})
|
|
351
441
|
end
|
|
352
442
|
|
|
353
443
|
it 'raises an exception if the api responds with an error code' do
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
444
|
+
connection.on_get do |_, response|
|
|
445
|
+
response.status = 404
|
|
446
|
+
response.body = '{}'
|
|
447
|
+
end
|
|
448
|
+
|
|
357
449
|
expect { api.get_formats }.to raise_error(TransifexApiError)
|
|
358
450
|
end
|
|
359
451
|
end
|
|
360
452
|
|
|
361
453
|
describe '#get_stats' do
|
|
454
|
+
before(:each) do
|
|
455
|
+
expect(connection).to receive(:get).and_call_original
|
|
456
|
+
end
|
|
457
|
+
|
|
362
458
|
it 'makes a request with the correct parameters' do
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
response
|
|
459
|
+
connection.on_get do |_, response|
|
|
460
|
+
response.status = 200
|
|
461
|
+
response.body = '{}'
|
|
462
|
+
|
|
463
|
+
expect(response.env.url).to(
|
|
464
|
+
end_with('stats/')
|
|
465
|
+
)
|
|
366
466
|
end
|
|
367
467
|
|
|
368
|
-
allow(response).to receive(:status).and_return(200)
|
|
369
|
-
allow(response).to receive(:body).and_return('{}')
|
|
370
468
|
expect(api.get_stats(project_name, resource_slug)).to eq({})
|
|
371
469
|
end
|
|
372
470
|
|
|
373
471
|
it 'raises an exception if the api responds with an error code' do
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
472
|
+
connection.on_get do |_, response|
|
|
473
|
+
response.status = 404
|
|
474
|
+
response.body = '{}'
|
|
475
|
+
end
|
|
476
|
+
|
|
377
477
|
expect { api.get_stats(project_name, resource_slug) }.to(
|
|
378
478
|
raise_error(TransifexApiError)
|
|
379
479
|
)
|
|
380
480
|
end
|
|
381
481
|
end
|
|
482
|
+
|
|
483
|
+
describe 'errors' do
|
|
484
|
+
it 'includes the URL in the error message on 401' do
|
|
485
|
+
connection.on_get do |_, response|
|
|
486
|
+
response.status = 401
|
|
487
|
+
response.body = '{}'
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
expect { api.get_formats }.to raise_error do |error|
|
|
491
|
+
expect(error).to be_a(TransifexUnauthorizedError)
|
|
492
|
+
expect(error.message).to eq('401 Unauthorized: /api/2/formats/')
|
|
493
|
+
end
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
it 'includes the URL in the error message on 404' do
|
|
497
|
+
connection.on_get do |_, response|
|
|
498
|
+
response.status = 404
|
|
499
|
+
response.body = '{}'
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
expect { api.get_formats }.to raise_error do |error|
|
|
503
|
+
expect(error).to be_a(TransifexNotFoundError)
|
|
504
|
+
expect(error.message).to eq('404 Not Found: /api/2/formats/')
|
|
505
|
+
end
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
it 'includes the URL in the error message on unexpected error' do
|
|
509
|
+
connection.on_get do |_, response|
|
|
510
|
+
response.status = 422
|
|
511
|
+
response.body = '{}'
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
expect { api.get_formats }.to raise_error do |error|
|
|
515
|
+
expect(error).to be_a(TransifexApiError)
|
|
516
|
+
expect(error.message).to eq('HTTP 422: /api/2/formats/, body: {}')
|
|
517
|
+
end
|
|
518
|
+
end
|
|
519
|
+
end
|
|
382
520
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: txgh
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew Jackowski
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2016-05-
|
|
12
|
+
date: 2016-05-26 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: abroad
|