module PactBroker::Pacts::Merger
Public Instance Methods
conflict?(original_json, additional_json)
click to toggle source
# File lib/pact_broker/pacts/merger.rb, line 9 def conflict? original_json, additional_json original, additional = [original_json, additional_json].map{|str| JSON.parse(str, PACT_PARSING_OPTIONS) } if original["interactions"].nil? || additional["interactions"].nil? true else additional["interactions"].any? do |new_interaction| original["interactions"].any? do |original_interaction| same_description_and_state?(original_interaction, new_interaction) && !same_request_properties?(original_interaction["request"], new_interaction["request"]) end end end end
merge_pacts(original_json, additional_json)
click to toggle source
Accepts two hashes representing pacts, outputs a merged hash Does not make any guarantees about order of interactions TODO: should not modify original! TODO: is not checking response for equality! TODO: should have separate tests!
# File lib/pact_broker/pacts/merger.rb, line 29 def merge_pacts original_json, additional_json original, additional = [original_json, additional_json].map{|str| JSON.parse(str, PACT_PARSING_OPTIONS) } new_pact = original additional["interactions"].each do |new_interaction| # check to see if this interaction matches an existing interaction overwrite_index = original["interactions"].find_index do |original_interaction| same_description_and_state?(original_interaction, new_interaction) end # overwrite existing interaction if a match is found, otherwise appends the new interaction if overwrite_index new_pact["interactions"][overwrite_index] = new_interaction else new_pact["interactions"] << new_interaction end end new_pact.to_json end
Private Instance Methods
normalized_provider_states(interaction)
click to toggle source
# File lib/pact_broker/pacts/merger.rb, line 58 def normalized_provider_states(interaction) interaction.values_at("provider_state", "providerState", "providerStates").compact.first end
same_description_and_state?(original, additional)
click to toggle source
# File lib/pact_broker/pacts/merger.rb, line 53 def same_description_and_state? original, additional original["description"] == additional["description"] && normalized_provider_states(original) == normalized_provider_states(additional) end
same_request_properties?(original, additional)
click to toggle source
# File lib/pact_broker/pacts/merger.rb, line 62 def same_request_properties? original, additional %w(method path query body headers).all? do |attribute| original[attribute] == additional[attribute] end end