Rachel Bingham
03/23/2022, 10:33 AMset_up
method is not being called prior to the interaction being verified. Can anyone help? Here are some code snippets:
from the contract:
"interactions": [
{
"description": "a request to GET cards",
"providerState": "user has cards", ...
from the provider states files:
Pact.provider_states_for "bloomandwild-frontend" do
provider_state "user has cards" do
# code reaches here
set_up do
# code doesn't reach here
apart from that, the verification is working - ie I can successful verify an interaction that requires no set up.
Any help or advice appreciated TIABeth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 10:58 PM1) Verifying a pact between bloomandwild-frontend and v1-cards Given user has cards a request to GET cards with GET /api/v1/cards?locale=en&shipping_country_id=1 returns a response which has status code 200
Failure/Error: expect(response_status).to eql expected_response_status
expected: 200
got: 302
Basically, the auth fails as user doesn't exist so response is a redirect.Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 10:59 PMBeth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 11:05 PM# pack_helper.rb
require "pact/provider/rspec"
require "pry"
require "rails_helper"
require_relative "provider_states_for_bloomandwild_frontend.rb"
Pact.service_provider "v1-cards" do
honours_pact_with "bloomandwild-frontend" do
pact_uri "spec/pacts/bloomandwild-frontend-v1-cards.json"
end
end
# provider_states_for_bloomandwild_frontend.rb
Pact.provider_states_for "bloomandwild-frontend" do
provider_state "user has cards" do
set_up do
user = User.create!(id: 6390154, email: "<mailto:markus123456@bloomandwild.com|markus123456@bloomandwild.com>")
user.credit_cards.create!(
"brand": "Visa",
"created_at": "2022-03-21T09:59:57.543+00:00",
"exp_month": 2,
"exp_year": 2024,
"id": 10121358,
"kind": "card",
"last4": "4242",
"temporary": false,
"token": "card_1Kfi1oKoz4lNOAHNvfFpz1ec",
"updated_at": "2022-03-21T09:59:57.581+00:00",
)
UserToken.create!(user: user, kind: :login, token: "BYsijJUFrmzU-pTzhaZM")
end
tear_down do
no_op
# clean up objects
end
end
end
# the contract
{
"consumer": {
"name": "bloomandwild-frontend"
},
"provider": {
"name": "v1-cards"
},
"interactions": [
{
"description": "a request to GET cards",
"providerState": "user has cards",
"request": {
"method": "GET",
"path": "/api/v1/cards",
"query": "locale=en&shipping_country_id=1",
"headers": {
"Accept": "application/json, text/plain, */*",
"x-angular-version": "6",
"x-fingerprint": "eaa08c06-ada8-4717-831d-e480d2dd12f3",
"x-fingerprint-old": "",
"x-user-email": "<mailto:markus123456@bloomandwild.com|markus123456@bloomandwild.com>",
"x-user-token": "BYsijJUFrmzU-pTzhaZM"
},
"matchingRules": {
"$.headers.x-fingerprint": {
"match": "type"
},
"$.headers.x-user-email": {
"match": "type"
},
"$.headers.x-user-token": {
"match": "type"
}
}
},
"response": {
"status": 200,
"headers": {
},
"body": {
"cards": [
{
"brand": "Visa",
"created_at": "2022-03-21T09:59:57.543+00:00",
"exp_month": 2,
"exp_year": 2024,
"id": 10121358,
"kind": "card",
"last4": "4242",
"name": "Visa ending 4242 (exp. 2/24)",
"temporary": false,
"token": "card_1Kfi1oKoz4lNOAHNvfFpz1ec",
"updated_at": "2022-03-21T09:59:57.581+00:00",
"user_id": 6390154
}
]
},
"matchingRules": {
"$.body.cards": {
"min": 1
},
"$.body.cards[*].*": {
"match": "type"
},
"$.body.cards[*]": {
"match": "type"
}
}
}
}
],
"metadata": {
"pactSpecification": {
"version": "3.0.0"
}
}
}
Rachel Bingham
03/23/2022, 11:06 PMBeth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 11:08 PMRachel Bingham
03/23/2022, 11:09 PMBeth (pactflow.io/Pact Broker/pact-ruby)
bundle open pact
to get the source code open?Rachel Bingham
03/23/2022, 11:13 PMBeth (pactflow.io/Pact Broker/pact-ruby)
lib/pact/provider/test_methods.rb:45
Beth (pactflow.io/Pact Broker/pact-ruby)
I can view the gem source codeyes, on your local machine
Rachel Bingham
03/23/2022, 11:16 PMRachel Bingham
03/23/2022, 11:16 PMpry > provider_states
[]
Beth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 11:22 PMRachel Bingham
03/23/2022, 11:22 PMBeth (pactflow.io/Pact Broker/pact-ruby)
lib/pact/provider/state/provider_state.rb
as well.Rachel Bingham
03/23/2022, 11:25 PMinteraction
interaction
{
:description => "a request to GET cards",
:provider_states => [],
:request => {
:method => "GET",Rachel Bingham
03/23/2022, 11:26 PMRachel Bingham
03/23/2022, 11:31 PM"providerStates": ["user has cards"],
and now the interaction has this
:description => "a request to GET cards",
:provider_states => [
[0] {
"name" => nil,
"params" => nil
}
],
so I wondering how to add my one state in an array format?Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 11:35 PMBeth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 11:37 PMAngular (I think!)
Rachel Bingham
03/23/2022, 11:38 PMRachel Bingham
03/23/2022, 11:40 PMBeth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
providerStates
Beth (pactflow.io/Pact Broker/pact-ruby)
provider_states = parse_provider_states(hash['providerStates'])
Rachel Bingham
03/23/2022, 11:43 PMBeth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Beth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 11:45 PMBeth (pactflow.io/Pact Broker/pact-ruby)
Rachel Bingham
03/23/2022, 11:46 PMSantiago Martí
06/16/2022, 8:06 PM"metadata": {
"pactSpecification": {
"version": "3.0.0"
}
}
Santiago Martí
06/16/2022, 8:07 PMSantiago Martí
06/16/2022, 9:07 PMset_up
Beth (pactflow.io/Pact Broker/pact-ruby)