pact_broker-client 1.72.0 → 1.74.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/.github/workflows/release_gem.yml +4 -4
- data/.github/workflows/test.yml +5 -5
- data/.github/workflows/trigger_pact_docs_update.yml +1 -1
- data/CHANGELOG.md +21 -0
- data/DEVELOPING.md +17 -0
- data/Gemfile +5 -0
- data/README.md +21 -9
- data/doc/pacts/markdown/Pact Broker Client - Pact Broker.md +1 -2
- data/example/scripts/publish-pact-rake.sh +10 -0
- data/example/scripts/publish-pact.sh +25 -1
- data/example/scripts/publish-provider-contract.sh +2 -1
- data/lib/pact_broker/client/cli/custom_thor.rb +32 -2
- data/lib/pact_broker/client/cli/pact_commands.rb +34 -13
- data/lib/pact_broker/client/cli/thor_unknown_options_monkey_patch.rb +38 -0
- data/lib/pact_broker/client/cli/webhook_commands.rb +1 -1
- data/lib/pact_broker/client/git.rb +20 -3
- data/lib/pact_broker/client/hal/http_client.rb +19 -0
- data/lib/pact_broker/client/merge_pacts.rb +5 -2
- data/lib/pact_broker/client/publish_pacts_the_old_way.rb +1 -1
- data/lib/pact_broker/client/tasks/publication_task.rb +40 -23
- data/lib/pact_broker/client/version.rb +1 -1
- data/script/ci/record-release.sh +2 -2
- data/script/publish-pact.sh +1 -1
- data/script/update-cli-usage-in-readme.rb +7 -0
- data/spec/fixtures/MyConsumer-MyProvider (1).json +37 -0
- data/spec/fixtures/MyConsumer-MyProvider.json +37 -0
- data/spec/fixtures/certificates/ca_cert.pem +19 -0
- data/spec/fixtures/certificates/ca_cert.srl +1 -0
- data/spec/fixtures/certificates/ca_key.pem +28 -0
- data/spec/fixtures/certificates/client_cert.pem +17 -0
- data/spec/fixtures/certificates/key.pem +28 -0
- data/spec/fixtures/certificates/server.csr +15 -0
- data/spec/fixtures/certificates/unsigned_cert.pem +19 -0
- data/spec/fixtures/certificates/unsigned_key.pem +28 -0
- data/spec/integration/can_i_deploy_spec.rb +0 -9
- data/spec/integration/unknown_options_spec.rb +39 -0
- data/spec/lib/pact_broker/client/cli/broker_publish_spec.rb +38 -21
- data/spec/lib/pact_broker/client/cli/custom_thor_spec.rb +27 -0
- data/spec/lib/pact_broker/client/hal/http_client_spec.rb +76 -0
- data/spec/lib/pact_broker/client/merge_pacts_spec.rb +26 -0
- data/spec/lib/pact_broker/client/publish_pacts_the_old_way_spec.rb +1 -3
- data/spec/lib/pact_broker/client/tasks/publication_task_spec.rb +54 -31
- data/spec/pacts/pact_broker_client-pact_broker.json +1 -2
- data/spec/service_providers/publish_pacts_spec.rb +1 -2
- data/spec/support/ssl_server.rb +42 -0
- data/tasks/pact.rake +79 -0
- metadata +30 -3
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
require 'rake/tasklib'
|
|
2
2
|
require 'pact_broker/client/git'
|
|
3
3
|
require 'pact_broker/client/hash_refinements'
|
|
4
|
+
require 'pact_broker/client/string_refinements'
|
|
5
|
+
require "pact_broker/client/error"
|
|
4
6
|
|
|
5
7
|
=begin
|
|
6
8
|
require pact_broker/client/tasks
|
|
@@ -19,57 +21,52 @@ module PactBroker
|
|
|
19
21
|
module Client
|
|
20
22
|
class PublicationTask < ::Rake::TaskLib
|
|
21
23
|
using PactBroker::Client::HashRefinements
|
|
24
|
+
using PactBroker::Client::StringRefinements
|
|
22
25
|
|
|
23
|
-
attr_accessor :pattern, :pact_broker_base_url, :
|
|
24
|
-
attr_reader :auto_detect_version_properties, :
|
|
26
|
+
attr_accessor :pattern, :pact_broker_base_url, :tag, :build_url, :write_method, :tag_with_git_branch, :pact_broker_basic_auth, :pact_broker_token
|
|
27
|
+
attr_reader :auto_detect_version_properties, :build_url
|
|
28
|
+
attr_writer :consumer_version, :branch
|
|
25
29
|
alias_method :tags=, :tag=
|
|
26
30
|
alias_method :tags, :tag
|
|
27
31
|
|
|
28
32
|
def initialize name = nil, &block
|
|
29
33
|
@name = name
|
|
30
34
|
@auto_detect_version_properties = nil
|
|
31
|
-
@version_required = false
|
|
32
35
|
@pattern = 'spec/pacts/*.json'
|
|
33
36
|
@pact_broker_base_url = 'http://pact-broker'
|
|
34
37
|
rake_task &block
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
def auto_detect_version_properties= auto_detect_version_properties
|
|
38
|
-
@version_required = version_required || auto_detect_version_properties
|
|
39
41
|
@auto_detect_version_properties = auto_detect_version_properties
|
|
40
42
|
end
|
|
41
|
-
|
|
42
|
-
def branch= branch
|
|
43
|
-
@version_required = version_required || !!branch
|
|
44
|
-
@branch = branch
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def build_url= build_url
|
|
48
|
-
@version_required = version_required || !!build_url
|
|
49
|
-
@build_url = build_url
|
|
50
|
-
end
|
|
51
|
-
|
|
43
|
+
|
|
52
44
|
private
|
|
53
45
|
|
|
54
|
-
attr_reader :version_required
|
|
55
|
-
|
|
56
46
|
def rake_task &block
|
|
57
47
|
namespace :pact do
|
|
58
48
|
desc "Publish pacts to pact broker"
|
|
59
49
|
task task_name do
|
|
60
50
|
block.call(self)
|
|
51
|
+
validate!
|
|
61
52
|
require 'pact_broker/client/publish_pacts'
|
|
62
53
|
pact_broker_client_options = { write: write_method, token: pact_broker_token }
|
|
63
54
|
pact_broker_client_options[:basic_auth] = pact_broker_basic_auth if pact_broker_basic_auth && pact_broker_basic_auth.any?
|
|
64
55
|
pact_broker_client_options.compact!
|
|
65
|
-
consumer_version_params = { number: consumer_version, branch:
|
|
56
|
+
consumer_version_params = { number: consumer_version, branch: branch, build_url: build_url, tags: all_tags }.compact
|
|
66
57
|
result = PactBroker::Client::PublishPacts.new(pact_broker_base_url, FileList[pattern], consumer_version_params, {}, pact_broker_client_options).call
|
|
67
58
|
$stdout.puts result.message
|
|
68
|
-
raise "One or more pacts failed to be published" unless result.success
|
|
59
|
+
raise PactBroker::Client::Error.new("One or more pacts failed to be published") unless result.success
|
|
69
60
|
end
|
|
70
61
|
end
|
|
71
62
|
end
|
|
72
63
|
|
|
64
|
+
def validate!
|
|
65
|
+
if consumer_version.blank?
|
|
66
|
+
raise PactBroker::Client::Error.new("A consumer version must be provided")
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
73
70
|
def task_name
|
|
74
71
|
@name ? "publish:#{@name}" : "publish"
|
|
75
72
|
end
|
|
@@ -80,11 +77,31 @@ module PactBroker
|
|
|
80
77
|
t.compact.uniq
|
|
81
78
|
end
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
# Attempt to detect the branch automatically, but don't raise an error if the branch can't be found
|
|
81
|
+
# unless the user has explicitly enabled auto_detect_version_properties.
|
|
82
|
+
# This approach is an attempt to include the branch without the user having to explicitly
|
|
83
|
+
# set it, because people tend to not update things.
|
|
84
|
+
def branch
|
|
85
|
+
if @branch.nil? && auto_detect_version_properties != false
|
|
86
|
+
@branch = PactBroker::Client::Git.branch(raise_error: auto_detect_version_properties == true)
|
|
87
|
+
else
|
|
88
|
+
@branch
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def consumer_version
|
|
93
|
+
if @consumer_version.nil? && @auto_detect_version_properties
|
|
94
|
+
@consumer_version = PactBroker::Client::Git.commit(raise_error: true)
|
|
95
|
+
else
|
|
96
|
+
@consumer_version
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def build_url
|
|
101
|
+
if @build_url.nil? && @auto_detect_version_properties
|
|
102
|
+
@build_url = PactBroker::Client::Git.build_url
|
|
86
103
|
else
|
|
87
|
-
|
|
104
|
+
@build_url
|
|
88
105
|
end
|
|
89
106
|
end
|
|
90
107
|
end
|
data/script/ci/record-release.sh
CHANGED
data/script/publish-pact.sh
CHANGED
|
@@ -29,7 +29,7 @@ export PACT_BROKER_TOKEN=${PACT_BROKER_TOKEN:-"localhost"}
|
|
|
29
29
|
# --contract-published
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
bundle exec bin/pact-broker publish
|
|
32
|
+
bundle exec bin/pact-broker publish script/foo-bar.json \
|
|
33
33
|
--consumer-app-version 1.2.26 \
|
|
34
34
|
--auto-detect-version-properties \
|
|
35
35
|
--build-url http://mybuild \
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"consumer": {
|
|
3
|
+
"name": "MyConsumer"
|
|
4
|
+
},
|
|
5
|
+
"interactions": [
|
|
6
|
+
{
|
|
7
|
+
"description": "request",
|
|
8
|
+
"providerStates": [
|
|
9
|
+
{
|
|
10
|
+
"name": "state 2"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"request": {
|
|
14
|
+
"method": "GET",
|
|
15
|
+
"path": "/2"
|
|
16
|
+
},
|
|
17
|
+
"response": {
|
|
18
|
+
"status": 200
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"metadata": {
|
|
23
|
+
"pact-js": {
|
|
24
|
+
"version": "11.0.2"
|
|
25
|
+
},
|
|
26
|
+
"pactRust": {
|
|
27
|
+
"ffi": "0.4.0",
|
|
28
|
+
"models": "1.0.4"
|
|
29
|
+
},
|
|
30
|
+
"pactSpecification": {
|
|
31
|
+
"version": "3.0.0"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"provider": {
|
|
35
|
+
"name": "MyProvider"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"consumer": {
|
|
3
|
+
"name": "MyConsumer"
|
|
4
|
+
},
|
|
5
|
+
"interactions": [
|
|
6
|
+
{
|
|
7
|
+
"description": "request",
|
|
8
|
+
"providerStates": [
|
|
9
|
+
{
|
|
10
|
+
"name": "state 1"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"request": {
|
|
14
|
+
"method": "GET",
|
|
15
|
+
"path": "/1"
|
|
16
|
+
},
|
|
17
|
+
"response": {
|
|
18
|
+
"status": 200
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"metadata": {
|
|
23
|
+
"pact-js": {
|
|
24
|
+
"version": "11.0.2"
|
|
25
|
+
},
|
|
26
|
+
"pactRust": {
|
|
27
|
+
"ffi": "0.4.0",
|
|
28
|
+
"models": "1.0.4"
|
|
29
|
+
},
|
|
30
|
+
"pactSpecification": {
|
|
31
|
+
"version": "3.0.0"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"provider": {
|
|
35
|
+
"name": "MyProvider"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDATCCAemgAwIBAgIUWfQF2Mh+eFd3q+cSVgekpaMTh9MwDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwDzENMAsGA1UEAwwETXlDQTAgFw0yMzA5MTkxMTA2MjZaGA8yMTIzMDgyNjEx
|
|
4
|
+
MDYyNlowDzENMAsGA1UEAwwETXlDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
|
5
|
+
AQoCggEBAK9Qha2OdeFrSCUqiYRUBngNLn8PRGDaKPWmjd+3WOWJNM1RNgFfGpKY
|
|
6
|
+
nxYJp4J6eW7aeQ6o94Q+QOZp+Yxm6thrtvjRbcEafAore4EwC4tjXvoFoy+mKwzm
|
|
7
|
+
njlJw+ha3TsMAqD3GGDLF7uDnmliURRo8TOmJ++Mwss9Uhb5p9LArjWXa3sV8da+
|
|
8
|
+
gsxP2aTgBZfznUhNKDGUfezYa5UEbHQ869rA1PAqL3tOC2M5LTX08C2PlzzLOF5S
|
|
9
|
+
gBzicV1PPDkmkbxKmFV+D8LmkwWNsRhrzZ6TIxYoXIRhziS7JuYOGU7G0+6ZKpIP
|
|
10
|
+
mo7WXSoSrd7GL5PQJzlHKCsTckd4so0CAwEAAaNTMFEwHQYDVR0OBBYEFCeovNXs
|
|
11
|
+
r1mcbprFaLyll+LrBJmQMB8GA1UdIwQYMBaAFCeovNXsr1mcbprFaLyll+LrBJmQ
|
|
12
|
+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAHOsbZ0iDiKiRU8Q
|
|
13
|
+
hIAav056dboPjTK19Q736DUD6oCbTbvecfxMv/wu9LmYGW5jt/DWP6s+jDYhcPpj
|
|
14
|
+
c3U03pPKCnvsG5z60ZgmNSqzyVAVPW17UVdw/ZnkKK/SFxYgYQaF/1g6opS2Zana
|
|
15
|
+
4aBGypqqGoD4KE+DAnRjuuCUpiz3zXwGd86auajY6soMlLNnVXteVa/whW6IZ84x
|
|
16
|
+
w4LISeMGUr+MXw9ye4WhcZYKZ4vwJdUYst2PA0pDuGwBDbGnrYloGm2BSpaHXUUo
|
|
17
|
+
XrwKFFkIxcK63IpAhoceTJpyfjI1BSmItfjEwToOUu6xDBsHLNiH6BKstSxk0DfX
|
|
18
|
+
01PHz2I=
|
|
19
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
494F82D5FE5055D2C9C64941C421085B59521071
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvUIWtjnXha0gl
|
|
3
|
+
KomEVAZ4DS5/D0Rg2ij1po3ft1jliTTNUTYBXxqSmJ8WCaeCenlu2nkOqPeEPkDm
|
|
4
|
+
afmMZurYa7b40W3BGnwKK3uBMAuLY176BaMvpisM5p45ScPoWt07DAKg9xhgyxe7
|
|
5
|
+
g55pYlEUaPEzpifvjMLLPVIW+afSwK41l2t7FfHWvoLMT9mk4AWX851ITSgxlH3s
|
|
6
|
+
2GuVBGx0POvawNTwKi97TgtjOS019PAtj5c8yzheUoAc4nFdTzw5JpG8SphVfg/C
|
|
7
|
+
5pMFjbEYa82ekyMWKFyEYc4kuybmDhlOxtPumSqSD5qO1l0qEq3exi+T0Cc5Rygr
|
|
8
|
+
E3JHeLKNAgMBAAECggEAF2EHQqWB24V2rIYnVT9DUZUobdyiWMF0aYtEK4uuzjAQ
|
|
9
|
+
RjpzQkGQMJvWc0DnAW5wbTOzUHIrTTZkFJYYp6boiziUwPUPduCfnqznySBCxIbZ
|
|
10
|
+
mUFRNBSBHzT4mq6B8qV+D9bChFFkrdvHlsOu8gzLaouyxsQnWo8MlxU0B55UHrWc
|
|
11
|
+
nqIsPKVBeBtiF7c7eyZtpKmYgmWN8hnPzTZ2rtCL/BS3p2+/O+fFJKuul58Yo4t6
|
|
12
|
+
bmMCPN5C6HxNhB6ADHm3lPVU3ap5g3a/4UHqVJ8c2SGKfAx6C1PgbajxiA74qMLS
|
|
13
|
+
YOhMXzc3jSLmakqvSmVhQFJhFt7drbbGtx4oD3+XPQKBgQDj1k7O2A0yJRQPtvQJ
|
|
14
|
+
A1m+H5fmynMnH6XuQuO8WzqCsDsE786EAG6AzY562SMEQrQ0zgpFx0A9ZmECNaOZ
|
|
15
|
+
28OnzcA5xGKQh5dD0ou9lvRHXEavu7fYCrAG+wlQTo1eRHUDOAN4pQPoZ9r3bz1M
|
|
16
|
+
tnGtG3rak4KemAsoX8aSy59ZswKBgQDE/C+eu012vzjyr2J1W0Gdms7fh5CWzMp8
|
|
17
|
+
hCHk+kmLCY4DHIaUv0tT3IXGKebRH+PZObE3zZ5Hx2QXPjFQWsyTkd9D2tRIWHaZ
|
|
18
|
+
ZpKPBLxYJJuBc3YWZM1qC2ZcRyvv1NgtNUFpB5xOGIUL3/QsfcOE25kC7Z21aN+e
|
|
19
|
+
uXSi3CkivwKBgGFHSZLLcKbuaehjx0Jp6dFhj+v8mLolqyVV7gKoOQ0/zZNICLcX
|
|
20
|
+
sBbSrXkKaQcSq/q31m8Aqg8NPXJCEL5KtPlawi5oCWWIXy+YIA4s+9PUNGIoFlDq
|
|
21
|
+
D0qLuOhPAdE0DXn4WpMScd6zKSzolBXC+DpfN09IGEc6x9jPO+vFgR49AoGABPiw
|
|
22
|
+
YvsrK1IMJ+PRQlD5SPb9PZr4RTYJ7jaPfG3sqTumf+Gaa+qgBg/MuIGaN7DsWTEh
|
|
23
|
+
jdz8n6cimYuSRwrjmt3VmqrNLL4+0ARMsptV/Yt++TdmxY3puUFsZevN6hGfGxT6
|
|
24
|
+
/6GXikkIIpKWYQETjCjWpcJFdqyc6C6aCPoxd5UCgYEA1B4AdDgxhZgXhz24sKM7
|
|
25
|
+
aX2aY4glBsEZ7dxaqpqvwmsSshvdfudjuFxo5jjMKV2C9JmwrCGML9O6MvSP03n8
|
|
26
|
+
B3R543JqKqWLTaSROHkcoil+LdIV9w7jrMBildOCHSDXwuM8Pl7YObIdKMq4pVwe
|
|
27
|
+
87n9/ZihlrKGaZ8utMrrGmc=
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICrDCCAZQCFElPgtX+UFXSycZJQcQhCFtZUhBxMA0GCSqGSIb3DQEBCwUAMA8x
|
|
3
|
+
DTALBgNVBAMMBE15Q0EwIBcNMjMwOTE5MTEwNzM1WhgPMjEyMzA4MjYxMTA3MzVa
|
|
4
|
+
MBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
|
5
|
+
AQoCggEBAJj6DF+bu0DhXmkBaC2+CkoqNlsO+LzW9bZnNCQk0Jw99fgCGTLifU3N
|
|
6
|
+
eyAhKgHs+V3G/9ULbMrxYMSQ/psrrXpS7FM9xtA0WZ0VAg7Oi4WEi+wueE0R1GmO
|
|
7
|
+
NMuCVT2JCYd5uDh8+mrWoVqb9L4xIsy0kaV0Nnl+NX1zDvHXUHzfo3T3roaxRbd6
|
|
8
|
+
N92qNPzrj8TviwbapT0bo4GKwTCOO1ewPFGCjsWEeLZ4p2UfbOzW/zjIBEUD8Kqg
|
|
9
|
+
FOht48y9J6XG3Tb61/7neT0xj6E7cn6hGSzuiIM/oZbtuUt72VDgbLbOrS02oHTz
|
|
10
|
+
YmC9tVL35Qvfgzrqw0DEv7zpm/3iG0sCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA
|
|
11
|
+
nndLK/t6+dmoAwg4K7pdo8xqUEDnUx8K7sU2whZvLEUM+mO+jWOe3USHjR3aXYnU
|
|
12
|
+
OjNhN90/TAy5wlIK6U2C36nHyZJUeScxuiaVwErwayE+GgwYmw9R7HVofgcVfTve
|
|
13
|
+
IpjyrT7mDOCMYjkHgZv1dSHQTcc6uclaw7SgywEEjxjCNSJCN+WPjxCdcuno0td8
|
|
14
|
+
i7F6FL7FeOiP1mtQrTo42Tq+knerUc55CbTW4anbQfL+6TFEVCPJKduLHFieGB0k
|
|
15
|
+
BFilUR3JD2t8/f4fIilQ6FrMZpUzKcLbgW9cjts8mxq0zNV+z6lISgKbdxZFQp+2
|
|
16
|
+
fvyYdnoNLP0YeRI6j9x1pg==
|
|
17
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCY+gxfm7tA4V5p
|
|
3
|
+
AWgtvgpKKjZbDvi81vW2ZzQkJNCcPfX4Ahky4n1NzXsgISoB7Pldxv/VC2zK8WDE
|
|
4
|
+
kP6bK616UuxTPcbQNFmdFQIOzouFhIvsLnhNEdRpjjTLglU9iQmHebg4fPpq1qFa
|
|
5
|
+
m/S+MSLMtJGldDZ5fjV9cw7x11B836N0966GsUW3ejfdqjT864/E74sG2qU9G6OB
|
|
6
|
+
isEwjjtXsDxRgo7FhHi2eKdlH2zs1v84yARFA/CqoBTobePMvSelxt02+tf+53k9
|
|
7
|
+
MY+hO3J+oRks7oiDP6GW7blLe9lQ4Gy2zq0tNqB082JgvbVS9+UL34M66sNAxL+8
|
|
8
|
+
6Zv94htLAgMBAAECggEAF2l9Z0yANgfH2S478XQ6Qut+8iSycMQ9SrM0yatQufjJ
|
|
9
|
+
ojFABgefwb6G733j3fOUnoOMN+DNv6l9c9f0/26J2ETEomC8ArVgWagTboyx0bdd
|
|
10
|
+
asIZ60GlTppS/ipuPUKx0KgSR6Lo+FzsyN9Bb7I5bzbba4UDqUhli1OGoACh8tpS
|
|
11
|
+
pyhD58C0nWBCYUjgkB2ilVoguQnnTvYC0VDbGOWK1P8bw0to810mkKTyv7ztifW2
|
|
12
|
+
lHUwTe8vbQk7jY52+crvtgVZWNaXEdma3ivDSDHUjK3WLmPw9MFgVSMVYFLDZUQN
|
|
13
|
+
Btd7PyBSkjeHOzoS5b9l4qnjn2vhObpjrT5PZT6TMQKBgQDI+xrzk351kyqezHuZ
|
|
14
|
+
Bqo5CqEN3BHvwKALh3DA3uxHVaLqOo/yALv86yHgue/9ksaxxDwufAnVvcg5eEEh
|
|
15
|
+
XIsZrfKBIaNV5umqJAkbCbx4hVCX9mE45THv3Nc7XhiHuZZpUHb1i7qcab1lly5Y
|
|
16
|
+
7lFoCd5dCQJUoBf3/9Bw76OjRwKBgQDC2sba56V0dahFxTE3bOIRR2HIYWNfPv0a
|
|
17
|
+
7ejiNSHVHGTLrEfnya5ZcerT0j6QNA2IQcKw5ovPKn2xgjGlfPWgtBAz55r+lfU2
|
|
18
|
+
+/6CRf8v6tu9FdPs7RDHxBuicOGQlQGSAH2+tfcY9ZCB8wcdGYB3v5ko0OFsFdZY
|
|
19
|
+
+fJOIt4h3QKBgByFJanzADsHC0FFmzR38afujjQ9Sn5PQ2bfbWyxNa5ZxKigbtTU
|
|
20
|
+
rdiSNViCij/dmDyZsECYcXzXVZZyLivhygt217bjYx5JilcOjgw8MXaY1Hr8B4ff
|
|
21
|
+
Xlq/Z/uQusJn36RKOtdVYMHZb3r/HSCZkQvGeruRD7eakEwtDRM5rmr5AoGAZFt9
|
|
22
|
+
s90/ED5RDq5DbQJ9ZNzY9fWC0tmETsxd97PZ2wMmvufamPz8+UB86+ALLQZCOf10
|
|
23
|
+
otv7AhYmarhdjZhQghZ7ieAtqhXeGBWtvbcDedCCoF6PqiVnURwmB4IQCwFTr7jl
|
|
24
|
+
CsZ5n7dKWEOtVEWALyzVW3pJv/t3TJhfPfMjaVkCgYAxmC4/jmBCLmQZ3eWbmZHx
|
|
25
|
+
X7N2qAI7Cu2JVi1Wut4WnBgFNynYH+kt67LZSQ9Jf9lHDnlBe5gOTvF5/8UeoTMv
|
|
26
|
+
MGI4R4WJ6ezWV12ugbmKAvzHB/SiJ9U0ph78ibejCxW3gomuDzY1T+xF56kCKXJ0
|
|
27
|
+
uPaEN0rPMT6wMEegJHaE8A==
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
|
2
|
+
MIICWTCCAUECAQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0B
|
|
3
|
+
AQEFAAOCAQ8AMIIBCgKCAQEAmPoMX5u7QOFeaQFoLb4KSio2Ww74vNb1tmc0JCTQ
|
|
4
|
+
nD31+AIZMuJ9Tc17ICEqAez5Xcb/1QtsyvFgxJD+myutelLsUz3G0DRZnRUCDs6L
|
|
5
|
+
hYSL7C54TRHUaY40y4JVPYkJh3m4OHz6atahWpv0vjEizLSRpXQ2eX41fXMO8ddQ
|
|
6
|
+
fN+jdPeuhrFFt3o33ao0/OuPxO+LBtqlPRujgYrBMI47V7A8UYKOxYR4tninZR9s
|
|
7
|
+
7Nb/OMgERQPwqqAU6G3jzL0npcbdNvrX/ud5PTGPoTtyfqEZLO6Igz+hlu25S3vZ
|
|
8
|
+
UOBsts6tLTagdPNiYL21UvflC9+DOurDQMS/vOmb/eIbSwIDAQABoAAwDQYJKoZI
|
|
9
|
+
hvcNAQELBQADggEBAEz74PiDtYCL1XiZV4On0l5jRjBrKTVEAnjEtWgygy9V6U1d
|
|
10
|
+
BYE3AxwsdTUygl/cS2i3g8U2yZGQ1ZAh/qHq0sHB6TDePLmNSEiksP7KOJwXU9vO
|
|
11
|
+
/pCS9qbOYcWucLlQpnHxySpUlcxFWmrl33pMaNCzxxLN1q3eRbNmxoxACI/+vZsX
|
|
12
|
+
M6sm2fhhw6yZkU7D04BDgSwsddW8ApDqbtwbndyv/ZL13xjG9yow8noSF7uxGQnn
|
|
13
|
+
UnVFMGVGp3I6M/E3VFIwRvUYA1MJeqh9tLIEItlGmqkrQmxOnMvXKzJnQ9nK1KBq
|
|
14
|
+
2gaBXdvbabkXKAHnV0tYbDmZXvTO+7Ci7wgapNU=
|
|
15
|
+
-----END CERTIFICATE REQUEST-----
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDCzCCAfOgAwIBAgIUN2/oKOttkdOretzyqc+Zv8IqpT8wDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTIzMDkxOTExMjEzM1oYDzIxMjMw
|
|
4
|
+
ODI2MTEyMTMzWjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB
|
|
5
|
+
AQUAA4IBDwAwggEKAoIBAQD30tqrKrHa0p1RsGlDc7lUUS/ZF2/7ZtNWe0gRuuum
|
|
6
|
+
6l/X5H8F+Ay1cO8DirGx3s/LPpj7DwvjjKo2eE+wcO2v/R5S+uPL4Bm0o+bPGwZP
|
|
7
|
+
vw+XMMgBZUsNSMER6DUliP5bHQ/8TCXWpfP3rLJ9QitOAX/rD9bVrOs3g3I0uf2A
|
|
8
|
+
RZ0O40//5q9fiXRC3PAfPbX7XdyI9Mr3duwmAW+nK2Gbd98ut27PkO0Fze27Xtk2
|
|
9
|
+
EdIh3u5pajK/ub8rf5vyfk+c/6pcN9kMakPtlgIR/eqzTkfRWyIpMoFn/X8VumUQ
|
|
10
|
+
X4ylj1SfSs+K47GBjrqknEh1BYlblW8WKg5cUjx/r/b/AgMBAAGjUzBRMB0GA1Ud
|
|
11
|
+
DgQWBBQUEefafoC0qDhzThhEBMMwr/C5FTAfBgNVHSMEGDAWgBQUEefafoC0qDhz
|
|
12
|
+
ThhEBMMwr/C5FTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDn
|
|
13
|
+
dfkjZtgSdbsEPhUMfUlhZWXqxtLDQBoxM7xF+i5WC6w3yHpN/teA8SqA8CYiPb9d
|
|
14
|
+
5rNfnmJLP4PeyfTu6Pc0EJpQsmK19i9z0FPrA7bqPIzgF4U4R1eQ5mvTzlNoGkp3
|
|
15
|
+
1gnjDdwtTq0RFfuvHKm5EqECKX+hBEJKMiviEH/mGqQuoycpKifZ5WRTQonnWjGe
|
|
16
|
+
BVkhdn4Psp83EWdnD/yQbo1XEbYRtsaPM4Dozr6uKbeq9Zbu+xDO9Uw4mTE/WSfb
|
|
17
|
+
t4AXqOLDRafOP9w3twlFH2ZQxqpSaqXo8z1RkS9jtCm69JcDnsePKqkhesToMZAz
|
|
18
|
+
2cylIQmuuNIRGLmCRsVK
|
|
19
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD30tqrKrHa0p1R
|
|
3
|
+
sGlDc7lUUS/ZF2/7ZtNWe0gRuuum6l/X5H8F+Ay1cO8DirGx3s/LPpj7DwvjjKo2
|
|
4
|
+
eE+wcO2v/R5S+uPL4Bm0o+bPGwZPvw+XMMgBZUsNSMER6DUliP5bHQ/8TCXWpfP3
|
|
5
|
+
rLJ9QitOAX/rD9bVrOs3g3I0uf2ARZ0O40//5q9fiXRC3PAfPbX7XdyI9Mr3duwm
|
|
6
|
+
AW+nK2Gbd98ut27PkO0Fze27Xtk2EdIh3u5pajK/ub8rf5vyfk+c/6pcN9kMakPt
|
|
7
|
+
lgIR/eqzTkfRWyIpMoFn/X8VumUQX4ylj1SfSs+K47GBjrqknEh1BYlblW8WKg5c
|
|
8
|
+
Ujx/r/b/AgMBAAECggEAR4aYzBwndvOgqioTR3+H9tjzyWFlVZbo2iX8t/lN+D/e
|
|
9
|
+
562wJ6Xe7SMqKMiH3sFjEdMATj2afdNkcRIqVc9SGqAgd2yoAHiukp9Xh2DSYoPP
|
|
10
|
+
WSCgKR72GWBtMODnLe0rFFr/+R51MU12a35xiYtmej4ekFZi+ArPXJdYh/VCQBnG
|
|
11
|
+
BGF+EnUJqCAOXLz9zG3FoYVBWu071vEnpBtfblbHYfY2/o5CSoORkxcput6XDHxO
|
|
12
|
+
7pOXN7IRt7DJZ0goda3OwZQ9suKyTLcOxa8cA+DteVP6cvh4u2l+ZMxUIYK5B1eh
|
|
13
|
+
VAmJkIbcbAaz/SxyO9E2gWraz+pu6ArOGY/0krcBmQKBgQD9BlVtx7QTVzu+nLzF
|
|
14
|
+
2++cB0LTsTD9T9rlMfIuQMBIOywmsivyvUDr9SjOPqICQUIRufHKqCgHs4TH7Ifs
|
|
15
|
+
4AxyUEwQMG4xuYh3nU5eZlpUEjzUWbbe7o0NjhaJ4ZlUBvzHBcgptUlKTwvwamMs
|
|
16
|
+
pnzQxWlFXFuh+pxPPdSXZVmWJQKBgQD6vN0pO/xc3bAqHSCavX95NBjUhFvkAsoo
|
|
17
|
+
T8tfv2qoAN8RhI2/N8prix6tJk3AdhzdLmmMktv3MBDXd3cgLgmXQTYHIijWXPlF
|
|
18
|
+
/WXWmZXK0E9fiDjfXI9eB7E237fYGOaSobOhLOLoHcuL0kndps67QP2BhtXhYB88
|
|
19
|
+
1We7LoJVUwKBgQCnF1qtH5d0ukPTEdC73Q0z/buM7tPKRMTqXHxxPQN9782tVDYf
|
|
20
|
+
nAlWiVTENqpoUM4fxKq/SSL+SvfhyvrMW/z8NLi2bDUpEzviufg58N+v60dOeFyC
|
|
21
|
+
hgiSLgYGUfweeGrPx6qymGxo7SCWSLtrjhqZB/UIAADnTAeTcOKGhECQHQKBgAlM
|
|
22
|
+
A29J+BuBZMzK87CJIjbeRaVrmvSjXdeMzd+o+01ratn9bjwO14SRTfvhlbRzLLLO
|
|
23
|
+
y78YmutZbuZuWY5p5pUjJ9uv2o/INr3vnV0NqM4yVx8Vr/YoOnCkHGAKf4iVs8bw
|
|
24
|
+
E/b/8RHmOOvgSjjbvIKY8E1jMH8Az2e0CfqYyOBdAoGAOlhTefyBGgAWFHqH/l4p
|
|
25
|
+
ThbWupIMsw1ZXlArwBnTfsUFuz0Yq7B+0tqrV8lhS3P4/0jI2yWnzhluDk62clwz
|
|
26
|
+
Xg187V85Ylagshsjv60mP5qBEF4N7Nf5fP2w6+GjMU+YiHEBsgGGt+2jPgKeCGQW
|
|
27
|
+
IlV3ym59oL+wGyN9OK3z+aw=
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
@@ -18,15 +18,6 @@ describe "pact-broker can-i-deploy", skip_windows: true do
|
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
context "when the pacticipants can't be deployed" do
|
|
22
|
-
subject { `bundle exec bin/pact-broker can-i-deploy --pacticipant Wiffle --version 1.2.3 --pacticipant Meep --version 4.5.6 --broker-base-url http://localhost:5000` }
|
|
23
|
-
|
|
24
|
-
it "returns an error exit code" do
|
|
25
|
-
subject
|
|
26
|
-
expect($?.exitstatus).to_not eq 0
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
21
|
after(:all) do
|
|
31
22
|
Process.kill 'KILL', @pipe.pid
|
|
32
23
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require "open3"
|
|
2
|
+
require "pact_broker/client/cli/broker"
|
|
3
|
+
|
|
4
|
+
# This is not the ideal way to write a test, but I tried to write it with an in memory invocation,
|
|
5
|
+
# and I couldn't get the capture to work, and it became super complicated.
|
|
6
|
+
|
|
7
|
+
RSpec.describe "using unknown options", skip_windows: true do
|
|
8
|
+
let(:unknown_switches_text) { "Unknown switches" }
|
|
9
|
+
let(:warning_text) { "This is a warning"}
|
|
10
|
+
let(:command) { "bundle exec bin/pact-broker can-i-deploy --pacticipant Foo --foo --broker-base-url http://example.org" }
|
|
11
|
+
|
|
12
|
+
it "prints an 'unknown switches' warning to stderr and also includes the normal output of the command" do
|
|
13
|
+
stderr_lines = nil
|
|
14
|
+
|
|
15
|
+
Open3.popen3(command) do |stdin, stdout, stderr, thread|
|
|
16
|
+
stderr_lines = stderr.readlines
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
expect(stderr_lines.join("\n")).to include(unknown_switches_text)
|
|
20
|
+
expect(stderr_lines.join("\n")).to include(warning_text)
|
|
21
|
+
|
|
22
|
+
expect(stderr_lines.size).to be > 2
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
context "with PACT_BROKER_ERROR_ON_UNKNOWN_OPTION=true" do
|
|
27
|
+
it "prints an 'unknown switches' message to stderr and does NOT include the normal output of the command as it exits straight after" do
|
|
28
|
+
stderr_lines = nil
|
|
29
|
+
|
|
30
|
+
Open3.popen3({ "PACT_BROKER_ERROR_ON_UNKNOWN_OPTION" => "true" }, command) do |stdin, stdout, stderr, thread|
|
|
31
|
+
stderr_lines = stderr.readlines
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
expect(stderr_lines.first).to include(unknown_switches_text)
|
|
35
|
+
expect(stderr_lines.join("\n")).to_not include(warning_text)
|
|
36
|
+
expect(stderr_lines.size).to eq 1
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -4,10 +4,12 @@ require 'pact_broker/client/git'
|
|
|
4
4
|
|
|
5
5
|
module PactBroker::Client::CLI
|
|
6
6
|
describe Broker do
|
|
7
|
-
describe
|
|
7
|
+
describe '.broker' do
|
|
8
8
|
before do
|
|
9
9
|
allow(PactBroker::Client::PublishPacts).to receive(:call).and_return(result)
|
|
10
|
-
allow(PactBroker::Client::Git).to receive(:branch).and_return(
|
|
10
|
+
allow(PactBroker::Client::Git).to receive(:branch).and_return('bar')
|
|
11
|
+
allow(PactBroker::Client::Git).to receive(:commit).and_return('6.6.6')
|
|
12
|
+
allow(PactBroker::Client::Git).to receive(:build_url).and_return('build_url')
|
|
11
13
|
subject.options = OpenStruct.new(minimum_valid_options)
|
|
12
14
|
allow($stdout).to receive(:puts)
|
|
13
15
|
end
|
|
@@ -30,7 +32,7 @@ module PactBroker::Client::CLI
|
|
|
30
32
|
expect(PactBroker::Client::PublishPacts).to receive(:call).with(
|
|
31
33
|
"http://pact-broker",
|
|
32
34
|
["spec/support/cli_test_pacts/foo.json"],
|
|
33
|
-
{ number: "1.2.3", tags: []
|
|
35
|
+
{ number: "1.2.3", tags: [] },
|
|
34
36
|
{},
|
|
35
37
|
{ pact_broker_base_url: 'http://pact-broker' }
|
|
36
38
|
)
|
|
@@ -151,7 +153,7 @@ module PactBroker::Client::CLI
|
|
|
151
153
|
expect(PactBroker::Client::PublishPacts).to receive(:call).with(
|
|
152
154
|
anything,
|
|
153
155
|
anything,
|
|
154
|
-
hash_including(branch: "main"
|
|
156
|
+
hash_including(branch: "main"),
|
|
155
157
|
anything,
|
|
156
158
|
anything
|
|
157
159
|
)
|
|
@@ -159,50 +161,55 @@ module PactBroker::Client::CLI
|
|
|
159
161
|
end
|
|
160
162
|
end
|
|
161
163
|
|
|
162
|
-
context "with --auto-detect-version-properties
|
|
164
|
+
context "with --auto-detect-version-properties specified" do
|
|
163
165
|
before do
|
|
164
166
|
subject.options = OpenStruct.new(
|
|
165
|
-
minimum_valid_options.merge(auto_detect_version_properties: true)
|
|
167
|
+
minimum_valid_options.merge(auto_detect_version_properties: true, consumer_app_version: nil)
|
|
166
168
|
)
|
|
167
|
-
allow(subject).to receive(:explict_auto_detect_version_properties).and_return(false)
|
|
168
169
|
end
|
|
169
170
|
|
|
170
171
|
it "determines the git branch name" do
|
|
171
|
-
expect(PactBroker::Client::Git).to receive(:branch).with(raise_error:
|
|
172
|
+
expect(PactBroker::Client::Git).to receive(:branch).with(raise_error: true)
|
|
172
173
|
invoke_broker
|
|
173
174
|
end
|
|
174
175
|
|
|
175
|
-
it "passes in the auto detected branch option
|
|
176
|
+
it "passes in the auto detected branch option" do
|
|
176
177
|
expect(PactBroker::Client::PublishPacts).to receive(:call).with(
|
|
177
178
|
anything,
|
|
178
179
|
anything,
|
|
179
|
-
hash_including(branch: "bar"
|
|
180
|
+
hash_including(branch: "bar"),
|
|
180
181
|
anything,
|
|
181
182
|
anything
|
|
182
183
|
)
|
|
183
184
|
invoke_broker
|
|
184
185
|
end
|
|
185
|
-
end
|
|
186
186
|
|
|
187
|
+
it 'determines the commit sha' do
|
|
188
|
+
expect(PactBroker::Client::Git).to receive(:commit).with(raise_error: true)
|
|
189
|
+
invoke_broker
|
|
190
|
+
end
|
|
187
191
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
+
it 'passes in the auto detected commit sha option' do
|
|
193
|
+
expect(PactBroker::Client::PublishPacts).to receive(:call).with(
|
|
194
|
+
anything,
|
|
195
|
+
anything,
|
|
196
|
+
hash_including(number: '6.6.6'),
|
|
197
|
+
anything,
|
|
198
|
+
anything
|
|
192
199
|
)
|
|
193
|
-
|
|
200
|
+
invoke_broker
|
|
194
201
|
end
|
|
195
202
|
|
|
196
|
-
it
|
|
197
|
-
expect(PactBroker::Client::Git).to receive(:
|
|
203
|
+
it 'determines the build URL' do
|
|
204
|
+
expect(PactBroker::Client::Git).to receive(:build_url)
|
|
198
205
|
invoke_broker
|
|
199
206
|
end
|
|
200
207
|
|
|
201
|
-
it
|
|
208
|
+
it 'passes in the auto detected build URL' do
|
|
202
209
|
expect(PactBroker::Client::PublishPacts).to receive(:call).with(
|
|
203
210
|
anything,
|
|
204
211
|
anything,
|
|
205
|
-
hash_including(
|
|
212
|
+
hash_including(build_url: 'build_url'),
|
|
206
213
|
anything,
|
|
207
214
|
anything
|
|
208
215
|
)
|
|
@@ -220,7 +227,7 @@ module PactBroker::Client::CLI
|
|
|
220
227
|
expect(PactBroker::Client::PublishPacts).to receive(:call).with(
|
|
221
228
|
anything,
|
|
222
229
|
anything,
|
|
223
|
-
hash_including(branch: "specified-branch"
|
|
230
|
+
hash_including(branch: "specified-branch"),
|
|
224
231
|
anything,
|
|
225
232
|
anything
|
|
226
233
|
)
|
|
@@ -248,6 +255,16 @@ module PactBroker::Client::CLI
|
|
|
248
255
|
end
|
|
249
256
|
end
|
|
250
257
|
|
|
258
|
+
context "with no consumer_app_version" do
|
|
259
|
+
before do
|
|
260
|
+
subject.options.consumer_app_version = nil
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
it "raises an error" do
|
|
264
|
+
expect { invoke_broker }.to raise_error ::Thor::RequiredArgumentMissingError, /--consumer-app-version/
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
251
268
|
context "with basic auth options specified" do
|
|
252
269
|
before do
|
|
253
270
|
subject.options = OpenStruct.new(
|
|
@@ -7,6 +7,10 @@ module PactBroker::Client::CLI
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
class TestThor < CustomThor
|
|
10
|
+
def self.exit_on_failure?
|
|
11
|
+
false
|
|
12
|
+
end
|
|
13
|
+
|
|
10
14
|
desc 'ARGUMENT', 'This is the description'
|
|
11
15
|
def test_default(argument)
|
|
12
16
|
Delegate.call(argument: argument)
|
|
@@ -96,6 +100,29 @@ module PactBroker::Client::CLI
|
|
|
96
100
|
TestThor.start(%w{test_pact_broker_client_options})
|
|
97
101
|
end
|
|
98
102
|
|
|
103
|
+
describe "when someone copy pastes from Word and uses an em dash instead of a normal dash" do
|
|
104
|
+
before do
|
|
105
|
+
allow(TestThor).to receive(:exit_with_error_code)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "exits with an error message" do
|
|
109
|
+
expect($stdout).to receive(:puts).with(/contains an em dash/)
|
|
110
|
+
expect(TestThor).to receive(:exit_with_error_code)
|
|
111
|
+
TestThor.start(["test_default", "\u2014\u2014bar"])
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
describe ".handle_help" do
|
|
116
|
+
context "when the last argument is --help or -h" do
|
|
117
|
+
it "turns it into the form that Thor expects, which is a really odd one" do
|
|
118
|
+
expect(TestThor.handle_help(["foo", "--help"])).to eq ["help", "foo"]
|
|
119
|
+
expect(TestThor.handle_help(["foo", "-h"])).to eq ["help", "foo"]
|
|
120
|
+
expect(TestThor.handle_help(["-h"])).to eq ["help"]
|
|
121
|
+
expect(TestThor.handle_help(["--help"])).to eq ["help"]
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
99
126
|
describe ".turn_muliple_tag_options_into_array" do
|
|
100
127
|
it "turns '--tag foo --tag bar' into '--tag foo bar'" do
|
|
101
128
|
input = %w{--ignore this --tag foo --tag bar --wiffle --that}
|