Space-separated words use implicit AND. Press / to focus the search bar. Operators &&||!! activate advanced mode; without them, legacy tag expressions (@a and @b or not @c) are also supported.
Status:
Happy Paths:
Duration ≥:seconds
Dependencies:
Details:lines
Scenario Timeline 🛈
Creating an order should produce a retrievable audit log entry
2.3s
A created order should be retrievable by its ID
1.7s
Batch completions should contain data ingested via pubsub consumer
1.4s
Listing waste by recipe should return matching records
1.3s
Retrieving non-existent customer preferences should return not found
1.3s
An outbox message should transition to failed after exhausting retries
1.2s
Ingredient shipments should be recorded when delivered via eventgrid webhook
1.1s
A valid order should be created and an event published
938ms
The AsyncApi endpoint should return a valid specification
795ms
Listing notes by recipe should return matching notes
575ms
The OpenApi endpoint should return a valid specification
453ms
Updating the status of a non-existent order should return not found
448ms
Ordering a non-existent daily special should return not found
448ms
Retrieving a non-existent order should return not found
448ms
Menu responses should be cached and returned even when supplier becomes unavailable
396ms
The Scalar UI endpoint should return a valid page
381ms
Listing feedback for an order should return the feedback
371ms
Creating an order should produce an audit log entry and events
364ms
Creating an order should emit a structured log entry
333ms
Exceeding the rate limit should return too many requests
328ms
An order exceeding the maximum items per order should be rejected
308ms
An order at the maximum items per order should be accepted
263ms
Retrieving an existing staff member should return the member
255ms
Toppings should exclude raspberries when the feature flag is disabled
252ms
Cancelling an already cancelled reservation should return a conflict response
237ms
Retrieving an existing inventory item should return the item
236ms
All menu items should be marked unavailable when the supplier service is down
222ms
Goat milk endpoint should return not found when feature is disabled
221ms
Health check should report degraded when the cow service is unavailable
192ms
Pancake recipe summary should return correct data
188ms
The menu endpoint should return all menu items with availability status
184ms
Submitting the same order with different idempotency keys should return different confirmations
175ms
Popular recipes should return recipe types ordered by frequency
175ms
Health check should report degraded when a downstream service returns a non-success status
174ms
Requesting the second page should return different orders
171ms
Health check should report degraded when multiple downstream services are unavailable
165ms
Toppings should include raspberries when the feature flag is enabled
159ms
An order should progress through all status transitions to completion
156ms
Goat milk endpoint should return fresh goat milk when feature is enabled
154ms
The health check response should include description and data for each entry
153ms
Toppings endpoint is called with invalid or dangerous input
148ms
Submitting a recipe review should return the created review
125ms
Creating an order should write an outbox message that gets processed
116ms
Listing all inventory items should return all items
113ms
Updating customer preferences should return the updated preferences
109ms
Different muffin recipes should produce the expected batch
103ms
Muffins endpoint called with an invalid field should return a bad request response
101ms
Consuming recipe cost event should trigger downstream processing
96ms
Listing usage by ingredient should return matching records
96ms
Streaming order updates should return the current status
95ms
Listing orders should return a paginated response
85ms
A valid waffle request should return a fresh batch
84ms
An invalid status transition should return a conflict response
83ms
An invalid status transition should return a conflict response
83ms
Audit logs should be returned in descending timestamp order
82ms
Updating a non-existent note should return not found
82ms
Retrieving an existing note by id should return the note
81ms
Recipe reports should contain ingested recipe data
80ms
The toppings endpoint should return all available toppings
77ms
Deleting a staff member should return no content
71ms
Listing orders with a small page size should limit results
71ms
Audit logs should be filterable by entity id
70ms
Ingredient usage should aggregate across multiple recipes
69ms
Pancakes endpoint is called with invalid ingredients should return a bad request response
68ms
A valid goat milk request should return fresh goat milk
67ms
Waffles endpoint is called with invalid ingredients should return a bad request response
66ms
A valid status transition should update the order
65ms
Getting usage summary should return aggregated data
64ms
Audit logs should be filterable by entity type
63ms
Updating an inventory item should return the updated item
62ms
An invalid status transition should return a conflict response
61ms
Deleting a waste record should return no content
60ms
Listing reviews by recipe should return matching reviews
60ms
Order status for non-existent order should return not found
59ms
An invalid status transition should return a conflict response
59ms
Order summaries should contain ingested order data
58ms
Adding a new inventory item should return the created item
56ms
An invalid status transition should return a conflict response
56ms
Equipment alerts should contain data ingested via Event Hub consumer
53ms
Recording usage with missing ingredient name should return bad request
53ms
Adding a new topping should return the created topping
51ms
A valid status transition should update the order
51ms
An invalid status transition should return a conflict response
48ms
An invalid status transition should return a conflict response
47ms
Creating a note with missing recipe name should return bad request
47ms
Different muffin recipes should produce the expected batch
46ms
A waffle request with more toppings than allowed should return a bad request response
46ms
A request with a correlation id should forward it to the supplier service
44ms
Updating an existing note should return the updated note
44ms
Retrieving an existing reservation should return the reservation
43ms
Deleting an inventory item should return no content
42ms
A valid daily special order should return a confirmation
42ms
Order status via gRPC should return order details
40ms
Recording waste with zero quantity should return bad request
40ms
Consuming customer feedback event should trigger downstream processing
39ms
Creating an order when the kitchen service returns an error should still create the order
38ms
A valid status transition should update the order
38ms
Requesting milk when the cow service returns an invalid response should return a bad gateway response
38ms
Sending a request with an unsupported content type should return an unsupported media type response
36ms
A valid apple cinnamon muffin request should return a fresh batch
35ms
Update toppings endpoint is called with invalid or dangerous input
35ms
A valid status transition should update the order
34ms
Recording waste with missing reason should return bad request
33ms
Submitting feedback should return the created feedback
31ms
Deleting a reservation should return no content
30ms
A pancake request with more toppings than allowed should return a bad request response
30ms
Listing orders when none exist should return an empty page
29ms
Retrieving a non-existent review should return not found
29ms
Cancelling a reservation should return the cancelled reservation
29ms
The daily specials endpoint should return all available specials
27ms
Retrieving non-existent feedback should return not found
27ms
Updating an existing topping should return the updated topping
27ms
Retrieving existing feedback by id should return the feedback
26ms
A valid pancake request should return a fresh batch
25ms
Submitting the same order with the same idempotency key should return the same confirmation
25ms
Filtering audit logs by a non-existent entity type should return an empty collection
24ms
Toppings endpoint is called with invalid or dangerous input
24ms
Different muffin recipes should produce the expected batch
24ms
Orders endpoint is called with invalid fields should return a bad request response
24ms
Waffles endpoint is called with invalid ingredients should return a bad request response
23ms
Retrieving a non-existent note should return not found
21ms
Creating a chef note should return the created note
21ms
Retrieving existing customer preferences should return the preferences
21ms
Adding a new staff member should return the created member
21ms
Daily specials order endpoint is called with invalid fields should return a bad request response
21ms
Order status update endpoint is called with invalid fields should return a bad request response
20ms
Remaining quantity should decrease after each order
19ms
Deleting an existing topping should return no content
19ms
The heartbeat endpoint should return a running message
18ms
Retrieving existing review by id should return the review
17ms
Retrieving a non-existent inventory item should return not found
17ms
Submitting a review with an invalid rating should return bad request
16ms
Ordering a daily special beyond the threshold should return a conflict response
16ms
Recording ingredient waste should return the created record
16ms
Saving customer preferences should return the saved preferences
15ms
Order summaries should return an empty list when no orders exist
15ms
The health check endpoint should return a healthy status with dependency details
14ms
Waffles endpoint is called with invalid ingredients should return a bad request response
14ms
Waffles endpoint is called with invalid ingredients should return a bad request response
13ms
Toppings endpoint is called with invalid or dangerous input
13ms
Toppings endpoint is called with invalid or dangerous input
13ms
Waffles endpoint is called with invalid ingredients should return a bad request response
12ms
Recording ingredient usage should return the created record
12ms
Streaming updates for non-existent order should return not found
12ms
Requesting milk when the cow service times out should return a bad gateway response
12ms
Submitting feedback with missing customer name should return bad request
11ms
Creating a reservation should return the confirmed reservation
11ms
Sending a request with an unsupported content type should return an unsupported media type response
11ms
Requesting goat milk when the goat service is unavailable should return a bad gateway response
11ms
A request with a correlation id should forward it to the cow service
11ms
Recording waste with missing ingredient name should return bad request
11ms
Waffles endpoint is called with invalid ingredients should return a bad request response
10ms
Waffles endpoint is called with invalid ingredients should return a bad request response
10ms
Adding a staff member with an invalid role should return a bad request response
10ms
Requesting milk when the cow service is unavailable should return a bad gateway response
10ms
Orders endpoint is called with invalid fields should return a bad request response
9ms
Update toppings endpoint is called with invalid or dangerous input
9ms
Muffins endpoint called with an invalid field should return a bad request response
9ms
Orders endpoint is called with invalid fields should return a bad request response
8ms
A request with a correlation id should return the same id in the response
8ms
Deleting a non-existent topping should return not found
8ms
Orders endpoint is called with invalid fields should return a bad request response
8ms
Muffins endpoint called with an invalid field should return a bad request response
7ms
Waffles endpoint is called with invalid ingredients should return a bad request response
7ms
Waffle recipe summary should return correct data
7ms
Toppings endpoint is called with invalid or dangerous input
7ms
Toppings endpoint is called with invalid or dangerous input
7ms
Requesting goat milk when the goat service returns an invalid response should return a bad gateway response
7ms
Creating a note with missing note text should return bad request
7ms
Submitting a review with missing recipe name should return bad request
6ms
Updating a non-existent topping should return not found
6ms
Muffins endpoint called with an invalid field should return a bad request response
6ms
Pancakes endpoint is called with invalid ingredients should return a bad request response
6ms
Pancakes endpoint is called with invalid ingredients should return a bad request response
6ms
Saving customer preferences with missing customer name should return bad request
6ms
Unknown recipe type should return zero batches
5ms
Muffins endpoint called with an invalid field should return a bad request response
5ms
Orders endpoint is called with invalid fields should return a bad request response
5ms
Sending a request with an unsupported content type should return an unsupported media type response
5ms
Update toppings endpoint is called with invalid or dangerous input
5ms
A request without a correlation id should have one generated in the response
5ms
Update toppings endpoint is called with invalid or dangerous input
5ms
Pancakes endpoint is called with invalid ingredients should return a bad request response
5ms
Recording usage with zero quantity should return bad request
5ms
Pancakes endpoint is called with invalid ingredients should return a bad request response
5ms
Pancakes endpoint is called with invalid ingredients should return a bad request response
4ms
Update toppings endpoint is called with invalid or dangerous input
4ms
Submitting feedback with invalid rating should return bad request
4ms
Update toppings endpoint is called with invalid or dangerous input
4ms
Muffins endpoint called with an invalid field should return a bad request response
4ms
Sending a request with an unsupported content type should return an unsupported media type response
4ms
Sending a request with an unsupported content type should return an unsupported media type response
4ms
Daily specials order endpoint is called with invalid fields should return a bad request response
3ms
Sending a request with an unsupported content type should return an unsupported media type response
3ms
Apple Cinnamon Muffins Creation
/muffins - Creating apple cinnamon muffins with baking profiles and toppings
A valid apple cinnamon muffin request should return a fresh batch Happy Path35ms🔗Steps✓Givena valid apple cinnamon muffin recipe with all ingredients(11ms)
✓Givena valid apple cinnamon muffin recipe with all ingredients(11ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Givena valid apple cinnamon muffin recipe with all ingredients(11ms)
✓Whenthe muffins are prepared(7ms)
✓Whenthe muffins are prepared(7ms)
✓Thenthe muffin response should contain a valid batch with all ingredients(9ms)
✓Muffin steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Muffin steps response ingredients should contain 'Milk'(0ms)
✓Muffin steps response ingredients should contain 'Eggs'(0ms)
✓Muffin steps response ingredients should contain 'Flour'(0ms)
✓Muffin steps response ingredients should contain GrannySmithApples(0ms)
✓Muffin steps response ingredients should contain CeylonCinnamon(0ms)
✓Muffin steps response toppings should have count 1(0ms)
✓Muffin steps response baking temperature should be DefaultTemperature(0ms)
✓Muffin steps response baking duration should be DefaultDuration(0ms)
✓Whenthe muffins are prepared(7ms)
✓Andthe cow service should have received a milk request for the muffins(1ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Thenthe muffin response should contain a valid batch with all ingredients(9ms)
✓Thenthe muffin response should contain a valid batch with all ingredients(9ms)
✓Andthe cow service should have received a milk request for the muffins(1ms)
✓Andthe cow service should have received a milk request for the muffins(1ms)
Diagrams
Details:lines
Different muffin recipes should produce the expected batch 3/3 passed174ms🔗
Steps✓Givena muffin recipe "Classic" with the following ingredients:(34ms)
Flour
Apples
Cinnamon
Plain Flour
Granny Smith
Ceylon
✓Givena muffin recipe "Classic" with the following ingredients:(34ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Givena muffin recipe "Classic" with the following ingredients:(34ms)
Flour
Apples
Cinnamon
Plain Flour
Granny Smith
Ceylon
✓Andwith baking at 180 degrees for 25 minutes in a "Standard" pan(0ms)
✓Andwith baking at 180 degrees for 25 minutes in a "Standard" pan(0ms)
✓Andthe following muffin toppings:(0ms)
✓Andwith baking at 180 degrees for 25 minutes in a "Standard" pan(0ms)
✓Whenthe muffins are prepared(6ms)
✓Andthe following muffin toppings:(0ms)
Name
Amount
Streusel
Light
Icing Glaze
Drizzle
✓Thenthe muffin batch should have 5 ingredients(0ms)
✓Muffin steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Muffin steps response ingredients should have count '5'(0ms)
✓Andthe following muffin toppings:(0ms)
Name
Amount
Streusel
Light
Icing Glaze
Drizzle
✓Andthe muffin response should include 2 toppings(0ms)
✓Muffin steps response toppings should have count '2'(0ms)
✓Whenthe muffins are prepared(6ms)
✓Andthe muffin response should include baking information(0ms)
✓Muffin steps response baking temperature should be greater than 0(0ms)
✓Whenthe muffins are prepared(6ms)
✓Thenthe muffin batch should have 5 ingredients(0ms)
✓Thenthe muffin batch should have 5 ingredients(0ms)
✓Andthe muffin response should include 2 toppings(0ms)
✓Andthe muffin response should include 2 toppings(0ms)
✓Andthe muffin response should include baking information(0ms)
✓Andthe muffin response should include baking information(0ms)
Steps✓Givena muffin recipe "Rustic Wholesome" with the following ingredients:(6ms)
Flour
Apples
Cinnamon
Whole Wheat
Honeycrisp
Cassia
✓Givena muffin recipe "Rustic Wholesome" with the following ingredients:(6ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Givena muffin recipe "Rustic Wholesome" with the following ingredients:(6ms)
Flour
Apples
Cinnamon
Whole Wheat
Honeycrisp
Cassia
✓Andwith baking at 175 degrees for 30 minutes in a "Cast Iron" pan(0ms)
✓Andwith baking at 175 degrees for 30 minutes in a "Cast Iron" pan(0ms)
✓Andthe following muffin toppings:(0ms)
✓Andwith baking at 175 degrees for 30 minutes in a "Cast Iron" pan(0ms)
✓Whenthe muffins are prepared(7ms)
✓Andthe following muffin toppings:(0ms)
Name
Amount
Brown Sugar Crumb
Heavy
Maple Drizzle
Light
✓Thenthe muffin batch should have 5 ingredients(0ms)
✓Muffin steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Muffin steps response ingredients should have count '5'(0ms)
✓Andthe following muffin toppings:(0ms)
Name
Amount
Brown Sugar Crumb
Heavy
Maple Drizzle
Light
✓Andthe muffin response should include 2 toppings(0ms)
✓Muffin steps response toppings should have count '2'(0ms)
✓Whenthe muffins are prepared(7ms)
✓Andthe muffin response should include baking information(3ms)
✓Muffin steps response baking temperature should be greater than 0(0ms)
✓Whenthe muffins are prepared(7ms)
✓Thenthe muffin batch should have 5 ingredients(0ms)
✓Thenthe muffin batch should have 5 ingredients(0ms)
✓Andthe muffin response should include 2 toppings(0ms)
✓Andthe muffin response should include 2 toppings(0ms)
✓Andthe muffin response should include baking information(3ms)
✓Andthe muffin response should include baking information(3ms)
Steps✓Givena muffin recipe "Spiced Deluxe" with the following ingredients:(17ms)
Flour
Apples
Cinnamon
Almond
Pink Lady
Saigon
✓Givena muffin recipe "Spiced Deluxe" with the following ingredients:(17ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Givena muffin recipe "Spiced Deluxe" with the following ingredients:(17ms)
Flour
Apples
Cinnamon
Almond
Pink Lady
Saigon
✓Andwith baking at 190 degrees for 20 minutes in a "Silicone" pan(1ms)
✓Andwith baking at 190 degrees for 20 minutes in a "Silicone" pan(1ms)
✓Andthe following muffin toppings:(2ms)
✓Andwith baking at 190 degrees for 20 minutes in a "Silicone" pan(1ms)
✓Whenthe muffins are prepared(34ms)
✓Andthe following muffin toppings:(2ms)
Name
Amount
Cinnamon Sugar
Heavy
Cream Cheese Swirl
Thick
✓Thenthe muffin batch should have 5 ingredients(8ms)
✓Muffin steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Muffin steps response ingredients should have count '5'(0ms)
✓Andthe following muffin toppings:(2ms)
Name
Amount
Cinnamon Sugar
Heavy
Cream Cheese Swirl
Thick
✓Andthe muffin response should include 2 toppings(1ms)
✓Muffin steps response toppings should have count '2'(0ms)
✓Whenthe muffins are prepared(34ms)
✓Andthe muffin response should include baking information(5ms)
✓Muffin steps response baking temperature should be greater than 0(0ms)
✓Whenthe muffins are prepared(34ms)
✓Thenthe muffin batch should have 5 ingredients(8ms)
✓Thenthe muffin batch should have 5 ingredients(8ms)
✓Andthe muffin response should include 2 toppings(1ms)
✓Andthe muffin response should include 2 toppings(1ms)
✓Andthe muffin response should include baking information(5ms)
✓Andthe muffin response should include baking information(5ms)
Diagrams
Details:lines
Muffins endpoint called with an invalid field should return a bad request response 6/6 passed135ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
Apples
Apples is required
'Apples' is required.
Bad Request
Passed
7ms
2
Cinnamon
<script>alert('xss')</script>
XSS in cinnamon
Cinnamon contains potentially dangerous content.
Bad Request
Passed
101ms
3
Cinnamon
Cinnamon is required
'Cinnamon' is required.
Bad Request
Passed
6ms
4
Eggs
Eggs is required
'Eggs' is required.
Bad Request
Passed
5ms
5
Flour
Flour is required
'Flour' is required.
Bad Request
Passed
4ms
6
Milk
Milk is required
'Milk' is required.
Bad Request
Passed
9ms
Steps✓Givena valid muffin request with "Apples" set to ""(1ms)
✓Givena valid muffin request with "Apples" set to ""(1ms)
✓Givena valid muffin request with "Apples" set to ""(1ms)
✓Whenthe invalid muffin request is submitted(3ms)
✓Whenthe invalid muffin request is submitted(3ms)
✓Thenthe muffin response should contain error "'Apples' is required." with status "Bad Request"(0ms)
✓Response body should contain ''Apples' is required.'(0ms)
✓Muffin steps response message status code should be BadRequest(0ms)
✓Whenthe invalid muffin request is submitted(3ms)
✓Thenthe muffin response should contain error "'Apples' is required." with status "Bad Request"(0ms)
✓Thenthe muffin response should contain error "'Apples' is required." with status "Bad Request"(0ms)
Steps✓Givena valid muffin request with "Cinnamon" set to "<script>alert('xss')</script>"(8ms)
✓Givena valid muffin request with "Cinnamon" set to "<script>alert('xss')</script>"(8ms)
✓Givena valid muffin request with "Cinnamon" set to "<script>alert('xss')</script>"(8ms)
✓Whenthe invalid muffin request is submitted(83ms)
✓Whenthe invalid muffin request is submitted(83ms)
✓Thenthe muffin response should contain error "Cinnamon contains potentially dangerous content." with status "Bad Request"(5ms)
✓Response body should contain 'Cinnamon contains potentially dangerous content.'(0ms)
✓Muffin steps response message status code should be BadRequest(0ms)
✓Whenthe invalid muffin request is submitted(83ms)
✓Thenthe muffin response should contain error "Cinnamon contains potentially dangerous content." with status "Bad Request"(5ms)
✓Thenthe muffin response should contain error "Cinnamon contains potentially dangerous content." with status "Bad Request"(5ms)
Steps✓Givena valid muffin request with "Cinnamon" set to ""(0ms)
✓Givena valid muffin request with "Cinnamon" set to ""(0ms)
✓Givena valid muffin request with "Cinnamon" set to ""(0ms)
✓Whenthe invalid muffin request is submitted(2ms)
✓Whenthe invalid muffin request is submitted(2ms)
✓Thenthe muffin response should contain error "'Cinnamon' is required." with status "Bad Request"(0ms)
✓Response body should contain ''Cinnamon' is required.'(0ms)
✓Muffin steps response message status code should be BadRequest(0ms)
✓Whenthe invalid muffin request is submitted(2ms)
✓Thenthe muffin response should contain error "'Cinnamon' is required." with status "Bad Request"(0ms)
✓Thenthe muffin response should contain error "'Cinnamon' is required." with status "Bad Request"(0ms)
Steps✓Givena valid muffin request with "Eggs" set to ""(0ms)
✓Givena valid muffin request with "Eggs" set to ""(0ms)
✓Givena valid muffin request with "Eggs" set to ""(0ms)
✓Whenthe invalid muffin request is submitted(3ms)
✓Whenthe invalid muffin request is submitted(3ms)
✓Thenthe muffin response should contain error "'Eggs' is required." with status "Bad Request"(0ms)
✓Response body should contain ''Eggs' is required.'(0ms)
✓Muffin steps response message status code should be BadRequest(0ms)
✓Whenthe invalid muffin request is submitted(3ms)
✓Thenthe muffin response should contain error "'Eggs' is required." with status "Bad Request"(0ms)
✓Thenthe muffin response should contain error "'Eggs' is required." with status "Bad Request"(0ms)
Steps✓Givena valid muffin request with "Flour" set to ""(0ms)
✓Givena valid muffin request with "Flour" set to ""(0ms)
✓Givena valid muffin request with "Flour" set to ""(0ms)
✓Whenthe invalid muffin request is submitted(2ms)
✓Whenthe invalid muffin request is submitted(2ms)
✓Thenthe muffin response should contain error "'Flour' is required." with status "Bad Request"(0ms)
✓Response body should contain ''Flour' is required.'(0ms)
✓Muffin steps response message status code should be BadRequest(0ms)
✓Whenthe invalid muffin request is submitted(2ms)
✓Thenthe muffin response should contain error "'Flour' is required." with status "Bad Request"(0ms)
✓Thenthe muffin response should contain error "'Flour' is required." with status "Bad Request"(0ms)
Steps✓Givena valid muffin request with "Milk" set to ""(0ms)
✓Givena valid muffin request with "Milk" set to ""(0ms)
✓Givena valid muffin request with "Milk" set to ""(0ms)
✓Whenthe invalid muffin request is submitted(6ms)
✓Whenthe invalid muffin request is submitted(6ms)
✓Thenthe muffin response should contain error "'Milk' is required." with status "Bad Request"(0ms)
✓Response body should contain ''Milk' is required.'(0ms)
✓Muffin steps response message status code should be BadRequest(0ms)
✓Whenthe invalid muffin request is submitted(6ms)
✓Thenthe muffin response should contain error "'Milk' is required." with status "Bad Request"(0ms)
✓Thenthe muffin response should contain error "'Milk' is required." with status "Bad Request"(0ms)
Diagrams
Details:lines
Audit Log Filtering
/audit-logs - Filtering audit logs by entity type and entity ID
Audit logs should be filterable by entity id 70ms🔗Steps✓Givena pancake batch has been created(11ms)
✓Givena pancake batch has been created(11ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(11ms)
✓Andan order has been created for the batch(11ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response order id should not be empty(0ms)
✓Andan order has been created for the batch(11ms)
✓Whenaudit logs are requested filtered by entity id(18ms)
✓Andan order has been created for the batch(11ms)
✓Thenthe audit log response should contain the specific order entry(5ms)
✓Audit log response status code should be OK(0ms)
✓Audit logs should contain [ l => l.EntityId == 'f843f0d4-f1b2-4377-b716-3d9def34fd95' ](0ms)
✓Whenaudit logs are requested filtered by entity id(18ms)
✓Whenaudit logs are requested filtered by entity id(18ms)
✓Thenthe audit log response should contain the specific order entry(5ms)
✓Thenthe audit log response should contain the specific order entry(5ms)
Diagrams
Details:lines
Audit logs should be filterable by entity type 63ms🔗Steps✓Givena pancake batch has been created(10ms)
✓Givena pancake batch has been created(10ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(10ms)
✓Andan order has been created for the batch(14ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response order id should not be empty(0ms)
✓Andan order has been created for the batch(14ms)
✓Whenaudit logs are requested filtered by entity type(26ms)
✓Andan order has been created for the batch(14ms)
✓Thenthe audit log response should only contain order entries(9ms)
✓Audit log response status code should be OK(0ms)
✓Audit logs should only contain [ l => l.EntityType == AuditLogDefaults.OrderEntityType ](0ms)
✓Whenaudit logs are requested filtered by entity type(26ms)
✓Whenaudit logs are requested filtered by entity type(26ms)
✓Thenthe audit log response should only contain order entries(9ms)
✓Thenthe audit log response should only contain order entries(9ms)
Diagrams
Details:lines
Audit logs should be returned in descending timestamp order 82ms🔗Steps✓Givena pancake batch has been created(40ms)
✓Givena pancake batch has been created(40ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(40ms)
✓Andan order has been created for the batch(17ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response order id should not be empty(0ms)
✓Andan order has been created for the batch(17ms)
✓Whenaudit logs are requested filtered by entity type(10ms)
✓Andan order has been created for the batch(17ms)
✓Thenthe audit logs should be ordered by timestamp descending(11ms)
✓Audit logs should not be null or empty(0ms)
✓Audit logs should be in descending order [ l => l.Timestamp ](0ms)
✓Whenaudit logs are requested filtered by entity type(10ms)
✓Whenaudit logs are requested filtered by entity type(10ms)
✓Thenthe audit logs should be ordered by timestamp descending(11ms)
✓Thenthe audit logs should be ordered by timestamp descending(11ms)
Diagrams
Details:lines
Filtering audit logs by a non-existent entity type should return an empty collection 24ms🔗Steps✓Whenaudit logs are requested filtered by a non-existent entity type(14ms)
✓Whenaudit logs are requested filtered by a non-existent entity type(14ms)
✓Whenaudit logs are requested filtered by a non-existent entity type(14ms)
✓Thenthe audit log response should be an empty collection(7ms)
✓Audit log response status code should be OK(0ms)
✓Audit logs from different time range should be empty(0ms)
✓Thenthe audit log response should be an empty collection(7ms)
✓Thenthe audit log response should be an empty collection(7ms)
Diagrams
Details:lines
Audit Log Retrieval
/audit-logs - Retrieving audit log entries for order operations
Creating an order should produce a retrievable audit log entry Happy Path2.3s🔗Steps✓Givena pancake batch has been created(1.1s)
✓Givena pancake batch has been created(1.1s)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(1.1s)
✓Andan order has been created for the batch(995ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response order id should not be empty(0ms)
✓Andan order has been created for the batch(995ms)
✓Whenthe audit logs are retrieved(76ms)
✓Andan order has been created for the batch(995ms)
✓Thenthe audit log response should contain the order creation entry(26ms)
✓Audit steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Audit steps response should contain [ a => a.Action == AuditLogDefaults.CreatedAction && a.EntityType == AuditLogDefaults.OrderEntityType && a.Details.Contains('TestCustomer_6173861030124180143') ](0ms)
✓Whenthe audit logs are retrieved(76ms)
✓Andthe cow service should have received a milk request(13ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Whenthe audit logs are retrieved(76ms)
✓Andthe kitchen service should have received a preparation request(8ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
✓Thenthe audit log response should contain the order creation entry(26ms)
✓Thenthe audit log response should contain the order creation entry(26ms)
✓Andthe cow service should have received a milk request(13ms)
✓Andthe cow service should have received a milk request(13ms)
✓Andthe kitchen service should have received a preparation request(8ms)
✓Andthe kitchen service should have received a preparation request(8ms)
Diagrams
Details:lines
Breakfast Order
/orders - Creating and managing breakfast orders with event publishing
Creating an order publishes events and notifies the kitchenA valid order should be created and an event published Happy Path938ms🔗Steps✓Givena pancake batch has been created(14ms)
✓Givena pancake batch has been created(14ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(14ms)
✓Anda valid order request for the created batch(0ms)
✓Anda valid order request for the created batch(0ms)
✓Whenthe breakfast order is placed(15ms)
✓Anda valid order request for the created batch(0ms)
✓Thenthe order response should contain a complete order(0ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response customer name should be 'TestCustomer_7921202431654281036'(0ms)
✓Order steps response items should have count 1(0ms)
✓Whenthe breakfast order is placed(15ms)
✓Andan order created event should have been published(902ms)
✓Event store should not be null(0ms)
✓Whenthe breakfast order is placed(15ms)
✓Andthe kitchen service should have received a preparation request(1ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
✓Thenthe order response should contain a complete order(0ms)
✓Thenthe order response should contain a complete order(0ms)
✓Andan order created event should have been published(902ms)
✓Andan order created event should have been published(902ms)
✓Andthe kitchen service should have received a preparation request(1ms)
✓Andthe kitchen service should have received a preparation request(1ms)
Diagrams
Details:lines
Creating an order produces audit and recipe logsCreating an order should produce an audit log entry and events 364ms🔗Steps✓Givena pancake batch has been created(12ms)
✓Givena pancake batch has been created(12ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(12ms)
✓Anda valid order request for the created batch(0ms)
✓Anda valid order request for the created batch(0ms)
✓Whenthe breakfast order is placed(10ms)
✓Anda valid order request for the created batch(0ms)
✓Thenthe order response should contain a complete order(0ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response customer name should be 'TestCustomer_2666527466411395120'(0ms)
✓Order steps response items should have count 1(0ms)
✓Whenthe breakfast order is placed(10ms)
✓Andan order created event should have been published(320ms)
✓Event store should not be null(0ms)
✓Whenthe breakfast order is placed(10ms)
✓Anda recipe log should have been published to kafka(15ms)
✓Kafka store should not be null(0ms)
✓Thenthe order response should contain a complete order(0ms)
✓Thenthe order response should contain a complete order(0ms)
✓Andan order created event should have been published(320ms)
✓Andan order created event should have been published(320ms)
✓Anda recipe log should have been published to kafka(15ms)
✓Anda recipe log should have been published to kafka(15ms)
Diagrams
Details:lines
Creating an order writes an outbox message for reliable deliveryCreating an order should write an outbox message that gets processed 116ms🔗Steps✓Givena pancake batch has been created(21ms)
✓Givena pancake batch has been created(21ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(21ms)
✓Anda valid order request for the created batch(1ms)
✓Anda valid order request for the created batch(1ms)
✓Whenthe breakfast order is placed(12ms)
✓Anda valid order request for the created batch(1ms)
✓Thenthe order response should contain a complete order(6ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response customer name should be 'TestCustomer_4732177002199637461'(0ms)
✓Order steps response items should have count 1(0ms)
✓Whenthe breakfast order is placed(12ms)
✓Andan outbox message should have been written for the order created event(45ms)
✓Outbox messages should contain [ m => m.EventType == 'OrderCreatedEvent', $"an outbox message should exist for event type '{eventType}'" ](0ms)
✓Whenthe breakfast order is placed(12ms)
✓Andthe outbox message should have been processed(23ms)
✓Thenthe order response should contain a complete order(6ms)
✓Thenthe order response should contain a complete order(6ms)
✓Andan outbox message should have been written for the order created event(45ms)
✓Andan outbox message should have been written for the order created event(45ms)
✓Andthe outbox message should have been processed(23ms)
✓Andthe outbox message should have been processed(23ms)
Diagrams
Details:lines
Chef Notes Management
/chef-notes - Creating, retrieving, and updating chef notes (MongoDB)
Creating a chef note should return the created note Happy Path21ms🔗Steps✓Givena valid chef note request(0ms)
✓Givena valid chef note request(0ms)
✓Givena valid chef note request(0ms)
✓Whenthe note is submitted(7ms)
✓Whenthe note is submitted(7ms)
✓Thenthe response should contain the created note(11ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response recipe name should be 'Recipe-cabc4661f7a74d939070e008d59226f3'(0ms)
✓Post steps response note text should be "Remember to fold the batter gently to keep it fluffy."(0ms)
✓Post steps response category should be "Technique"(0ms)
✓Post steps response note id should not be null or empty(0ms)
✓Whenthe note is submitted(7ms)
✓Thenthe response should contain the created note(11ms)
✓Thenthe response should contain the created note(11ms)
Diagrams
Details:lines
Creating a note with missing note text should return bad request 7ms🔗Steps✓Givena note request with missing note text(1ms)
✓Givena note request with missing note text(1ms)
✓Givena note request with missing note text(1ms)
✓Whenthe note is submitted(3ms)
✓Whenthe note is submitted(3ms)
✓Thenthe note response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe note is submitted(3ms)
✓Thenthe note response should indicate bad request(0ms)
✓Thenthe note response should indicate bad request(0ms)
Diagrams
Details:lines
Creating a note with missing recipe name should return bad request 47ms🔗Steps✓Givena note request with a missing recipe name(1ms)
✓Givena note request with a missing recipe name(1ms)
✓Givena note request with a missing recipe name(1ms)
✓Whenthe note is submitted(29ms)
✓Whenthe note is submitted(29ms)
✓Thenthe note response should indicate bad request(2ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe note is submitted(29ms)
✓Thenthe note response should indicate bad request(2ms)
✓Thenthe note response should indicate bad request(2ms)
Diagrams
Details:lines
Listing notes by recipe should return matching notes 575ms🔗Steps✓Givena chef note exists(216ms)
✓Givena chef note exists(216ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena chef note exists(216ms)
✓Whenthe notes are listed by recipe(325ms)
✓Whenthe notes are listed by recipe(325ms)
✓Thenthe list response should contain the note(17ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps list response should contain [ n => n.NoteId == '9248792a-2752-4eb4-9772-d8603838bcbd' ](0ms)
✓Whenthe notes are listed by recipe(325ms)
✓Thenthe list response should contain the note(17ms)
✓Thenthe list response should contain the note(17ms)
Diagrams
Details:lines
Retrieving a non-existent note should return not found 21ms🔗Steps✓Whena non-existent note is retrieved(13ms)
✓Whena non-existent note is retrieved(13ms)
✓Whena non-existent note is retrieved(13ms)
✓Thenthe get response should indicate not found(3ms)
✓Get steps response message status code should be NotFound(0ms)
✓Thenthe get response should indicate not found(3ms)
✓Thenthe get response should indicate not found(3ms)
Diagrams
Details:lines
Retrieving an existing note by id should return the note 81ms🔗Steps✓Givena chef note exists(10ms)
✓Givena chef note exists(10ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena chef note exists(10ms)
✓Whenthe note is retrieved by id(57ms)
✓Whenthe note is retrieved by id(57ms)
✓Thenthe get response should contain the note(10ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response note id should be '47da0870-d64b-44d3-be13-1f6bd95fac63'(0ms)
✓Get steps response recipe name should be 'Recipe-ad87f3f8ed2e4b128837601ac7a08faf'(0ms)
✓Whenthe note is retrieved by id(57ms)
✓Thenthe get response should contain the note(10ms)
✓Thenthe get response should contain the note(10ms)
Diagrams
Details:lines
Updating a non-existent note should return not found 82ms🔗Steps✓Whena non-existent note is updated(79ms)
✓Whena non-existent note is updated(79ms)
✓Whena non-existent note is updated(79ms)
✓Thenthe note update response should indicate not found(1ms)
✓Patch steps response message status code should be NotFound(0ms)
✓Thenthe note update response should indicate not found(1ms)
✓Thenthe note update response should indicate not found(1ms)
Diagrams
Details:lines
Updating an existing note should return the updated note 44ms🔗Steps✓Givena chef note exists(5ms)
✓Givena chef note exists(5ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena chef note exists(5ms)
✓Whenthe note is updated(22ms)
✓Whenthe note is updated(22ms)
✓Thenthe update response should contain the modified note(13ms)
✓Patch steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response note id should be '7e607ff2-523c-479a-8b3c-babd3f52bb71'(0ms)
✓Patch steps response note text should be "Updated: Use unsalted butter for better flavour control."(0ms)
✓Patch steps response category should be "Ingredients"(0ms)
✓Patch steps response updated at should not be null(0ms)
✓Whenthe note is updated(22ms)
✓Thenthe update response should contain the modified note(13ms)
✓Thenthe update response should contain the modified note(13ms)
Diagrams
Details:lines
Complete Order Lifecycle
/orders - Complete order lifecycle from creation through to completion
An order should progress through all status transitions to completion Happy Path156ms🔗Steps✓Givena pancake batch has been created(21ms)
✓Givena pancake batch has been created(21ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(21ms)
✓Anda breakfast order has been placed for the batch(25ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Anda breakfast order has been placed for the batch(25ms)
✓Whenthe order progresses through all statuses to completed(34ms)
✓Patch steps response message status code should be OK(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Anda breakfast order has been placed for the batch(25ms)
✓Thenthe completed order should be retrievable with all details(10ms)
✓Get order steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get order steps response order id should be '9c5768c9-addd-4c15-b512-47ae3535e75f'(0ms)
✓Get order steps response status should be Completed(0ms)
✓Get order steps response customer name should be 'LifecycleTestCustomer_7994029807799751507'(0ms)
✓Whenthe order progresses through all statuses to completed(34ms)
✓Andan audit log entry should exist for the order(45ms)
✓Audit steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Audit steps response should contain [ a => a.Action == AuditLogDefaults.CreatedAction && a.EntityType == AuditLogDefaults.OrderEntityType && a.Details.Contains('LifecycleTestCustomer_7994029807799751507') ](0ms)
✓Whenthe order progresses through all statuses to completed(34ms)
✓Andthe cow service should have received a milk request(2ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Thenthe completed order should be retrievable with all details(10ms)
✓Andthe kitchen service should have received a preparation request(3ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
✓Thenthe completed order should be retrievable with all details(10ms)
✓Andan audit log entry should exist for the order(45ms)
✓Andan audit log entry should exist for the order(45ms)
✓Andthe cow service should have received a milk request(2ms)
✓Andthe cow service should have received a milk request(2ms)
✓Andthe kitchen service should have received a preparation request(3ms)
✓Andthe kitchen service should have received a preparation request(3ms)
Diagrams
Details:lines
Correlation Id
Cross-cutting - X-Correlation-Id header propagation across API responses
Provided correlation IDs are echoed backA request with a correlation id should return the same id in the response Happy Path8ms🔗Steps✓Givena request with a known correlation id(0ms)
✓Givena request with a known correlation id(0ms)
✓Givena request with a known correlation id(0ms)
✓Whenthe request is sent to the menu endpoint(3ms)
✓Whenthe request is sent to the menu endpoint(3ms)
✓Thenthe response should contain the same correlation id(1ms)
✓Response contains correlation id header should be true(0ms)
✓First correlation id header value should be '06bc176a-e89e-4a26-a0b2-ac8b8f51f7c8'(0ms)
✓Whenthe request is sent to the menu endpoint(3ms)
✓Thenthe response should contain the same correlation id(1ms)
✓Thenthe response should contain the same correlation id(1ms)
Diagrams
Details:lines
Missing correlation IDs are generated automaticallyA request without a correlation id should have one generated in the response 5ms🔗Steps✓Whena request without a correlation id is sent to the menu endpoint(2ms)
✓Whena request without a correlation id is sent to the menu endpoint(2ms)
✓Whena request without a correlation id is sent to the menu endpoint(2ms)
✓Thenthe response should contain a generated correlation id(1ms)
✓Response contains correlation id header should be true(0ms)
✓First correlation id header value should not be null or empty(0ms)
✓Thenthe response should contain a generated correlation id(1ms)
✓Thenthe response should contain a generated correlation id(1ms)
Customer preferences support CRUD operationsSaving customer preferences should return the saved preferences Happy Path15ms🔗Steps✓Givena valid customer preference request(1ms)
✓Givena valid customer preference request(1ms)
✓Givena valid customer preference request(1ms)
✓Whenthe customer preferences are saved(9ms)
✓Whenthe customer preferences are saved(9ms)
✓Thenthe preference response should contain the saved preferences(3ms)
✓Put steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Put steps response preferred milk type should be "Oat"(0ms)
✓Put steps response favourite item should be "Blueberry Pancakes"(0ms)
✓Whenthe customer preferences are saved(9ms)
✓Thenthe preference response should contain the saved preferences(3ms)
✓Thenthe preference response should contain the saved preferences(3ms)
Diagrams
Details:lines
Retrieving existing customer preferences should return the preferences 21ms🔗Steps✓Givencustomer preferences exist(5ms)
✓Givencustomer preferences exist(5ms)
✓Put steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Givencustomer preferences exist(5ms)
✓Whenthe customer preferences are retrieved(8ms)
✓Whenthe customer preferences are retrieved(8ms)
✓Thenthe preference get response should contain the preferences(5ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response customer id should be '073a9175ebc24979bdb2f3cac5de1ee9'(0ms)
✓Get steps response preferred milk type should be "Oat"(0ms)
✓Get steps response likes extra toppings should be true(0ms)
✓Whenthe customer preferences are retrieved(8ms)
✓Thenthe preference get response should contain the preferences(5ms)
✓Thenthe preference get response should contain the preferences(5ms)
Diagrams
Details:lines
Non-existent preferences cannot be retrievedRetrieving non-existent customer preferences should return not found 1.3s🔗Steps✓Whennon-existent customer preferences are retrieved(1.2s)
✓Whennon-existent customer preferences are retrieved(1.2s)
✓Whennon-existent customer preferences are retrieved(1.2s)
✓Thenthe preference get response should indicate not found(2ms)
✓Get steps response message status code should be NotFound(0ms)
✓Thenthe preference get response should indicate not found(2ms)
✓Thenthe preference get response should indicate not found(2ms)
Diagrams
Details:lines
Preference requests must pass validationSaving customer preferences with missing customer name should return bad request 6ms🔗Steps✓Givena customer preference request with missing customer name(1ms)
✓Givena customer preference request with missing customer name(1ms)
✓Givena customer preference request with missing customer name(1ms)
✓Whenthe customer preferences are saved(1ms)
✓Whenthe customer preferences are saved(1ms)
✓Thenthe preference response should indicate bad request(1ms)
✓Put steps response message status code should be BadRequest(0ms)
✓Whenthe customer preferences are saved(1ms)
✓Thenthe preference response should indicate bad request(1ms)
✓Thenthe preference response should indicate bad request(1ms)
Diagrams
Details:lines
Customer preferences support CRUD operationsUpdating customer preferences should return the updated preferences 109ms🔗Steps✓Givencustomer preferences exist(90ms)
✓Givencustomer preferences exist(90ms)
✓Put steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Givencustomer preferences exist(90ms)
✓Whenthe customer preferences are updated(12ms)
✓Whenthe customer preferences are updated(12ms)
✓Thenthe preference update response should contain the updated values(4ms)
✓Put steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Put steps response preferred milk type should be "Almond"(0ms)
✓Put steps response favourite item should be "Belgian Waffles"(0ms)
✓Whenthe customer preferences are updated(12ms)
✓Thenthe preference update response should contain the updated values(4ms)
✓Thenthe preference update response should contain the updated values(4ms)
Diagrams
Details:lines
Daily Specials Idempotency
/daily-specials/orders - Idempotent order creation using Idempotency-Key header
Submitting the same order with different idempotency keys should return different confirmations 175ms🔗Background Steps✓Giventhe cinnamon swirl order count is reset(49ms)
✓Giventhe cinnamon swirl order count is reset(49ms)
✓Giventhe cinnamon swirl order count is reset(49ms)
✓Andan order request for the same special(1ms)
Steps✓Andan order request for the same special(1ms)
✓Whenthe order is submitted with two different idempotency keys(113ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Andan order request for the same special(1ms)
✓Thenthe responses should have different confirmation ids(5ms)
✓First confirmation id should not be '8d16d354-2b8c-4956-b276-724b8ff06848'(0ms)
✓Whenthe order is submitted with two different idempotency keys(113ms)
✓Whenthe order is submitted with two different idempotency keys(113ms)
✓Thenthe responses should have different confirmation ids(5ms)
✓Thenthe responses should have different confirmation ids(5ms)
Diagrams
Details:lines
Submitting the same order with the same idempotency key should return the same confirmation 25ms🔗Background Steps✓Giventhe cinnamon swirl order count is reset(49ms)
✓Giventhe cinnamon swirl order count is reset(49ms)
✓Giventhe cinnamon swirl order count is reset(49ms)
✓Andan order request for the same special(1ms)
Steps✓Andan order request with an idempotency key(7ms)
✓Whenthe order is submitted twice with the same idempotency key(12ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Andan order request with an idempotency key(7ms)
✓Thenboth responses should return the same confirmation id(2ms)
✓First confirmation id should be '6a82cd20-11b6-44c3-83df-7dc5c5b6ee21'(0ms)
✓Whenthe order is submitted twice with the same idempotency key(12ms)
✓Whenthe order is submitted twice with the same idempotency key(12ms)
✓Thenboth responses should return the same confirmation id(1ms)
✓Thenboth responses should return the same confirmation id(1ms)
Diagrams
Details:lines
Daily Specials Not Found
/daily-specials/orders - Ordering a non-existent daily special
Ordering a non-existent daily special should return not found 448ms🔗Steps✓Givena daily special order request for a non-existent special(39ms)
✓Givena daily special order request for a non-existent special(39ms)
✓Givena daily special order request for a non-existent special(39ms)
✓Whenthe daily special order is submitted(319ms)
✓Whenthe daily special order is submitted(319ms)
✓Thenthe daily special response should indicate not found(14ms)
✓Post steps response message status code should be NotFound(0ms)
✓Whenthe daily special order is submitted(319ms)
✓Thenthe daily special response should indicate not found(14ms)
✓Thenthe daily special response should indicate not found(14ms)
Diagrams
Details:lines
Daily Specials Ordering
/daily-specials - Ordering daily specials with threshold limits
Valid daily special orders are fulfilledA valid daily special order should return a confirmation Happy Path42ms🔗Steps✓Giventhe cinnamon swirl order count is reset(18ms)
✓Giventhe cinnamon swirl order count is reset(18ms)
✓Giventhe cinnamon swirl order count is reset(18ms)
✓Anda valid daily special order request for cinnamon swirl(13ms)
✓Anda valid daily special order request for cinnamon swirl(13ms)
✓Whenthe daily special order is submitted(1ms)
✓Anda valid daily special order request for cinnamon swirl(13ms)
✓Thenthe daily special order response should contain a valid confirmation(4ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response special id should be CinnamonSwirlId(0ms)
✓Post steps response order confirmation id should not be empty(0ms)
✓Whenthe daily special order is submitted(1ms)
✓Whenthe daily special order is submitted(1ms)
✓Thenthe daily special order response should contain a valid confirmation(4ms)
✓Thenthe daily special order response should contain a valid confirmation(4ms)
Diagrams
Details:lines
Orders are rejected when the daily limit is reachedOrdering a daily special beyond the threshold should return a conflict response IgnoreIfExternalSut16ms🔗Steps✓Giventhe matcha waffles order count is reset(3ms)
✓Giventhe matcha waffles order count is reset(3ms)
✓Giventhe matcha waffles order count is reset(3ms)
✓Andthe matcha waffles special has been ordered up to the configured limit(4ms)
✓Post steps response message status code should be Created(0ms)
✓Andthe matcha waffles special has been ordered up to the configured limit(4ms)
✓Whenanother order is placed for the matcha waffles special(4ms)
✓Andthe matcha waffles special has been ordered up to the configured limit(4ms)
✓Thenthe response should indicate the daily special is sold out(1ms)
✓Post steps response message status code should be Conflict(0ms)
✓Whenanother order is placed for the matcha waffles special(4ms)
✓Whenanother order is placed for the matcha waffles special(4ms)
✓Thenthe response should indicate the daily special is sold out(1ms)
✓Thenthe response should indicate the daily special is sold out(1ms)
Diagrams
Details:lines
Remaining quantity decreases with each orderRemaining quantity should decrease after each order IgnoreIfExternalSut19ms🔗Steps✓Giventhe lemon ricotta order count is reset(2ms)
✓Giventhe lemon ricotta order count is reset(2ms)
✓Giventhe lemon ricotta order count is reset(2ms)
✓Anda daily special order for lemon ricotta of quantity one is placed(4ms)
✓Post steps response message status code should be Created(0ms)
✓Anda daily special order for lemon ricotta of quantity one is placed(4ms)
✓Whenthe available daily specials are requested(1ms)
✓Anda daily special order for lemon ricotta of quantity one is placed(4ms)
✓Thenthe lemon ricotta special should have one fewer remaining(8ms)
✓Response content is valid json should be true(0ms)
✓Lemon ricotta remaining quantity should be MaxOrdersPerSpecial - 1(0ms)
✓Whenthe available daily specials are requested(1ms)
✓Whenthe available daily specials are requested(1ms)
✓Thenthe lemon ricotta special should have one fewer remaining(8ms)
✓Thenthe lemon ricotta special should have one fewer remaining(8ms)
Diagrams
Details:lines
Valid daily special orders are fulfilledThe daily specials endpoint should return all available specials 27ms🔗Steps✓Whenthe available daily specials are requested(17ms)
✓Whenthe available daily specials are requested(17ms)
✓Whenthe available daily specials are requested(17ms)
✓Thenthe daily specials response should contain all expected specials(8ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response should have count ExpectedSpecialsCount(0ms)
✓Thenthe daily specials response should contain all expected specials(8ms)
✓Thenthe daily specials response should contain all expected specials(8ms)
Diagrams
Details:lines
Daily Specials Validation
/daily-specials/orders - Input validation for daily special orders
Daily specials order endpoint is called with invalid fields should return a bad request response 2/2 passed25ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
Quantity
0
Quantity must be > zero
Quantity must be greater than zero.
Bad Request
Passed
21ms
2
SpecialId
SpecialId is required
'Special Id' is required.
Bad Request
Passed
3ms
Steps✓Givena valid daily special order request with "Quantity" set to "0"(3ms)
✓Givena valid daily special order request with "Quantity" set to "0"(3ms)
✓Givena valid daily special order request with "Quantity" set to "0"(3ms)
✓Whenthe invalid daily special order request is submitted(7ms)
✓Whenthe invalid daily special order request is submitted(7ms)
✓Thenthe daily special response should contain error "Quantity must be greater than zero." with status "Bad Request"(4ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Quantity must be greater than zero.') ](0ms)
✓Whenthe invalid daily special order request is submitted(7ms)
✓Thenthe daily special response should contain error "Quantity must be greater than zero." with status "Bad Request"(4ms)
✓Thenthe daily special response should contain error "Quantity must be greater than zero." with status "Bad Request"(4ms)
Steps✓Givena valid daily special order request with "SpecialId" set to ""(0ms)
✓Givena valid daily special order request with "SpecialId" set to ""(0ms)
✓Givena valid daily special order request with "SpecialId" set to ""(0ms)
✓Whenthe invalid daily special order request is submitted(1ms)
✓Whenthe invalid daily special order request is submitted(1ms)
✓Thenthe daily special response should contain error "'Special Id' is required." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Special Id' is required.') ](0ms)
✓Whenthe invalid daily special order request is submitted(1ms)
✓Thenthe daily special response should contain error "'Special Id' is required." with status "Bad Request"(0ms)
✓Thenthe daily special response should contain error "'Special Id' is required." with status "Bad Request"(0ms)
Diagrams
Details:lines
Degraded Health Check
/health - Health check endpoint reporting degraded status when downstream services are unavailable
Health check should report degraded when multiple downstream services are unavailable SkipUnlessFakesControllable165ms🔗Steps✓Giventhe cow service is configured to be unreachable(0ms)
✓Giventhe cow service is configured to be unreachable(0ms)
✓Giventhe cow service is configured to be unreachable(0ms)
✓Andthe supplier service is configured to be unreachable(0ms)
✓Andthe supplier service is configured to be unreachable(0ms)
✓Whenthe health check endpoint is called(149ms)
✓Andthe supplier service is configured to be unreachable(0ms)
✓Thenthe health check response should indicate a degraded status(3ms)
✓Health response status code should be OK(0ms)
✓Health check result status should be Degraded(0ms)
✓Whenthe health check endpoint is called(149ms)
✓Andthe cow service dependency should report degraded(1ms)
✓Health check result results should contain key CowService(0ms)
✓Cow service health status should be Degraded(0ms)
✓Whenthe health check endpoint is called(149ms)
✓Andthe supplier service dependency should report degraded(3ms)
✓Health check result results should contain key SupplierService(0ms)
✓Supplier service health status should be Degraded(0ms)
✓Thenthe health check response should indicate a degraded status(3ms)
✓Thenthe health check response should indicate a degraded status(3ms)
✓Andthe cow service dependency should report degraded(1ms)
✓Andthe cow service dependency should report degraded(1ms)
✓Andthe supplier service dependency should report degraded(3ms)
✓Andthe supplier service dependency should report degraded(3ms)
Diagrams
Details:lines
Health check should report degraded when the cow service is unavailable SkipUnlessFakesControllable192ms🔗Steps✓Giventhe cow service is configured to be unreachable(0ms)
✓Giventhe cow service is configured to be unreachable(0ms)
✓Giventhe cow service is configured to be unreachable(0ms)
✓Whenthe health check endpoint is called(188ms)
✓Whenthe health check endpoint is called(188ms)
✓Thenthe health check response should indicate a degraded status(0ms)
✓Health response status code should be OK(0ms)
✓Health check result status should be Degraded(0ms)
✓Whenthe health check endpoint is called(188ms)
✓Andthe cow service dependency should report degraded(0ms)
✓Health check result results should contain key CowService(0ms)
✓Cow service health status should be Degraded(0ms)
✓Thenthe health check response should indicate a degraded status(0ms)
✓Thenthe health check response should indicate a degraded status(0ms)
✓Andthe cow service dependency should report degraded(0ms)
✓Andthe cow service dependency should report degraded(0ms)
Diagrams
Details:lines
Downstream Error Health Check
/health - Health check reports degraded when a downstream service returns a non-success HTTP status
Health check should report degraded when a downstream service returns a non-success status SkipUnlessFakesControllable174ms🔗Steps✓Giventhe kitchen service health check is configured to use a failing endpoint(137ms)
✓Giventhe kitchen service health check is configured to use a failing endpoint(137ms)
✓Giventhe kitchen service health check is configured to use a failing endpoint(137ms)
✓Whenthe health check endpoint is called(24ms)
✓Whenthe health check endpoint is called(24ms)
✓Thenthe health check response should indicate a degraded status(0ms)
✓Health response status code should be OK(0ms)
✓Health check result status should be Degraded(0ms)
✓Whenthe health check endpoint is called(24ms)
✓Andthe kitchen service dependency should report degraded with a status code description(5ms)
✓Health check result results should contain key KitchenService(0ms)
✓Kitchen service health status should be Degraded(0ms)
✓Kitchen service health description should contain "503"(0ms)
✓Thenthe health check response should indicate a degraded status(0ms)
✓Thenthe health check response should indicate a degraded status(0ms)
✓Andthe kitchen service dependency should report degraded with a status code description(5ms)
✓Andthe kitchen service dependency should report degraded with a status code description(5ms)
Diagrams
Details:lines
Equipment Alerts
/graphql - Querying equipment alerts populated by Event Hub consumption
Equipment alerts should contain data ingested via Event Hub consumer Happy Path53ms🔗Steps✓Givena pancake batch has been created(13ms)
✓Givena pancake batch has been created(13ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(13ms)
✓Whenthe equipment alerts are queried via graphql(21ms)
✓Whenthe equipment alerts are queried via graphql(21ms)
✓Thenthe graphql response should contain the equipment alert record(13ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Whenthe equipment alerts are queried via graphql(21ms)
✓Thenthe graphql response should contain the equipment alert record(13ms)
✓Thenthe graphql response should contain the equipment alert record(13ms)
Diagrams
Details:lines
Feedback Management
/feedback - Submitting and retrieving customer feedback
Feedback can be submitted and retrievedSubmitting feedback should return the created feedback Happy Path31ms🔗Steps✓Givena valid feedback request(16ms)
✓Givena valid feedback request(16ms)
✓Givena valid feedback request(16ms)
✓Whenthe feedback is submitted(8ms)
✓Whenthe feedback is submitted(8ms)
✓Thenthe feedback response should contain the created feedback(4ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response customer name should be 'CustomerName'(0ms)
✓Post steps response rating should be 4(0ms)
✓Whenthe feedback is submitted(8ms)
✓Thenthe feedback response should contain the created feedback(4ms)
✓Thenthe feedback response should contain the created feedback(4ms)
Diagrams
Details:lines
Listing feedback for an order should return the feedback 371ms🔗Steps✓Givena feedback entry exists(202ms)
✓Givena feedback entry exists(202ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena feedback entry exists(202ms)
✓Whenthe feedback is retrieved by order id(150ms)
✓Whenthe feedback is retrieved by order id(150ms)
✓Thenthe feedback list response should contain the feedback(12ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps list response should contain [ f => f.FeedbackId == 'f16f1e1f-9987-4712-a906-0712302ebc9b' ](0ms)
✓Whenthe feedback is retrieved by order id(150ms)
✓Thenthe feedback list response should contain the feedback(12ms)
✓Thenthe feedback list response should contain the feedback(12ms)
Diagrams
Details:lines
Retrieving existing feedback by id should return the feedback 26ms🔗Steps✓Givena feedback entry exists(8ms)
✓Givena feedback entry exists(8ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena feedback entry exists(8ms)
✓Whenthe feedback is retrieved by id(9ms)
✓Whenthe feedback is retrieved by id(9ms)
✓Thenthe feedback get response should contain the feedback(6ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response feedback id should be '288a92c4-6125-48d3-a096-4a049f9fe905'(0ms)
✓Get steps response customer name should be 'CustomerName'(0ms)
✓Get steps response rating should be 4(0ms)
✓Whenthe feedback is retrieved by id(9ms)
✓Thenthe feedback get response should contain the feedback(6ms)
✓Thenthe feedback get response should contain the feedback(6ms)
Diagrams
Details:lines
Non-existent feedback cannot be retrievedRetrieving non-existent feedback should return not found 27ms🔗Steps✓Whena non-existent feedback is retrieved(24ms)
✓Whena non-existent feedback is retrieved(24ms)
✓Whena non-existent feedback is retrieved(24ms)
✓Thenthe feedback get response should indicate not found(1ms)
✓Get steps response message status code should be NotFound(0ms)
✓Thenthe feedback get response should indicate not found(1ms)
✓Thenthe feedback get response should indicate not found(1ms)
Diagrams
Details:lines
Feedback requests must pass validationSubmitting feedback with invalid rating should return bad request 4ms🔗Steps✓Givena feedback request with an invalid rating(0ms)
✓Givena feedback request with an invalid rating(0ms)
✓Givena feedback request with an invalid rating(0ms)
✓Whenthe feedback is submitted(2ms)
✓Whenthe feedback is submitted(2ms)
✓Thenthe feedback response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe feedback is submitted(2ms)
✓Thenthe feedback response should indicate bad request(0ms)
✓Thenthe feedback response should indicate bad request(0ms)
Diagrams
Details:lines
Submitting feedback with missing customer name should return bad request 11ms🔗Steps✓Givena feedback request with missing customer name(3ms)
✓Givena feedback request with missing customer name(3ms)
✓Givena feedback request with missing customer name(3ms)
✓Whenthe feedback is submitted(5ms)
✓Whenthe feedback is submitted(5ms)
✓Thenthe feedback response should indicate bad request(1ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe feedback is submitted(5ms)
✓Thenthe feedback response should indicate bad request(1ms)
✓Thenthe feedback response should indicate bad request(1ms)
Diagrams
Details:lines
Goat Milk Downstream Failure
/goat-milk - Handling downstream Goat Service failures
Requesting goat milk when the goat service is unavailable should return a bad gateway response SkipUnlessFakesControllable11ms🔗Steps✓Giventhe goat service will return service unavailable(1ms)
✓Giventhe goat service will return service unavailable(1ms)
✓Giventhe goat service will return service unavailable(1ms)
✓Whengoat milk is requested(3ms)
✓Whengoat milk is requested(3ms)
✓Thenthe goat milk response should indicate a bad gateway(2ms)
✓Goat milk steps response message status code should be BadGateway(0ms)
✓Goat milk error response body should contain GoatServiceUnavailableTitle(0ms)
✓Whengoat milk is requested(3ms)
✓Thenthe goat milk response should indicate a bad gateway(2ms)
✓Thenthe goat milk response should indicate a bad gateway(2ms)
Diagrams
Details:lines
Requesting goat milk when the goat service returns an invalid response should return a bad gateway response SkipUnlessFakesControllable7ms🔗Steps✓Giventhe goat service will return an invalid response(0ms)
✓Giventhe goat service will return an invalid response(0ms)
✓Giventhe goat service will return an invalid response(0ms)
✓Whengoat milk is requested(3ms)
✓Whengoat milk is requested(3ms)
✓Thenthe goat milk response should indicate a bad gateway(0ms)
✓Goat milk steps response message status code should be BadGateway(0ms)
✓Goat milk error response body should contain GoatServiceUnavailableTitle(0ms)
✓Whengoat milk is requested(3ms)
✓Thenthe goat milk response should indicate a bad gateway(0ms)
✓Thenthe goat milk response should indicate a bad gateway(0ms)
Diagrams
Details:lines
Goat Milk Feature Flag
/goat-milk - Goat milk availability controlled by feature flag
Goat milk is available when the feature flag is enabledGoat milk endpoint should return fresh goat milk when feature is enabled IgnoreIfExternalSut154ms🔗Steps✓Giventhe goat milk feature flag is enabled(124ms)
✓Giventhe goat milk feature flag is enabled(124ms)
✓Giventhe goat milk feature flag is enabled(124ms)
✓Whengoat milk is requested(26ms)
✓Whengoat milk is requested(26ms)
✓Thenthe goat milk response should contain fresh goat milk(0ms)
✓Goat milk steps response message status code should be OK(0ms)
✓Goat milk steps goat milk response goat milk should be FreshGoatMilk(0ms)
✓Whengoat milk is requested(26ms)
✓Thenthe goat milk response should contain fresh goat milk(0ms)
✓Thenthe goat milk response should contain fresh goat milk(0ms)
Diagrams
Details:lines
Goat milk is hidden when the feature flag is disabledGoat milk endpoint should return not found when feature is disabled IgnoreIfExternalSut221ms🔗Steps✓Giventhe goat milk feature flag is disabled(107ms)
✓Giventhe goat milk feature flag is disabled(107ms)
✓Giventhe goat milk feature flag is disabled(107ms)
✓Whengoat milk is requested(22ms)
✓Whengoat milk is requested(22ms)
✓Thenthe goat milk response should indicate feature disabled(67ms)
✓Goat milk steps response message status code should be NotFound(0ms)
✓Goat milk feature disabled response body should contain FeatureDisabled(0ms)
✓Whengoat milk is requested(22ms)
✓Thenthe goat milk response should indicate feature disabled(67ms)
✓Thenthe goat milk response should indicate feature disabled(67ms)
Diagrams
Details:lines
Goat Milk Sourcing
/goat-milk - Retrieving goat milk from the Goat Service
A valid goat milk request should return fresh goat milk Happy Path67ms🔗Steps✓Whengoat milk is requested(58ms)
✓Whengoat milk is requested(58ms)
✓Whengoat milk is requested(58ms)
✓Thenthe goat milk response should contain fresh goat milk(4ms)
✓Goat milk steps response message status code should be OK(0ms)
✓Goat milk steps goat milk response goat milk should be FreshGoatMilk(0ms)
✓Thenthe goat milk response should contain fresh goat milk(4ms)
✓Thenthe goat milk response should contain fresh goat milk(4ms)
Diagrams
Details:lines
Header Propagation
/milk; /menu - X-Correlation-Id header propagation to downstream services
A request with a correlation id should forward it to the cow service Happy PathSkipUnlessFakesControllable11ms🔗Steps✓Givena request with a known correlation id(0ms)
✓Givena request with a known correlation id(0ms)
✓Givena request with a known correlation id(0ms)
✓Whenmilk is requested with the correlation id(7ms)
✓Whenmilk is requested with the correlation id(7ms)
✓Thenthe cow service should have received the correlation id(1ms)
✓Requests should not be empty(0ms)
✓Request headers should contain key CorrelationId(0ms)
✓Request headers[ custom headers correlation id] should be 'aedd3fb5-95ec-42f7-bc63-01aad49d5f31'(0ms)
✓Whenmilk is requested with the correlation id(7ms)
✓Thenthe cow service should have received the correlation id(1ms)
✓Thenthe cow service should have received the correlation id(1ms)
Diagrams
Details:lines
A request with a correlation id should forward it to the supplier service SkipUnlessFakesControllable44ms🔗Steps✓Givena request with a known correlation id(1ms)
✓Givena request with a known correlation id(1ms)
✓Givena request with a known correlation id(1ms)
✓Andthe menu cache is cleared(8ms)
✓Andthe menu cache is cleared(8ms)
✓Whenthe menu is requested with the correlation id(20ms)
✓Andthe menu cache is cleared(8ms)
✓Thenthe supplier service should have received the correlation id(10ms)
✓Requests should not be empty(0ms)
✓Request headers should contain key CorrelationId(0ms)
✓Request headers[ custom headers correlation id] should be 'c8b34ec9-761c-4782-86f9-e78bca3f9c9b'(0ms)
✓Whenthe menu is requested with the correlation id(20ms)
✓Whenthe menu is requested with the correlation id(20ms)
✓Thenthe supplier service should have received the correlation id(10ms)
✓Thenthe supplier service should have received the correlation id(10ms)
Diagrams
Details:lines
Health Check
/health - Health check endpoint with dependency status for monitoring
The health check endpoint should return a healthy status with dependency details Happy Path14ms🔗Steps✓Whenthe health check endpoint is called(5ms)
✓Whenthe health check endpoint is called(5ms)
✓Whenthe health check endpoint is called(5ms)
✓Thenthe health check response should indicate healthy with all dependencies(7ms)
✓Health response status code should be OK(0ms)
✓Health check result should not be null(0ms)
✓Health check result status should be Healthy(0ms)
✓Health check result results should contain key CowService(0ms)
✓Health check result results should contain key GoatService(0ms)
✓Health check result results should contain key SupplierService(0ms)
✓Health check result results should contain key KitchenService(0ms)
✓Health check result results should contain key CosmosDb(0ms)
✓Health check result results should contain key Kafka(0ms)
✓Thenthe health check response should indicate healthy with all dependencies(6ms)
✓Thenthe health check response should indicate healthy with all dependencies(6ms)
Diagrams
Details:lines
Health Check Detail
/health - Health check response includes detailed entry descriptions and data
The health check response should include description and data for each entry 153ms🔗Steps✓Whenthe health check endpoint is called(97ms)
✓Whenthe health check endpoint is called(97ms)
✓Whenthe health check endpoint is called(97ms)
✓Thenthe health check response should contain detailed entries(49ms)
✓Health response status code should be OK(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check entry status should not be null or empty $"'{entry.Key}' should have a status"(0ms)
✓Health check result results should contain key 'CowService'(0ms)
✓Health check description should not be null or empty $"'{checkName}' should have a description"(0ms)
✓Health check result results should contain key 'GoatService'(0ms)
✓Health check description should not be null or empty $"'{checkName}' should have a description"(0ms)
✓Health check result results should contain key 'SupplierService'(0ms)
✓Health check description should not be null or empty $"'{checkName}' should have a description"(0ms)
✓Health check result results should contain key 'KitchenService'(0ms)
✓Health check description should not be null or empty $"'{checkName}' should have a description"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Health check entry data should not be null $"'{entry.Key}' should have a data object"(0ms)
✓Thenthe health check response should contain detailed entries(49ms)
✓Thenthe health check response should contain detailed entries(49ms)
Diagrams
Details:lines
Heartbeat
/heartbeat - Heartbeat endpoint confirming the service is running
The heartbeat endpoint should return a running message Happy Path18ms🔗Steps✓Whenthe heartbeat endpoint is called(10ms)
✓Whenthe heartbeat endpoint is called(10ms)
✓Whenthe heartbeat endpoint is called(10ms)
✓Thenthe heartbeat response should indicate the service is running(4ms)
✓Heartbeat response status code should be OK(0ms)
✓Result should not be null(0ms)
✓Result status should be HeartbeatStatus(0ms)
✓Thenthe heartbeat response should indicate the service is running(4ms)
✓Thenthe heartbeat response should indicate the service is running(4ms)
Diagrams
Details:lines
Ingredient Usage Analytics
/ingredient-usage - Recording and summarising ingredient usage (BigQuery)
Recording ingredient usage should return the created record Happy Path12ms🔗Steps✓Givena valid ingredient usage request(0ms)
✓Givena valid ingredient usage request(0ms)
✓Givena valid ingredient usage request(0ms)
✓Whenthe ingredient usage is recorded(4ms)
✓Whenthe ingredient usage is recorded(4ms)
✓Thenthe usage response should contain the created record(5ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response ingredient name should be 'Flour-a7fe767fddd04e48a4dcc55b1a5bd1dc'(0ms)
✓Post steps response quantity used should be '5m'(0ms)
✓Post steps response usage id should not be null or empty(0ms)
✓Whenthe ingredient usage is recorded(4ms)
✓Thenthe usage response should contain the created record(5ms)
✓Thenthe usage response should contain the created record(5ms)
Diagrams
Details:lines
Getting usage summary should return aggregated data 64ms🔗Steps✓Givenan ingredient usage record has been created(2ms)
✓Givenan ingredient usage record has been created(2ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan ingredient usage record has been created(2ms)
✓Whenthe usage summary is requested(51ms)
✓Whenthe usage summary is requested(51ms)
✓Thenthe summary should contain aggregated data(8ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps summary response should contain [ s => s.IngredientName == 'Flour-b3a97324c01e43db8011d759c829b728' ](0ms)
✓Whenthe usage summary is requested(51ms)
✓Thenthe summary should contain aggregated data(8ms)
✓Thenthe summary should contain aggregated data(8ms)
Diagrams
Details:lines
Listing usage by ingredient should return matching records 96ms🔗Steps✓Givenan ingredient usage record has been created(47ms)
✓Givenan ingredient usage record has been created(47ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan ingredient usage record has been created(47ms)
✓Whenthe usage is listed by ingredient name(37ms)
✓Whenthe usage is listed by ingredient name(37ms)
✓Thenthe usage list response should contain the record(8ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps list response should contain [ u => u.IngredientName == 'Flour-3c9c20c4c72d4c61bf24720ad9530cdc' ](0ms)
✓Whenthe usage is listed by ingredient name(37ms)
✓Thenthe usage list response should contain the record(8ms)
✓Thenthe usage list response should contain the record(8ms)
Diagrams
Details:lines
Recording usage with missing ingredient name should return bad request 53ms🔗Steps✓Givenan ingredient usage request with a missing ingredient name(3ms)
✓Givenan ingredient usage request with a missing ingredient name(3ms)
✓Givenan ingredient usage request with a missing ingredient name(3ms)
✓Whenthe ingredient usage is recorded(43ms)
✓Whenthe ingredient usage is recorded(43ms)
✓Thenthe usage post response should indicate bad request(2ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe ingredient usage is recorded(43ms)
✓Thenthe usage post response should indicate bad request(2ms)
✓Thenthe usage post response should indicate bad request(2ms)
Diagrams
Details:lines
Recording usage with zero quantity should return bad request 5ms🔗Steps✓Givenan ingredient usage request with zero quantity(1ms)
✓Givenan ingredient usage request with zero quantity(1ms)
✓Givenan ingredient usage request with zero quantity(1ms)
✓Whenthe ingredient usage is recorded(1ms)
✓Whenthe ingredient usage is recorded(1ms)
✓Thenthe usage post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe ingredient usage is recorded(1ms)
✓Thenthe usage post response should indicate bad request(0ms)
✓Thenthe usage post response should indicate bad request(0ms)
Diagrams
Details:lines
Ingredient Waste Tracking
/ingredient-waste - Recording and managing ingredient waste (BigQuery)
Recording ingredient waste should return the created record Happy Path16ms🔗Steps✓Givena valid ingredient waste request(0ms)
✓Givena valid ingredient waste request(0ms)
✓Givena valid ingredient waste request(0ms)
✓Whenthe waste is recorded(3ms)
✓Whenthe waste is recorded(3ms)
✓Thenthe waste response should contain the created record(10ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response ingredient name should not be null or empty(0ms)
✓Post steps response quantity wasted should be '5m'(0ms)
✓Post steps response waste id should not be null or empty(0ms)
✓Post steps response reason should be "Expired before use"(0ms)
✓Whenthe waste is recorded(3ms)
✓Thenthe waste response should contain the created record(10ms)
✓Thenthe waste response should contain the created record(10ms)
Diagrams
Details:lines
Deleting a waste record should return no content 60ms🔗Steps✓Givenan ingredient waste record has been created(6ms)
✓Givenan ingredient waste record has been created(6ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan ingredient waste record has been created(6ms)
✓Whenthe waste record is deleted(49ms)
✓Whenthe waste record is deleted(49ms)
✓Thenthe delete response should indicate no content(1ms)
✓Delete steps response message status code should be NoContent(0ms)
✓Whenthe waste record is deleted(49ms)
✓Thenthe delete response should indicate no content(1ms)
✓Thenthe delete response should indicate no content(1ms)
Diagrams
Details:lines
Listing waste by recipe should return matching records 1.3s🔗Steps✓Givenan ingredient waste record has been created(358ms)
✓Givenan ingredient waste record has been created(358ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan ingredient waste record has been created(358ms)
✓Whenthe waste is listed by recipe(877ms)
✓Whenthe waste is listed by recipe(877ms)
✓Thenthe waste list response should contain the record(15ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps list response should contain [ w => w.WasteId == '478c71ed-a62e-4aa5-b83a-f7952dd34551' ](0ms)
✓Whenthe waste is listed by recipe(877ms)
✓Thenthe waste list response should contain the record(15ms)
✓Thenthe waste list response should contain the record(15ms)
Diagrams
Details:lines
Recording waste with missing ingredient name should return bad request 11ms🔗Steps✓Givena waste request with a missing ingredient name(4ms)
✓Givena waste request with a missing ingredient name(4ms)
✓Givena waste request with a missing ingredient name(4ms)
✓Whenthe waste is recorded(4ms)
✓Whenthe waste is recorded(4ms)
✓Thenthe waste post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe waste is recorded(4ms)
✓Thenthe waste post response should indicate bad request(0ms)
✓Thenthe waste post response should indicate bad request(0ms)
Diagrams
Details:lines
Recording waste with missing reason should return bad request 33ms🔗Steps✓Givena waste request with a missing reason(24ms)
✓Givena waste request with a missing reason(24ms)
✓Givena waste request with a missing reason(24ms)
✓Whenthe waste is recorded(6ms)
✓Whenthe waste is recorded(6ms)
✓Thenthe waste post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe waste is recorded(6ms)
✓Thenthe waste post response should indicate bad request(0ms)
✓Thenthe waste post response should indicate bad request(0ms)
Diagrams
Details:lines
Recording waste with zero quantity should return bad request 40ms🔗Steps✓Givena waste request with zero quantity(22ms)
✓Givena waste request with zero quantity(22ms)
✓Givena waste request with zero quantity(22ms)
✓Whenthe waste is recorded(14ms)
✓Whenthe waste is recorded(14ms)
✓Thenthe waste post response should indicate bad request(1ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe waste is recorded(14ms)
✓Thenthe waste post response should indicate bad request(1ms)
✓Thenthe waste post response should indicate bad request(1ms)
Diagrams
Details:lines
Inventory Management
/inventory - Managing ingredient inventory with full CRUD operations
Inventory items support full CRUD operationsAdding a new inventory item should return the created item Happy Path56ms🔗Steps✓Givena valid inventory item request(1ms)
✓Givena valid inventory item request(1ms)
✓Givena valid inventory item request(1ms)
✓Whenthe inventory item is submitted(9ms)
✓Whenthe inventory item is submitted(9ms)
✓Thenthe inventory response should contain the created item(43ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response name should be 'Name'(0ms)
✓Post steps response category should be "Dry Goods"(0ms)
✓Whenthe inventory item is submitted(9ms)
✓Thenthe inventory response should contain the created item(43ms)
✓Thenthe inventory response should contain the created item(43ms)
Diagrams
Details:lines
Deleting an inventory item should return no content 42ms🔗Steps✓Givenan inventory item exists(5ms)
✓Givenan inventory item exists(5ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan inventory item exists(5ms)
✓Whenthe inventory item is deleted(34ms)
✓Whenthe inventory item is deleted(34ms)
✓Thenthe inventory delete response should indicate no content(1ms)
✓Delete steps response message status code should be NoContent(0ms)
✓Whenthe inventory item is deleted(34ms)
✓Thenthe inventory delete response should indicate no content(1ms)
✓Thenthe inventory delete response should indicate no content(1ms)
Diagrams
Details:lines
Listing all inventory items should return all items 113ms🔗Steps✓Givenan inventory item exists(20ms)
✓Givenan inventory item exists(20ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan inventory item exists(20ms)
✓Whenall inventory items are requested(82ms)
✓Whenall inventory items are requested(82ms)
✓Thenthe inventory list response should contain the item(7ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps list response should contain [ i => i.Id == '2' ](0ms)
✓Whenall inventory items are requested(82ms)
✓Thenthe inventory list response should contain the item(7ms)
✓Thenthe inventory list response should contain the item(7ms)
Diagrams
Details:lines
Non-existent inventory items cannot be retrievedRetrieving a non-existent inventory item should return not found 17ms🔗Steps✓Whena non-existent inventory item is retrieved(11ms)
✓Whena non-existent inventory item is retrieved(11ms)
✓Whena non-existent inventory item is retrieved(11ms)
✓Thenthe inventory get response should indicate not found(4ms)
✓Get steps response message status code should be NotFound(0ms)
✓Thenthe inventory get response should indicate not found(4ms)
✓Thenthe inventory get response should indicate not found(4ms)
Diagrams
Details:lines
Inventory items support full CRUD operationsRetrieving an existing inventory item should return the item 236ms🔗Steps✓Givenan inventory item exists(173ms)
✓Givenan inventory item exists(173ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan inventory item exists(173ms)
✓Whenthe inventory item is retrieved by id(45ms)
✓Whenthe inventory item is retrieved by id(45ms)
✓Thenthe inventory get response should contain the item(12ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response id should be '1'(0ms)
✓Get steps response name should be 'Name'(0ms)
✓Whenthe inventory item is retrieved by id(45ms)
✓Thenthe inventory get response should contain the item(12ms)
✓Thenthe inventory get response should contain the item(12ms)
Diagrams
Details:lines
Updating an inventory item should return the updated item 62ms🔗Steps✓Givenan inventory item exists(7ms)
✓Givenan inventory item exists(7ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan inventory item exists(7ms)
✓Whenthe inventory item is updated(43ms)
✓Whenthe inventory item is updated(43ms)
✓Thenthe inventory update response should contain the updated values(8ms)
✓Put steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Put steps response category should be "Updated Category"(0ms)
✓Whenthe inventory item is updated(43ms)
✓Thenthe inventory update response should contain the updated values(8ms)
✓Thenthe inventory update response should contain the updated values(8ms)
Diagrams
Details:lines
Kitchen Service Failure
/orders - Creating orders when the Kitchen Service returns an error
Creating an order when the kitchen service returns an error should still create the order SkipUnlessFakesControllable38ms🔗Steps✓Givena pancake batch has been created(14ms)
✓Givena pancake batch has been created(14ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(14ms)
✓Anda valid order request for the created batch(1ms)
✓Anda valid order request for the created batch(1ms)
✓Andthe kitchen service is configured to return busy(1ms)
✓Anda valid order request for the created batch(1ms)
✓Whenthe breakfast order is placed(12ms)
✓Andthe kitchen service is configured to return busy(1ms)
✓Thenthe order should still be created successfully despite the kitchen failure(3ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response order id should not be empty(0ms)
✓Andthe kitchen service is configured to return busy(1ms)
✓Whenthe breakfast order is placed(12ms)
✓Whenthe breakfast order is placed(12ms)
✓Thenthe order should still be created successfully despite the kitchen failure(3ms)
✓Thenthe order should still be created successfully despite the kitchen failure(3ms)
Diagrams
Details:lines
Menu Availability
/menu - Checking menu item availability from ingredient sources
The menu endpoint should return all menu items with availability status Happy PathMenuAvailability184ms🔗Steps✓Whenthe menu is requested(31ms)
✓Whenthe menu is requested(31ms)
✓Whenthe menu is requested(31ms)
✓Thenthe menu response should contain all menu items(7ms)
✓Menu steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Menu steps response should contain [ m => m.Name == MenuDefaults.ClassicPancakes ](0ms)
✓Menu steps response should contain [ m => m.Name == MenuDefaults.BelgianWaffles ](0ms)
✓Menu steps response should contain [ m => m.Name == MenuDefaults.GoatMilkPancakes ](0ms)
✓Thenthe menu response should contain all menu items(7ms)
✓Thenthe menu response should contain all menu items(7ms)
Diagrams
Details:lines
Menu Caching
/menu - Menu response caching behaviour
Menu responses should be cached and returned even when supplier becomes unavailable SkipUnlessFakesControllableMenuCaching396ms🔗Steps✓Giventhe menu has been requested and cached(109ms)
✓Giventhe menu has been requested and cached(109ms)
✓Menu steps response message status code should be OK(0ms)
✓Giventhe menu has been requested and cached(109ms)
✓Andthe supplier service is then made unavailable(2ms)
✓Andthe supplier service is then made unavailable(2ms)
✓Whenthe menu is requested again(14ms)
✓Andthe supplier service is then made unavailable(2ms)
✓Thenthe menu response should still return available items(22ms)
✓Steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Steps response should contain [ m => m.IsAvailable ](0ms)
✓Whenthe menu is requested again(14ms)
✓Whenthe menu is requested again(14ms)
✓Thenthe menu response should still return available items(22ms)
✓Thenthe menu response should still return available items(22ms)
Diagrams
Details:lines
Menu Downstream Failure
/menu - Menu behaviour when Supplier Service is unavailable
All menu items should be marked unavailable when the supplier service is down SkipUnlessFakesControllableMenuDownstreamFailure222ms🔗Steps✓Giventhe supplier service will return service unavailable(20ms)
✓Giventhe supplier service will return service unavailable(20ms)
✓Giventhe supplier service will return service unavailable(20ms)
✓Whenthe menu is requested(32ms)
✓Whenthe menu is requested(32ms)
✓Thenthe menu response should mark all items as unavailable(6ms)
✓Menu steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Menu steps response should only contain [ m => m.IsAvailable == false ](0ms)
✓Whenthe menu is requested(32ms)
✓Thenthe menu response should mark all items as unavailable(6ms)
✓Thenthe menu response should mark all items as unavailable(6ms)
Diagrams
Details:lines
Milk Downstream Failure
/milk - Handling downstream Cow Service failures
Requesting milk when the cow service is unavailable should return a bad gateway response SkipUnlessFakesControllable10ms🔗Steps✓Giventhe cow service will return service unavailable(2ms)
✓Giventhe cow service will return service unavailable(2ms)
✓Giventhe cow service will return service unavailable(2ms)
✓Whenmilk is requested(4ms)
✓Whenmilk is requested(4ms)
✓Thenthe milk response should indicate a bad gateway(0ms)
✓Milk steps response message status code should be BadGateway(0ms)
✓Milk error response body should contain CowServiceUnavailableTitle(0ms)
✓Whenmilk is requested(4ms)
✓Thenthe milk response should indicate a bad gateway(0ms)
✓Thenthe milk response should indicate a bad gateway(0ms)
Diagrams
Details:lines
Requesting milk when the cow service returns an invalid response should return a bad gateway response SkipUnlessFakesControllable38ms🔗Steps✓Giventhe cow service will return an invalid response(2ms)
✓Giventhe cow service will return an invalid response(2ms)
✓Giventhe cow service will return an invalid response(2ms)
✓Whenmilk is requested(20ms)
✓Whenmilk is requested(20ms)
✓Thenthe milk response should indicate a bad gateway(9ms)
✓Milk steps response message status code should be BadGateway(0ms)
✓Milk error response body should contain CowServiceUnavailableTitle(0ms)
✓Whenmilk is requested(20ms)
✓Thenthe milk response should indicate a bad gateway(9ms)
✓Thenthe milk response should indicate a bad gateway(9ms)
Diagrams
Details:lines
Requesting milk when the cow service times out should return a bad gateway response SkipUnlessFakesControllable12ms🔗Steps✓Giventhe cow service will return a timeout(3ms)
✓Giventhe cow service will return a timeout(3ms)
✓Giventhe cow service will return a timeout(3ms)
✓Whenmilk is requested(4ms)
✓Whenmilk is requested(4ms)
✓Thenthe milk response should indicate a bad gateway(0ms)
✓Milk steps response message status code should be BadGateway(0ms)
✓Milk error response body should contain CowServiceUnavailableTitle(0ms)
✓Whenmilk is requested(4ms)
✓Thenthe milk response should indicate a bad gateway(0ms)
✓Thenthe milk response should indicate a bad gateway(0ms)
Diagrams
Details:lines
Order Cross Field Validation
/orders - Cross-field validation with configurable item limits
An order at the maximum items per order should be accepted IgnoreIfExternalSut263ms🔗Background Steps✓Giventhe maximum items per order is configured to two(126ms)
✓Giventhe maximum items per order is configured to two(126ms)
✓Giventhe maximum items per order is configured to two(126ms)
✓Anda pancake batch has been created(92ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Anda pancake batch has been created(92ms)
✓Andan order request with two items(1ms)
✓Anda pancake batch has been created(92ms)
✓Whenthe order is submitted(32ms)
Steps✓Andan order request with two items(1ms)
✓Thenthe response should indicate success(3ms)
✓Order steps response message status code should be Created(0ms)
✓Andan order request with two items(1ms)
✓Whenthe order is submitted(32ms)
✓Whenthe order is submitted(32ms)
✓Thenthe response should indicate success(3ms)
✓Thenthe response should indicate success(3ms)
Diagrams
Details:lines
An order exceeding the maximum items per order should be rejected IgnoreIfExternalSut308ms🔗Background Steps✓Giventhe maximum items per order is configured to two(126ms)
✓Giventhe maximum items per order is configured to two(126ms)
✓Giventhe maximum items per order is configured to two(126ms)
✓Anda pancake batch has been created(92ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Anda pancake batch has been created(92ms)
✓Andan order request with two items(1ms)
✓Anda pancake batch has been created(92ms)
✓Whenthe order is submitted(32ms)
Steps✓Andan order request with three items(2ms)
✓Thenthe response should indicate a validation error(1ms)
✓Order steps response message status code should be BadRequest(0ms)
✓Andan order request with three items(2ms)
✓Andthe error message should reference the item limit(2ms)
✓Order validation error response body should contain "Items"(0ms)
✓Whenthe order is submitted(24ms)
✓Whenthe order is submitted(24ms)
✓Thenthe response should indicate a validation error(1ms)
✓Thenthe response should indicate a validation error(1ms)
✓Andthe error message should reference the item limit(2ms)
✓Andthe error message should reference the item limit(2ms)
Diagrams
Details:lines
Order Pagination
/orders - Paginated listing of breakfast orders
Listing orders should return a paginated response Happy Path85ms🔗Steps✓Givenmultiple orders have been created(44ms)
✓Givenmultiple orders have been created(44ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response message status code should be Created(0ms)
✓Order steps response message status code should be Created(0ms)
✓Givenmultiple orders have been created(44ms)
✓Whenorders are listed with default pagination(13ms)
✓Whenorders are listed with default pagination(13ms)
✓Thenthe paginated response should contain the orders(21ms)
✓List steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓List steps response items should have count greater than or equal to '2'(0ms)
✓Whenorders are listed with default pagination(13ms)
✓Andthe paginated response should have correct page metadata(0ms)
✓Response content is valid json should be true(0ms)
✓List steps response page should be greater than or equal to 1(0ms)
✓List steps response total count should be greater than or equal to '2'(0ms)
✓Thenthe paginated response should contain the orders(21ms)
✓Thenthe paginated response should contain the orders(21ms)
✓Andthe paginated response should have correct page metadata(0ms)
✓Andthe paginated response should have correct page metadata(0ms)
Diagrams
Details:lines
Listing orders when none exist should return an empty page IgnoreIfNeedsDirectDbAccessIgnoreUnlessInMemoryDb29ms🔗Steps✓Whenorders are listed with default pagination(23ms)
✓Whenorders are listed with default pagination(23ms)
✓Whenorders are listed with default pagination(23ms)
✓Thenthe paginated response should be empty(2ms)
✓List steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Thenthe paginated response should be empty(2ms)
✓Thenthe paginated response should be empty(2ms)
Diagrams
Details:lines
Listing orders with a small page size should limit results 71ms🔗Steps✓Givenmultiple orders have been created(44ms)
✓Givenmultiple orders have been created(44ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response message status code should be Created(0ms)
✓Order steps response message status code should be Created(0ms)
✓Givenmultiple orders have been created(44ms)
✓Whenorders are listed with page 1 and page size 1(12ms)
✓Whenorders are listed with page 1 and page size 1(12ms)
✓Thenthe paginated response should have correct page metadata(0ms)
✓Response content is valid json should be true(0ms)
✓List steps response page should be greater than or equal to 1(0ms)
✓List steps response total count should be greater than or equal to '2'(0ms)
✓Whenorders are listed with page 1 and page size 1(12ms)
✓Thenthe paginated response should have correct page metadata(0ms)
✓Thenthe paginated response should have correct page metadata(0ms)
Diagrams
Details:lines
Requesting the second page should return different orders 171ms🔗Steps✓Givenmultiple orders have been created(52ms)
✓Givenmultiple orders have been created(52ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response message status code should be Created(0ms)
✓Order steps response message status code should be Created(0ms)
✓Givenmultiple orders have been created(52ms)
✓Whenorders are listed with page 2 and page size 1(61ms)
✓Whenorders are listed with page 2 and page size 1(61ms)
✓Thenthe paginated response should have correct page metadata(17ms)
✓Response content is valid json should be true(0ms)
✓List steps response page should be greater than or equal to 1(0ms)
✓List steps response total count should be greater than or equal to '2'(0ms)
✓Whenorders are listed with page 2 and page size 1(61ms)
✓Thenthe paginated response should have correct page metadata(17ms)
✓Thenthe paginated response should have correct page metadata(17ms)
Diagrams
Details:lines
Order Rate Limiting
/orders - Rate limiting on order creation
Exceeding the rate limit should return too many requests IgnoreIfExternalSut328ms🔗Steps✓Giventhe rate limit is configured to allow one request per window(156ms)
✓Giventhe rate limit is configured to allow one request per window(156ms)
✓Giventhe rate limit is configured to allow one request per window(156ms)
✓Anda pancake batch has been created(108ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Anda pancake batch has been created(108ms)
✓Anda valid order request(0ms)
✓Anda pancake batch has been created(108ms)
✓Whenthe order is submitted twice in rapid succession(53ms)
✓Anda valid order request(0ms)
✓Thenthe first request should succeed(2ms)
✓First response status code should be Created(0ms)
✓Anda valid order request(0ms)
✓Andthe second request should be rate limited(1ms)
✓Second response status code should be TooManyRequests(0ms)
✓Whenthe order is submitted twice in rapid succession(53ms)
✓Whenthe order is submitted twice in rapid succession(53ms)
✓Thenthe first request should succeed(2ms)
✓Thenthe first request should succeed(2ms)
✓Andthe second request should be rate limited(1ms)
✓Andthe second request should be rate limited(1ms)
Diagrams
Details:lines
Order Retrieval
/orders - Retrieving orders by ID
Existing orders can be retrievedA created order should be retrievable by its ID Happy PathIgnoreIfNeedsEventInfrastructure1.7s🔗Steps✓Givenan order has been created(1.7s)
✓Givenan order has been created(1.7s)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan order has been created(1.7s)
✓Whenthe order is retrieved by id(18ms)
✓Whenthe order is retrieved by id(18ms)
✓Thenthe order retrieval response should contain the order(9ms)
✓Get order steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get order steps response order id should be 'd649606e-c014-4b66-b3a3-6612d0e3e471'(0ms)
✓Whenthe order is retrieved by id(18ms)
✓Thenthe order retrieval response should contain the order(9ms)
✓Thenthe order retrieval response should contain the order(9ms)
Diagrams
Details:lines
Non-existent orders return not foundRetrieving a non-existent order should return not found 448ms🔗Steps✓Whena non-existent order is retrieved(365ms)
✓Whena non-existent order is retrieved(365ms)
✓Whena non-existent order is retrieved(365ms)
✓Thenthe order retrieval response should indicate not found(13ms)
✓Get order steps response message status code should be NotFound(0ms)
✓Thenthe order retrieval response should indicate not found(13ms)
✓Thenthe order retrieval response should indicate not found(13ms)
Diagrams
Details:lines
Order Status Transition
/orders - Order status transitions following the order lifecycle
Valid status transitions are acceptedA valid status transition should update the order 4/4 passed189ms🔗
#
Input Parameters
Status
Duration
From Status
To Status
1
Created
Cancelled
Passed
51ms
2
Created
Preparing
Passed
34ms
3
Preparing
Ready
Passed
38ms
4
Ready
Completed
Passed
65ms
Steps✓Givenan order exists with status "Created"(44ms)
✓Givenan order exists with status "Created"(44ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan order exists with status "Created"(44ms)
✓Whenthe order status is updated to "Cancelled"(4ms)
✓Whenthe order status is updated to "Cancelled"(4ms)
✓Thenthe order status should be updated successfully to "Cancelled"(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response status should be 'Cancelled'(0ms)
✓Whenthe order status is updated to "Cancelled"(4ms)
✓Thenthe order status should be updated successfully to "Cancelled"(0ms)
✓Thenthe order status should be updated successfully to "Cancelled"(0ms)
Steps✓Givenan order exists with status "Created"(27ms)
✓Givenan order exists with status "Created"(27ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan order exists with status "Created"(27ms)
✓Whenthe order status is updated to "Preparing"(5ms)
✓Whenthe order status is updated to "Preparing"(5ms)
✓Thenthe order status should be updated successfully to "Preparing"(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response status should be 'Preparing'(0ms)
✓Whenthe order status is updated to "Preparing"(5ms)
✓Thenthe order status should be updated successfully to "Preparing"(0ms)
✓Thenthe order status should be updated successfully to "Preparing"(0ms)
Steps✓Givenan order exists with status "Preparing"(29ms)
✓Givenan order exists with status "Preparing"(29ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Givenan order exists with status "Preparing"(29ms)
✓Whenthe order status is updated to "Ready"(6ms)
✓Whenthe order status is updated to "Ready"(6ms)
✓Thenthe order status should be updated successfully to "Ready"(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response status should be 'Ready'(0ms)
✓Whenthe order status is updated to "Ready"(6ms)
✓Thenthe order status should be updated successfully to "Ready"(0ms)
✓Thenthe order status should be updated successfully to "Ready"(0ms)
Steps✓Givenan order exists with status "Ready"(49ms)
✓Givenan order exists with status "Ready"(49ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Givenan order exists with status "Ready"(49ms)
✓Whenthe order status is updated to "Completed"(6ms)
✓Whenthe order status is updated to "Completed"(6ms)
✓Thenthe order status should be updated successfully to "Completed"(5ms)
✓Patch steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response status should be 'Completed'(0ms)
✓Whenthe order status is updated to "Completed"(6ms)
✓Thenthe order status should be updated successfully to "Completed"(5ms)
✓Thenthe order status should be updated successfully to "Completed"(5ms)
Diagrams
Details:lines
Invalid status transitions are rejectedAn invalid status transition should return a conflict response 7/7 passed440ms🔗
#
Input Parameters
Status
Duration
From Status
To Status
1
Cancelled
Preparing
Passed
56ms
2
Cancelled
Ready
Passed
47ms
3
Completed
Preparing
Passed
83ms
4
Created
Completed
Passed
59ms
5
Created
Ready
Passed
48ms
6
Preparing
Cancelled
Passed
61ms
7
Ready
Preparing
Passed
83ms
Steps✓Givenan order exists with status "Cancelled"(50ms)
✓Givenan order exists with status "Cancelled"(50ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Givenan order exists with status "Cancelled"(50ms)
✓Whenthe order status is updated to "Preparing"(3ms)
✓Whenthe order status is updated to "Preparing"(3ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Patch steps response message status code should be Conflict(0ms)
✓Whenthe order status is updated to "Preparing"(3ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Thenthe response should indicate an invalid state transition(0ms)
Steps✓Givenan order exists with status "Cancelled"(42ms)
✓Givenan order exists with status "Cancelled"(42ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Givenan order exists with status "Cancelled"(42ms)
✓Whenthe order status is updated to "Ready"(2ms)
✓Whenthe order status is updated to "Ready"(2ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Patch steps response message status code should be Conflict(0ms)
✓Whenthe order status is updated to "Ready"(2ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Thenthe response should indicate an invalid state transition(0ms)
Steps✓Givenan order exists with status "Completed"(78ms)
✓Givenan order exists with status "Completed"(78ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Givenan order exists with status "Completed"(78ms)
✓Whenthe order status is updated to "Preparing"(3ms)
✓Whenthe order status is updated to "Preparing"(3ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Patch steps response message status code should be Conflict(0ms)
✓Whenthe order status is updated to "Preparing"(3ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Thenthe response should indicate an invalid state transition(0ms)
Steps✓Givenan order exists with status "Created"(45ms)
✓Givenan order exists with status "Created"(45ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan order exists with status "Created"(45ms)
✓Whenthe order status is updated to "Completed"(7ms)
✓Whenthe order status is updated to "Completed"(7ms)
✓Thenthe response should indicate an invalid state transition(3ms)
✓Patch steps response message status code should be Conflict(0ms)
✓Whenthe order status is updated to "Completed"(7ms)
✓Thenthe response should indicate an invalid state transition(3ms)
✓Thenthe response should indicate an invalid state transition(3ms)
Steps✓Givenan order exists with status "Created"(43ms)
✓Givenan order exists with status "Created"(43ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Givenan order exists with status "Created"(43ms)
✓Whenthe order status is updated to "Ready"(2ms)
✓Whenthe order status is updated to "Ready"(2ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Patch steps response message status code should be Conflict(0ms)
✓Whenthe order status is updated to "Ready"(2ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Thenthe response should indicate an invalid state transition(0ms)
Steps✓Givenan order exists with status "Preparing"(43ms)
✓Givenan order exists with status "Preparing"(43ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Givenan order exists with status "Preparing"(43ms)
✓Whenthe order status is updated to "Cancelled"(16ms)
✓Whenthe order status is updated to "Cancelled"(16ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Patch steps response message status code should be Conflict(0ms)
✓Whenthe order status is updated to "Cancelled"(16ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Thenthe response should indicate an invalid state transition(0ms)
Steps✓Givenan order exists with status "Ready"(78ms)
✓Givenan order exists with status "Ready"(78ms)
✓Response content is valid json should be true(0ms)
✓Response content is valid json should be true(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Patch steps response message status code should be OK(0ms)
✓Givenan order exists with status "Ready"(78ms)
✓Whenthe order status is updated to "Preparing"(2ms)
✓Whenthe order status is updated to "Preparing"(2ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Patch steps response message status code should be Conflict(0ms)
✓Whenthe order status is updated to "Preparing"(2ms)
✓Thenthe response should indicate an invalid state transition(0ms)
✓Thenthe response should indicate an invalid state transition(0ms)
Diagrams
Details:lines
Order Status Via G RPC
/grpc - Retrieving order status via gRPC
Order status via gRPC should return order details Happy Path40ms🔗Steps✓Givena pancake batch has been created(10ms)
✓Givena pancake batch has been created(10ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(10ms)
✓Andan order has been created for the batch(9ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response order id should not be empty(0ms)
✓Andan order has been created for the batch(9ms)
✓Whenthe order status is requested via gRPC(11ms)
✓Andan order has been created for the batch(9ms)
✓Thenthe gRPC response should contain the order details(6ms)
✓Grpc steps order status reply should not be null(0ms)
✓Grpc steps order status reply order id should be orderSteps.Response.OrderId.ToString()(0ms)
✓Grpc steps order status reply customer name should be 'TestCustomer_6647511200972737615'(0ms)
✓Grpc steps order status reply status should be Created(0ms)
✓Whenthe order status is requested via gRPC(11ms)
✓Whenthe order status is requested via gRPC(11ms)
✓Thenthe gRPC response should contain the order details(6ms)
✓Thenthe gRPC response should contain the order details(6ms)
Diagrams
Details:lines
Order status for non-existent order should return not found 59ms🔗Steps✓Whenthe order status for a non-existent order is requested via gRPC(54ms)
✓Whenthe order status for a non-existent order is requested via gRPC(54ms)
✓Whenthe order status for a non-existent order is requested via gRPC(54ms)
✓Thenthe gRPC response should be a not found error(2ms)
✓Grpc steps rpc exception should not be null(0ms)
✓Grpc steps rpc exception status code should be NotFound(0ms)
✓Thenthe gRPC response should be a not found error(2ms)
✓Thenthe gRPC response should be a not found error(2ms)
Diagrams
Details:lines
Order Summaries
/graphql - Querying order summary reports via GraphQL
Order summaries should contain ingested order data Happy PathIgnoreIfNeedsDirectDbAccess58ms🔗Steps✓Givenan order has been created and ingested into the reporting database(6ms)
✓Givenan order has been created and ingested into the reporting database(6ms)
✓Givenan order has been created and ingested into the reporting database(6ms)
✓Whenthe order summaries are queried via graphql(32ms)
✓Whenthe order summaries are queried via graphql(32ms)
✓Thenthe graphql response should contain the ingested order summary(14ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps order summaries should contain [ o => o.OrderId == '02046c37-d7d7-4efe-9458-f2827b1997a9' && o.CustomerName == 'TestCustomer_7784774984484537274' && o.ItemCount == 3 && o.TableNumber == 7 ](0ms)
✓Whenthe order summaries are queried via graphql(32ms)
✓Thenthe graphql response should contain the ingested order summary(14ms)
✓Thenthe graphql response should contain the ingested order summary(14ms)
Diagrams
Details:lines
Order summaries should return an empty list when no orders exist 15ms🔗Steps✓Whenthe order summaries are queried via graphql(7ms)
✓Whenthe order summaries are queried via graphql(7ms)
✓Whenthe order summaries are queried via graphql(7ms)
✓Thenthe graphql response should be successful(1ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Thenthe graphql response should be successful(1ms)
✓Andthe order summaries list should be empty or not contain the test order(3ms)
✓Graph ql steps order summaries should not contain [ o => o.OrderId == '02312882-0028-46a4-97ee-3e314dfc2f69' ](0ms)
✓Thenthe graphql response should be successful(1ms)
✓Andthe order summaries list should be empty or not contain the test order(3ms)
✓Andthe order summaries list should be empty or not contain the test order(3ms)
Diagrams
Details:lines
Order Validation
/orders - Input validation for order creation and status updates
Order status update endpoint is called with invalid fields should return a bad request response 1/1 passed20ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
Status
Status is required
'Status' is required.
Bad Request
Passed
20ms
Steps✓Givena valid status update request with "Status" set to ""(3ms)
✓Givena valid status update request with "Status" set to ""(3ms)
✓Givena valid status update request with "Status" set to ""(3ms)
✓Whenthe invalid status update request is submitted(8ms)
✓Whenthe invalid status update request is submitted(8ms)
✓Thenthe status update response should contain error "'Status' is required." with status "Bad Request"(6ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Status' is required.') ](0ms)
✓Whenthe invalid status update request is submitted(8ms)
✓Thenthe status update response should contain error "'Status' is required." with status "Bad Request"(6ms)
✓Thenthe status update response should contain error "'Status' is required." with status "Bad Request"(6ms)
Diagrams
Details:lines
Orders endpoint is called with invalid fields should return a bad request response 5/5 passed56ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
CustomerName
Customer name is required
'Customer Name' is required.
Bad Request
Passed
24ms
2
Items[0].BatchId
Batch ID is required
'Batch Id' is required.
Bad Request
Passed
8ms
3
Items[0].ItemType
Item type is required
'Item Type' is required.
Bad Request
Passed
9ms
4
Items[0].Quantity
0
Quantity must be greater than zero
Quantity must be greater than zero.
Bad Request
Passed
8ms
5
Items
At least one item is required
The Items field is required.
Bad Request
Passed
5ms
Steps✓Givena valid order request with "CustomerName" set to ""(6ms)
✓Givena valid order request with "CustomerName" set to ""(6ms)
✓Givena valid order request with "CustomerName" set to ""(6ms)
✓Whenthe invalid order request is submitted(5ms)
✓Whenthe invalid order request is submitted(5ms)
✓Thenthe order response should contain error "'Customer Name' is required." with status "Bad Request"(7ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Customer Name' is required.') ](0ms)
✓Whenthe invalid order request is submitted(5ms)
✓Thenthe order response should contain error "'Customer Name' is required." with status "Bad Request"(7ms)
✓Thenthe order response should contain error "'Customer Name' is required." with status "Bad Request"(7ms)
Steps✓Givena valid order request with "Items[0].BatchId" set to ""(0ms)
✓Givena valid order request with "Items[0].BatchId" set to ""(0ms)
✓Givena valid order request with "Items[0].BatchId" set to ""(0ms)
✓Whenthe invalid order request is submitted(5ms)
✓Whenthe invalid order request is submitted(5ms)
✓Thenthe order response should contain error "'Batch Id' is required." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Batch Id' is required.') ](0ms)
✓Whenthe invalid order request is submitted(5ms)
✓Thenthe order response should contain error "'Batch Id' is required." with status "Bad Request"(0ms)
✓Thenthe order response should contain error "'Batch Id' is required." with status "Bad Request"(0ms)
Steps✓Givena valid order request with "Items[0].ItemType" set to ""(4ms)
✓Givena valid order request with "Items[0].ItemType" set to ""(4ms)
✓Givena valid order request with "Items[0].ItemType" set to ""(4ms)
✓Whenthe invalid order request is submitted(2ms)
✓Whenthe invalid order request is submitted(2ms)
✓Thenthe order response should contain error "'Item Type' is required." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Item Type' is required.') ](0ms)
✓Whenthe invalid order request is submitted(2ms)
✓Thenthe order response should contain error "'Item Type' is required." with status "Bad Request"(1ms)
✓Thenthe order response should contain error "'Item Type' is required." with status "Bad Request"(1ms)
Steps✓Givena valid order request with "Items[0].Quantity" set to "0"(0ms)
✓Givena valid order request with "Items[0].Quantity" set to "0"(0ms)
✓Givena valid order request with "Items[0].Quantity" set to "0"(0ms)
✓Whenthe invalid order request is submitted(4ms)
✓Whenthe invalid order request is submitted(4ms)
✓Thenthe order response should contain error "Quantity must be greater than zero." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Quantity must be greater than zero.') ](0ms)
✓Whenthe invalid order request is submitted(4ms)
✓Thenthe order response should contain error "Quantity must be greater than zero." with status "Bad Request"(0ms)
✓Thenthe order response should contain error "Quantity must be greater than zero." with status "Bad Request"(0ms)
Steps✓Givena valid order request with "Items" set to ""(0ms)
✓Givena valid order request with "Items" set to ""(0ms)
✓Givena valid order request with "Items" set to ""(0ms)
✓Whenthe invalid order request is submitted(2ms)
✓Whenthe invalid order request is submitted(2ms)
✓Thenthe order response should contain error "The Items field is required." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('The Items field is required.') ](0ms)
✓Whenthe invalid order request is submitted(2ms)
✓Thenthe order response should contain error "The Items field is required." with status "Bad Request"(0ms)
✓Thenthe order response should contain error "The Items field is required." with status "Bad Request"(0ms)
Diagrams
Details:lines
Outbox Retry Exhaustion
/orders - Outbox message transitions to failed after exhausting retries
An outbox message should transition to failed after exhausting retries IgnoreIfNeedsEventInfrastructure1.2s🔗Steps✓Giventhe outbox processor is configured with a failing dispatcher(174ms)
✓Giventhe outbox processor is configured with a failing dispatcher(174ms)
✓Giventhe outbox processor is configured with a failing dispatcher(174ms)
✓Anda pending outbox message with a test-specific destination(7ms)
✓Anda pending outbox message with a test-specific destination(7ms)
✓Thenthe outbox message should be in a failed state(1.0s)
✓Anda pending outbox message with a test-specific destination(7ms)
✓Thenthe outbox message should be in a failed state(1.0s)
✓Thenthe outbox message should be in a failed state(1.0s)
Sequence Diagrams
Details:lines
Pancakes Content Negotiation
/pancakes - Content negotiation and unsupported media types
Sending a request with an unsupported content type should return an unsupported media type response 3/3 passed21ms🔗
#
Input Parameters
Status
Duration
Content Type
1
application/xml
Passed
11ms
2
text/html
Passed
4ms
3
text/plain
Passed
5ms
Steps✓Givena pancake request with content type "application/xml"(1ms)
✓Givena pancake request with content type "application/xml"(1ms)
✓Givena pancake request with content type "application/xml"(1ms)
✓Whenthe pancakes are prepared with the given content type(5ms)
✓Whenthe pancakes are prepared with the given content type(5ms)
✓Thenthe response should indicate unsupported media type(1ms)
✓Response status code should be UnsupportedMediaType(0ms)
✓Whenthe pancakes are prepared with the given content type(5ms)
✓Thenthe response should indicate unsupported media type(1ms)
✓Thenthe response should indicate unsupported media type(1ms)
Steps✓Givena pancake request with content type "text/html"(0ms)
✓Givena pancake request with content type "text/html"(0ms)
✓Givena pancake request with content type "text/html"(0ms)
✓Whenthe pancakes are prepared with the given content type(2ms)
✓Whenthe pancakes are prepared with the given content type(2ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
✓Whenthe pancakes are prepared with the given content type(2ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Thenthe response should indicate unsupported media type(0ms)
Steps✓Givena pancake request with content type "text/plain"(0ms)
✓Givena pancake request with content type "text/plain"(0ms)
✓Givena pancake request with content type "text/plain"(0ms)
✓Whenthe pancakes are prepared with the given content type(3ms)
✓Whenthe pancakes are prepared with the given content type(3ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
✓Whenthe pancakes are prepared with the given content type(3ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Thenthe response should indicate unsupported media type(0ms)
Diagrams
Details:lines
Pancakes Creation
/pancakes - Creating pancakes with ingredients and optional toppings
A valid pancake request should return a fresh batch Happy Path25ms🔗Steps✓Givena valid pancake recipe with all ingredients(6ms)
✓Givena valid pancake recipe with all ingredients(6ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Givena valid pancake recipe with all ingredients(6ms)
✓Whenthe pancakes are prepared(10ms)
✓Whenthe pancakes are prepared(10ms)
✓Thenthe pancakes response should contain a valid batch with all ingredients(4ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response ingredients should contain 'Milk'(0ms)
✓Pancake steps response ingredients should contain 'Eggs'(0ms)
✓Pancake steps response ingredients should contain 'Flour'(0ms)
✓Whenthe pancakes are prepared(10ms)
✓Andthe cow service should have received a milk request(1ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Thenthe pancakes response should contain a valid batch with all ingredients(4ms)
✓Thenthe pancakes response should contain a valid batch with all ingredients(4ms)
✓Andthe cow service should have received a milk request(1ms)
✓Andthe cow service should have received a milk request(1ms)
Diagrams
Details:lines
A pancake request with more toppings than allowed should return a bad request response IgnoreIfExternalSut30ms🔗Steps✓Giventhe max toppings per item is the configured limit(0ms)
✓Giventhe max toppings per item is the configured limit(0ms)
✓Giventhe max toppings per item is the configured limit(0ms)
✓Anda valid pancake recipe with all ingredients(11ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Anda valid pancake recipe with all ingredients(11ms)
✓Andthe request has more toppings than the configured limit(5ms)
✓Anda valid pancake recipe with all ingredients(11ms)
✓Whenthe pancakes are prepared(6ms)
✓Andthe request has more toppings than the configured limit(5ms)
✓Thenthe pancakes response should indicate too many toppings(3ms)
✓Pancake steps response message status code should be BadRequest(0ms)
✓Pancake error response body should contain MaxToppingsExceeded(0ms)
✓Andthe request has more toppings than the configured limit(5ms)
✓Whenthe pancakes are prepared(6ms)
✓Whenthe pancakes are prepared(6ms)
✓Thenthe pancakes response should indicate too many toppings(3ms)
✓Thenthe pancakes response should indicate too many toppings(3ms)
Diagrams
Details:lines
Pancakes endpoint is called with invalid ingredients should return a bad request response 6/6 passed96ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
Eggs
Eggs is required
'Eggs' is required.
Bad Request
Passed
6ms
2
Eggs
javascript:void(0)
XSS in eggs
Eggs contains potentially dangerous content.
Bad Request
Passed
5ms
3
Flour
<img onerror=x>
XSS in flour
Flour contains potentially dangerous content.
Bad Request
Passed
5ms
4
Flour
Flour is required
'Flour' is required.
Bad Request
Passed
4ms
5
Milk
<script>alert</script>
XSS in milk
Milk contains potentially dangerous content.
Bad Request
Passed
68ms
6
Milk
Milk is required
'Milk' is required.
Bad Request
Passed
6ms
Steps✓Givena valid pancake request with "Eggs" set to ""(0ms)
✓Givena valid pancake request with "Eggs" set to ""(0ms)
✓Givena valid pancake request with "Eggs" set to ""(0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "'Eggs' is required." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Eggs' is required.') ](0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "'Eggs' is required." with status "Bad Request"(1ms)
✓Thenthe response should contain error "'Eggs' is required." with status "Bad Request"(1ms)
Steps✓Givena valid pancake request with "Eggs" set to "javascript:void(0)"(0ms)
✓Givena valid pancake request with "Eggs" set to "javascript:void(0)"(0ms)
✓Givena valid pancake request with "Eggs" set to "javascript:void(0)"(0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "Eggs contains potentially dangerous content." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Eggs contains potentially dangerous content.') ](0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "Eggs contains potentially dangerous content." with status "Bad Request"(1ms)
✓Thenthe response should contain error "Eggs contains potentially dangerous content." with status "Bad Request"(1ms)
Steps✓Givena valid pancake request with "Flour" set to "<img onerror=x>"(0ms)
✓Givena valid pancake request with "Flour" set to "<img onerror=x>"(0ms)
✓Givena valid pancake request with "Flour" set to "<img onerror=x>"(0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "Flour contains potentially dangerous content." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Flour contains potentially dangerous content.') ](0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "Flour contains potentially dangerous content." with status "Bad Request"(0ms)
✓Thenthe response should contain error "Flour contains potentially dangerous content." with status "Bad Request"(0ms)
Steps✓Givena valid pancake request with "Flour" set to ""(0ms)
✓Givena valid pancake request with "Flour" set to ""(0ms)
✓Givena valid pancake request with "Flour" set to ""(0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "'Flour' is required." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Flour' is required.') ](0ms)
✓Whenthe invalid pancake request is submitted(1ms)
✓Thenthe response should contain error "'Flour' is required." with status "Bad Request"(1ms)
✓Thenthe response should contain error "'Flour' is required." with status "Bad Request"(1ms)
Steps✓Givena valid pancake request with "Milk" set to "<script>alert</script>"(3ms)
✓Givena valid pancake request with "Milk" set to "<script>alert</script>"(3ms)
✓Givena valid pancake request with "Milk" set to "<script>alert</script>"(3ms)
✓Whenthe invalid pancake request is submitted(51ms)
✓Whenthe invalid pancake request is submitted(51ms)
✓Thenthe response should contain error "Milk contains potentially dangerous content." with status "Bad Request"(9ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Milk contains potentially dangerous content.') ](0ms)
✓Whenthe invalid pancake request is submitted(51ms)
✓Thenthe response should contain error "Milk contains potentially dangerous content." with status "Bad Request"(9ms)
✓Thenthe response should contain error "Milk contains potentially dangerous content." with status "Bad Request"(9ms)
Steps✓Givena valid pancake request with "Milk" set to ""(0ms)
✓Givena valid pancake request with "Milk" set to ""(0ms)
✓Givena valid pancake request with "Milk" set to ""(0ms)
✓Whenthe invalid pancake request is submitted(2ms)
✓Whenthe invalid pancake request is submitted(2ms)
✓Thenthe response should contain error "'Milk' is required." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Milk' is required.') ](0ms)
✓Whenthe invalid pancake request is submitted(2ms)
✓Thenthe response should contain error "'Milk' is required." with status "Bad Request"(0ms)
✓Thenthe response should contain error "'Milk' is required." with status "Bad Request"(0ms)
✓Publish steps calculation id should not be Empty(0ms)
✓Whenthe event is published to Kafka(73ms)
✓Andthe kitchen service should have received the preparation request(4ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
✓Thenthe calculation ID should be generated(4ms)
✓Thenthe calculation ID should be generated(4ms)
✓Andthe kitchen service should have received the preparation request(4ms)
✓Andthe kitchen service should have received the preparation request(4ms)
Diagrams
Details:lines
Recipe Reports
/graphql - Querying recipe reports and aggregations via GraphQL
Recipe reports should contain ingested recipe data Happy PathIgnoreIfNeedsDirectDbAccess80ms🔗Steps✓Givenrecipe logs have been ingested into the reporting database(7ms)
✓Givenrecipe logs have been ingested into the reporting database(7ms)
✓Givenrecipe logs have been ingested into the reporting database(7ms)
✓Whenthe recipe reports are queried via graphql(58ms)
✓Whenthe recipe reports are queried via graphql(58ms)
✓Thenthe graphql response should contain the ingested recipe reports(12ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps recipe reports should contain [ r => r.OrderId == 'bf1440bb-bd82-4ad2-87bb-d5e5d7263830' && r.RecipeType == "Pancakes" && r.Ingredients.Contains("Milk") ](0ms)
✓Whenthe recipe reports are queried via graphql(58ms)
✓Thenthe graphql response should contain the ingested recipe reports(12ms)
✓Thenthe graphql response should contain the ingested recipe reports(12ms)
Diagrams
Details:lines
Ingredient usage should aggregate across multiple recipes IgnoreIfNeedsDirectDbAccess69ms🔗Steps✓Givenmultiple recipe logs have been ingested with overlapping ingredients(6ms)
✓Givenmultiple recipe logs have been ingested with overlapping ingredients(6ms)
✓Givenmultiple recipe logs have been ingested with overlapping ingredients(6ms)
✓Whenthe ingredient usage is queried via graphql(36ms)
✓Whenthe ingredient usage is queried via graphql(36ms)
✓Thenthe ingredient usage should reflect aggregated counts(19ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps ingredient usage should contain [ i => i.Ingredient == "Milk" && i.Count >= 2 ](0ms)
✓Graph ql steps ingredient usage should contain [ i => i.Ingredient == "Butter" && i.Count >= 1 ](0ms)
✓Whenthe ingredient usage is queried via graphql(36ms)
✓Thenthe ingredient usage should reflect aggregated counts(19ms)
✓Thenthe ingredient usage should reflect aggregated counts(19ms)
Diagrams
Details:lines
Popular recipes should return recipe types ordered by frequency IgnoreIfNeedsDirectDbAccess175ms🔗Steps✓Givenmultiple recipe logs of different types have been ingested(8ms)
✓Givenmultiple recipe logs of different types have been ingested(8ms)
✓Givenmultiple recipe logs of different types have been ingested(8ms)
✓Whenthe popular recipes are queried via graphql(154ms)
✓Whenthe popular recipes are queried via graphql(154ms)
✓Thenthe popular recipes should be ordered by count descending(10ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Pancakes should not be null(0ms)
✓Pancakes count should be greater than or equal to 2(0ms)
✓Graph ql steps popular recipes should contain [ r => r.RecipeType == "Waffles" && r.Count >= 1 ](0ms)
✓Whenthe popular recipes are queried via graphql(154ms)
✓Thenthe popular recipes should be ordered by count descending(10ms)
✓Thenthe popular recipes should be ordered by count descending(10ms)
Diagrams
Details:lines
Recipe Reviews Management
/recipe-reviews - Submitting and retrieving recipe reviews (MongoDB)
Submitting a recipe review should return the created review Happy Path125ms🔗Steps✓Givena valid recipe review request(5ms)
✓Givena valid recipe review request(5ms)
✓Givena valid recipe review request(5ms)
✓Whenthe recipe review is submitted(99ms)
✓Whenthe recipe review is submitted(99ms)
✓Thenthe recipe review response should contain the created review(16ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response recipe name should be 'Recipe-4e45aef4898e46a0bbb4570df64dc923'(0ms)
✓Post steps response rating should be 5(0ms)
✓Post steps response review id should not be null or empty(0ms)
✓Whenthe recipe review is submitted(99ms)
✓Thenthe recipe review response should contain the created review(16ms)
✓Thenthe recipe review response should contain the created review(16ms)
Diagrams
Details:lines
Listing reviews by recipe should return matching reviews 60ms🔗Steps✓Givena recipe review has been created(14ms)
✓Givena recipe review has been created(14ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena recipe review has been created(14ms)
✓Whenthe reviews are listed by recipe name(36ms)
✓Whenthe reviews are listed by recipe name(35ms)
✓Thenthe list response should contain the review(8ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps list response should contain [ r => r.ReviewId == 'fc8a2cdf-e794-47ac-8d98-15c309f663b1' ](0ms)
✓Whenthe reviews are listed by recipe name(35ms)
✓Thenthe list response should contain the review(8ms)
✓Thenthe list response should contain the review(8ms)
Diagrams
Details:lines
Retrieving a non-existent review should return not found 29ms🔗Steps✓Whena non-existent review is retrieved(26ms)
✓Whena non-existent review is retrieved(26ms)
✓Whena non-existent review is retrieved(26ms)
✓Thenthe review get response should indicate not found(1ms)
✓Get steps response message status code should be NotFound(0ms)
✓Thenthe review get response should indicate not found(1ms)
✓Thenthe review get response should indicate not found(1ms)
Diagrams
Details:lines
Retrieving existing review by id should return the review 17ms🔗Steps✓Givena recipe review has been created(4ms)
✓Givena recipe review has been created(4ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena recipe review has been created(4ms)
✓Whenthe review is retrieved by id(6ms)
✓Whenthe review is retrieved by id(6ms)
✓Thenthe get response should contain the review(6ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response review id should be '4b76ed6a-1b59-4cd4-8122-c54e07d3f6c8'(0ms)
✓Get steps response recipe name should be 'Recipe-9925a88cf64b43e08ed69342a411af79'(0ms)
✓Whenthe review is retrieved by id(6ms)
✓Thenthe get response should contain the review(6ms)
✓Thenthe get response should contain the review(6ms)
Diagrams
Details:lines
Submitting a review with an invalid rating should return bad request 16ms🔗Steps✓Givena recipe review request with an invalid rating(3ms)
✓Givena recipe review request with an invalid rating(3ms)
✓Givena recipe review request with an invalid rating(3ms)
✓Whenthe recipe review is submitted(7ms)
✓Whenthe recipe review is submitted(7ms)
✓Thenthe review post response should indicate bad request(2ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe recipe review is submitted(7ms)
✓Thenthe review post response should indicate bad request(2ms)
✓Thenthe review post response should indicate bad request(2ms)
Diagrams
Details:lines
Submitting a review with missing recipe name should return bad request 6ms🔗Steps✓Givena recipe review request with a missing recipe name(1ms)
✓Givena recipe review request with a missing recipe name(1ms)
✓Givena recipe review request with a missing recipe name(1ms)
✓Whenthe recipe review is submitted(3ms)
✓Whenthe recipe review is submitted(3ms)
✓Thenthe review post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe recipe review is submitted(3ms)
✓Thenthe review post response should indicate bad request(0ms)
✓Thenthe review post response should indicate bad request(0ms)
Diagrams
Details:lines
Recipe Summary Via G RPC
/grpc - Retrieving recipe summaries via gRPC
Pancake recipe summary should return correct data Happy Path188ms🔗Steps✓Whena recipe summary is requested for "Pancakes" via gRPC(68ms)
✓Whena recipe summary is requested for "Pancakes" via gRPC(68ms)
✓Whena recipe summary is requested for "Pancakes" via gRPC(68ms)
✓Thenthe recipe summary should contain 42 total batches(6ms)
✓Grpc steps recipe summary reply total batches should be '42'(0ms)
✓Thenthe recipe summary should contain 42 total batches(6ms)
✓Andthe recipe summary should contain ingredients "Milk, Flour, Eggs"(107ms)
✓Grpc steps recipe summary reply common ingredients should be equivalent to '[ "Milk", "Flour", "Eggs" ]'(0ms)
✓Thenthe recipe summary should contain 42 total batches(6ms)
✓Andthe recipe summary should contain ingredients "Milk, Flour, Eggs"(107ms)
✓Andthe recipe summary should contain ingredients "Milk, Flour, Eggs"(107ms)
Diagrams
Details:lines
Waffle recipe summary should return correct data Happy Path7ms🔗Steps✓Whena recipe summary is requested for "Waffles" via gRPC(4ms)
✓Whena recipe summary is requested for "Waffles" via gRPC(4ms)
✓Whena recipe summary is requested for "Waffles" via gRPC(4ms)
✓Thenthe recipe summary should contain 28 total batches(0ms)
✓Grpc steps recipe summary reply total batches should be '28'(0ms)
✓Thenthe recipe summary should contain 28 total batches(0ms)
✓Andthe recipe summary should contain ingredients "Milk, Flour, Eggs, Butter"(1ms)
✓Grpc steps recipe summary reply common ingredients should be equivalent to '[ "Milk", "Flour", "Eggs", "Butter" ]'(0ms)
✓Thenthe recipe summary should contain 28 total batches(0ms)
✓Andthe recipe summary should contain ingredients "Milk, Flour, Eggs, Butter"(1ms)
✓Andthe recipe summary should contain ingredients "Milk, Flour, Eggs, Butter"(1ms)
Diagrams
Details:lines
Unknown recipe type should return zero batches 5ms🔗Steps✓Whena recipe summary is requested for "Unknown" via gRPC(2ms)
✓Whena recipe summary is requested for "Unknown" via gRPC(2ms)
✓Whena recipe summary is requested for "Unknown" via gRPC(2ms)
✓Thenthe recipe summary should contain 0 total batches(0ms)
✓Grpc steps recipe summary reply total batches should be '0'(0ms)
✓Thenthe recipe summary should contain 0 total batches(0ms)
✓Andthe recipe summary should contain no ingredients(1ms)
✓Grpc steps recipe summary reply common ingredients should be empty(0ms)
✓Thenthe recipe summary should contain 0 total batches(0ms)
✓Andthe recipe summary should contain no ingredients(1ms)
✓Andthe recipe summary should contain no ingredients(1ms)
Diagrams
Details:lines
Reporting Batch Completions
/graphql - Querying batch completion records populated by Pub/Sub consumption
Batch completions should contain data ingested via pubsub consumer Happy Path1.4s🔗Steps✓Givena pancake batch has been created for batch completions(525ms)
✓Givena pancake batch has been created for batch completions(525ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created for batch completions(525ms)
✓Whenthe batch completions are queried via graphql(785ms)
✓Whenthe batch completions are queried via graphql(785ms)
✓Thenthe graphql response should contain the batch completion record(45ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps batch completions should contain [ r => r.BatchId == '1f66aae9-b32b-4e36-8462-b0e02363704e' && r.RecipeType == "Pancakes" && r.Ingredients.Contains("Milk") ](0ms)
✓Whenthe batch completions are queried via graphql(785ms)
✓Thenthe graphql response should contain the batch completion record(45ms)
✓Thenthe graphql response should contain the batch completion record(45ms)
Diagrams
Details:lines
Reporting Event Grid Webhook
/webhooks/eventgrid - Ingredient shipments recorded via EventGrid webhook events
Ingredient shipments should be recorded when delivered via eventgrid webhook Happy Path1.1s🔗Steps✓Givenan ingredient delivery event has been received via eventgrid webhook(78ms)
✓Givenan ingredient delivery event has been received via eventgrid webhook(78ms)
✓Response status code should be OK(0ms)
✓Givenan ingredient delivery event has been received via eventgrid webhook(78ms)
✓Whenthe ingredient shipments are queried via graphql(992ms)
✓Whenthe ingredient shipments are queried via graphql(992ms)
✓Thenthe graphql response should contain the ingredient shipment record(45ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Whenthe ingredient shipments are queried via graphql(992ms)
✓Thenthe graphql response should contain the ingredient shipment record(45ms)
✓Thenthe graphql response should contain the ingredient shipment record(45ms)
Diagrams
Details:lines
Reservations Management
/reservations - Managing table reservations with full CRUD operations and cancellation
Reservations can be created and retrievedCreating a reservation should return the confirmed reservation Happy Path11ms🔗Steps✓Givena valid reservation request(0ms)
✓Givena valid reservation request(0ms)
✓Givena valid reservation request(0ms)
✓Whenthe reservation is submitted(5ms)
✓Whenthe reservation is submitted(5ms)
✓Thenthe reservation response should contain the confirmed booking(3ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response status should be "Confirmed"(0ms)
✓Post steps response customer name should be 'CustomerName'(0ms)
✓Whenthe reservation is submitted(5ms)
✓Thenthe reservation response should contain the confirmed booking(3ms)
✓Thenthe reservation response should contain the confirmed booking(3ms)
Diagrams
Details:lines
Reservations can be cancelled onceCancelling a reservation should return the cancelled reservation 29ms🔗Steps✓Givena reservation exists(16ms)
✓Givena reservation exists(16ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena reservation exists(16ms)
✓Whenthe reservation is cancelled(5ms)
✓Whenthe reservation is cancelled(5ms)
✓Thenthe cancellation response should indicate the reservation is cancelled(4ms)
✓Cancel steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Cancel steps response status should be "Cancelled"(0ms)
✓Whenthe reservation is cancelled(5ms)
✓Thenthe cancellation response should indicate the reservation is cancelled(4ms)
✓Thenthe cancellation response should indicate the reservation is cancelled(4ms)
Diagrams
Details:lines
Cancelling an already cancelled reservation should return a conflict response 237ms🔗Steps✓Givena cancelled reservation exists(227ms)
✓Givena cancelled reservation exists(227ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Cancel steps response message status code should be OK(0ms)
✓Givena cancelled reservation exists(227ms)
✓Whenthe reservation is cancelled again(4ms)
✓Whenthe reservation is cancelled again(4ms)
✓Thenthe cancellation response should indicate a conflict(2ms)
✓Cancel steps response message status code should be Conflict(0ms)
✓Whenthe reservation is cancelled again(4ms)
✓Thenthe cancellation response should indicate a conflict(2ms)
✓Thenthe cancellation response should indicate a conflict(2ms)
Diagrams
Details:lines
Reservations can be deletedDeleting a reservation should return no content 30ms🔗Steps✓Givena reservation exists(4ms)
✓Givena reservation exists(4ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena reservation exists(4ms)
✓Whenthe reservation is deleted(23ms)
✓Whenthe reservation is deleted(23ms)
✓Thenthe reservation delete response should indicate no content(1ms)
✓Delete response status code should be NoContent(0ms)
✓Whenthe reservation is deleted(23ms)
✓Thenthe reservation delete response should indicate no content(1ms)
✓Thenthe reservation delete response should indicate no content(1ms)
Diagrams
Details:lines
Reservations can be created and retrievedRetrieving an existing reservation should return the reservation 43ms🔗Steps✓Givena reservation exists(10ms)
✓Givena reservation exists(10ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena reservation exists(10ms)
✓Whenthe reservation is retrieved by id(22ms)
✓Whenthe reservation is retrieved by id(22ms)
✓Thenthe reservation get response should contain the reservation(8ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response id should be '2'(0ms)
✓Get steps response customer name should be 'CustomerName'(0ms)
✓Get steps response status should be "Confirmed"(0ms)
✓Whenthe reservation is retrieved by id(22ms)
✓Thenthe reservation get response should contain the reservation(8ms)
✓Thenthe reservation get response should contain the reservation(8ms)
Diagrams
Details:lines
Specifications Async Api
/asyncapi/asyncapi.json - Serving the AsyncAPI specification describing event-driven messaging
The AsyncApi endpoint should return a valid specification Happy Path795ms🔗Steps✓Whenthe asyncapi endpoint is called(778ms)
✓Whenthe asyncapi endpoint is called(778ms)
✓Whenthe asyncapi endpoint is called(778ms)
✓Thenthe response should be valid(0ms)
✓Async api response status code should be OK(0ms)
✓Async api response is valid json should be true $"response body (first 500 chars): {_asyncApiJsonString?[..Math.Min(_asyncApiJsonString.Length, 500)]}"(0ms)
✓Thenthe response should be valid(0ms)
✓Andthe asyncapi spec is written to disk(9ms)asyncapi.json
✓Async api json root element get property("asyncapi") should not be null(0ms)
✓Async api json root element get property("info") should not be null(0ms)
✓Async api json root element get property("default content type") should not be null(0ms)
✓Async api json root element get property("channels") should not be null(0ms)
✓Async api json root element get property("operations") should not be null(0ms)
✓Async api json root element get property("components") should not be null(0ms)
✓Thenthe response should be valid(0ms)
✓Andthe asyncapi spec is written to disk(9ms)
✓Andthe asyncapi spec is written to disk(9ms)
Diagrams
Details:lines
Specifications Open Api
/swagger/v1/swagger.json - Serving the OpenAPI specification describing all REST endpoints
The OpenApi endpoint should return a valid specification Happy Path453ms🔗Steps✓Whenthe open api endpoint is called(420ms)
✓Whenthe open api endpoint is called(420ms)
✓Whenthe open api endpoint is called(420ms)
✓Thenthe response should be valid(6ms)
✓Swagger response status code should be OK(0ms)
✓Open api response is valid json should be true(0ms)
✓Thenthe response should be valid(6ms)
✓Andthe response should contain all the endpoints(8ms)
✓Paths get property( endpoints swagger pancakes path) should not be null(0ms)
✓Paths get property( endpoints swagger waffles path) should not be null(0ms)
✓Paths get property( endpoints swagger orders path) should not be null(0ms)
✓Paths get property( endpoints swagger order by id path) should not be null(0ms)
✓Paths get property( endpoints swagger toppings path) should not be null(0ms)
✓Paths get property( endpoints swagger menu path) should not be null(0ms)
✓Paths get property( endpoints swagger milk path) should not be null(0ms)
✓Paths get property( endpoints swagger eggs path) should not be null(0ms)
✓Paths get property( endpoints swagger flour path) should not be null(0ms)
✓Paths get property( endpoints swagger goat milk path) should not be null(0ms)
✓Paths get property( endpoints swagger audit logs path) should not be null(0ms)
✓Thenthe response should be valid(6ms)
✓Andthe openapi spec is written to disk(13ms)openapi.json
✓Andthe response should contain all the endpoints(8ms)
✓Andthe response should contain all the endpoints(8ms)
✓Andthe openapi spec is written to disk(13ms)
✓Andthe openapi spec is written to disk(13ms)
Diagrams
Details:lines
Specifications Open Api Scalar UI
/scalar/v1 - Serving the interactive API documentation UI powered by Scalar
The Scalar UI endpoint should return a valid page Happy Path381ms🔗Steps✓Whenthe scalar ui endpoint is called(370ms)
✓Whenthe scalar ui endpoint is called(370ms)
✓Whenthe scalar ui endpoint is called(370ms)
✓Thenthe response should be a valid scalar page(6ms)
✓Scalar response status code should be OK(0ms)
✓Scalar ui response body should contain "<html"(0ms)
✓Scalar ui response body should contain "scalar"(0ms)
✓Thenthe response should be a valid scalar page(6ms)
✓Thenthe response should be a valid scalar page(6ms)
Diagrams
Details:lines
Staff Management
/staff - Managing kitchen staff members with full CRUD operations
Staff members support CRUD operationsAdding a new staff member should return the created member Happy Path21ms🔗Steps✓Givena valid staff member request(4ms)
✓Givena valid staff member request(4ms)
✓Givena valid staff member request(4ms)
✓Whenthe staff member is submitted(6ms)
✓Whenthe staff member is submitted(6ms)
✓Thenthe staff response should contain the created member(7ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response name should be 'Name'(0ms)
✓Post steps response role should be "Chef"(0ms)
✓Whenthe staff member is submitted(6ms)
✓Thenthe staff response should contain the created member(7ms)
✓Thenthe staff response should contain the created member(7ms)
Diagrams
Details:lines
Staff requests must pass validationAdding a staff member with an invalid role should return a bad request response 10ms🔗Steps✓Givena staff member request with an invalid role(1ms)
✓Givena staff member request with an invalid role(1ms)
✓Givena staff member request with an invalid role(1ms)
✓Whenthe staff member is submitted(2ms)
✓Whenthe staff member is submitted(2ms)
✓Thenthe staff response should indicate bad request(4ms)
✓Post steps response message status code should be BadRequest(0ms)
✓Whenthe staff member is submitted(2ms)
✓Thenthe staff response should indicate bad request(4ms)
✓Thenthe staff response should indicate bad request(4ms)
Diagrams
Details:lines
Staff members support CRUD operationsDeleting a staff member should return no content 71ms🔗Steps✓Givena staff member exists(4ms)
✓Givena staff member exists(4ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena staff member exists(4ms)
✓Whenthe staff member is deleted(64ms)
✓Whenthe staff member is deleted(64ms)
✓Thenthe staff delete response should indicate no content(1ms)
✓Delete response status code should be NoContent(0ms)
✓Whenthe staff member is deleted(64ms)
✓Thenthe staff delete response should indicate no content(1ms)
✓Thenthe staff delete response should indicate no content(1ms)
Diagrams
Details:lines
Retrieving an existing staff member should return the member 255ms🔗Steps✓Givena staff member exists(101ms)
✓Givena staff member exists(101ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Givena staff member exists(101ms)
✓Whenthe staff member is retrieved by id(136ms)
✓Whenthe staff member is retrieved by id(136ms)
✓Thenthe staff get response should contain the member(13ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response id should be '1'(0ms)
✓Get steps response name should be 'Name'(0ms)
✓Get steps response role should be "Chef"(0ms)
✓Whenthe staff member is retrieved by id(136ms)
✓Thenthe staff get response should contain the member(13ms)
✓Thenthe staff get response should contain the member(13ms)
Diagrams
Details:lines
Status Update Not Found
/orders - Updating status of a non-existent order
Updating the status of a non-existent order should return not found 448ms🔗Steps✓Whena status update is sent for a non-existent order(364ms)
✓Whena status update is sent for a non-existent order(364ms)
✓Whena status update is sent for a non-existent order(364ms)
✓Thenthe status update response should indicate not found(15ms)
✓Patch steps response message status code should be NotFound(0ms)
✓Thenthe status update response should indicate not found(15ms)
✓Thenthe status update response should indicate not found(15ms)
Diagrams
Details:lines
Stream Order Updates Via G RPC
/grpc - Streaming order updates via gRPC server streaming
Streaming order updates should return the current status Happy Path95ms🔗Steps✓Givena pancake batch has been created(15ms)
✓Givena pancake batch has been created(15ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Givena pancake batch has been created(15ms)
✓Andan order has been created for the batch(22ms)
✓Order steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Order steps response order id should not be empty(0ms)
✓Andan order has been created for the batch(22ms)
✓Whenorder updates are streamed via gRPC(46ms)
✓Andan order has been created for the batch(22ms)
✓Thenthe streamed response should contain the order status(5ms)
✓Grpc steps streamed replies should have count 1(0ms)
✓Grpc steps streamed replies[0] order id should be orderSteps.Response.OrderId.ToString()(0ms)
✓Grpc steps streamed replies[0] customer name should be 'TestCustomer_7551195367013064688'(0ms)
✓Grpc steps streamed replies[0] status should be Created(0ms)
✓Whenorder updates are streamed via gRPC(46ms)
✓Whenorder updates are streamed via gRPC(46ms)
✓Thenthe streamed response should contain the order status(5ms)
✓Thenthe streamed response should contain the order status(5ms)
Diagrams
Details:lines
Streaming updates for non-existent order should return not found 12ms🔗Steps✓Whenorder updates for a non-existent order are streamed via gRPC(8ms)
✓Whenorder updates for a non-existent order are streamed via gRPC(8ms)
✓Whenorder updates for a non-existent order are streamed via gRPC(8ms)
✓Thenthe gRPC stream should return a not found error(1ms)
✓Grpc steps rpc exception should not be null(0ms)
✓Grpc steps rpc exception status code should be NotFound(0ms)
✓Thenthe gRPC stream should return a not found error(1ms)
✓Thenthe gRPC stream should return a not found error(1ms)
Diagrams
Details:lines
Telemetry
/orders - Structured logging and telemetry verification
Creating an order should emit a structured log entry Happy PathIgnoreIfExternalSut333ms🔗Steps✓Giventhe application is configured with an in-memory log capture(162ms)
✓Giventhe application is configured with an in-memory log capture(162ms)
✓Giventhe application is configured with an in-memory log capture(162ms)
✓Anda pancake batch has been created(104ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Pancake steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Pancake steps response should not be null(0ms)
✓Pancake steps response batch id should not be empty(0ms)
✓Anda pancake batch has been created(104ms)
✓Anda valid order request(1ms)
✓Anda pancake batch has been created(104ms)
✓Whenthe order is submitted(41ms)
✓Anda valid order request(1ms)
✓Thena structured log entry should have been captured for order creation(5ms)
✓Log provider entries should contain [ e => e.Message.Contains("created for customer") ](0ms)
✓Log provider entries should contain [ e => e.Message.Contains(orderSteps.Request.CustomerName) ](0ms)
✓Log provider entries should contain [ e => e.Message.Contains("1 items") ](0ms)
✓Anda valid order request(1ms)
✓Whenthe order is submitted(41ms)
✓Whenthe order is submitted(41ms)
✓Thena structured log entry should have been captured for order creation(5ms)
✓Thena structured log entry should have been captured for order creation(5ms)
Diagrams
Details:lines
Toppings Deletion
/toppings - Deleting toppings from the system
Existing toppings can be deletedDeleting an existing topping should return no content Happy Path19ms🔗Steps✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Whenthe topping is deleted(13ms)
✓Whenthe topping is deleted(13ms)
✓Thenthe delete response should indicate success(1ms)
✓Delete steps response message status code should be NoContent(0ms)
✓Whenthe topping is deleted(13ms)
✓Thenthe delete response should indicate success(1ms)
✓Thenthe delete response should indicate success(1ms)
Diagrams
Details:lines
Non-existent toppings cannot be deletedDeleting a non-existent topping should return not found 8ms🔗Steps✓Givena topping id that does not exist(0ms)
✓Givena topping id that does not exist(0ms)
✓Givena topping id that does not exist(0ms)
✓Whenthe topping is deleted(4ms)
✓Whenthe topping is deleted(4ms)
✓Thenthe delete response should indicate not found(1ms)
✓Delete steps response message status code should be NotFound(0ms)
✓Whenthe topping is deleted(4ms)
✓Thenthe delete response should indicate not found(1ms)
✓Thenthe delete response should indicate not found(1ms)
Diagrams
Details:lines
Toppings Feature Flag
/toppings - Raspberry topping availability controlled by feature flag
Raspberry topping is hidden when the feature flag is disabledToppings should exclude raspberries when the feature flag is disabled IgnoreIfExternalSut252ms🔗Steps✓Giventhe raspberry topping feature flag is disabled(217ms)
✓Giventhe raspberry topping feature flag is disabled(217ms)
✓Giventhe raspberry topping feature flag is disabled(217ms)
✓Whenthe available toppings are requested(25ms)
✓Whenthe available toppings are requested(25ms)
✓Thenthe toppings response should not include raspberries(6ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response should not contain [ t => t.Name == ToppingDefaults.Raspberries ](0ms)
✓Whenthe available toppings are requested(25ms)
✓Thenthe toppings response should not include raspberries(6ms)
✓Thenthe toppings response should not include raspberries(6ms)
Diagrams
Details:lines
Raspberry topping is available when the feature flag is enabledToppings should include raspberries when the feature flag is enabled IgnoreIfExternalSut159ms🔗Steps✓Giventhe raspberry topping feature flag is enabled(119ms)
✓Giventhe raspberry topping feature flag is enabled(119ms)
✓Giventhe raspberry topping feature flag is enabled(119ms)
✓Whenthe available toppings are requested(29ms)
✓Whenthe available toppings are requested(29ms)
✓Thenthe toppings response should include raspberries(4ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response should contain [ t => t.Name == ToppingDefaults.Raspberries ](0ms)
✓Whenthe available toppings are requested(29ms)
✓Thenthe toppings response should include raspberries(4ms)
✓Thenthe toppings response should include raspberries(4ms)
Diagrams
Details:lines
Toppings Management
/toppings - Listing available toppings and adding custom toppings
The toppings endpoint should return all available toppings Happy Path77ms🔗Steps✓Whenthe available toppings are requested(39ms)
✓Whenthe available toppings are requested(39ms)
✓Whenthe available toppings are requested(39ms)
✓Thenthe toppings response should contain the default toppings(25ms)
✓Get steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Get steps response should have count ExpectedToppingCount(0ms)
✓Get steps response should contain [ t => t.Name == ToppingDefaults.Raspberries ](0ms)
✓Get steps response should contain [ t => t.Name == ToppingDefaults.Blueberries ](0ms)
✓Get steps response should contain [ t => t.Name == ToppingDefaults.MapleSyrup ](0ms)
✓Get steps response should contain [ t => t.Name == ToppingDefaults.WhippedCream ](0ms)
✓Get steps response should contain [ t => t.Name == ToppingDefaults.ChocolateChips ](0ms)
✓Thenthe toppings response should contain the default toppings(25ms)
✓Thenthe toppings response should contain the default toppings(25ms)
Diagrams
Details:lines
Adding a new topping should return the created topping 51ms🔗Steps✓Givena valid topping request(1ms)
✓Givena valid topping request(1ms)
✓Givena valid topping request(1ms)
✓Whenthe new topping is submitted(29ms)
✓Whenthe new topping is submitted(29ms)
✓Thenthe topping response should contain the created topping(15ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response name should be Strawberries(0ms)
✓Post steps response category should be FruitCategory(0ms)
✓Whenthe new topping is submitted(29ms)
✓Thenthe topping response should contain the created topping(15ms)
✓Thenthe topping response should contain the created topping(15ms)
Diagrams
Details:lines
Toppings Update
/toppings - Updating existing toppings
Existing toppings can be updatedUpdating an existing topping should return the updated topping Happy Path27ms🔗Steps✓Givena known blueberry topping exists(0ms)
✓Givena known blueberry topping exists(0ms)
✓Givena known blueberry topping exists(0ms)
✓Anda valid update topping request(0ms)
✓Anda valid update topping request(0ms)
✓Whenthe topping is updated(16ms)
✓Anda valid update topping request(0ms)
✓Thenthe update response should contain the updated topping(5ms)
✓Put steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Put steps response topping id should be KnownBlueberryToppingId(0ms)
✓Put steps response name should be Strawberries(0ms)
✓Put steps response category should be FruitCategory(0ms)
✓Whenthe topping is updated(16ms)
✓Whenthe topping is updated(16ms)
✓Thenthe update response should contain the updated topping(5ms)
✓Thenthe update response should contain the updated topping(5ms)
Diagrams
Details:lines
Update requests must pass validation and XSS checksUpdate toppings endpoint is called with invalid or dangerous input 6/6 passed64ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
Category
<script>alert('xss')</script>
Script tag in category
Category contains potentially dangerous content.
Bad Request
Passed
35ms
2
Category
Category is required
'Category' is required.
Bad Request
Passed
9ms
3
Category
javascript:alert(1)
Javascript protocol
Category contains potentially dangerous content.
Bad Request
Passed
4ms
4
Name
<img src=x onerror=alert(1)>
Event handler in name
Name contains potentially dangerous content.
Bad Request
Passed
5ms
5
Name
<script>alert('xss')</script>
Script tag in name
Name contains potentially dangerous content.
Bad Request
Passed
5ms
6
Name
Name is required
'Name' is required.
Bad Request
Passed
4ms
Background Steps✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
Steps✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
✓Whenthe invalid update topping request is submitted(5ms)
✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
✓Thenthe update response should contain error "Category contains potentially dangerous content." with status "Bad Request"(25ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Category contains potentially dangerous content.') ](0ms)
✓Whenthe invalid update topping request is submitted(5ms)
✓Whenthe invalid update topping request is submitted(5ms)
✓Thenthe update response should contain error "Category contains potentially dangerous content." with status "Bad Request"(25ms)
✓Thenthe update response should contain error "Category contains potentially dangerous content." with status "Bad Request"(25ms)
Background Steps✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
Steps✓Anda valid update topping request with "Category" set to ""(0ms)
✓Whenthe invalid update topping request is submitted(5ms)
✓Anda valid update topping request with "Category" set to ""(0ms)
✓Thenthe update response should contain error "'Category' is required." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Category' is required.') ](0ms)
✓Whenthe invalid update topping request is submitted(5ms)
✓Whenthe invalid update topping request is submitted(5ms)
✓Thenthe update response should contain error "'Category' is required." with status "Bad Request"(1ms)
✓Thenthe update response should contain error "'Category' is required." with status "Bad Request"(1ms)
Background Steps✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
Steps✓Anda valid update topping request with "Category" set to "javascript:alert(1)"(0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Anda valid update topping request with "Category" set to "javascript:alert(1)"(0ms)
✓Thenthe update response should contain error "Category contains potentially dangerous content." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Category contains potentially dangerous content.') ](0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Thenthe update response should contain error "Category contains potentially dangerous content." with status "Bad Request"(0ms)
✓Thenthe update response should contain error "Category contains potentially dangerous content." with status "Bad Request"(0ms)
Background Steps✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
Steps✓Anda valid update topping request with "Name" set to "<img src=x onerror=alert(1)>"(0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Anda valid update topping request with "Name" set to "<img src=x onerror=alert(1)>"(0ms)
✓Thenthe update response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Name contains potentially dangerous content.') ](0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Thenthe update response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
✓Thenthe update response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
Background Steps✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
Steps✓Anda valid update topping request with "Name" set to "<script>alert('xss')</script>"(0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Anda valid update topping request with "Name" set to "<script>alert('xss')</script>"(0ms)
✓Thenthe update response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Name contains potentially dangerous content.') ](0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Thenthe update response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
✓Thenthe update response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
Background Steps✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Givena known topping exists(0ms)
✓Anda valid update topping request with "Category" set to "<script>alert('xss')</script>"(1ms)
Steps✓Anda valid update topping request with "Name" set to ""(0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Anda valid update topping request with "Name" set to ""(0ms)
✓Thenthe update response should contain error "'Name' is required." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Name' is required.') ](0ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Whenthe invalid update topping request is submitted(1ms)
✓Thenthe update response should contain error "'Name' is required." with status "Bad Request"(0ms)
✓Thenthe update response should contain error "'Name' is required." with status "Bad Request"(0ms)
Diagrams
Details:lines
Non-existent toppings cannot be updatedUpdating a non-existent topping should return not found 6ms🔗Steps✓Givena topping id that does not exist(0ms)
✓Givena topping id that does not exist(0ms)
✓Givena topping id that does not exist(0ms)
✓Anda valid update topping request(0ms)
✓Anda valid update topping request(0ms)
✓Whenthe topping is updated(1ms)
✓Anda valid update topping request(0ms)
✓Thenthe update response should indicate not found(1ms)
✓Put steps response message status code should be NotFound(0ms)
✓Whenthe topping is updated(1ms)
✓Whenthe topping is updated(1ms)
✓Thenthe update response should indicate not found(1ms)
✓Thenthe update response should indicate not found(1ms)
Diagrams
Details:lines
Toppings XSS Validation
/toppings - XSS and input validation for toppings
Toppings endpoint is called with invalid or dangerous input 6/6 passed214ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
Category
<script>alert('xss')</script>
Script tag in category
Category contains potentially dangerous content.
Bad Request
Passed
13ms
2
Category
Category is required
'Category' is required.
Bad Request
Passed
148ms
3
Category
javascript:alert(1)
Javascript protocol
Category contains potentially dangerous content.
Bad Request
Passed
7ms
4
Name
<img src=x onerror=alert(1)>
Event handler in name
Name contains potentially dangerous content.
Bad Request
Passed
24ms
5
Name
<script>alert('xss')</script>
Script tag in name
Name contains potentially dangerous content.
Bad Request
Passed
7ms
6
Name
Name is required
'Name' is required.
Bad Request
Passed
13ms
Steps✓Givena valid topping request with "Category" set to "<script>alert('xss')</script>"(0ms)
✓Givena valid topping request with "Category" set to "<script>alert('xss')</script>"(0ms)
✓Givena valid topping request with "Category" set to "<script>alert('xss')</script>"(0ms)
✓Whenthe invalid topping request is submitted(10ms)
✓Whenthe invalid topping request is submitted(10ms)
✓Thenthe topping response should contain error "Category contains potentially dangerous content." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Category contains potentially dangerous content.') ](0ms)
✓Whenthe invalid topping request is submitted(10ms)
✓Thenthe topping response should contain error "Category contains potentially dangerous content." with status "Bad Request"(0ms)
✓Thenthe topping response should contain error "Category contains potentially dangerous content." with status "Bad Request"(0ms)
Steps✓Givena valid topping request with "Category" set to ""(19ms)
✓Givena valid topping request with "Category" set to ""(19ms)
✓Givena valid topping request with "Category" set to ""(19ms)
✓Whenthe invalid topping request is submitted(95ms)
✓Whenthe invalid topping request is submitted(95ms)
✓Thenthe topping response should contain error "'Category' is required." with status "Bad Request"(21ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Category' is required.') ](0ms)
✓Whenthe invalid topping request is submitted(95ms)
✓Thenthe topping response should contain error "'Category' is required." with status "Bad Request"(21ms)
✓Thenthe topping response should contain error "'Category' is required." with status "Bad Request"(21ms)
Steps✓Givena valid topping request with "Category" set to "javascript:alert(1)"(0ms)
✓Givena valid topping request with "Category" set to "javascript:alert(1)"(0ms)
✓Givena valid topping request with "Category" set to "javascript:alert(1)"(0ms)
✓Whenthe invalid topping request is submitted(3ms)
✓Whenthe invalid topping request is submitted(3ms)
✓Thenthe topping response should contain error "Category contains potentially dangerous content." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Category contains potentially dangerous content.') ](0ms)
✓Whenthe invalid topping request is submitted(3ms)
✓Thenthe topping response should contain error "Category contains potentially dangerous content." with status "Bad Request"(1ms)
✓Thenthe topping response should contain error "Category contains potentially dangerous content." with status "Bad Request"(1ms)
Steps✓Givena valid topping request with "Name" set to "<img src=x onerror=alert(1)>"(12ms)
✓Givena valid topping request with "Name" set to "<img src=x onerror=alert(1)>"(12ms)
✓Givena valid topping request with "Name" set to "<img src=x onerror=alert(1)>"(12ms)
✓Whenthe invalid topping request is submitted(7ms)
✓Whenthe invalid topping request is submitted(7ms)
✓Thenthe topping response should contain error "Name contains potentially dangerous content." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Name contains potentially dangerous content.') ](0ms)
✓Whenthe invalid topping request is submitted(7ms)
✓Thenthe topping response should contain error "Name contains potentially dangerous content." with status "Bad Request"(1ms)
✓Thenthe topping response should contain error "Name contains potentially dangerous content." with status "Bad Request"(1ms)
Steps✓Givena valid topping request with "Name" set to "<script>alert('xss')</script>"(0ms)
✓Givena valid topping request with "Name" set to "<script>alert('xss')</script>"(0ms)
✓Givena valid topping request with "Name" set to "<script>alert('xss')</script>"(0ms)
✓Whenthe invalid topping request is submitted(4ms)
✓Whenthe invalid topping request is submitted(4ms)
✓Thenthe topping response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Name contains potentially dangerous content.') ](0ms)
✓Whenthe invalid topping request is submitted(4ms)
✓Thenthe topping response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
✓Thenthe topping response should contain error "Name contains potentially dangerous content." with status "Bad Request"(0ms)
Steps✓Givena valid topping request with "Name" set to ""(0ms)
✓Givena valid topping request with "Name" set to ""(0ms)
✓Givena valid topping request with "Name" set to ""(0ms)
✓Whenthe invalid topping request is submitted(8ms)
✓Whenthe invalid topping request is submitted(8ms)
✓Thenthe topping response should contain error "'Name' is required." with status "Bad Request"(2ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Name' is required.') ](0ms)
✓Whenthe invalid topping request is submitted(8ms)
✓Thenthe topping response should contain error "'Name' is required." with status "Bad Request"(2ms)
✓Thenthe topping response should contain error "'Name' is required." with status "Bad Request"(2ms)
Diagrams
Details:lines
Waffles Content Negotiation
/waffles - Content negotiation and unsupported media types
Sending a request with an unsupported content type should return an unsupported media type response 3/3 passed43ms🔗
#
Input Parameters
Status
Duration
Content Type
1
application/xml
Passed
3ms
2
text/html
Passed
36ms
3
text/plain
Passed
4ms
Steps✓Givena waffle request with content type "application/xml"(0ms)
✓Givena waffle request with content type "application/xml"(0ms)
✓Givena waffle request with content type "application/xml"(0ms)
✓Whenthe waffles are prepared with the given content type(0ms)
✓Whenthe waffles are prepared with the given content type(0ms)
✓Thenthe waffle response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
✓Whenthe waffles are prepared with the given content type(0ms)
✓Thenthe waffle response should indicate unsupported media type(0ms)
✓Thenthe waffle response should indicate unsupported media type(0ms)
Steps✓Givena waffle request with content type "text/html"(25ms)
✓Givena waffle request with content type "text/html"(25ms)
✓Givena waffle request with content type "text/html"(25ms)
✓Whenthe waffles are prepared with the given content type(3ms)
✓Whenthe waffles are prepared with the given content type(3ms)
✓Thenthe waffle response should indicate unsupported media type(2ms)
✓Response status code should be UnsupportedMediaType(0ms)
✓Whenthe waffles are prepared with the given content type(3ms)
✓Thenthe waffle response should indicate unsupported media type(2ms)
✓Thenthe waffle response should indicate unsupported media type(2ms)
Steps✓Givena waffle request with content type "text/plain"(0ms)
✓Givena waffle request with content type "text/plain"(0ms)
✓Givena waffle request with content type "text/plain"(0ms)
✓Whenthe waffles are prepared with the given content type(0ms)
✓Whenthe waffles are prepared with the given content type(0ms)
✓Thenthe waffle response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
✓Whenthe waffles are prepared with the given content type(0ms)
✓Thenthe waffle response should indicate unsupported media type(0ms)
✓Thenthe waffle response should indicate unsupported media type(0ms)
Diagrams
Details:lines
Waffles Creation
/waffles - Creating waffles with ingredients including butter
A valid waffle request should return a fresh batch Happy Path84ms🔗Steps✓Givena valid waffle recipe with all ingredients(7ms)
✓Givena valid waffle recipe with all ingredients(7ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Givena valid waffle recipe with all ingredients(7ms)
✓Whenthe waffles are prepared(39ms)
✓Whenthe waffles are prepared(39ms)
✓Thenthe waffles response should contain a valid batch with all ingredients(23ms)
✓Waffle steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Waffle steps response ingredients should contain 'Milk'(0ms)
✓Waffle steps response ingredients should contain 'Eggs'(0ms)
✓Waffle steps response ingredients should contain 'Flour'(0ms)
✓Waffle steps response ingredients should contain UnsaltedButter(0ms)
✓Whenthe waffles are prepared(39ms)
✓Andthe cow service should have received a milk request(1ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Thenthe waffles response should contain a valid batch with all ingredients(23ms)
✓Thenthe waffles response should contain a valid batch with all ingredients(23ms)
✓Andthe cow service should have received a milk request(1ms)
✓Andthe cow service should have received a milk request(1ms)
Diagrams
Details:lines
A waffle request with more toppings than allowed should return a bad request response IgnoreIfExternalSut46ms🔗Steps✓Giventhe max toppings per item is the configured limit(3ms)
✓Giventhe max toppings per item is the configured limit(3ms)
✓Giventhe max toppings per item is the configured limit(3ms)
✓Anda valid waffle recipe with all ingredients(14ms)
✓Milk steps response message status code should be OK(0ms)
✓Eggs steps response message status code should be OK(0ms)
✓Flour steps response message status code should be OK(0ms)
✓Anda valid waffle recipe with all ingredients(14ms)
✓Andthe waffle request has more toppings than the configured limit(10ms)
✓Anda valid waffle recipe with all ingredients(14ms)
✓Whenthe waffles are prepared(8ms)
✓Andthe waffle request has more toppings than the configured limit(10ms)
✓Thenthe waffles response should indicate too many toppings(4ms)
✓Waffle steps response message status code should be BadRequest(0ms)
✓Waffle error response body should contain MaxToppingsExceeded(0ms)
✓Andthe waffle request has more toppings than the configured limit(10ms)
✓Whenthe waffles are prepared(8ms)
✓Whenthe waffles are prepared(8ms)
✓Thenthe waffles response should indicate too many toppings(4ms)
✓Thenthe waffles response should indicate too many toppings(4ms)
Diagrams
Details:lines
Waffles endpoint is called with invalid ingredients should return a bad request response 8/8 passed160ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Error Message
Response Status
1
Butter
<script>alert</script>
XSS in butter
Butter contains potentially dangerous content.
Bad Request
Passed
66ms
2
Butter
Butter is required
'Butter' is required.
Bad Request
Passed
12ms
3
Eggs
Eggs is required
'Eggs' is required.
Bad Request
Passed
7ms
4
Eggs
javascript:void(0)
XSS in eggs
Eggs contains potentially dangerous content.
Bad Request
Passed
23ms
5
Flour
<img onerror=x>
XSS in flour
Flour contains potentially dangerous content.
Bad Request
Passed
10ms
6
Flour
Flour is required
'Flour' is required.
Bad Request
Passed
14ms
7
Milk
<script>alert</script>
XSS in milk
Milk contains potentially dangerous content.
Bad Request
Passed
13ms
8
Milk
Milk is required
'Milk' is required.
Bad Request
Passed
10ms
Steps✓Givena valid waffle request with "Butter" set to "<script>alert</script>"(6ms)
✓Givena valid waffle request with "Butter" set to "<script>alert</script>"(6ms)
✓Givena valid waffle request with "Butter" set to "<script>alert</script>"(6ms)
✓Whenthe invalid waffle request is submitted(46ms)
✓Whenthe invalid waffle request is submitted(46ms)
✓Thenthe waffle response should contain error "Butter contains potentially dangerous content." with status "Bad Request"(8ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Butter contains potentially dangerous content.') ](0ms)
✓Whenthe invalid waffle request is submitted(46ms)
✓Thenthe waffle response should contain error "Butter contains potentially dangerous content." with status "Bad Request"(8ms)
✓Thenthe waffle response should contain error "Butter contains potentially dangerous content." with status "Bad Request"(8ms)
Steps✓Givena valid waffle request with "Butter" set to ""(0ms)
✓Givena valid waffle request with "Butter" set to ""(0ms)
✓Givena valid waffle request with "Butter" set to ""(0ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Thenthe waffle response should contain error "'Butter' is required." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Butter' is required.') ](0ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Thenthe waffle response should contain error "'Butter' is required." with status "Bad Request"(0ms)
✓Thenthe waffle response should contain error "'Butter' is required." with status "Bad Request"(0ms)
Steps✓Givena valid waffle request with "Eggs" set to ""(0ms)
✓Givena valid waffle request with "Eggs" set to ""(0ms)
✓Givena valid waffle request with "Eggs" set to ""(0ms)
✓Whenthe invalid waffle request is submitted(1ms)
✓Whenthe invalid waffle request is submitted(1ms)
✓Thenthe waffle response should contain error "'Eggs' is required." with status "Bad Request"(3ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Eggs' is required.') ](0ms)
✓Whenthe invalid waffle request is submitted(1ms)
✓Thenthe waffle response should contain error "'Eggs' is required." with status "Bad Request"(3ms)
✓Thenthe waffle response should contain error "'Eggs' is required." with status "Bad Request"(3ms)
Steps✓Givena valid waffle request with "Eggs" set to "javascript:void(0)"(1ms)
✓Givena valid waffle request with "Eggs" set to "javascript:void(0)"(1ms)
✓Givena valid waffle request with "Eggs" set to "javascript:void(0)"(1ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Thenthe waffle response should contain error "Eggs contains potentially dangerous content." with status "Bad Request"(1ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Eggs contains potentially dangerous content.') ](0ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Thenthe waffle response should contain error "Eggs contains potentially dangerous content." with status "Bad Request"(1ms)
✓Thenthe waffle response should contain error "Eggs contains potentially dangerous content." with status "Bad Request"(1ms)
Steps✓Givena valid waffle request with "Flour" set to "<img onerror=x>"(0ms)
✓Givena valid waffle request with "Flour" set to "<img onerror=x>"(0ms)
✓Givena valid waffle request with "Flour" set to "<img onerror=x>"(0ms)
✓Whenthe invalid waffle request is submitted(1ms)
✓Whenthe invalid waffle request is submitted(1ms)
✓Thenthe waffle response should contain error "Flour contains potentially dangerous content." with status "Bad Request"(3ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Flour contains potentially dangerous content.') ](0ms)
✓Whenthe invalid waffle request is submitted(1ms)
✓Thenthe waffle response should contain error "Flour contains potentially dangerous content." with status "Bad Request"(3ms)
✓Thenthe waffle response should contain error "Flour contains potentially dangerous content." with status "Bad Request"(3ms)
Steps✓Givena valid waffle request with "Flour" set to ""(0ms)
✓Givena valid waffle request with "Flour" set to ""(0ms)
✓Givena valid waffle request with "Flour" set to ""(0ms)
✓Whenthe invalid waffle request is submitted(6ms)
✓Whenthe invalid waffle request is submitted(6ms)
✓Thenthe waffle response should contain error "'Flour' is required." with status "Bad Request"(5ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Flour' is required.') ](0ms)
✓Whenthe invalid waffle request is submitted(6ms)
✓Thenthe waffle response should contain error "'Flour' is required." with status "Bad Request"(5ms)
✓Thenthe waffle response should contain error "'Flour' is required." with status "Bad Request"(5ms)
Steps✓Givena valid waffle request with "Milk" set to "<script>alert</script>"(3ms)
✓Givena valid waffle request with "Milk" set to "<script>alert</script>"(3ms)
✓Givena valid waffle request with "Milk" set to "<script>alert</script>"(3ms)
✓Whenthe invalid waffle request is submitted(6ms)
✓Whenthe invalid waffle request is submitted(6ms)
✓Thenthe waffle response should contain error "Milk contains potentially dangerous content." with status "Bad Request"(2ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains('Milk contains potentially dangerous content.') ](0ms)
✓Whenthe invalid waffle request is submitted(6ms)
✓Thenthe waffle response should contain error "Milk contains potentially dangerous content." with status "Bad Request"(2ms)
✓Thenthe waffle response should contain error "Milk contains potentially dangerous content." with status "Bad Request"(2ms)
Steps✓Givena valid waffle request with "Milk" set to ""(0ms)
✓Givena valid waffle request with "Milk" set to ""(0ms)
✓Givena valid waffle request with "Milk" set to ""(0ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Thenthe waffle response should contain error "'Milk' is required." with status "Bad Request"(0ms)
✓Actual results should contain [ r => r.ErrorMessage.Contains(''Milk' is required.') ](0ms)
✓Whenthe invalid waffle request is submitted(7ms)
✓Thenthe waffle response should contain error "'Milk' is required." with status "Bad Request"(0ms)
✓Thenthe waffle response should contain error "'Milk' is required." with status "Bad Request"(0ms)