txgh-server 3.1.0 → 4.0.0.beta
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 +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
|