pact_broker-client 1.44.0 → 1.45.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9a0a2b003221c85dee29fcab0f035344c961a676faaa63c9eb7a86837726471
4
- data.tar.gz: 0356350e5894b59fde846079ed48dee78f494de755728f5c91a01a9f6df25594
3
+ metadata.gz: 99a06a67fbe9da6f970649c5159443669ed9ce419911e6178594944467255dd0
4
+ data.tar.gz: c45dcfa2fd158febe01b9094e2125b4a1637c716da3a6d11d3bd13a8ce19867c
5
5
  SHA512:
6
- metadata.gz: 14ebf92314a784825a3788d5fb9e717e6b545cc2273c863095a3a43a679b24491df1e8cc8b810e4aa8a77d42cd004bcb79e76beff954d386a54f39fc00692ad7
7
- data.tar.gz: 965f255b44bc7b9ca1a1bbc85c28a692167b1b08ac1e16c92d0751c8171b7d805a224cbcba7337ecaaa42f3cf85adcc1b53158318c711bf9f3af53828e9ca939
6
+ metadata.gz: 6da2ec04fc73a54ae53bebc62ddb5ddfe1fe1db17b1f94d22a3e195edfb756ad6330e9a99ebfeb1a6f5d20be71c92df4c16c0a808a409623b9600fb59e2e6385
7
+ data.tar.gz: c714b39a69e0f96ffccabe9b6bc3097c0401a6c1931a0de89e57eae7c1e0c04ef5133e1c3d124df49b2dd294bdd90fe2415baeba365e1bf44fc40b45b4602164
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ <a name="v1.45.0"></a>
2
+ ### v1.45.0 (2021-06-16)
3
+
4
+ #### Features
5
+
6
+ * **can-i-deploy**
7
+ * allow dry-run to be enabled by setting ACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true ([0562436](/../../commit/0562436))
8
+ * add --dry-run option ([9d90c79](/../../commit/9d90c79))
9
+
10
+ * add record-support-ended (feature toggled off) ([8f6b593](/../../commit/8f6b593))
11
+ * update record-undeployment (feature toggled off) ([0c0dd15](/../../commit/0c0dd15))
12
+ * update record-undeployment (feature toggled off) ([93046d5](/../../commit/93046d5))
13
+
1
14
  <a name="v1.44.0"></a>
2
15
  ### v1.44.0 (2021-06-09)
3
16
 
data/README.md CHANGED
@@ -84,7 +84,8 @@ Options:
84
84
  # The pacticipant version. Must be entered after the --pacticipant that it relates to.
85
85
  [--ignore=IGNORE]
86
86
  # The pacticipant name to ignore. Use once for each pacticipant being ignored.
87
- A specific version can be ignored by also specifying a --version after the pacticipant name option.
87
+ A specific version can be ignored by also specifying a --version after the
88
+ pacticipant name option.
88
89
  -l, [--latest=[TAG]]
89
90
  # Use the latest pacticipant version. Optionally specify a TAG to use the
90
91
  latest version with the specified tag.
@@ -103,6 +104,9 @@ Options:
103
104
  # The time between retries in seconds. Use in conjuction with --retry-while-unknown
104
105
 
105
106
  # Default: 10
107
+ [--dry-run], [--no-dry-run]
108
+ # When enabled, always exits process with a success code. Can also be enabled by setting
109
+ the environment variable PACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true.
106
110
  -b, --broker-base-url=BROKER_BASE_URL
107
111
  # The base URL of the Pact Broker
108
112
  -u, [--broker-username=BROKER_USERNAME]
@@ -113,14 +117,6 @@ Options:
113
117
  # Pact Broker bearer token
114
118
  -v, [--verbose], [--no-verbose]
115
119
  # Verbose output. Default: false
