Javier Jimenez Roda
05/21/2024, 10:49 PMProvider state (with the given keyword) but I could not find any documentation about it except the basic example here. Do you guys know how to use Provider state to set some data before the execution of the test (if I understood correctly what Provider state is for)?rholshausen
05/21/2024, 11:05 PMJavier Jimenez Roda
05/21/2024, 11:07 PMrholshausen
05/21/2024, 11:07 PMJavier Jimenez Roda
05/21/2024, 11:07 PMJavier Jimenez Roda
05/21/2024, 11:11 PMrholshausen
05/21/2024, 11:12 PMJavier Jimenez Roda
05/22/2024, 12:12 AMrholshausen
05/22/2024, 12:16 AMJavier Jimenez Roda
05/22/2024, 12:16 AMrholshausen
05/22/2024, 12:17 AMrholshausen
05/22/2024, 12:18 AMrholshausen
05/22/2024, 12:24 AMJavier Jimenez Roda
05/22/2024, 7:05 AMrholshausen
05/22/2024, 7:07 AMrholshausen
05/22/2024, 7:09 AMJavier Jimenez Roda
05/22/2024, 7:17 AMrholshausen
05/22/2024, 7:18 AMJavier Jimenez Roda
05/22/2024, 7:19 AMrholshausen
05/22/2024, 7:20 AMrholshausen
05/22/2024, 7:22 AMJavier Jimenez Roda
05/22/2024, 7:41 AMJavier Jimenez Roda
05/22/2024, 7:41 AMJavier Jimenez Roda
05/22/2024, 9:40 PM#[test_log::test(tokio::test)]
async fn when_instrument_state_switched_to_starting_up_then_example_unit_starts_up_itself() {
// Arrange
let provider = PactBuilder::new_v4("instrument-state-unit", "example-unit")
.interaction("Instrument State changes to Starting Up and triggers units to startup", "", |mut i| {
i.test_name("test_unit_reacts_to_instrument_state_starting_up");
i.request.content_type("application/json");
i.request.json_body(json_pattern!({
"origin": like!("simulated-instrument-sn555"),
"version": like!("1.0.0"),
"name": like!("InstrumentStateChanged"),
"old_state": like!("PoweredOff"),
"new_state": like!("StartingUp")
}));
i.response.ok().content_type("application/json").json_body(json_pattern!({
"result": "hello"
}));
i
}).start_mock_server(None);
let provider_info = ProviderInfo {
name: "example-unit".to_string(),
host: provider.url().host_str().unwrap().to_string(),
transports: vec![ ProviderTransport {
transport: "HTTP".to_string(),
port: provider.url().port(),
path: None,
scheme: Some("http".to_string())
} ],
.. ProviderInfo::default()
};
// Create the pact source to pull pacts from the pact-broker
let pact_source = PactSource::BrokerUrl("example-unit".to_string(), "<http://localhost:9292>".to_string(), None, vec![]);
// Arrange
let verification_options: VerificationOptions<NullRequestFilterExecutor> = VerificationOptions::default();
let provider_state_executor = Arc::new(DummyProviderStateExecutor{});
let publish_options = PublishOptions {
provider_version: Some("1.0.0".to_string()),
build_url: None,
provider_tags: vec![],
provider_branch: None,
};
let result = verify_provider_async(
provider_info,
vec![ pact_source ],
FilterInfo::None,
vec![ "instrument-state-unit".to_string() ],
&verification_options,
Some(&publish_options),
&provider_state_executor,
None
).await;
// Assert
expect!(result.unwrap().result).to(be_true());
}
The results of it is:
Failures:
1) Verifying a pact between instrument-state-unit and example-unit Given Unit is powered off And Hardware units works normally - Instrument State changes to Starting Up and triggers units to startup - error sending request for url (http://127.0.0.1:8080/)
Javier Jimenez Roda
05/22/2024, 9:40 PMrholshausen
05/23/2024, 6:56 AMrholshausen
05/23/2024, 6:58 AMDummyProviderStateExecutor doesn't do anything. It won't execute the provider states.