txgh-server 3.1.0 → 4.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/txgh-server.rb +1 -0
- data/lib/txgh-server/application.rb +7 -1
- data/lib/txgh-server/download_handler.rb +1 -1
- data/lib/txgh-server/gitlab_request_auth.rb +13 -0
- data/lib/txgh-server/triggers/handler.rb +18 -1
- data/lib/txgh-server/triggers/pull_handler.rb +1 -10
- data/lib/txgh-server/triggers/push_handler.rb +1 -10
- data/lib/txgh-server/version.rb +1 -1
- data/lib/txgh-server/webhooks.rb +2 -0
- data/lib/txgh-server/webhooks/git.rb +15 -0
- data/lib/txgh-server/webhooks/git/blank_attributes.rb +20 -0
- data/lib/txgh-server/webhooks/git/delete_attributes.rb +54 -0
- data/lib/txgh-server/webhooks/git/delete_handler.rb +45 -0
- data/lib/txgh-server/webhooks/git/ping_handler.rb +21 -0
- data/lib/txgh-server/webhooks/git/push_attributes.rb +79 -0
- data/lib/txgh-server/webhooks/git/push_handler.rb +98 -0
- data/lib/txgh-server/webhooks/git/request_handler.rb +76 -0
- data/lib/txgh-server/webhooks/git/status_updater.rb +15 -0
- data/lib/txgh-server/webhooks/github/blank_attributes.rb +1 -13
- data/lib/txgh-server/webhooks/github/delete_attributes.rb +1 -38
- data/lib/txgh-server/webhooks/github/delete_handler.rb +1 -38
- data/lib/txgh-server/webhooks/github/ping_handler.rb +1 -12
- data/lib/txgh-server/webhooks/github/push_attributes.rb +1 -51
- data/lib/txgh-server/webhooks/github/push_handler.rb +2 -88
- data/lib/txgh-server/webhooks/github/request_handler.rb +2 -47
- data/lib/txgh-server/webhooks/github/status_updater.rb +1 -9
- data/lib/txgh-server/webhooks/gitlab.rb +14 -0
- data/lib/txgh-server/webhooks/gitlab/blank_attributes.rb +8 -0
- data/lib/txgh-server/webhooks/gitlab/delete_attributes.rb +17 -0
- data/lib/txgh-server/webhooks/gitlab/delete_handler.rb +8 -0
- data/lib/txgh-server/webhooks/gitlab/push_attributes.rb +29 -0
- data/lib/txgh-server/webhooks/gitlab/push_handler.rb +13 -0
- data/lib/txgh-server/webhooks/gitlab/request_handler.rb +59 -0
- data/lib/txgh-server/webhooks/gitlab/status_updater.rb +37 -0
- data/lib/txgh-server/webhooks/transifex/request_handler.rb +1 -1
- data/spec/application_spec.rb +11 -11
- data/spec/download_handler_spec.rb +6 -8
- data/spec/github_request_auth_spec.rb +6 -8
- data/spec/gitlab_request_auth_spec.rb +26 -0
- data/spec/helpers/gitlab_payload_builder.rb +132 -0
- data/spec/integration/hooks_spec.rb +1 -1
- data/spec/tgz_stream_response_spec.rb +2 -4
- data/spec/transifex_request_auth_spec.rb +6 -8
- data/spec/webhooks/github/delete_attributes_spec.rb +2 -5
- data/spec/webhooks/github/delete_handler_spec.rb +4 -7
- data/spec/webhooks/github/ping_handler_spec.rb +2 -5
- data/spec/webhooks/github/push_attributes_spec.rb +3 -6
- data/spec/webhooks/github/push_handler_spec.rb +5 -8
- data/spec/webhooks/github/request_handler_spec.rb +8 -10
- data/spec/webhooks/github/status_updater_spec.rb +2 -4
- data/spec/webhooks/gitlab/delete_attributes_spec.rb +27 -0
- data/spec/webhooks/gitlab/delete_handler_spec.rb +34 -0
- data/spec/webhooks/gitlab/push_attributes_spec.rb +64 -0
- data/spec/webhooks/gitlab/push_handler_spec.rb +99 -0
- data/spec/webhooks/gitlab/request_handler_spec.rb +73 -0
- data/spec/webhooks/gitlab/status_updater_spec.rb +66 -0
- data/spec/webhooks/transifex/hook_handler_spec.rb +2 -5
- data/spec/webhooks/transifex/request_handler_spec.rb +3 -5
- data/spec/zip_stream_response_spec.rb +2 -4
- data/txgh-server.gemspec +1 -2
- metadata +35 -10
- data/spec/integration/payloads/github_postbody_l10n.json +0 -136
@@ -3,9 +3,7 @@ require 'spec_helper'
|
|
3
3
|
require 'stringio'
|
4
4
|
require 'zlib'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
describe TgzStreamResponse do
|
6
|
+
describe TxghServer::TgzStreamResponse do
|
9
7
|
def read_tgz_from(io)
|
10
8
|
contents = {}
|
11
9
|
|
@@ -29,7 +27,7 @@ describe TgzStreamResponse do
|
|
29
27
|
end
|
30
28
|
|
31
29
|
let(:response) do
|
32
|
-
|
30
|
+
described_class.new(attachment, enum)
|
33
31
|
end
|
34
32
|
|
35
33
|
describe '#write_to' do
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'rack'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
describe TransifexRequestAuth do
|
4
|
+
describe TxghServer::TransifexRequestAuth do
|
7
5
|
let(:secret) { 'abc123' }
|
8
6
|
let(:params) { { param1: 'value1', param2: 'value2', param3: 123 }.to_json }
|
9
7
|
let(:date_str) { Time.now.strftime('%a, %d %b %Y %H:%M:%S GMT') }
|
@@ -19,31 +17,31 @@ describe TransifexRequestAuth do
|
|
19
17
|
describe '.authentic_request?' do
|
20
18
|
it 'returns true if the request is signed correctly' do
|
21
19
|
request = Rack::Request.new(
|
22
|
-
|
20
|
+
described_class::RACK_HEADER => valid_signature,
|
23
21
|
'HTTP_DATE' => date_str,
|
24
22
|
'REQUEST_METHOD' => http_verb,
|
25
23
|
'HTTP_X_TX_URL' => url,
|
26
24
|
'rack.input' => StringIO.new(params)
|
27
25
|
)
|
28
26
|
|
29
|
-
authentic =
|
27
|
+
authentic = described_class.authentic_request?(request, secret)
|
30
28
|
expect(authentic).to eq(true)
|
31
29
|
end
|
32
30
|
|
33
31
|
it 'returns false if the request is not signed correctly' do
|
34
32
|
request = Rack::Request.new(
|
35
|
-
|
33
|
+
described_class::RACK_HEADER => 'incorrect',
|
36
34
|
'rack.input' => StringIO.new(params)
|
37
35
|
)
|
38
36
|
|
39
|
-
authentic =
|
37
|
+
authentic = described_class.authentic_request?(request, secret)
|
40
38
|
expect(authentic).to eq(false)
|
41
39
|
end
|
42
40
|
end
|
43
41
|
|
44
42
|
describe '.compute_signature' do
|
45
43
|
it 'calculates the signature and formats it as an http header' do
|
46
|
-
value =
|
44
|
+
value = described_class.compute_signature(
|
47
45
|
http_verb: http_verb,
|
48
46
|
date_str: date_str,
|
49
47
|
url: url,
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'helpers/github_payload_builder'
|
3
3
|
|
4
|
-
|
5
|
-
include TxghServer::Webhooks::Github
|
6
|
-
|
7
|
-
describe DeleteAttributes do
|
4
|
+
describe TxghServer::Webhooks::Github::DeleteAttributes do
|
8
5
|
let(:repo_name) { 'my_repo' }
|
9
6
|
let(:ref) { 'heads/my_ref' }
|
10
7
|
|
@@ -13,7 +10,7 @@ describe DeleteAttributes do
|
|
13
10
|
end
|
14
11
|
|
15
12
|
describe '#from_webhook_payload' do
|
16
|
-
let(:attributes) { DeleteAttributes.from_webhook_payload(payload.to_h) }
|
13
|
+
let(:attributes) { TxghServer::Webhooks::Github::DeleteAttributes.from_webhook_payload(payload.to_h) }
|
17
14
|
|
18
15
|
it 'pulls out repo name' do
|
19
16
|
expect(attributes.repo_name).to eq(repo_name)
|
@@ -2,22 +2,19 @@ require 'spec_helper'
|
|
2
2
|
require 'helpers/github_payload_builder'
|
3
3
|
require 'helpers/standard_txgh_setup'
|
4
4
|
|
5
|
-
|
6
|
-
include TxghServer::Webhooks::Github
|
7
|
-
|
8
|
-
describe DeleteHandler do
|
5
|
+
describe TxghServer::Webhooks::Github::DeleteHandler do
|
9
6
|
include StandardTxghSetup
|
10
7
|
|
11
8
|
let(:handler) do
|
12
|
-
DeleteHandler.new(transifex_project, github_repo, logger, attributes)
|
9
|
+
TxghServer::Webhooks::Github::DeleteHandler.new(transifex_project, github_repo, logger, attributes)
|
13
10
|
end
|
14
11
|
|
15
12
|
let(:attributes) do
|
16
|
-
DeleteAttributes.from_webhook_payload(payload.to_h)
|
13
|
+
TxghServer::Webhooks::Github::DeleteAttributes.from_webhook_payload(payload.to_h)
|
17
14
|
end
|
18
15
|
|
19
16
|
let(:payload) do
|
20
|
-
GithubPayloadBuilder.delete_payload(
|
17
|
+
GithubPayloadBuilder.delete_payload(github_repo_name, ref)
|
21
18
|
end
|
22
19
|
|
23
20
|
it 'deletes resources' do
|
@@ -1,12 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'helpers/nil_logger'
|
3
3
|
|
4
|
-
|
5
|
-
include TxghServer::Webhooks::Github
|
6
|
-
|
7
|
-
describe PingHandler do
|
4
|
+
describe TxghServer::Webhooks::Github::PingHandler do
|
8
5
|
let(:handler) do
|
9
|
-
PingHandler.new(NilLogger.new)
|
6
|
+
TxghServer::Webhooks::Github::PingHandler.new(NilLogger.new)
|
10
7
|
end
|
11
8
|
|
12
9
|
it 'responds with a 200 success' do
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'helpers/github_payload_builder'
|
3
3
|
|
4
|
-
|
5
|
-
include TxghServer::Webhooks::Github
|
6
|
-
|
7
|
-
describe PushAttributes do
|
4
|
+
describe TxghServer::Webhooks::Github::PushAttributes do
|
8
5
|
let(:repo_name) { 'my_repo' }
|
9
6
|
let(:ref) { 'heads/my_ref' }
|
10
7
|
let(:added) { ['added_file.txt'] }
|
@@ -15,7 +12,7 @@ describe PushAttributes do
|
|
15
12
|
end
|
16
13
|
|
17
14
|
describe '#from_webhook_payload' do
|
18
|
-
let(:attributes) { PushAttributes.from_webhook_payload(payload.to_h) }
|
15
|
+
let(:attributes) { TxghServer::Webhooks::Github::PushAttributes.from_webhook_payload(payload.to_h) }
|
19
16
|
|
20
17
|
it "when no head commit, uses the pusher's name instead" do
|
21
18
|
payload.merge!(pusher: { name: 'Fu Barro', email: 'fu@barro.com' })
|
@@ -29,7 +26,7 @@ describe PushAttributes do
|
|
29
26
|
end
|
30
27
|
|
31
28
|
describe '#from_webhook_payload' do
|
32
|
-
let(:attributes) { PushAttributes.from_webhook_payload(payload.to_h) }
|
29
|
+
let(:attributes) { TxghServer::Webhooks::Github::PushAttributes.from_webhook_payload(payload.to_h) }
|
33
30
|
|
34
31
|
it 'pulls out repo name' do
|
35
32
|
expect(attributes.repo_name).to eq(repo_name)
|
@@ -2,22 +2,19 @@ require 'spec_helper'
|
|
2
2
|
require 'helpers/github_payload_builder'
|
3
3
|
require 'helpers/standard_txgh_setup'
|
4
4
|
|
5
|
-
|
6
|
-
include TxghServer::Webhooks::Github
|
7
|
-
|
8
|
-
describe PushHandler do
|
5
|
+
describe TxghServer::Webhooks::Github::PushHandler do
|
9
6
|
include StandardTxghSetup
|
10
7
|
|
11
8
|
let(:handler) do
|
12
|
-
PushHandler.new(transifex_project, github_repo, logger, attributes)
|
9
|
+
TxghServer::Webhooks::Github::PushHandler.new(transifex_project, github_repo, logger, attributes)
|
13
10
|
end
|
14
11
|
|
15
12
|
let(:attributes) do
|
16
|
-
PushAttributes.from_webhook_payload(payload.to_h)
|
13
|
+
TxghServer::Webhooks::Github::PushAttributes.from_webhook_payload(payload.to_h)
|
17
14
|
end
|
18
15
|
|
19
16
|
let(:payload) do
|
20
|
-
GithubPayloadBuilder.push_payload(
|
17
|
+
GithubPayloadBuilder.push_payload(github_repo_name, ref)
|
21
18
|
end
|
22
19
|
|
23
20
|
let(:modified_files) do
|
@@ -87,7 +84,7 @@ describe PushHandler do
|
|
87
84
|
let(:after) { '0' * 40 }
|
88
85
|
|
89
86
|
let(:payload) do
|
90
|
-
GithubPayloadBuilder.push_payload(
|
87
|
+
GithubPayloadBuilder.push_payload(github_repo_name, ref, before, after)
|
91
88
|
end
|
92
89
|
|
93
90
|
it "doesn't upload anything" do
|
@@ -4,9 +4,7 @@ require 'helpers/nil_logger'
|
|
4
4
|
require 'helpers/standard_txgh_setup'
|
5
5
|
require 'helpers/test_request'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
describe Github::RequestHandler do
|
7
|
+
describe TxghServer::Webhooks::Github::RequestHandler do
|
10
8
|
include StandardTxghSetup
|
11
9
|
|
12
10
|
let(:logger) { NilLogger.new }
|
@@ -19,10 +17,10 @@ describe Github::RequestHandler do
|
|
19
17
|
describe '#handle_request' do
|
20
18
|
context 'push event' do
|
21
19
|
let(:event) { 'push' }
|
22
|
-
let(:payload) { GithubPayloadBuilder.push_payload(
|
20
|
+
let(:payload) { GithubPayloadBuilder.push_payload(github_repo_name, ref).tap { |p| p.add_commit } }
|
23
21
|
|
24
22
|
it 'does not execute if unauthorized' do
|
25
|
-
expect_any_instance_of(Github::PushHandler).to_not receive(:execute)
|
23
|
+
expect_any_instance_of(TxghServer::Webhooks::Github::PushHandler).to_not receive(:execute)
|
26
24
|
response = handler.handle_request
|
27
25
|
expect(response.status).to eq(401)
|
28
26
|
end
|
@@ -33,7 +31,7 @@ describe Github::RequestHandler do
|
|
33
31
|
end
|
34
32
|
|
35
33
|
it 'handles the request with the push handler' do
|
36
|
-
expect_any_instance_of(Github::PushHandler).to receive(:execute).and_return(:response)
|
34
|
+
expect_any_instance_of(TxghServer::Webhooks::Github::PushHandler).to receive(:execute).and_return(:response)
|
37
35
|
expect(handler.handle_request).to eq(:response)
|
38
36
|
end
|
39
37
|
end
|
@@ -41,10 +39,10 @@ describe Github::RequestHandler do
|
|
41
39
|
|
42
40
|
context 'delete event' do
|
43
41
|
let(:event) { 'delete' }
|
44
|
-
let(:payload) { GithubPayloadBuilder.delete_payload(
|
42
|
+
let(:payload) { GithubPayloadBuilder.delete_payload(github_repo_name, ref) }
|
45
43
|
|
46
44
|
it 'does not execute if unauthorized' do
|
47
|
-
expect_any_instance_of(Github::DeleteHandler).to_not receive(:execute)
|
45
|
+
expect_any_instance_of(TxghServer::Webhooks::Github::DeleteHandler).to_not receive(:execute)
|
48
46
|
response = handler.handle_request
|
49
47
|
expect(response.status).to eq(401)
|
50
48
|
end
|
@@ -55,7 +53,7 @@ describe Github::RequestHandler do
|
|
55
53
|
end
|
56
54
|
|
57
55
|
it 'handles the request with the delete handler' do
|
58
|
-
expect_any_instance_of(Github::DeleteHandler).to receive(:execute).and_return(:response)
|
56
|
+
expect_any_instance_of(TxghServer::Webhooks::Github::DeleteHandler).to receive(:execute).and_return(:response)
|
59
57
|
expect(handler.handle_request).to eq(:response)
|
60
58
|
end
|
61
59
|
end
|
@@ -63,7 +61,7 @@ describe Github::RequestHandler do
|
|
63
61
|
|
64
62
|
context 'unrecognized event' do
|
65
63
|
let(:event) { 'foo' }
|
66
|
-
let(:payload) { { repository: { full_name:
|
64
|
+
let(:payload) { { repository: { full_name: github_repo_name } } }
|
67
65
|
|
68
66
|
it 'responds with a 400' do
|
69
67
|
allow(handler).to receive(:authentic_request?).and_return(true)
|
@@ -1,12 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'helpers/standard_txgh_setup'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
describe StatusUpdater do
|
4
|
+
describe TxghServer::Webhooks::Github::StatusUpdater do
|
7
5
|
include StandardTxghSetup
|
8
6
|
|
9
|
-
let(:updater) { StatusUpdater.new(transifex_project, github_repo, ref) }
|
7
|
+
let(:updater) { TxghServer::Webhooks::Github::StatusUpdater.new(transifex_project, github_repo, ref) }
|
10
8
|
|
11
9
|
describe '#report_error_and_update_status' do
|
12
10
|
let(:description) { 'An error done occurred, fool' }
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'helpers/gitlab_payload_builder'
|
3
|
+
|
4
|
+
describe TxghServer::Webhooks::Gitlab::DeleteAttributes do
|
5
|
+
let(:repo_name) { 'my_repo' }
|
6
|
+
let(:ref) { 'heads/my_ref' }
|
7
|
+
|
8
|
+
let(:payload) do
|
9
|
+
GitlabPayloadBuilder.delete_payload(repo_name, ref)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#from_webhook_payload' do
|
13
|
+
let(:attributes) { TxghServer::Webhooks::Gitlab::DeleteAttributes.from_webhook_payload(payload.to_h) }
|
14
|
+
|
15
|
+
it 'pulls out repo name' do
|
16
|
+
expect(attributes.repo_name).to eq(repo_name)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'pulls out ref' do
|
20
|
+
expect(attributes.ref).to eq("refs/#{ref}")
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'pulls out ref type' do
|
24
|
+
expect(attributes.ref_type).to eq('branch')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'helpers/gitlab_payload_builder'
|
3
|
+
require 'helpers/standard_txgh_setup'
|
4
|
+
|
5
|
+
describe TxghServer::Webhooks::Gitlab::DeleteHandler do
|
6
|
+
include StandardTxghSetup
|
7
|
+
|
8
|
+
let(:handler) do
|
9
|
+
TxghServer::Webhooks::Gitlab::DeleteHandler.new(transifex_project, gitlab_repo, logger, attributes)
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:attributes) do
|
13
|
+
TxghServer::Webhooks::Gitlab::DeleteAttributes.from_webhook_payload(payload.to_h)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:payload) do
|
17
|
+
GitlabPayloadBuilder.delete_payload(gitlab_repo_name, ref)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'deletes resources' do
|
21
|
+
expect_any_instance_of(Txgh::ResourceDeleter).to receive(:delete_resources)
|
22
|
+
response = handler.execute
|
23
|
+
expect(response.status).to eq(200)
|
24
|
+
expect(response.body).to eq(true)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'does not delete resources if auto resource deletions are disabled' do
|
28
|
+
project_config['auto_delete_resources'] = 'false'
|
29
|
+
expect(transifex_api).to_not receive(:delete)
|
30
|
+
response = handler.execute
|
31
|
+
expect(response.status).to eq(200)
|
32
|
+
expect(response.body).to eq(true)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'helpers/gitlab_payload_builder'
|
3
|
+
|
4
|
+
describe TxghServer::Webhooks::Gitlab::PushAttributes do
|
5
|
+
let(:repo_name) { 'my_repo' }
|
6
|
+
let(:ref) { 'heads/my_ref' }
|
7
|
+
let(:added) { ['added_file.txt'] }
|
8
|
+
let(:modified) { ['modified_file.txt'] }
|
9
|
+
|
10
|
+
let(:payload) do
|
11
|
+
GitlabPayloadBuilder.push_payload(repo_name, ref)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#from_webhook_payload' do
|
15
|
+
let(:attributes) { TxghServer::Webhooks::Gitlab::PushAttributes.from_webhook_payload(payload.to_h) }
|
16
|
+
|
17
|
+
it "when no head commit, uses the pusher's name instead" do
|
18
|
+
payload.merge!(user_name: 'Fu Barro')
|
19
|
+
expect(attributes.author).to eq('Fu Barro')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with a commit added to the payload' do
|
24
|
+
before(:each) do
|
25
|
+
payload.add_commit(added: added, modified: modified)
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#from_webhook_payload' do
|
29
|
+
let(:attributes) { TxghServer::Webhooks::Gitlab::PushAttributes.from_webhook_payload(payload.to_h) }
|
30
|
+
|
31
|
+
it 'pulls out repo name' do
|
32
|
+
expect(attributes.repo_name).to eq(repo_name)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'pulls out ref' do
|
36
|
+
expect(attributes.ref).to eq("refs/#{ref}")
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'pulls out before sha' do
|
40
|
+
expect(attributes.before).to eq(payload.to_h['before'])
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'pulls out after sha' do
|
44
|
+
expect(attributes.after).to eq(payload.to_h['after'])
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'pulls out added files' do
|
48
|
+
expect(attributes.added_files.to_a).to eq(added)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'pulls out modified files' do
|
52
|
+
expect(attributes.modified_files.to_a).to eq(modified)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'combines all files into one handy array' do
|
56
|
+
expect(attributes.files.sort).to eq((added + modified).sort)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'pulls out the author' do
|
60
|
+
expect(attributes.author).to eq('testuser')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'helpers/gitlab_payload_builder'
|
3
|
+
require 'helpers/standard_txgh_setup'
|
4
|
+
|
5
|
+
describe TxghServer::Webhooks::Gitlab::PushHandler do
|
6
|
+
include StandardTxghSetup
|
7
|
+
|
8
|
+
let(:handler) do
|
9
|
+
TxghServer::Webhooks::Gitlab::PushHandler.new(transifex_project, gitlab_repo, logger, attributes)
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:attributes) do
|
13
|
+
TxghServer::Webhooks::Gitlab::PushAttributes.from_webhook_payload(payload.to_h)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:payload) do
|
17
|
+
GitlabPayloadBuilder.push_payload(gitlab_repo_name, ref)
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:modified_files) do
|
21
|
+
file_sha = 'def456'
|
22
|
+
tx_config.resources.map do |resource|
|
23
|
+
{ path: resource.source_file, sha: file_sha.next! }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:updater) { double(:updater) }
|
28
|
+
|
29
|
+
before(:each) do
|
30
|
+
payload.add_commit(
|
31
|
+
modified: modified_files.map { |f| f[:path] }
|
32
|
+
)
|
33
|
+
|
34
|
+
allow(Txgh::ResourceUpdater).to receive(:new).and_return(updater)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'correctly uploads modified resources to transifex' do
|
38
|
+
tx_config.resources.each do |resource|
|
39
|
+
expect(updater).to(
|
40
|
+
receive(:update_resource) do |resource, categories|
|
41
|
+
expect(resource.project_slug).to eq(project_name)
|
42
|
+
expect(resource.resource_slug).to eq(resource_slug)
|
43
|
+
expect(categories).to eq('author' => 'testuser')
|
44
|
+
end
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
expect(Txgh::GitlabStatus).to(
|
49
|
+
receive(:update).with(transifex_project, gitlab_repo, ref)
|
50
|
+
)
|
51
|
+
|
52
|
+
response = handler.execute
|
53
|
+
expect(response.status).to eq(200)
|
54
|
+
expect(response.body).to eq(true)
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'with an error' do
|
58
|
+
let(:description) { 'An error done occurred, fool' }
|
59
|
+
let(:target_url) { 'http://you-goofed.com' }
|
60
|
+
|
61
|
+
let(:status_params) do
|
62
|
+
{ description: description, target_url: target_url }
|
63
|
+
end
|
64
|
+
|
65
|
+
let(:error_params) { { foo: 'bar' } }
|
66
|
+
|
67
|
+
before(:each) do
|
68
|
+
Txgh.events.subscribe(Txgh::Events::ERROR_CHANNEL) { error_params }
|
69
|
+
Txgh.events.subscribe('gitlab.status.error') { status_params }
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'reports errors and updates the gitlab status' do
|
73
|
+
expect(Txgh::GitlabStatus).to(
|
74
|
+
receive(:error).with(transifex_project, gitlab_repo, ref, status_params)
|
75
|
+
)
|
76
|
+
|
77
|
+
expect(handler).to receive(:should_process?).and_raise(StandardError)
|
78
|
+
handler.execute
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'with a deleted branch' do
|
83
|
+
let(:before) { nil }
|
84
|
+
let(:after) { '0' * 40 }
|
85
|
+
|
86
|
+
let(:payload) do
|
87
|
+
GitlabPayloadBuilder.push_payload(gitlab_repo_name, ref, before, after)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "doesn't upload anything" do
|
91
|
+
expect(updater).to_not receive(:update_resource)
|
92
|
+
expect(gitlab_api).to_not receive(:create_ref)
|
93
|
+
|
94
|
+
response = handler.execute
|
95
|
+
expect(response.status).to eq(200)
|
96
|
+
expect(response.body).to eq(true)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|