116
-
117
- Description:
118
- Returns exit code 0 or 1, indicating whether or not the specified application (pacticipant) versions are
119
- compatible (ie. safe to deploy). Prints out the relevant pact/verification details, indicating any
120
- missing or failed verification results.
121
-
122
- The environment variables PACT_BROKER_BASE_URL, PACT_BROKER_USERNAME and PACT_BROKER_PASSWORD may be used
123
- instead of their respective command line options.
124
120
  ```
125
121
 
126
122
  Returns exit code 0 or 1, indicating whether or not the specified application (pacticipant) versions are compatible (ie. safe to deploy). Prints out the relevant pact/verification details, indicating any missing or failed verification results.
@@ -65,6 +65,9 @@ module PactBroker
65
65
  { error: error_hash }.to_json
66
66
  end
67
67
 
68
+ def error_message_as_json(message)
69
+ { error: { message: message } }.to_json
70
+ end
68
71
 
69
72
  def text_error_message(e, include_backtrace)
70
73
  maybe_backtrace = (include_backtrace ? "\n" + e.backtrace.join("\n") : "")
@@ -33,9 +33,9 @@ module PactBroker
33
33
  def call
34
34
  create_result(fetch_matrix_with_retries)
35
35
  rescue PactBroker::Client::Error => e
36
- Result.new(false, Term::ANSIColor.red(e.message))
36
+ Result.new(dry_run_or_false, for_dry_run(Term::ANSIColor.red(e.message)))
37
37
  rescue StandardError => e
38
- Result.new(false, "Error retrieving matrix. #{e.class} - #{e.message}\n#{e.backtrace.join("\n")}")
38
+ Result.new(dry_run_or_false, for_dry_run(Term::ANSIColor.red("Error retrieving matrix. #{e.class} - #{e.message}") + "\n#{e.backtrace.join("\n")}"))
39
39
  end
40
40
 
41
41
  private
@@ -46,14 +46,15 @@ module PactBroker
46
46
  if matrix.deployable?
47
47
  Result.new(true, success_message(matrix))
48
48
  else
49
- Result.new(false, failure_message(matrix))
49
+ Result.new(dry_run_or_false, failure_message(matrix))
50
50
  end
51
51
  end
52
52
 
53
53
  def success_message(matrix)
54
54
  message = format_matrix(matrix)
55
55
  if format != 'json'
56
- message = warning(matrix) + Term::ANSIColor.green('Computer says yes \o/ ') + message + "\n\n" + notice_or_reason(matrix, :green)
56
+ message = warning(matrix) + computer_says(true) + message + "\n\n" + notice_or_reason(matrix, :green)
57
+ message = for_dry_run(message)
57
58
  end
58
59
  message
59
60
  end
@@ -61,11 +62,28 @@ module PactBroker
61
62
  def failure_message(matrix)
62
63
  message = format_matrix(matrix)
63
64
  if format != 'json'
64
- message = warning(matrix) + Term::ANSIColor.red('Computer says no ¯\_(ツ)_/¯ ') + message + "\n\n" + notice_or_reason(matrix, :red)
65
+ message = warning(matrix) + computer_says(false) + message + "\n\n" + notice_or_reason(matrix, :red)
66
+ message = for_dry_run(message)
65
67
  end
66
68
  message
67
69
  end
68
70
 
71
+ def computer_says(success)
72
+ if success
73
+ if dry_run?
74
+ "Computer says yes \\o/ (and maybe you don't need to enable dry run)"
75
+ else
76
+ Term::ANSIColor.green('Computer says yes \o/ ')
77
+ end
78
+ else
79
+ if dry_run?
80
+ "Computer says no ¯\\_(ツ)_/¯ (but you're ignoring this by enabling dry run)"
81
+ else
82
+ Term::ANSIColor.red("Computer says no ¯\_(ツ)_/¯")
83
+ end
84
+ end
85
+ end
86
+
69
87
  def notice_or_reason(matrix, reason_color)
70
88
  if matrix.notices
71
89
  PactBroker::Client::ColorizeNotices.call(matrix.notices).join("\n")
@@ -114,6 +132,23 @@ module PactBroker
114
132
  options[:retry_while_unknown] > 0
115
133
  end
116
134
 
135
+ def dry_run?
136
+ options[:dry_run]
137
+ end
138
+
139
+ def dry_run_or_false
140
+ dry_run? || false
141
+ end
142
+
143
+ def for_dry_run(lines)
144
+ if dry_run?
145
+ prefix = Term::ANSIColor.yellow("[dry-run] ")
146
+ lines.split("\n").collect { |line| prefix + Term::ANSIColor.uncolor(line) }.join("\n") + "\n" + prefix + "\n" + prefix + Term::ANSIColor.green("Dry run enabled - ignoring any failures")
147
+ else
148
+ lines
149
+ end
150
+ end
151
+
117
152
  def retry_options
118
153
  {
119
154
  condition: lambda { |matrix| !matrix.any_unknown? },
@@ -37,6 +37,7 @@ module PactBroker
37
37
  method_option :retry_interval, banner: 'SECONDS', type: :numeric, default: 10, required: false, desc: "The time between retries in seconds. Use in conjuction with --retry-while-unknown"
38
38
  # Allow limit to be set manually until https://github.com/pact-foundation/pact_broker-client/issues/53 is fixed
39
39
  method_option :limit, hide: true
40
+ method_option :dry_run, type: :boolean, default: false, desc: "When dry-run is enabled, always exit process with a success code. Can also be enabled by setting the environment variable PACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true."
40
41
  shared_authentication_options
41
42
 
42
43
  def can_i_deploy(*ignored_but_necessary)
@@ -51,7 +52,8 @@ module PactBroker
51
52
  []
52
53
  end
53
54
  validate_can_i_deploy_selectors(selectors)
54
- can_i_deploy_options = { output: options.output, retry_while_unknown: options.retry_while_unknown, retry_interval: options.retry_interval }
55
+ dry_run = options.dry_run || ENV["PACT_BROKER_CAN_I_DEPLOY_DRY_RUN"] == "true"
56
+ can_i_deploy_options = { output: options.output, retry_while_unknown: options.retry_while_unknown, retry_interval: options.retry_interval, dry_run: dry_run }
55
57
  result = CanIDeploy.call(options.broker_base_url, selectors, { to_tag: options.to, to_environment: options.to_environment, limit: options.limit, ignore_selectors: ignore_selectors }, can_i_deploy_options, pact_broker_client_options)
56
58
  $stdout.puts result.message
57
59
  $stdout.flush
@@ -2,11 +2,15 @@ module PactBroker
2
2
  module Client
3
3
  module CLI
4
4
  module DeploymentCommands
5
- HELP_URL = "https://docs.pact.io/pact_broker/recording_deployments_and_releases/"
5
+ RECORD_DEPLOYMENT_HELP_URL = "https://docs.pact.io/go/record-deployment"
6
+ RECORD_UNDEPLOYMENT_HELP_URL = "https://docs.pact.io/go/record-undeployment"
7
+ RECORD_RELEASE_HELP_URL = "https://docs.pact.io/go/record-release"
8
+ RECORD_SUPPORT_ENDED_HELP_URL = "https://docs.pact.io/go/record-support-ended"
9
+
6
10
 
7
11
  def self.included(thor)
8
12
  thor.class_eval do
9
- desc "record-deployment", "Record deployment of a pacticipant version to an environment. See #{HELP_URL} for more information."
13
+ desc "record-deployment", "Record deployment of a pacticipant version to an environment. See #{RECORD_DEPLOYMENT_HELP_URL} for more information."
10
14
  method_option :pacticipant, required: true, aliases: "-a", desc: "The name of the pacticipant that was deployed."
11
15
  method_option :version, required: true, aliases: "-e", desc: "The pacticipant version number that was deployed."
12
16
  method_option :environment, required: true, desc: "The name of the environment that the pacticipant version was deployed to."
@@ -24,8 +28,8 @@ module PactBroker
24
28
  execute_deployment_command(params, "RecordDeployment")
25
29
  end
26
30
 
27
- desc "record-undeployment", "Record undeployment of a pacticipant version from an environment."
28
- long_desc "Note that use of this command is not required if you are deploying over a previous version, as record-deployment will handle that scenario for you. This command is only required if you are permanently removing an application instance from an environment."
31
+ desc "record-undeployment", "Record undeployment of a pacticipant from an environment."
32
+ long_desc "Note that use of this command is only required if you are permanently removing an application instance from an environment. It is not required if you are deploying over a previous version, as record-deployment will automatically mark the previously deployed version as undeployed for you. See #{RECORD_UNDEPLOYMENT_HELP_URL} for more information."
29
33
  method_option :pacticipant, required: true, aliases: "-a", desc: "The name of the pacticipant that was undeployed."
30
34
  method_option :environment, required: true, desc: "The name of the environment that the pacticipant version was undeployed from."
31
35
  method_option :target, default: nil, required: false, desc: "Optional. The target that the application is being undeployed from - a logical identifer required to differentiate deployments when there are multiple instances of the same application in an environment."
@@ -41,7 +45,7 @@ module PactBroker
41
45
  execute_deployment_command(params, "RecordUndeployment")
42
46
  end
43
47
 
44
- desc "record-release", "Record release of a pacticipant version to an environment. See See #{HELP_URL} for more information."
48
+ desc "record-release", "Record release of a pacticipant version to an environment. See See #{RECORD_RELEASE_HELP_URL} for more information."
45
49
  method_option :pacticipant, required: true, aliases: "-a", desc: "The name of the pacticipant that was released."
46
50
  method_option :version, required: true, aliases: "-e", desc: "The pacticipant version number that was released."
47
51
  method_option :environment, required: true, desc: "The name of the environment that the pacticipant version was released to."
@@ -57,6 +61,22 @@ module PactBroker
57
61
  execute_deployment_command(params, "RecordRelease")
58
62
  end
59
63
 
64
+ desc "record-support-ended", "Record the end of support for a pacticipant version in an environment. See #{RECORD_SUPPORT_ENDED_HELP_URL} for more information."
65
+ method_option :pacticipant, required: true, aliases: "-a", desc: "The name of the pacticipant."
66
+ method_option :version, required: true, aliases: "-e", desc: "The pacticipant version number for which support is ended."
67
+ method_option :environment, required: true, desc: "The name of the environment in which the support is ended."
68
+ output_option_json_or_text
69
+ shared_authentication_options
70
+
71
+ def record_support_ended
72
+ params = {
73
+ pacticipant_name: options.pacticipant,
74
+ version_number: options.version,
75
+ environment_name: options.environment
76
+ }
77
+ execute_deployment_command(params, "RecordSupportEnded")
78
+ end
79
+
60
80
  no_commands do
61
81
  def execute_deployment_command(params, command_class_name)
62
82
  require 'pact_broker/client/deployments'
@@ -1,4 +1,4 @@
1
- require 'pact_broker/client/deployments/record_deployment'
2
- require 'pact_broker/client/deployments/record_release'
3
- require 'pact_broker/client/deployments/record_undeployment'
4
-
1
+ require "pact_broker/client/deployments/record_deployment"
2
+ require "pact_broker/client/deployments/record_release"
3
+ require "pact_broker/client/deployments/record_undeployment"
4
+ require "pact_broker/client/deployments/record_support_ended"
@@ -0,0 +1,103 @@
1
+ require 'pact_broker/client/base_command'
2
+
3
+ module PactBroker
4
+ module Client
5
+ module Deployments
6
+ class RecordSupportEnded < PactBroker::Client::BaseCommand
7
+ def initialize(params, options, pact_broker_client_options)
8
+ super
9
+ @pacticipant_name = params.fetch(:pacticipant_name)
10
+ @environment_name = params.fetch(:environment_name)
11
+ @version_number = params.fetch(:version_number)
12
+ end
13
+
14
+ private
15
+
16
+ def do_call
17
+ if unsupported_versions_resources.empty?
18
+ PactBroker::Client::CommandResult.new(false, error_result_message)
19
+ else
20
+ PactBroker::Client::CommandResult.new(unsupported_versions_resources.all?(&:success?), result_message)
21
+ end
22
+ end
23
+
24
+ attr_reader :pacticipant_name, :environment_name, :version_number
25
+
26
+ def currently_supported_versions_link
27
+ environment_resource._link("pb:currently-supported-versions") or raise PactBroker::Client::Error.new(not_supported_message)
28
+ end
29
+
30
+ def currently_supported_version_entities_for_pacticipant_version
31
+ @deployed_version_links ||= currently_supported_versions_link.get!(pacticipant: pacticipant_name, version: version_number).embedded_entities!("releasedVersions")
32
+ end
33
+
34
+ def unsupported_versions_resources
35
+ @unsupported_versions_resources ||= currently_supported_version_entities_for_pacticipant_version.collect do | entity |
36
+ entity._link!("self").patch(currentlySupported: false)
37
+ end
38
+ end
39
+
40
+ def action
41
+ "undeployment"
42
+ end
43
+
44
+ def environment_resource
45
+ index_resource
46
+ ._link!("pb:environments")
47
+ .get!
48
+ ._links("pb:environments")
49
+ .find!(environment_name, "No environment found with name '#{environment_name}'")
50
+ .get!
51
+ end
52
+
53
+ def result_message
54
+ if json_output?
55
+ unsupported_versions_resources.collect{ | resource | resource.response.body }.to_a.to_json
56
+ else
57
+ unsupported_versions_resources.collect do | undeployed_versions_resource |
58
+ if undeployed_versions_resource.success?
59
+ green("#{success_result_text_message(undeployed_versions_resource)} in #{pact_broker_name}.")
60
+ else
61
+ red(undeployed_versions_resource.error_message)
62
+ end
63
+ end.join("\n")
64
+ end
65
+ end
66
+
67
+ def success_result_text_message(undeployed_versions_resource)
68
+ "Recorded support ended for #{pacticipant_name} version #{version_number} in #{environment_name} environment"
69
+ end
70
+
71
+ def error_result_message
72
+ if json_output?
73
+ error_message_as_json(error_text)
74
+ else
75
+ red(error_text)
76
+ end
77
+ end
78
+
79
+ def error_text
80
+ if pacticipant_does_not_exist?
81
+ "No pacticipant with name '#{pacticipant_name}' found."
82
+ else
83
+ "#{pacticipant_name} version #{version_number} is not currently released in #{environment_name} environment. Cannot record support ended."
84
+ end
85
+ end
86
+
87
+ def not_supported_message
88
+ "This version of the Pact Broker does not support recording end of support. Please upgrade to version 2.80.0 or later."
89
+ end
90
+
91
+ def pacticipant_does_not_exist?
92
+ index_resource._link("pb:pacticipant") && index_resource._link("pb:pacticipant").expand(pacticipant: pacticipant_name).get.does_not_exist?
93
+ end
94
+
95
+ def check_if_command_supported
96
+ unless index_resource.can?("pb:environments")
97
+ raise PactBroker::Client::Error.new(not_supported_message)
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -4,10 +4,7 @@ module PactBroker
4
4
  module Client
5
5
  module Deployments
6
6
  class RecordUndeployment < PactBroker::Client::BaseCommand
7
-
8
-
9
-
10
- def initialize(params, pact_broker_base_url, pact_broker_client_options)
7
+ def initialize(params, options, pact_broker_client_options)
11
8
  super
12
9
  @pacticipant_name = params.fetch(:pacticipant_name)
13
10
  @environment_name = params.fetch(:environment_name)
@@ -18,26 +15,30 @@ module PactBroker
18
15
 
19
16
  def do_call
20
17
  if undeployed_versions_resources.empty?
21
- check_pacticipant_exists!
22
- PactBroker::Client::CommandResult.new(false, deployed_version_not_found_error_message)
18
+ PactBroker::Client::CommandResult.new(false, error_result_message)
23
19
  else
24
- PactBroker::Client::CommandResult.new(undeployed_versions_resources.all?(:success?), result_message)
20
+ PactBroker::Client::CommandResult.new(undeployed_versions_resources.all?(&:success?), result_message)
25
21
  end
26
22
  end
27
23
 
28
- attr_reader :pacticipant_name, :version_number, :environment_name, :target, :output
29
- attr_reader :deployed_version_resource, :undeployment_entities
24
+ attr_reader :pacticipant_name, :environment_name, :target
30
25
 
31
26
  def currently_deployed_versions_link
32
27
  environment_resource._link("pb:currently-deployed-versions") or raise PactBroker::Client::Error.new(not_supported_message)
33
28
  end
34
29
 
35
- def currently_deployed_versions_resource
36
- @deployed_version_links ||= currently_deployed_versions_link.get!(pacticipant: pacticipant_name, target: target)
30
+ def currently_deployed_version_entities_for_pacticipant
31
+ @deployed_version_links ||= currently_deployed_versions_link.get!(pacticipant: pacticipant_name).embedded_entities!("deployedVersions")
32
+ end
33
+
34
+ def currently_deployed_version_entities_for_pacticipant_and_target
35
+ currently_deployed_version_entities_for_pacticipant.select do | entity |
36
+ entity.target == target
37
+ end
37
38
  end
38
39
 
39
40
  def undeployed_versions_resources
40
- @undeployed_versions_resources ||= currently_deployed_versions_resource.embedded_entities("deployedVersions").collect do | entity |
41
+ @undeployed_versions_resources ||= currently_deployed_version_entities_for_pacticipant_and_target.collect do | entity |
41
42
  entity._link!("self").patch(currentlyDeployed: false)
42
43
  end
43
44
  end
@@ -55,12 +56,6 @@ module PactBroker
55
56
  .get!
56
57
  end
57
58
 
58
- def check_pacticipant_exists!
59
- if index_resource._link!("pb:pacticipant").expand(pacticipant: pacticipant_name).get.does_not_exist?
60
- raise PactBroker::Client::Error.new("No pacticipant with name '#{pacticipant_name}' found")
61
- end
62
- end
63
-
64
59
  def result_message
65
60
  if json_output?
66
61
  undeployed_versions_resources.collect{ | resource | resource.response.body }.to_a.to_json
@@ -76,32 +71,40 @@ module PactBroker
76
71
  end
77
72
 
78
73
  def success_result_text_message(undeployed_versions_resource)
79
- version_number = undeployed_versions_resource.embedded_entity{ | embedded_entity| embedded_entity['version'] }.number
80
- message = "Recorded #{action} of #{pacticipant_name} version #{version_number} from #{environment_name} environment"
81
- if target
82
- message + " (target #{target})"
83
- else
84
- message
85
- end
74
+ version = undeployed_versions_resource.embedded_entity{ | embedded_entity| embedded_entity && embedded_entity['version'] }
75
+ message = "Recorded #{action} of #{pacticipant_name}"
76
+ message = "#{message} version #{version.number}" if (version && version.number)
77
+ message = "#{message} from #{environment_name} environment"
78
+ message = "#{message} (target #{target})" if target
79
+ message
86
80
  end
87
81
 
88
- def deployed_version_not_found_error_message
89
- target_bit = target ? " with target '#{target}'" : ""
90
- message = "#{pacticipant_name} is not currently deployed to #{environment_name}#{target_bit}. Cannot record undeployment."
91
-
82
+ def error_result_message
92
83
  if json_output?
93
- { error: message }.to_json
84
+ error_message_as_json(error_text)
94
85
  else
95
- red(message)
86
+ red(error_text)
96
87
  end
97
88
  end
98
89
 
90
+ def error_text
91
+ if pacticipant_does_not_exist?
92
+ "No pacticipant with name '#{pacticipant_name}' found."
93
+ else
94
+ if currently_deployed_version_entities_for_pacticipant.any?
95
+ target_does_not_match_message
96
+ else
97
+ "#{pacticipant_name} is not currently deployed to #{environment_name} environment. Cannot record undeployment."
98
+ end
99
+ end
100
+ end
99
101
 
100
- def deployed_version_not_found_message
101
- if (env_names = deployed_version_links.names).any?
102
- "#{pacticipant_name} version #{version_number} is not currently deployed to #{environment_name}. It is currently deployed to: #{env_names.join(", ")}"
102
+ def target_does_not_match_message
103
+ potential_targets = currently_deployed_version_entities_for_pacticipant.collect(&:target).collect { |target| target || "<no target>"}
104
+ if target
105
+ "#{pacticipant_name} is not currently deployed to target '#{target}' in #{environment_name} environment. Please specify one of the following targets to record the undeployment from: #{potential_targets.join(", ")}"
103
106
  else
104
- "#{pacticipant_name} version #{version_number} is not currently deployed to any environment."
107
+ "Please specify one of the following targets to record the undeployment from: #{potential_targets.join(", ")}"
105
108
  end
106
109
  end
107
110
 
@@ -109,6 +112,10 @@ module PactBroker
109
112
  "This version of the Pact Broker does not support recording undeployments. Please upgrade to version 2.80.0 or later."
110
113
  end
111
114
 
115
+ def pacticipant_does_not_exist?
116
+ index_resource._link("pb:pacticipant") && index_resource._link("pb:pacticipant").expand(pacticipant: pacticipant_name).get.does_not_exist?
117
+ end
118
+
112
119
  def check_if_command_supported
113
120
  unless index_resource.can?("pb:environments")
114
121
  raise PactBroker::Client::Error.new(not_supported_message)