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. dep:, duration: and is: always narrow the search: they combine with the rest of it by AND, and can be negated with !! or not. Inside a group that !! or not negates, one is read as text, and the search bar is marked.
Status
Duration โฅseconds
Dependencies
All 212 scenarios, 27 featuresAll 212 scenarios
featuresscenarios
Payloads
No scenarios match the filters.
Scenarios
Steps
Duration
Feature
Total
Passed
Failed
Skipped
Total
Passed
Failed
Skipped
Total
Avg
Longest
10
10
0
0
75
75
0
0
208ms
20ms
113ms
5
5
0
0
32
32
0
0
109ms
21ms
55ms
8
8
0
0
45
45
0
0
82ms
10ms
29ms
1
1
0
0
6
6
0
0
62ms
62ms
62ms
5
5
0
0
29
29
0
0
83ms
16ms
34ms
9
9
0
0
50
50
0
0
116ms
12ms
46ms
5
5
0
0
27
27
0
0
62ms
12ms
22ms
6
6
0
0
32
32
0
0
110ms
18ms
39ms
7
7
0
0
36
36
0
0
306ms
43ms
200ms
11
11
0
0
110
110
0
0
798ms
72ms
234ms
8
8
0
0
42
42
0
0
378ms
47ms
173ms
5
5
0
0
28
28
0
0
91ms
18ms
48ms
6
6
0
0
31
31
0
0
59ms
9ms
19ms
6
6
0
0
33
33
0
0
119ms
19ms
57ms
3
3
0
0
24
24
0
0
67ms
22ms
30ms
33
33
0
0
203
203
0
0
1s
35ms
428ms
5
5
0
0
28
28
0
0
93ms
18ms
26ms
11
11
0
0
64
64
0
0
44ms
4ms
15ms
1
1
0
0
6
6
0
0
90ms
90ms
90ms
6
6
0
0
32
32
0
0
75ms
12ms
23ms
8
8
0
0
43
43
0
0
393ms
49ms
81ms
5
5
0
0
29
29
0
0
61ms
12ms
18ms
1
1
0
0
6
6
0
0
81ms
81ms
81ms
12
12
0
0
131
131
0
0
571ms
47ms
163ms
4
4
0
0
23
23
0
0
74ms
18ms
24ms
20
20
0
0
121
121
0
0
521ms
26ms
163ms
11
11
0
0
65
65
0
0
89ms
8ms
38ms
Apple Cinnamon MuffinsDifferent muffin recipes should produce the expected batch 3/3 passed20ms🔗
✓Givenall ingredients are retrieved for the muffin recipe(11ms)
✓Whenthe muffins are prepared(0ms)
✓Thenthe response should match the expected batch(6ms)
✓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)
✓Muffin steps response toppings should have count '2'(0ms)
✓Baking temperature matches expectation should be true(0ms)
Steps
✓Givenall ingredients are retrieved for the muffin recipe(0ms)
✓Whenthe muffins are prepared(0ms)
✓Thenthe response should match the expected batch(1ms)
✓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)
✓Muffin steps response toppings should have count '2'(0ms)
✓Baking temperature matches expectation should be true(0ms)
Steps
✓Givenall ingredients are retrieved for the muffin recipe(0ms)
✓Whenthe muffins are prepared(0ms)
✓Thenthe response should match the expected batch(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)
✓Muffin steps response toppings should have count '2'(0ms)
✓Baking temperature matches expectation should be true(0ms)
Diagrams
This scenario:Payloads
Muffin request with invalid field should return bad request 6/6 passed124ms ยท 113ms warm-up🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
Apples
Apples is required
'Apples' is required.
Bad Request
Passed
1ms
2
Cinnamon
Cinnamon is required
'Cinnamon' is required.
Bad Request
Passed
0ms
3
Cinnamon
<script>alert('xss')</script>
XSS in cinnamon
Cinnamon contains potentially dangerous content.
Bad Request
Passed
5ms
4
Eggs
Eggs is required
'Eggs' is required.
Bad Request
Passed
1ms
5
Flour
Flour is required
'Flour' is required.
Bad Request
Passed
1ms
6
Milk
Milk is required
'Milk' is required.
Bad Request
Passed
113ms
Steps
✓StepA muffin request with invalid Apples(0ms)
✓Whenthe muffin validation request is sent(1ms)
✓Thenthe response should contain error 'Apples' is required.(0ms)
✓Actual error message should contain ''Apples' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA muffin request with invalid Cinnamon(0ms)
✓Whenthe muffin validation request is sent(0ms)
✓Thenthe response should contain error 'Cinnamon' is required.(0ms)
✓Actual error message should contain ''Cinnamon' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA muffin request with invalid Cinnamon(0ms)
✓Whenthe muffin validation request is sent(5ms)
✓Thenthe response should contain error Cinnamon contains potentially dangerous content.(0ms)
✓Actual error message should contain 'Cinnamon contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA muffin request with invalid Eggs(0ms)
✓Whenthe muffin validation request is sent(1ms)
✓Thenthe response should contain error 'Eggs' is required.(0ms)
✓Actual error message should contain ''Eggs' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA muffin request with invalid Flour(0ms)
✓Whenthe muffin validation request is sent(1ms)
✓Thenthe response should contain error 'Flour' is required.(0ms)
✓Actual error message should contain ''Flour' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA muffin request with invalid Milk(2ms)
✓Whenthe muffin validation request is sent(58ms)
✓Thenthe response should contain error 'Milk' is required.(52ms)
✓Actual error message should contain ''Milk' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Valid apple cinnamon muffin request should return a fresh batch 62ms🔗Steps
✓Givenall ingredients are retrieved for apple cinnamon muffins(6ms)
✓Whenthe muffins are prepared(5ms)
✓Thenthe response should contain a valid batch with all ingredients(42ms)✓Andthe cow service should have received a milk request(8ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
Diagrams
This scenario:Payloads
Audit LogsAudit logs should be filterable by entity id 15ms🔗Steps
✓Givenan order has been created to generate an audit log(0ms)
✓Whenaudit logs are requested filtered by entity id(3ms)
✓Thenthe audit log response should be OK(0ms)
✓Audit log response status code should be OK(0ms)
✓Andthe audit logs should contain the specific order entry(11ms)
✓Audit logs should contain [ l => l.EntityId == 'bb22386f-dce3-4fed-ae69-a38e7bf56d6b' ](0ms)
Diagrams
This scenario:Payloads
Audit logs should be filterable by entity type 2ms🔗Steps
✓Givenan order has been created to generate an audit log(0ms)
✓Whenaudit logs are requested filtered by entity type(0ms)
✓Thenthe audit log response should be OK(0ms)
✓Audit log response status code should be OK(0ms)
✓Andthe audit logs should only contain order entries(1ms)
✓Audit logs should only contain [ l => l.EntityType == AuditLogDefaults.OrderEntityType ](0ms)
Diagrams
This scenario:Payloads
Audit logs should be returned in descending timestamp order 29ms🔗Steps
✓Givenan order has been created to generate an audit log(9ms)
✓Whenaudit logs are requested filtered by entity type(4ms)
✓Thenthe audit logs should be ordered by timestamp descending(16ms)
✓Audit logs should not be null or empty(0ms)
✓Audit logs should be in descending order [ l => l.Timestamp ](0ms)
Diagrams
This scenario:Payloads
Creating an order should produce a retrievable audit log entry 55ms🔗Steps
✓Givena pancake batch has been created(8ms)
✓Andan order has been created for the batch(5ms)
✓Whenthe audit logs are retrieved(12ms)
✓Thenthe audit log response should contain the order creation entry(13ms)
✓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_8630699151791899752') ](0ms)
✓Andthe downstream services should have received requests(14ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
Diagrams
This scenario:Payloads
Filtering audit logs by a non existent entity type should return an empty collection 6ms🔗Steps
✓Whenaudit logs are requested filtered by a non existent entity type(3ms)
✓Thenthe audit log response should be OK(0ms)
✓Audit log response status code should be OK(0ms)
✓Andthe audit logs should be empty(2ms)
✓Audit logs should be empty(0ms)
Diagrams
This scenario:Payloads
Chef NotesCreating a chef note should return the created note 5ms🔗Steps
✓Givena valid chef note request is prepared(0ms)
✓Whenthe note is submitted(0ms)
✓Thenthe response should contain the created note(5ms)
✓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-374582a000b84b578335d02495a0a5da'(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)
Diagrams
This scenario:Payloads
Creating a note with missing note text should return bad request 3ms🔗Steps
✓Givena note request with missing note text is prepared(1ms)
✓Whenthe note is submitted(0ms)
✓Thenthe note response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Creating a note with missing recipe name should return bad request 2ms🔗Steps
✓Givena note request with missing recipe name is prepared(2ms)
✓Whenthe note is submitted(0ms)
✓Thenthe note response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Listing notes by recipe should return matching notes 29ms ยท 29ms warm-up🔗Steps
✓Givena chef note exists(15ms)
✓Whenthe notes are listed by recipe(4ms)
✓Thenthe list response should contain the note(9ms)
✓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 == '11cca3af-3f5e-4984-8ff2-37a22823c5a8' ](0ms)
Diagrams
This scenario:Payloads
Retrieving a non existent note should return not found 2ms🔗Steps
✓Whena non existent note is retrieved(1ms)
✓Thenthe get response should indicate not found(0ms)
✓Get steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Retrieving an existing note by id should return the note 11ms🔗Steps
✓Givena chef note exists(0ms)
✓Whenthe note is retrieved by id(4ms)
✓Thenthe get response should contain the note(7ms)
✓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 'ce1cc661-1d39-4715-9ce1-967908b465d9'(0ms)
✓Get steps response recipe name should be 'Recipe-b733f2294e1e4519817ab5980c604707'(0ms)
Diagrams
This scenario:Payloads
Updating a non existent note should return not found 5ms🔗Steps
✓Whena non existent note is updated(1ms)
✓Thenthe update response should indicate not found(3ms)
✓Patch steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Updating an existing note should return the updated note 21ms ยท 21ms warm-up🔗Steps
✓Givena chef note exists(0ms)
✓Whenthe note is updated(7ms)
✓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 'b2c81541-cdf5-4831-8ff8-93091623300f'(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)
Diagrams
This scenario:Payloads
Customer FeedbackConsuming customer feedback event should trigger downstream processing 62ms🔗Steps
✓Givena customer feedback received event(9ms)
✓Whenthe event is published to pubsub(44ms)
✓Thenthe feedback id should be generated(3ms)
✓Publish steps feedback id should not be '00000000-0000-0000-0000-000000000000'(0ms)
✓Andthe supplier service should have received the feedback(4ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/ingredients/feedback" && r.Method == HttpMethod.Post ](0ms)
Diagrams
This scenario:Payloads
Customer PreferencesRetrieving existing customer preferences should return the preferences 28ms ยท 28ms warm-up🔗Steps
✓Givencustomer preferences exist(0ms)
✓Whenthe customer preferences are retrieved(8ms)
✓Thenthe response should contain the preferences(19ms)
✓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 'c5ba151968404b2cbb449a9f1636aa9c'(0ms)
✓Get steps response preferred milk type should be "Oat"(0ms)
✓Get steps response likes extra toppings should be true(0ms)
Diagrams
This scenario:Payloads
Retrieving non existent customer preferences should return not found 2ms🔗Steps
✓Whennon existent customer preferences are retrieved(1ms)
✓Thenthe get response should indicate not found(1ms)
✓Get steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Saving customer preferences should return the saved preferences 34ms ยท 34ms warm-up🔗Steps
✓Givena valid customer preference request is prepared(16ms)
✓Whenthe customer preferences are saved(8ms)
✓Thenthe response should contain the saved preferences(9ms)
✓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)
Diagrams
This scenario:Payloads
Saving customer preferences with missing customer name should return bad request 6ms🔗Steps
✓Givena customer preference request with missing customer name is prepared(2ms)
✓Whenthe customer preferences are saved(0ms)
✓Thenthe put response should indicate bad request(3ms)
✓Put steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Updating customer preferences should return the updated preferences 11ms🔗Steps
✓Givencustomer preferences exist(4ms)
✓Whenthe customer preferences are updated(2ms)
✓Thenthe 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)
Diagrams
This scenario:Payloads
Daily SpecialsDaily special order with invalid field should return bad request 2/2 passed15ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
Quantity
0
Quantity must be greater than zero
Quantity must be greater than zero.
Bad Request
Passed
0ms
2
SpecialId
null
Special ID is required
'Special Id' is required.
Bad Request
Passed
14ms
Steps
✓StepA daily special order request with invalid Quantity(0ms)
✓Whenthe daily special order request is sent(0ms)
✓Thenthe response should contain error Quantity must be greater than zero.(0ms)
✓Actual error message should be 'Quantity must be greater than zero.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA daily special order request with invalid SpecialId(0ms)
✓Whenthe daily special order request is sent(12ms)
✓Thenthe response should contain error 'Special Id' is required.(0ms)
✓Actual error message should be ''Special Id' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Daily specials endpoint should return all available specials 3ms🔗Steps
✓Whenthe available daily specials are requested(0ms)
✓Thenthe daily specials response should contain all expected specials(3ms)
✓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)
Diagrams
This scenario:Payloads
Ordering daily special beyond threshold should return conflict 9ms🔗Steps
✓Giventhe matcha waffles order count is reset(2ms)
✓Andthe matcha waffles special has been ordered up to the configured limit(2ms)
✓Whenanother order is placed for the matcha waffles special(2ms)
✓Thenthe response should indicate the daily special is sold out(0ms)
✓Post steps response message status code should be Conflict(0ms)
Diagrams
This scenario:Payloads
Ordering non existent daily special should return not found 3ms🔗Steps
✓Givena daily special order request for a non existent special(0ms)
✓Whenthe daily special order is submitted(2ms)
✓Thenthe response should indicate not found(0ms)
✓Post steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Remaining quantity should decrease after each order 46ms🔗Steps
✓Giventhe lemon ricotta order count is reset(4ms)
✓Anda daily special order for lemon ricotta of quantity one is placed(5ms)
✓Whenthe available daily specials are requested(8ms)
✓Thenthe lemon ricotta special should have one fewer remaining(28ms)
✓Response content is valid json should be true(0ms)
✓Lemon ricotta remaining quantity should be '9'(0ms)
Diagrams
This scenario:Payloads
Same order with different idempotency keys should return different confirmations 17ms🔗Steps
✓Giventhe cinnamon swirl order count is reset(7ms)
✓Andan order request for the same special(0ms)
✓Whenthe order is submitted with two different idempotency keys(8ms)
✓Thenthe responses should have different confirmation ids(1ms)
✓First confirmation id should not be '66c74335-cc84-48aa-b2dc-996061b71dbc'(0ms)
Diagrams
This scenario:Payloads
Same order with same idempotency key should return same confirmation 11ms🔗Steps
✓Giventhe cinnamon swirl order count is reset(0ms)
✓Andan order request with an idempotency key(4ms)
✓Whenthe order is submitted twice with the same idempotency key(5ms)
✓Thenboth responses should return the same confirmation id(1ms)
✓First confirmation id should be '54821a04-8942-4909-9746-e9c6a6287fa7'(0ms)
Diagrams
This scenario:Payloads
Valid daily special order should return a confirmation 9ms🔗Steps
✓Giventhe cinnamon swirl order count is reset(1ms)
✓Anda valid daily special order request for cinnamon swirl(1ms)
✓Whenthe daily special order is submitted(1ms)
✓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 'aaaa0000-0000-0000-0000-000000000001'(0ms)
✓Post steps response order confirmation id should not be empty(0ms)
Diagrams
This scenario:Payloads
Equipment ReadingsDeleting a reading should remove it from the list 15ms🔗Steps
✓Givenan equipment reading record has been created(3ms)
✓Whenthe reading is deleted(6ms)
✓Thenthe delete response should indicate no content(0ms)
✓Delete steps response message status code should be NoContent(0ms)
✓Andthe reading should no longer be listed(5ms)
Diagrams
This scenario:Payloads
Listing readings by equipment should return matching records 22ms🔗Steps
✓Givenan equipment reading record has been created(6ms)
✓Whenthe readings are listed by equipment(4ms)
✓Thenthe reading list response should contain the record(11ms)
✓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.ReadingId == '71ae1151-7590-4b1f-8a7c-98accbe77d20' ](0ms)
Diagrams
This scenario:Payloads
Recording a reading with missing metric should return bad request 2ms🔗Steps
✓Givenan equipment reading request with a missing metric is prepared(1ms)
✓Whenthe equipment reading is recorded(0ms)
✓Thenthe reading post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Recording a reading with zero value should return bad request 10ms🔗Steps
✓Givenan equipment reading request with zero value is prepared(2ms)
✓Whenthe equipment reading is recorded(7ms)
✓Thenthe reading post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Recording an equipment reading should return the created record 11ms🔗Steps
✓Givena valid equipment reading request is prepared(0ms)
✓Whenthe equipment reading is recorded(0ms)
✓Thenthe reading 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 equipment id should be 'Oven-4959d0028df84626bfcfee57e03afc7b'(0ms)
✓Post steps response value should be 180.5m(0ms)
✓Post steps response reading id should not be null or empty(0ms)
Diagrams
This scenario:Payloads
FeedbackListing feedback for an order should return the feedback 28ms🔗Steps
✓Givena feedback entry exists(5ms)
✓Whenthe feedback is retrieved by order id(4ms)
✓Thenthe list response should contain the feedback(18ms)
✓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 == '8febd24e-1d75-4f1c-b222-259584f5a354' ](0ms)
Diagrams
This scenario:Payloads
Retrieving existing feedback by id should return the feedback 15ms🔗Steps
✓Givena feedback entry exists(0ms)
✓Whenthe feedback is retrieved by id(3ms)
✓Thenthe get response should contain the feedback(10ms)
✓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 '78df9812-eec7-4db0-ba88-d71c14c1e641'(0ms)
✓Get steps response customer name should be 'Customer-13873acfd2de4a648e69044a5af8c038'(0ms)
✓Get steps response rating should be 4(0ms)
Diagrams
This scenario:Payloads
Retrieving non existent feedback should return not found 6ms🔗Steps
✓Whena non existent feedback is retrieved(3ms)
✓Thenthe get response should indicate not found(3ms)
✓Get steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Submitting feedback should return the created feedback 39ms🔗Steps
✓Givena valid feedback request is prepared(4ms)
✓Whenthe feedback is submitted(0ms)
✓Thenthe response should contain the created feedback(35ms)
✓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 'Customer-d115172081ce4c559b21500c3eb54b9e'(0ms)
✓Post steps response rating should be 4(0ms)
Diagrams
This scenario:Payloads
Submitting feedback with invalid rating should return bad request 15ms🔗Steps
✓Givena feedback request with an invalid rating is prepared(2ms)
✓Whenthe feedback is submitted(12ms)
✓Thenthe post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Submitting feedback with missing customer name should return bad request 3ms🔗Steps
✓Givena feedback request with missing customer name is prepared(3ms)
✓Whenthe feedback is submitted(0ms)
✓Thenthe post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
GrpcOrder status for non existent order should return not found 12ms🔗Steps
✓Whenthe order status for a non existent order is requested via grpc(10ms)
✓Thenthe grpc response should be a not found error(1ms)
✓Grpc steps rpc exception should not be null(0ms)
✓Grpc steps rpc exception status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Order status via grpc should return order details 19ms🔗Steps
✓Givena pancake batch and order have been created(11ms)
✓Whenthe order status is requested via grpc(5ms)
✓Thenthe grpc response should contain the order details(2ms)
✓Grpc steps order status reply order id should be 'd41a4ed3-cf4c-4252-a2ef-72ebf16b9a84'(0ms)
✓Grpc steps order status reply customer name should be 'TestCustomer_132186564919691309'(0ms)
✓Grpc steps order status reply status should be Created(0ms)
Diagrams
This scenario:Payloads
Pancake recipe summary should return correct data 200ms ยท 57ms warm-up🔗Steps
✓Whena recipe summary is requested for pancakes(18ms)
✓Thenthe recipe summary should contain pancake data(182ms)
✓Grpc steps recipe summary reply recipe type should be "Pancakes"(0ms)
✓Grpc steps recipe summary reply total batches should be 42(0ms)
✓Grpc steps recipe summary reply common ingredients should be equivalent to ["Milk", "Flour", "Eggs"](0ms)
Diagrams
This scenario:Payloads
Streaming order updates should return the current status 17ms🔗Steps
✓Givena pancake batch and order have been created(11ms)
✓Whenorder updates are streamed via grpc(1ms)
✓Thenthe streamed response should contain the order status(3ms)
✓Grpc steps streamed replies should have count 1(0ms)
✓Grpc steps streamed replies[0] order id should be '5a3975b8-1405-40c9-b2a2-3098b34fad29'(0ms)
✓Grpc steps streamed replies[0] customer name should be 'TestCustomer_145484849319810171'(0ms)
✓Grpc steps streamed replies[0] status should be Created(0ms)
Diagrams
This scenario:Payloads
Streaming updates for non existent order should return not found 40ms ยท 40ms warm-up🔗Steps
✓Whenorder updates for a non existent order are streamed via grpc(29ms)
✓Thenthe grpc stream should return a not found error(10ms)
✓Grpc steps rpc exception should not be null(0ms)
✓Grpc steps rpc exception status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Unknown recipe type should return zero batches 4ms🔗Steps
✓Whena recipe summary is requested for an unknown type(2ms)
✓Thenthe recipe summary should contain zero batches and no ingredients(2ms)
✓Grpc steps recipe summary reply recipe type should be "Unknown"(0ms)
✓Grpc steps recipe summary reply total batches should be 0(0ms)
✓Grpc steps recipe summary reply common ingredients should be empty(0ms)
Diagrams
This scenario:Payloads
Waffle recipe summary should return correct data 12ms🔗Steps
✓Whena recipe summary is requested for waffles(6ms)
✓Thenthe recipe summary should contain waffle data(6ms)
✓Grpc steps recipe summary reply recipe type should be "Waffles"(0ms)
✓Grpc steps recipe summary reply total batches should be 28(0ms)
✓Grpc steps recipe summary reply common ingredients should be equivalent to ["Milk", "Flour", "Eggs", "Butter"](0ms)
Diagrams
This scenario:Payloads
InfrastructureCreating an order should emit a structured log entry 193ms🔗Steps
✓Giventhe application is configured with in memory log capture(157ms)
✓Anda pancake batch has been created(5ms)
✓Whenthe order is submitted(21ms)
✓Thena structured log entry should have been captured for order creation(8ms)
✓Log provider entries should contain [ e => e.Message.Contains("created for customer") ](0ms)
✓Log provider entries should contain [ e => e.Message.Contains('TelemetryTest_2500647874608511499') ](0ms)
✓Log provider entries should contain [ e => e.Message.Contains("1 items") ](0ms)
Diagrams
This scenario:Payloads
Health check endpoint should return healthy status with all dependency details 16ms🔗Steps
✓Whenthe health check endpoint is called(7ms)
✓Thenthe response should indicate healthy(1ms)
✓Response status code should be OK(0ms)
✓Result should not be null(0ms)
✓Result status should be Healthy(0ms)
✓Andall dependency health checks should be present(7ms)
✓Result results should contain key CowService(0ms)
✓Result results should contain key GoatService(0ms)
✓Result results should contain key SupplierService(0ms)
✓Result results should contain key KitchenService(0ms)
✓Result results should contain key CosmosDb(0ms)
✓Result results should contain key Kafka(0ms)
Diagrams
This scenario:Payloads
Health check response should include description and data for each entry 22ms🔗Steps
✓Whenthe health check endpoint is called(9ms)
✓Theneach entry should have a status(2ms)✓Andeach downstream entry should have a description(3ms)
✓Result results should contain key 'CowService'(0ms)
✓Result results[check name] description should not be null or empty $"health check entry '{checkName}' should have a description"(0ms)
✓Result results should contain key 'GoatService'(0ms)
✓Result results[check name] description should not be null or empty $"health check entry '{checkName}' should have a description"(0ms)
✓Result results should contain key 'SupplierService'(0ms)
✓Result results[check name] description should not be null or empty $"health check entry '{checkName}' should have a description"(0ms)
✓Result results should contain key 'KitchenService'(0ms)
✓Result results[check name] description should not be null or empty $"health check entry '{checkName}' should have a description"(0ms)
✓Andeach entry should have a data object(6ms)Diagrams
This scenario:Payloads
Health check should report degraded when cow service is unavailable 234ms🔗Steps
✓Giventhe cow service is configured to be unreachable(221ms)
✓Whenthe health check endpoint is called(2ms)
✓Thenthe response should indicate degraded status(2ms)
✓Response status code should be OK(0ms)
✓Result should not be null(0ms)
✓Result status should be Degraded(0ms)
✓Andthe cow service dependency should report degraded(7ms)
✓Result results should contain key CowService(0ms)
✓Result results[ health check names cow service] status should be Degraded(0ms)
Diagrams
This scenario:Payloads
Health check should report degraded when downstream service returns non success status 172ms🔗Steps
✓Giventhe kitchen service health check is configured to use a failing endpoint(163ms)
✓Whenthe health check endpoint is called(3ms)
✓Thenthe response should indicate degraded status(1ms)
✓Result should not be null(0ms)
✓Result status should be Degraded(0ms)
✓Andthe kitchen service should report degraded with status code description(4ms)
✓Result results should contain key KitchenService(0ms)
✓Kitchen entry status should be Degraded(0ms)
✓Kitchen entry description should contain "503"(0ms)
Diagrams
This scenario:Payloads
Health check should report degraded when multiple downstream services are unavailable 98ms🔗Steps
✓Giventhe cow service and supplier service are configured to be unreachable(96ms)
✓Whenthe health check endpoint is called(0ms)
✓Thenthe response should indicate degraded status(0ms)
✓Response status code should be OK(0ms)
✓Result should not be null(0ms)
✓Result status should be Degraded(0ms)
✓Andthe cow service dependency should report degraded(0ms)
✓Result results should contain key CowService(0ms)
✓Result results[ health check names cow service] status should be Degraded(0ms)
✓Andthe supplier service dependency should report degraded(1ms)
✓Result results should contain key SupplierService(0ms)
✓Result results[ health check names supplier service] status should be Degraded(0ms)
Diagrams
This scenario:Payloads
Heartbeat endpoint should return a running message 22ms🔗Steps
✓Whenthe heartbeat endpoint is called(20ms)
✓Thenthe response should indicate the service is running(1ms)
✓Response status code should be OK(0ms)
✓Result should not be null(0ms)
✓Result status should be HeartbeatStatus(0ms)
Diagrams
This scenario:Payloads
Request with correlation id should forward it to cow service 9ms🔗Steps
✓Givena request with a known correlation id(0ms)
✓Whenmilk is requested from the milk endpoint(8ms)
✓Thenthe cow service should have received the correlation id(0ms)
✓Requests should not be empty(0ms)
✓Request headers should contain key CorrelationId(0ms)
✓Request headers[ custom headers correlation id] should be 'b934d861-feef-4df2-ae06-81b31654f0f2'(0ms)
Diagrams
This scenario:Payloads
Request with correlation id should forward it to supplier service 11ms🔗Steps
✓Givena request with a known correlation id(0ms)
✓Andthe menu cache is cleared(3ms)
✓Whenthe menu is requested(2ms)
✓Thenthe supplier service should have received the correlation id(4ms)
✓Requests should not be empty(0ms)
✓Request headers should contain key CorrelationId(0ms)
✓Request headers[ custom headers correlation id] should be 'd2b49dcf-e092-4e6f-8c13-d82548e875a6'(0ms)
Diagrams
This scenario:Payloads
Request with correlation id should return same id in response 11ms🔗Steps
✓Givena request with a known correlation id(4ms)
✓Whenthe request is sent to the menu endpoint(2ms)
✓Thenthe response should contain the same correlation id(4ms)
✓Response contains correlation id header should be true(0ms)
✓First value of values should be '18286173-f7a4-4dc6-aa9c-7ba381c6a909'(0ms)
Diagrams
This scenario:Payloads
Request without correlation id should have one generated in response 6ms🔗Steps
✓Whena request without a correlation id is sent to the menu endpoint(2ms)
✓Thenthe response should contain a generated correlation id(4ms)
✓Response contains correlation id header should be true(0ms)
✓First value of values should not be null or empty(0ms)
Diagrams
This scenario:Payloads
IngredientsGoat milk endpoint should return fresh goat milk from goat service 11ms🔗Steps
✓Whengoat milk is requested(1ms)
✓Thenthe response should contain fresh goat milk(2ms)
✓Goat milk steps response message status code should be OK(0ms)
✓Goat milk steps goat milk response should not be null(0ms)
✓Goat milk steps goat milk response goat milk should be FreshGoatMilk(0ms)
✓Andthe goat service should have received a goat milk request(7ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/goat-milk" && r.Method == HttpMethod.Get ](0ms)
Diagrams
This scenario:Payloads
Goat milk endpoint should return fresh goat milk when feature is enabled 160ms🔗Steps
✓Giventhe goat milk feature flag is enabled(125ms)
✓Whengoat milk is requested(33ms)
✓Thenthe response should contain fresh goat milk(1ms)
✓Goat milk steps response message status code should be OK(0ms)
✓Goat milk steps goat milk response goat milk should be FreshGoatMilk(0ms)
Diagrams
This scenario:Payloads
Goat milk endpoint should return not found when feature is disabled 173ms🔗Steps
✓Giventhe goat milk feature flag is disabled(169ms)
✓Whengoat milk is requested(0ms)
✓Thenthe response should indicate feature disabled(4ms)
✓Goat milk steps response message status code should be NotFound(0ms)
✓Body should contain FeatureDisabled(0ms)
Diagrams
This scenario:Payloads
Requesting goat milk when goat service returns invalid response should return bad gateway 4ms🔗Steps
✓Giventhe goat service will return an invalid response(3ms)
✓Whengoat milk is requested(0ms)
✓Thenthe goat milk response should indicate a bad gateway(0ms)
✓Goat milk steps response message status code should be BadGateway(0ms)
✓Body should contain GoatServiceUnavailableTitle(0ms)
Diagrams
This scenario:Payloads
Requesting goat milk when goat service unavailable should return bad gateway 14ms🔗Steps
✓Giventhe goat service will return service unavailable(7ms)
✓Whengoat milk is requested(1ms)
✓Thenthe goat milk response should indicate a bad gateway(5ms)
✓Goat milk steps response message status code should be BadGateway(0ms)
✓Body should contain GoatServiceUnavailableTitle(0ms)
Diagrams
This scenario:Payloads
Requesting milk when cow service returns invalid response should return bad gateway 0ms🔗Steps
✓Giventhe cow service will return an invalid response(0ms)
✓Whenmilk is requested(0ms)
✓Thenthe milk response should indicate a bad gateway with unavailable message(0ms)
✓Milk steps response message status code should be BadGateway(0ms)
✓Milk error response body should contain CowServiceUnavailableTitle(0ms)
Diagrams
This scenario:Payloads
Requesting milk when cow service times out should return bad gateway 4ms🔗Steps
✓Giventhe cow service will return a timeout(4ms)
✓Whenmilk is requested(0ms)
✓Thenthe milk response should indicate a bad gateway with unavailable message(0ms)
✓Milk steps response message status code should be BadGateway(0ms)
✓Milk error response body should contain CowServiceUnavailableTitle(0ms)
Diagrams
This scenario:Payloads
Requesting milk when cow service unavailable should return bad gateway 8ms🔗Steps
✓Giventhe cow service will return service unavailable(0ms)
✓Whenmilk is requested(3ms)
✓Thenthe milk response should indicate a bad gateway with unavailable message(4ms)
✓Milk steps response message status code should be BadGateway(0ms)
✓Milk error response body should contain CowServiceUnavailableTitle(0ms)
Diagrams
This scenario:Payloads
Ingredient UsageGetting usage summary should return aggregated data 29ms🔗Steps
✓Givenan ingredient usage record exists(0ms)
✓Whenthe summary is requested(5ms)
✓Thenthe summary should contain aggregated data(23ms)
✓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-6a5b8ca2033f495f8cff7b4311b4ad93' ](0ms)
Diagrams
This scenario:Payloads
Listing usage by ingredient should return matching records 48ms ยท 48ms warm-up🔗Steps
✓Givenan ingredient usage record exists(31ms)
✓Whenthe usage is listed by ingredient(5ms)
✓Thenthe list response should contain the record(11ms)
✓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-6346719d16bc458bac68dfc84c662853' ](0ms)
Diagrams
This scenario:Payloads
Recording ingredient usage should return the created record 5ms🔗Steps
✓Givena valid ingredient usage request is prepared(0ms)
✓Whenthe usage is recorded(0ms)
✓Thenthe 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-5fa5464c939b45c98789fcdbefba5661'(0ms)
✓Post steps response quantity used should be 2.5m(0ms)
✓Post steps response usage id should not be null or empty(0ms)
Diagrams
This scenario:Payloads
Recording usage with missing ingredient name should return bad request 4ms🔗Steps
✓Givena usage request with missing ingredient name is prepared(4ms)
✓Whenthe usage is recorded(0ms)
✓Thenthe post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Recording usage with zero quantity should return bad request 3ms🔗Steps
✓Givena usage request with zero quantity is prepared(2ms)
✓Whenthe usage is recorded(0ms)
✓Thenthe post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Ingredient WasteDeleting a waste record should return no content 15ms ยท 15ms warm-up🔗Steps
✓Givenan ingredient waste record exists(10ms)
✓Whenthe waste record is deleted(3ms)
✓Thenthe delete response should indicate no content(1ms)
✓Delete steps response message status code should be NoContent(0ms)
Diagrams
This scenario:Payloads
Listing waste by recipe should return matching records 19ms🔗Steps
✓Givenan ingredient waste record exists(0ms)
✓Whenthe waste is listed by recipe(5ms)
✓Thenthe list response should contain the waste record(13ms)
✓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 == '4f93f89a-c0e1-4d27-be67-a96276ec14e5' ](0ms)
Diagrams
This scenario:Payloads
Recording ingredient waste should return the created record 9ms🔗Steps
✓Givena valid ingredient waste request is prepared(0ms)
✓Whenthe waste is recorded(0ms)
✓Thenthe response should contain the created waste record(9ms)
✓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 0.5m(0ms)
✓Post steps response waste id should not be null or empty(0ms)
✓Post steps response reason should be "Expired before use"(0ms)
Diagrams
This scenario:Payloads
Recording waste with missing ingredient name should return bad request 6ms🔗Steps
✓Givena waste request with missing ingredient name is prepared(5ms)
✓Whenthe waste is recorded(0ms)
✓Thenthe waste response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Recording waste with missing reason should return bad request 1ms🔗Steps
✓Givena waste request with missing reason is prepared(1ms)
✓Whenthe waste is recorded(0ms)
✓Thenthe waste response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Recording waste with zero quantity should return bad request 5ms🔗Steps
✓Givena waste request with zero quantity is prepared(5ms)
✓Whenthe waste is recorded(0ms)
✓Thenthe waste response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
InventoryAdding a new inventory item should return the created item 14ms🔗Steps
✓Givena valid inventory item request is prepared(3ms)
✓Whenthe inventory item is submitted(2ms)
✓Thenthe response should contain the created item(8ms)
✓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 'Flour-c371d71128ac4338a4344fa52e0f2ffe'(0ms)
✓Post steps response category should be "Dry Goods"(0ms)
Diagrams
This scenario:Payloads
Deleting an inventory item should return no content 10ms🔗Steps
✓Givenan inventory item exists(0ms)
✓Whenthe inventory item is deleted(4ms)
✓Thenthe delete response should indicate no content(5ms)
✓Delete steps response message status code should be NoContent(0ms)
Diagrams
This scenario:Payloads
Listing all inventory items should return all items 21ms🔗Steps
✓Givenan inventory item exists(0ms)
✓Whenall inventory items are requested(3ms)
✓Thenthe list response should contain the item(18ms)
✓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 == '4' ](0ms)
Diagrams
This scenario:Payloads
Retrieving a non existent inventory item should return not found 3ms🔗Steps
✓Whena non existent inventory item is retrieved(2ms)
✓Thenthe get response should indicate not found(0ms)
✓Get steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Retrieving an existing inventory item should return the item 57ms ยท 57ms warm-up🔗Steps
✓Givenan inventory item exists(10ms)
✓Whenthe inventory item is retrieved by id(6ms)
✓Thenthe get response should contain the item(39ms)
✓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 'Flour-e85d88ddafb84208b8d7e40e925ceb2d'(0ms)
Diagrams
This scenario:Payloads
Updating an inventory item should return the updated item 11ms🔗Steps
✓Givenan inventory item exists(0ms)
✓Whenthe inventory item is updated(4ms)
✓Thenthe put response should contain the updated values(6ms)
✓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)
Diagrams
This scenario:Payloads
MenuMenu endpoint should return all menu items with availability 25ms🔗Steps
✓Whenthe menu is requested(2ms)
✓Thenthe menu response should contain all menu items(11ms)
✓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)
✓Andthe menu items should be in alphabetical order(5ms)
✓Menu steps response should be in ascending order [ m => m.Name ](0ms)
✓Andthe supplier service should have received an availability request(6ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath.Contains("/availability") && r.Method == HttpMethod.Get ](0ms)
Diagrams
This scenario:Payloads
Menu should return cached results on subsequent requests 10ms🔗Steps
✓Giventhe menu has been requested and cached(3ms)
✓Andthe supplier service is then made unavailable(0ms)
✓Whenthe menu is requested again(1ms)
✓Thenthe menu response should still return available items(4ms)
✓Second menu steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Second menu steps response should contain [ m => m.IsAvailable ](0ms)
Diagrams
This scenario:Payloads
Requesting menu when supplier service unavailable should mark items as unavailable 30ms🔗Steps
✓Giventhe supplier service will return service unavailable(1ms)
✓Whenthe menu is requested(4ms)
✓Thenthe menu response should mark all items as unavailable(24ms)
✓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)
Diagrams
This scenario:Payloads
OrdersCreating an order should produce an audit log entry and events 78ms🔗Steps
✓Givena pancake batch is created and order request is ready(17ms)
✓Whenthe order is submitted(4ms)
✓Thenthe order should be created successfully(5ms)
✓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_6284045453282370265'(0ms)
✓Order steps response items should have count 1(0ms)
✓Andan order created event should have been published(32ms)
✓Anda recipe log should have been published to kafka(16ms)
✓Recipe log messages should contain [ m => m.Message.RecipeType == OrderDefaults.PancakeItemType, "a RecipeLogEvent should have been published for the pancake recipe" ](0ms)
Diagrams
This scenario:Payloads
Creating an order should write an outbox message that gets processed 6ms🔗Steps
✓Givena pancake batch is created and order request is ready(0ms)
✓Whenthe order is submitted(0ms)
✓Thenthe order should be created successfully(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_6801558310951514790'(0ms)
✓Order steps response items should have count 1(0ms)
✓Andan outbox message should have been written and processed(5ms)
Diagrams
This scenario:Payloads
Creating an order when kitchen service returns error should still create the order 23ms🔗Steps
✓Givena pancake batch has been created(9ms)
✓Anda valid order request for the created batch(3ms)
✓Andthe kitchen service will return an error(0ms)
✓Whenthe breakfast order is placed(4ms)
✓Thenthe order should still be created successfully(3ms)
✓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_668830060642120392'(0ms)
✓Andthe order should be retrievable by its id(2ms)
Diagrams
This scenario:Payloads
Exceeding rate limit should return too many requests 428ms ยท 428ms warm-up🔗Steps
✓Giventhe rate limit is configured to allow one request per window(389ms)
✓Anda pancake batch has been created(16ms)
✓Anda valid order request is prepared(5ms)
✓Whenthe order is submitted twice in rapid succession(15ms)
✓Thenthe first request should succeed and the second should be rate limited(1ms)
✓First response status code should be Created(0ms)
✓Second response status code should be TooManyRequests(0ms)
Diagrams
This scenario:Payloads
Invalid status transition should return conflict 7/7 passed19ms ยท 16ms warm-up🔗
#
Input Parameters
Status
Duration
From Status
To Status
1
Cancelled
Preparing
Passed
0ms
2
Cancelled
Ready
Passed
16ms
3
Completed
Preparing
Passed
0ms
4
Created
Completed
Passed
0ms
5
Created
Ready
Passed
0ms
6
Preparing
Cancelled
Passed
0ms
7
Ready
Preparing
Passed
0ms
Steps
✓Givenan order exists with status Cancelled(0ms)
✓Whenthe order status is updated to Preparing(0ms)
✓Thenthe response should indicate a conflict(0ms)
✓Patch steps response message status code should be Conflict(0ms)
Steps
✓Givenan order exists with status Cancelled(12ms)
✓Whenthe order status is updated to Ready(3ms)
✓Thenthe response should indicate a conflict(0ms)
✓Patch steps response message status code should be Conflict(0ms)
Steps
✓Givenan order exists with status Completed(0ms)
✓Whenthe order status is updated to Preparing(0ms)
✓Thenthe response should indicate a conflict(0ms)
✓Patch steps response message status code should be Conflict(0ms)
Steps
✓Givenan order exists with status Created(0ms)
✓Whenthe order status is updated to Completed(0ms)
✓Thenthe response should indicate a conflict(0ms)
✓Patch steps response message status code should be Conflict(0ms)
Steps
✓Givenan order exists with status Created(0ms)
✓Whenthe order status is updated to Ready(0ms)
✓Thenthe response should indicate a conflict(0ms)
✓Patch steps response message status code should be Conflict(0ms)
Steps
✓Givenan order exists with status Preparing(0ms)
✓Whenthe order status is updated to Cancelled(0ms)
✓Thenthe response should indicate a conflict(0ms)
✓Patch steps response message status code should be Conflict(0ms)
Steps
✓Givenan order exists with status Ready(0ms)
✓Whenthe order status is updated to Preparing(0ms)
✓Thenthe response should indicate a conflict(0ms)
✓Patch steps response message status code should be Conflict(0ms)
Diagrams
This scenario:Payloads
Listing orders should return a paginated response 9ms🔗Steps
✓Givenmultiple orders have been created(0ms)
✓Whenthe orders are listed(0ms)
✓Thenthe response should contain a paginated list of orders(9ms)
✓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)
✓List steps response page should be 1(0ms)
✓List steps response total count should be greater than or equal to '2'(0ms)
Diagrams
This scenario:Payloads
Listing orders when none exist should return an empty page 15ms🔗Steps
✓Whenthe orders are listed(4ms)
✓Thenthe response should be an empty page(10ms)
✓List steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓List steps response items should be empty(0ms)
✓List steps response total count should be 0(0ms)
Diagrams
This scenario:Payloads
Listing orders with small page size should limit results 17ms🔗Steps
✓Givenmultiple orders have been created(10ms)
✓Whenthe orders are listed with page size 1(1ms)
✓Thenthe response should contain only one item per page(4ms)
✓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 1(0ms)
✓List steps response total pages should be greater than or equal to '2'(0ms)
Diagrams
This scenario:Payloads
Order at maximum items per order should be accepted 141ms🔗Steps
✓Giventhe max items per order is configured to 2(138ms)
✓Anda pancake batch is created(0ms)
✓Andan order request has 2 items(1ms)
✓Whenthe order is submitted(0ms)
✓Thenthe order should be created successfully(0ms)
✓Order steps response message status code should be Created(0ms)
Diagrams
This scenario:Payloads
Order exceeding maximum items per order should be rejected 226ms🔗Steps
✓Giventhe max items per order is configured to 2(204ms)
✓Anda pancake batch is created(8ms)
✓Andan order request has 3 items(1ms)
✓Whenthe order is submitted(1ms)
✓Thenthe response should indicate too many items(10ms)
✓Order steps response message status code should be BadRequest(0ms)
✓Order validation errors should contain [ e => e.Contains("cannot contain more than 2 items") ](0ms)
Diagrams
This scenario:Payloads
Order should progress through all status transitions to completion 52ms🔗Steps
✓Givena pancake batch has been created(9ms)
✓Anda breakfast order has been placed for the batch(6ms)
✓Whenthe order is progressed through the complete lifecycle(6ms)
✓Thenthe completed order should be retrievable with all details(13ms)
✓Andan audit log entry should exist for the order(7ms)
✓Andthe downstream services should have received requests(9ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
Diagrams
This scenario:Payloads
Order status update with invalid field should return bad request 1/1 passed12ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
Status
Status is required
'Status' is required.
Bad Request
Passed
12ms
Steps
✓StepAn order status update request with invalid Status(0ms)
✓Whenthe order status update request is sent(11ms)
✓Thenthe response should contain error 'Status' is required.(0ms)
✓Actual error message should be ''Status' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Order with invalid field should return bad request 5/5 passed23ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
CustomerName
Customer name is required
'Customer Name' is required.
Bad Request
Passed
0ms
2
Items
null
At least one item is required
The Items field is required.
Bad Request
Passed
0ms
3
Items[0].BatchId
null
Batch ID is required
'Batch Id' is required.
Bad Request
Passed
0ms
4
Items[0].ItemType
Item type is required
'Item Type' is required.
Bad Request
Passed
20ms
5
Items[0].Quantity
0
Quantity must be greater than zero
Quantity must be greater than zero.
Bad Request
Passed
0ms
Steps
✓StepAn order request with invalid CustomerName(0ms)
✓Whenthe order request is sent(0ms)
✓Thenthe response should contain error 'Customer Name' is required.(0ms)
✓Actual error message should be ''Customer Name' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn order request with invalid Items(0ms)
✓Whenthe order request is sent(0ms)
✓Thenthe response should contain error The Items field is required.(0ms)
✓Actual error message should be 'The Items field is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn order request with invalid Items[0].BatchId(0ms)
✓Whenthe order request is sent(0ms)
✓Thenthe response should contain error 'Batch Id' is required.(0ms)
✓Actual error message should be ''Batch Id' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn order request with invalid Items[0].ItemType(2ms)
✓Whenthe order request is sent(16ms)
✓Thenthe response should contain error 'Item Type' is required.(1ms)
✓Actual error message should be ''Item Type' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn order request with invalid Items[0].Quantity(0ms)
✓Whenthe order request is sent(0ms)
✓Thenthe response should contain error Quantity must be greater than zero.(0ms)
✓Actual error message should be 'Quantity must be greater than zero.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Outbox message should transition to failed after exhausting retries 45ms🔗Steps
✓Givena pending outbox message with a failing dispatcher(10ms)
✓Thenthe outbox message should transition to failed after exhausting retries(35ms)
Sequence Diagrams
This scenario:Payloads
Previously created order should be retrievable by id 35ms🔗Steps
✓Givena pancake batch has been created(11ms)
✓Andan order has been created for the batch(7ms)
✓Whenthe order is retrieved by id(4ms)
✓Thenthe retrieved order should match the created order(9ms)
✓Retrieval steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Retrieval steps response order id should be 'ac962fac-e383-4282-9a10-c63f78ad97c9'(0ms)
✓Retrieval steps response customer name should be 'TestCustomer_4732013575363604199'(0ms)
✓Retrieval steps response items should have count 1(0ms)
✓Andthe downstream services should have received requests(3ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
Diagrams
This scenario:Payloads
Requesting second page should return different orders 5ms🔗Steps
✓Givenmultiple orders have been created(0ms)
✓Whenthe second page is requested with page size 1(1ms)
✓Thenthe response should be for page 2(3ms)
✓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 1(0ms)
✓List steps response page should be 2(0ms)
Diagrams
This scenario:Payloads
Retrieving a non existent order should return not found 3ms🔗Steps
✓Givena non existent order id(0ms)
✓Whenthe non existent order is retrieved(2ms)
✓Thenthe response should be not found(0ms)
✓Retrieval steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Updating status of non existent order should return not found 11ms ยท 11ms warm-up🔗Steps
✓Givena non existent order id(1ms)
✓Whenthe order status is updated to preparing(9ms)
✓Thenthe response should indicate not found(0ms)
✓Patch steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Valid order should be created and an event published 2ms🔗Steps
✓Givena pancake batch is created and order request is ready(0ms)
✓Whenthe order is submitted(0ms)
✓Thenthe order should be created successfully(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_4334183367310746460'(0ms)
✓Order steps response items should have count 1(0ms)
✓Andan order created event should have been published(0ms)
✓Andthe kitchen service should have received a preparation request(1ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
Diagrams
This scenario:Payloads
Valid status transition should update the order 4/4 passed11ms🔗
#
Input Parameters
Status
Duration
From Status
To Status
1
Created
Cancelled
Passed
0ms
2
Created
Preparing
Passed
8ms
3
Preparing
Ready
Passed
1ms
4
Ready
Completed
Passed
0ms
Steps
✓Givenan order exists with status Created(0ms)
✓Whenthe order status is updated to Cancelled(0ms)
✓Thenthe response should indicate status 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)
Steps
✓Givenan order exists with status Created(0ms)
✓Whenthe order status is updated to Preparing(0ms)
✓Thenthe response should indicate status Preparing(7ms)
✓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)
Steps
✓Givenan order exists with status Preparing(0ms)
✓Whenthe order status is updated to Ready(0ms)
✓Thenthe response should indicate status 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)
Steps
✓Givenan order exists with status Ready(0ms)
✓Whenthe order status is updated to Completed(0ms)
✓Thenthe response should indicate status Completed(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 'Completed'(0ms)
Diagrams
This scenario:Payloads
Order TimingsGetting the timing summary should return aggregated data 26ms🔗Steps
✓Givenan order timing record has been created(4ms)
✓Whenthe timing summary is requested(3ms)
✓Thenthe summary should contain aggregated data for the station(18ms)
✓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.Station == 'Griddle-37b49c72b07b4216b273201b619efa78' && s.TimingCount >= 1 ](0ms)
Diagrams
This scenario:Payloads
Listing timings by station should return matching records 16ms🔗Steps
✓Givenan order timing record has been created(0ms)
✓Whenthe timings are listed by station(4ms)
✓Thenthe timing list response should contain the record(11ms)
✓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 [ t => t.TimingId == 'b667fde1-9a11-40af-9d2f-6bd1d0c42f1c' ](0ms)
Diagrams
This scenario:Payloads
Recording a timing with missing station should return bad request 20ms🔗Steps
✓Givenan order timing request with a missing station is prepared(3ms)
✓Whenthe order timing is recorded(16ms)
✓Thenthe timing post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Recording a timing with zero prep seconds should return bad request 4ms🔗Steps
✓Givenan order timing request with zero prep seconds is prepared(3ms)
✓Whenthe order timing is recorded(0ms)
✓Thenthe timing post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Recording an order timing should return the created record 25ms🔗Steps
✓Givena valid order timing request is prepared(4ms)
✓Whenthe order timing is recorded(0ms)
✓Thenthe timing response should contain the created record(20ms)
✓Post steps response message status code should be Created(0ms)
✓Response content is valid json should be true(0ms)
✓Post steps response station should be 'Griddle-ceacac3c3f5049fdaa6d8fd0bc6acc25'(0ms)
✓Post steps response prep seconds should be 42.5m(0ms)
✓Post steps response timing id should not be null or empty(0ms)
Diagrams
This scenario:Payloads
PancakesPancake request with invalid ingredient should return bad request 6/6 passed13ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
Eggs
Eggs is required
'Eggs' is required.
Bad Request
Passed
0ms
2
Eggs
javascript:void(0)
XSS in eggs
Eggs contains potentially dangerous content.
Bad Request
Passed
0ms
3
Flour
Flour is required
'Flour' is required.
Bad Request
Passed
10ms
4
Flour
<img onerror=x>
XSS in flour
Flour contains potentially dangerous content.
Bad Request
Passed
0ms
5
Milk
Milk is required
'Milk' is required.
Bad Request
Passed
0ms
6
Milk
<script>alert</script>
XSS in milk
Milk contains potentially dangerous content.
Bad Request
Passed
0ms
Steps
✓StepA pancake request with invalid Eggs(0ms)
✓Whenthe pancake validation request is sent(0ms)
✓Thenthe response should contain error 'Eggs' is required.(0ms)
✓Actual error message should be ''Eggs' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA pancake request with invalid Eggs(0ms)
✓Whenthe pancake validation request is sent(0ms)
✓Thenthe response should contain error Eggs contains potentially dangerous content.(0ms)
✓Actual error message should be 'Eggs contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA pancake request with invalid Flour(0ms)
✓Whenthe pancake validation request is sent(7ms)
✓Thenthe response should contain error 'Flour' is required.(1ms)
✓Actual error message should be ''Flour' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA pancake request with invalid Flour(0ms)
✓Whenthe pancake validation request is sent(0ms)
✓Thenthe response should contain error Flour contains potentially dangerous content.(0ms)
✓Actual error message should be 'Flour contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA pancake request with invalid Milk(0ms)
✓Whenthe pancake validation request is sent(0ms)
✓Thenthe response should contain error 'Milk' is required.(0ms)
✓Actual error message should be ''Milk' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA pancake request with invalid Milk(0ms)
✓Whenthe pancake validation request is sent(0ms)
✓Thenthe response should contain error Milk contains potentially dangerous content.(0ms)
✓Actual error message should be 'Milk contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Pancake request with more toppings than allowed should return bad request 7ms🔗Steps
✓Givenall ingredients are retrieved for pancakes(0ms)
✓Andthe request has more toppings than the configured limit(3ms)
✓Whenthe pancakes are prepared(0ms)
✓Thenthe response should indicate too many toppings(3ms)
✓Pancake steps response message status code should be BadRequest(0ms)
✓Body should contain MaxToppingsExceeded(0ms)
Diagrams
This scenario:Payloads
Request with unsupported content type should return unsupported media type 3/3 passed8ms🔗
#
Input Parameters
Status
Duration
Content Type
1
application/xml
Passed
0ms
2
text/html
Passed
0ms
3
text/plain
Passed
7ms
Steps
✓Givena pancake request with an unsupported content type(0ms)
✓Whenthe request is sent(0ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
Steps
✓Givena pancake request with an unsupported content type(0ms)
✓Whenthe request is sent(0ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
Steps
✓Givena pancake request with an unsupported content type(0ms)
✓Whenthe request is sent(6ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
Diagrams
This scenario:Payloads
Valid pancake request with all ingredients should return a fresh batch 15ms🔗Steps
✓Givenall ingredients are retrieved for pancakes(5ms)
✓Whenthe pancakes are prepared(1ms)
✓Thenthe response should contain a valid batch with all ingredients(6ms)
✓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 'Some_Fresh_Milk'(0ms)
✓Pancake steps response ingredients should contain 'Some_Eggs'(0ms)
✓Pancake steps response ingredients should contain 'Some_Flour'(0ms)
✓Andthe cow service should have received a milk request(1ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
Diagrams
This scenario:Payloads
Recipe CostsConsuming recipe cost event should trigger downstream processing 90ms🔗Steps
✓Givena recipe cost calculated event(2ms)
✓Whenthe event is published to kafka(79ms)
✓Thenthe calculation id should be generated(4ms)
✓Publish steps calculation id should not be '00000000-0000-0000-0000-000000000000'(0ms)
✓Andthe kitchen service should have received the preparation request(2ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/prepare" && r.Method == HttpMethod.Post ](0ms)
Diagrams
This scenario:Payloads
Recipe ReviewsListing reviews by recipe should return matching reviews 19ms🔗Steps
✓Givena review entry exists(0ms)
✓Whenthe reviews are listed by recipe(3ms)
✓Thenthe list response should contain the review(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 [ r => r.ReviewId == '9be9ef10-5ac5-41e6-a92a-e5cf955c1611' ](0ms)
Diagrams
This scenario:Payloads
Retrieving existing review by id should return the review 20ms🔗Steps
✓Givena review entry exists(6ms)
✓Whenthe review is retrieved by id(4ms)
✓Thenthe get response should contain the review(10ms)
✓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 '0dc9ba3f-ec81-4c8b-97f4-fab60b123fc1'(0ms)
✓Get steps response recipe name should be 'Recipe-3f466256582b40aa9b63aa5d353676df'(0ms)
Diagrams
This scenario:Payloads
Retrieving non existent review should return not found 3ms🔗Steps
✓Whena non existent review is retrieved(1ms)
✓Thenthe get response should indicate not found(1ms)
✓Get steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Submitting a recipe review should return the created review 5ms🔗Steps
✓Givena valid recipe review request is prepared(0ms)
✓Whenthe review is submitted(0ms)
✓Thenthe response should contain the created review(5ms)
✓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-b0211ec6de644d948df6ceab9e123cca'(0ms)
✓Post steps response rating should be 5(0ms)
✓Post steps response review id should not be null or empty(0ms)
Diagrams
This scenario:Payloads
Submitting review with invalid rating should return bad request 2ms🔗Steps
✓Givena review request with an invalid rating is prepared(2ms)
✓Whenthe review is submitted(0ms)
✓Thenthe post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Submitting review with missing recipe name should return bad request 23ms ยท 23ms warm-up🔗Steps
✓Givena review request with missing recipe name is prepared(7ms)
✓Whenthe review is submitted(14ms)
✓Thenthe post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
ReportingBatch completions should contain data ingested via pubsub consumer 81ms🔗Steps
✓Givena pancake batch has been created(47ms)
✓Whenthe batch completions are queried via graphql(13ms)
✓Thenthe response should contain the batch completion record(21ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps batch completions should contain [ r => r.BatchId == '9a0b48aa-1d50-4fde-b4ee-3bc6ac957ba6' && r.RecipeType == "Pancakes" && r.Ingredients.Contains("Milk") ](0ms)
Diagrams
This scenario:Payloads
Equipment alerts should contain data ingested via event hub consumer 67ms🔗Steps
✓Givena pancake batch has been created(27ms)
✓Whenthe equipment alerts are queried via graphql(19ms)
✓Thenthe response should contain the equipment alert record(20ms)
✓Graph ql steps response message status code should be OK(0ms)
Ingredient usage should aggregate across multiple recipes 30ms🔗Steps
✓Givenmultiple recipe logs have been ingested with overlapping ingredients(8ms)
✓Whenthe ingredient usage is queried via graphql(7ms)
✓Thenthe ingredient usage should reflect aggregated counts(15ms)
✓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)
Diagrams
This scenario:Payloads
Order summaries should contain ingested order data 79ms🔗Steps
✓Givena pancake batch has been created(11ms)
✓Anda breakfast order has been placed for the batch(6ms)
✓Whenthe order summaries are queried via graphql(7ms)
✓Thenthe response should contain the ingested order summary(53ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps order summaries should contain [ o => o.OrderId == 'c7e3506e-61a7-4186-8b2f-f1c8c88f787f' && o.CustomerName == 'TestCustomer_5398123626082013235' && o.ItemCount == 1 && o.TableNumber == 7 ](0ms)
Diagrams
This scenario:Payloads
Order summaries should return an empty list when no orders exist 7ms🔗Steps
✓Whenthe order summaries are queried via graphql(0ms)
✓Thenthe response should not contain the test order(7ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps order summaries should not contain [ o => o.OrderId == '00000000-0000-0000-0000-000000000000' ](0ms)
Diagrams
This scenario:Payloads
Popular recipes should return recipe types ordered by frequency 36ms🔗Steps
✓Givenmultiple recipe logs of different types have been ingested(10ms)
✓Whenthe popular recipes are queried via graphql(5ms)
✓Thenthe popular recipes should be ordered by count descending(20ms)
✓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)
Diagrams
This scenario:Payloads
Recipe reports should contain ingested recipe data 40ms🔗Steps
✓Givena pancake batch has been created(11ms)
✓Whenthe recipe reports are queried via graphql(13ms)
✓Thenthe response should contain the ingested recipe reports(14ms)
✓Graph ql steps response message status code should be OK(0ms)
✓Graph ql steps recipe reports should contain [ r => r.OrderId == '1e1441fb-56e0-4b0e-9084-665849744de5' && r.RecipeType == "Pancakes" && r.Ingredients.Contains("Milk") ](0ms)
Diagrams
This scenario:Payloads
ReservationsCancelling a reservation should return the cancelled reservation 12ms ยท 12ms warm-up🔗Steps
✓Givena reservation exists(0ms)
✓Whenthe reservation is cancelled(4ms)
✓Thenthe cancellation response should indicate cancelled(8ms)
✓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)
Diagrams
This scenario:Payloads
Cancelling an already cancelled reservation should return a conflict response 7ms🔗Steps
✓Givena cancelled reservation exists(5ms)
✓Whenthe reservation is cancelled(0ms)
✓Thenthe cancellation response should indicate conflict(1ms)
✓Cancel steps response message status code should be Conflict(0ms)
Diagrams
This scenario:Payloads
Creating a reservation should return the confirmed reservation 18ms ยท 18ms warm-up🔗Steps
✓Givena valid reservation request is prepared(2ms)
✓Whenthe reservation is submitted(6ms)
✓Thenthe response should contain the confirmed booking(9ms)
✓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 'Customer-7bc193dfc166462ebee4a8b4e52bf43f'(0ms)
Diagrams
This scenario:Payloads
Deleting a reservation should return no content 5ms🔗Steps
✓Givena reservation exists(0ms)
✓Whenthe reservation is deleted(3ms)
✓Thenthe delete response should indicate no content(2ms)
✓Delete response status code should be NoContent(0ms)
Diagrams
This scenario:Payloads
Retrieving an existing reservation should return the reservation 17ms🔗Steps
✓Givena reservation exists(3ms)
✓Whenthe reservation is retrieved by id(4ms)
✓Thenthe get response should contain the reservation(9ms)
✓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 'Customer-9704a55b0ece42b583249ca92e942ec3'(0ms)
✓Get steps response status should be "Confirmed"(0ms)
Diagrams
This scenario:Payloads
Service TimesConsuming an order served event should trigger downstream processing 81ms🔗Steps
✓Givenan order served event(9ms)
✓Whenthe event is published to kafka(58ms)
✓Thenthe order id should be generated(2ms)
✓Publish steps order id should not be '00000000-0000-0000-0000-000000000000'(0ms)
✓Andthe kitchen service should have received the status request(10ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == $"/status/{orderId}" && r.Method == HttpMethod.Get ](0ms)
Diagrams
This scenario:Payloads
SpecificationsGrpc server reflection should describe the breakfast service 104ms🔗Steps
✓Whenthe breakfast service is described through grpc server reflection(88ms)
✓Thenthe description should be the breakfast proto file(5ms)
✓Reflection steps described files should contain single [ f => f.Name == GrpcContractDefaults.ProtoFileName ](0ms)
✓Described file package should be Package(0ms)
✓Andthe description should contain every breakfast method(9ms)
✓Described file service should contain single [ s => s.Name == GrpcContractDefaults.ServiceName ](0ms)
✓Service method select(m => m name) should contain GetRecipeSummary(0ms)
✓Service method select(m => m name) should contain GetOrderStatus(0ms)
✓Service method select(m => m name) should contain StreamOrderUpdates(0ms)
Diagrams
This scenario:Payloads
Grpc server reflection should list the breakfast service 38ms🔗Steps
✓Whenthe services are listed through grpc server reflection(36ms)
✓Thenthe breakfast service should be listed(0ms)
✓Reflection steps listed services should contain ServiceFullName(0ms)
✓Andthe reflection service should be listed(0ms)
✓Reflection steps listed services should contain ReflectionServiceFullName(0ms)
Diagrams
This scenario:Payloads
The AsyncApi endpoint should return a valid specification 23ms🔗Steps
✓Whenthe asyncapi endpoint is called(4ms)
✓Thenthe response status should be ok(2ms)
✓Async api response status code should be OK(0ms)
✓Andthe response should be valid json(7ms)
✓Async api response is valid json should be true $"response body (first 500 chars): {_asyncApiJsonString?[..Math.Min(_asyncApiJsonString.Length, 500)]}"(0ms)
✓Andthe asyncapi spec should contain expected top level properties(4ms)
✓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("defaultContentType") 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)
✓Andthe asyncapi spec is written to disk as json(4ms)
The Scalar UI endpoint should return a valid page 39ms🔗Steps
✓Whenthe scalar ui endpoint is called(2ms)
✓Thenthe response status should be ok(3ms)
✓Scalar response status code should be OK(0ms)
✓Andthe response should be valid html(32ms)
✓Scalar ui response body should contain "<html"(0ms)
✓Andthe response should refer to scalar(1ms)
✓Scalar ui response body should contain "scalar"(0ms)
Diagrams
This scenario:Payloads
StaffAdding a new staff member should return the created member 24ms🔗Steps
✓Givena valid staff member request is prepared(5ms)
✓Whenthe staff member is submitted(0ms)
✓Thenthe response should contain the created member(18ms)
✓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 'Chef-529248876aa34649b5ba9311f6f0fb85'(0ms)
✓Post steps response role should be "Chef"(0ms)
Diagrams
This scenario:Payloads
Adding a staff member with an invalid role should return a bad request response 17ms🔗Steps
✓Givena staff member request with an invalid role is prepared(3ms)
✓Whenthe staff member is submitted(14ms)
✓Thenthe post response should indicate bad request(0ms)
✓Post steps response message status code should be BadRequest(0ms)
Diagrams
This scenario:Payloads
Deleting a staff member should return no content 9ms🔗Steps
✓Givena staff member exists(0ms)
✓Whenthe staff member is deleted(8ms)
✓Thenthe delete response should indicate no content(0ms)
✓Delete response status code should be NoContent(0ms)
Diagrams
This scenario:Payloads
Retrieving an existing staff member should return the member 22ms🔗Steps
✓Givena staff member exists(4ms)
✓Whenthe staff member is retrieved by id(5ms)
✓Thenthe 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 '2'(0ms)
✓Get steps response name should be 'Chef-88c57cbad9cb45a3a18c8a4b98c18cc7'(0ms)
✓Get steps response role should be "Chef"(0ms)
Diagrams
This scenario:Payloads
ToppingsAdding a new topping should return the created topping 55ms🔗Steps
✓Givena valid topping request(1ms)
✓Whenthe new topping is submitted(11ms)
✓Thenthe topping response should contain the created topping(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 Strawberries(0ms)
✓Post steps response category should be FruitCategory(0ms)
Diagrams
This scenario:Payloads
Deleting a non existent topping should return not found 42ms🔗Steps
✓Givena topping id that does not exist(0ms)
✓Whenthe topping is deleted(2ms)
✓Thenthe delete response should indicate not found(39ms)
✓Delete steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Deleting an existing topping should return no content 5ms🔗Steps
✓Givena known topping exists(0ms)
✓Whenthe topping is deleted(4ms)
✓Thenthe delete response should indicate success(0ms)
✓Delete steps response message status code should be NoContent(0ms)
Diagrams
This scenario:Payloads
Topping request with invalid or dangerous input should return bad request 6/6 passed20ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
Category
Category is required
'Category' is required.
Bad Request
Passed
0ms
2
Category
<script>alert('xss')</script>
Script tag in category
Category contains potentially dangerous content.
Bad Request
Passed
0ms
3
Category
javascript:alert(1)
Javascript protocol
Category contains potentially dangerous content.
Bad Request
Passed
0ms
4
Name
Name is required
'Name' is required.
Bad Request
Passed
1ms
5
Name
<img src=x onerror=alert(1)>
Event handler in name
Name contains potentially dangerous content.
Bad Request
Passed
0ms
6
Name
<script>alert('xss')</script>
Script tag in name
Name contains potentially dangerous content.
Bad Request
Passed
17ms
Steps
✓StepA topping request with invalid Category(0ms)
✓Whenthe topping request is sent(0ms)
✓Thenthe response should contain error 'Category' is required.(0ms)
✓Actual error message should be ''Category' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA topping request with invalid Category(0ms)
✓Whenthe topping request is sent(0ms)
✓Thenthe response should contain error Category contains potentially dangerous content.(0ms)
✓Actual error message should be 'Category contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA topping request with invalid Category(0ms)
✓Whenthe topping request is sent(0ms)
✓Thenthe response should contain error Category contains potentially dangerous content.(0ms)
✓Actual error message should be 'Category contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA topping request with invalid Name(0ms)
✓Whenthe topping request is sent(1ms)
✓Thenthe response should contain error 'Name' is required.(0ms)
✓Actual error message should be ''Name' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA topping request with invalid Name(0ms)
✓Whenthe topping request is sent(0ms)
✓Thenthe response should contain error Name contains potentially dangerous content.(0ms)
✓Actual error message should be 'Name contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA topping request with invalid Name(0ms)
✓Whenthe topping request is sent(11ms)
✓Thenthe response should contain error Name contains potentially dangerous content.(4ms)
✓Actual error message should be 'Name contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Toppings endpoint should return all available toppings 19ms🔗Steps
✓Whenthe available toppings are requested(2ms)
✓Thenthe toppings response should contain the default toppings(17ms)
✓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)
Diagrams
This scenario:Payloads
Toppings should exclude raspberries when feature flag is disabled 161ms🔗Steps
✓Giventhe raspberry topping feature flag is disabled(149ms)
✓Whentoppings are requested(3ms)
✓Thenthe toppings response should not include raspberries(8ms)
✓Toppings steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Toppings steps response should not contain [ t => t.Name == ToppingDefaults.Raspberries ](0ms)
Diagrams
This scenario:Payloads
Toppings should include raspberries when feature flag is enabled 163ms🔗Steps
✓Giventhe raspberry topping feature flag is enabled(159ms)
✓Whentoppings are requested(0ms)
✓Thenthe toppings response should include raspberries(3ms)
✓Toppings steps response message status code should be OK(0ms)
✓Response content is valid json should be true(0ms)
✓Toppings steps response should contain [ t => t.Name == ToppingDefaults.Raspberries ](0ms)
Diagrams
This scenario:Payloads
Update topping with invalid or dangerous input should return bad request 6/6 passed14ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
Category
Category is required
'Category' is required.
Bad Request
Passed
10ms
2
Category
<script>alert('xss')</script>
Script tag in category
Category contains potentially dangerous content.
Bad Request
Passed
0ms
3
Category
javascript:alert(1)
Javascript protocol
Category contains potentially dangerous content.
Bad Request
Passed
0ms
4
Name
Name is required
'Name' is required.
Bad Request
Passed
0ms
5
Name
<img src=x onerror=alert(1)>
Event handler in name
Name contains potentially dangerous content.
Bad Request
Passed
0ms
6
Name
<script>alert('xss')</script>
Script tag in name
Name contains potentially dangerous content.
Bad Request
Passed
0ms
Steps
✓StepAn update topping request with invalid Category(0ms)
✓Whenthe update topping request is sent(8ms)
✓Thenthe response should contain error 'Category' is required.(1ms)
✓Actual error message should be ''Category' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn update topping request with invalid Category(0ms)
✓Whenthe update topping request is sent(0ms)
✓Thenthe response should contain error Category contains potentially dangerous content.(0ms)
✓Actual error message should be 'Category contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn update topping request with invalid Category(0ms)
✓Whenthe update topping request is sent(0ms)
✓Thenthe response should contain error Category contains potentially dangerous content.(0ms)
✓Actual error message should be 'Category contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn update topping request with invalid Name(0ms)
✓Whenthe update topping request is sent(0ms)
✓Thenthe response should contain error 'Name' is required.(0ms)
✓Actual error message should be ''Name' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn update topping request with invalid Name(0ms)
✓Whenthe update topping request is sent(0ms)
✓Thenthe response should contain error Name contains potentially dangerous content.(0ms)
✓Actual error message should be 'Name contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepAn update topping request with invalid Name(0ms)
✓Whenthe update topping request is sent(0ms)
✓Thenthe response should contain error Name contains potentially dangerous content.(0ms)
✓Actual error message should be 'Name contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Updating a non existent topping should return not found 6ms🔗Steps
✓Givena topping id that does not exist and a valid update request(0ms)
✓Whenthe topping is updated(5ms)
✓Thenthe update response should indicate not found(0ms)
✓Put steps response message status code should be NotFound(0ms)
Diagrams
This scenario:Payloads
Updating an existing topping should return the updated topping 32ms🔗Steps
✓Givena known topping exists and a valid update request(0ms)
✓Whenthe topping is updated(0ms)
✓Thenthe update response should contain the updated topping(32ms)
✓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 '11111111-0000-0000-0000-000000000002'(0ms)
✓Put steps response name should be Strawberries(0ms)
✓Put steps response category should be FruitCategory(0ms)
Diagrams
This scenario:Payloads
WafflesSending request with unsupported content type should return unsupported media type 3/3 passed3ms🔗
#
Input Parameters
Status
Duration
Content Type
1
application/xml
Passed
0ms
2
text/html
Passed
0ms
3
text/plain
Passed
3ms
Steps
✓Givena waffle request with an unsupported content type(0ms)
✓Whenthe request is sent(0ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
Steps
✓Givena waffle request with an unsupported content type(0ms)
✓Whenthe request is sent(0ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
Steps
✓Givena waffle request with an unsupported content type(0ms)
✓Whenthe request is sent(2ms)
✓Thenthe response should indicate unsupported media type(0ms)
✓Response status code should be UnsupportedMediaType(0ms)
Diagrams
This scenario:Payloads
Valid waffle request with all ingredients should return a fresh batch 38ms🔗Steps
✓Givenall ingredients are retrieved for waffles(5ms)
✓Whenthe waffles are prepared(4ms)
✓Thenthe response should contain a valid batch with all ingredients(26ms)
✓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 'Some_Fresh_Milk'(0ms)
✓Waffle steps response ingredients should contain 'Some_Eggs'(0ms)
✓Waffle steps response ingredients should contain 'Some_Flour'(0ms)
✓Waffle steps response ingredients should contain UnsaltedButter(0ms)
✓Andthe cow service should have received a milk request(2ms)
✓Requests should contain [ r => r.RequestUri.AbsolutePath == "/milk" && r.Method == HttpMethod.Get ](0ms)
Diagrams
This scenario:Payloads
Waffle request with invalid ingredient should return bad request 6/6 passed31ms🔗
#
Input Parameters
Status
Duration
Field
Value
Reason
Expected Error
Expected Status
1
Butter
Butter is required
'Butter' is required.
Bad Request
Passed
0ms
2
Butter
<img onerror=x>
XSS in butter
Butter contains potentially dangerous content.
Bad Request
Passed
0ms
3
Eggs
Eggs is required
'Eggs' is required.
Bad Request
Passed
0ms
4
Flour
Flour is required
'Flour' is required.
Bad Request
Passed
0ms
5
Milk
Milk is required
'Milk' is required.
Bad Request
Passed
28ms
6
Milk
<script>alert</script>
XSS in milk
Milk contains potentially dangerous content.
Bad Request
Passed
0ms
Steps
✓StepA waffle request with invalid Butter(0ms)
✓Whenthe waffle validation request is sent(0ms)
✓Thenthe response should contain error 'Butter' is required.(0ms)
✓Actual error message should be ''Butter' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA waffle request with invalid Butter(0ms)
✓Whenthe waffle validation request is sent(0ms)
✓Thenthe response should contain error Butter contains potentially dangerous content.(0ms)
✓Actual error message should be 'Butter contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA waffle request with invalid Eggs(0ms)
✓Whenthe waffle validation request is sent(0ms)
✓Thenthe response should contain error 'Eggs' is required.(0ms)
✓Actual error message should be ''Eggs' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA waffle request with invalid Flour(0ms)
✓Whenthe waffle validation request is sent(0ms)
✓Thenthe response should contain error 'Flour' is required.(0ms)
✓Actual error message should be ''Flour' is required.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA waffle request with invalid Milk(1ms)
✓Whenthe waffle validation request is sent(23ms)
✓Thenthe response should contain error 'Milk' is required.(2ms)
✓Actual error message should be ''Milk' is required.'(0ms)
✓Andthe response status should be Bad Request(1ms)
✓Actual response status should be 'Bad Request'(0ms)
Steps
✓StepA waffle request with invalid Milk(0ms)
✓Whenthe waffle validation request is sent(0ms)
✓Thenthe response should contain error Milk contains potentially dangerous content.(0ms)
✓Actual error message should be 'Milk contains potentially dangerous content.'(0ms)
✓Andthe response status should be Bad Request(0ms)
✓Actual response status should be 'Bad Request'(0ms)
Diagrams
This scenario:Payloads
Waffle request with more toppings than allowed should return bad request 15ms🔗Steps
✓Givenall ingredients are retrieved for waffles(0ms)
✓Andthe request has more toppings than the configured limit(4ms)
✓Whenthe waffles are prepared(5ms)
✓Thenthe response should indicate too many toppings(5ms)
✓Waffle steps response message status code should be BadRequest(0ms)
✓Body should contain MaxToppingsExceeded(0ms)
Diagrams
This scenario:Payloads
Scenario Timeline 🛈
ShowWarm-upOrder
Exceeding rate limit should return too many requests
428ms
Health check should report degraded when cow service is unavailable
234ms
Order exceeding maximum items per order should be rejected
226ms
Pancake recipe summary should return correct data
200ms
Creating an order should emit a structured log entry
193ms
Goat milk endpoint should return not found when feature is disabled
173ms
Health check should report degraded when downstream service returns non success status
172ms
The Grpc contract endpoint should return a valid specification
163ms
Toppings should include raspberries when feature flag is enabled
163ms
Toppings should exclude raspberries when feature flag is disabled
161ms
Goat milk endpoint should return fresh goat milk when feature is enabled
160ms
Order at maximum items per order should be accepted
141ms
Muffin request with invalid field should return bad request [field: "Milk", value: "", reason: "Milk is required", expectedError: "'Milk' is required.", expectedStatus: "Bad Request"]
113ms
Grpc server reflection should describe the breakfast service
104ms
Health check should report degraded when multiple downstream services are unavailable
98ms
Consuming recipe cost event should trigger downstream processing
90ms
Consuming an order served event should trigger downstream processing
81ms
Batch completions should contain data ingested via pubsub consumer
81ms
Order summaries should contain ingested order data
79ms
Creating an order should produce an audit log entry and events
78ms
The Grpc UI endpoint should return a page describing the service
68ms
Equipment alerts should contain data ingested via event hub consumer
67ms
Valid apple cinnamon muffin request should return a fresh batch
62ms
Consuming customer feedback event should trigger downstream processing
62ms
The GraphQL schema endpoint should return a valid specification
60ms
Retrieving an existing inventory item should return the item
57ms
Adding a new topping should return the created topping
55ms
Creating an order should produce a retrievable audit log entry
55ms
Order should progress through all status transitions to completion
52ms
Ingredient shipments should be recorded when delivered via eventgrid webhook
50ms
Listing usage by ingredient should return matching records
48ms
Remaining quantity should decrease after each order
46ms
Outbox message should transition to failed after exhausting retries
45ms
Deleting a non existent topping should return not found
42ms
Streaming updates for non existent order should return not found
40ms
Recipe reports should contain ingested recipe data
40ms
Submitting feedback should return the created feedback
39ms
The Scalar UI endpoint should return a valid page
39ms
Grpc server reflection should list the breakfast service
38ms
Valid waffle request with all ingredients should return a fresh batch
38ms
Popular recipes should return recipe types ordered by frequency
36ms
Previously created order should be retrievable by id
35ms
Saving customer preferences should return the saved preferences
34ms
Updating an existing topping should return the updated topping
32ms
Ingredient usage should aggregate across multiple recipes
30ms
Requesting menu when supplier service unavailable should mark items as unavailable
30ms
Audit logs should be returned in descending timestamp order
29ms
Listing notes by recipe should return matching notes
29ms
Getting usage summary should return aggregated data
29ms
The OpenApi endpoint should return a valid specification
29ms
Waffle request with invalid ingredient should return bad request [field: "Milk", value: "", reason: "Milk is required", expectedError: "'Milk' is required.", expectedStatus: "Bad Request"]
28ms
Retrieving existing customer preferences should return the preferences
28ms
Listing feedback for an order should return the feedback
28ms
Getting the timing summary should return aggregated data
26ms
Menu endpoint should return all menu items with availability
25ms
Recording an order timing should return the created record
25ms
Adding a new staff member should return the created member
24ms
The AsyncApi endpoint should return a valid specification
23ms
Submitting review with missing recipe name should return bad request
23ms
Creating an order when kitchen service returns error should still create the order
23ms
Heartbeat endpoint should return a running message
22ms
Retrieving an existing staff member should return the member
22ms
Listing readings by equipment should return matching records
22ms
Health check response should include description and data for each entry
22ms
Listing all inventory items should return all items
21ms
Updating an existing note should return the updated note
21ms
Order with invalid field should return bad request [field: "Items[0].ItemType", value: "", reason: "Item type is required", expectedError: "'Item Type' is required.", expectedStatus: "Bad Request"]
20ms
Recording a timing with missing station should return bad request
20ms
Retrieving existing review by id should return the review
20ms
Listing reviews by recipe should return matching reviews
19ms
Toppings endpoint should return all available toppings
19ms
Listing waste by recipe should return matching records
19ms
Order status via grpc should return order details
19ms
The GraphQL schema definition endpoint should return the schema definition
18ms
Creating a reservation should return the confirmed reservation
18ms
Different muffin recipes should produce the expected batch [recipeName: "Classic", recipe: MuffinRecipeTestData { Ingredients = IngredientSet { Flour = Plain Flour, Apples = Granny Smith, Cinnamon = Ceylon }, Toppings = System.Collections.Generic.List`1[Breakfโฆ]
18ms
Adding a staff member with an invalid role should return a bad request response
17ms
Same order with different idempotency keys should return different confirmations
17ms
Listing orders with small page size should limit results
17ms
Retrieving an existing reservation should return the reservation
17ms
Topping request with invalid or dangerous input should return bad request [field: "Name", value: "<script>alert('xss')</script>", reason: "Script tag in name", expectedError: "Name contains potentially dangerous content.", expectedStatus: "Bad Request"]
17ms
Streaming order updates should return the current status
17ms
Health check endpoint should return healthy status with all dependency details
16ms
Invalid status transition should return conflict [fromStatus: "Cancelled", toStatus: "Ready"]
16ms
Listing timings by station should return matching records
16ms
Submitting feedback with invalid rating should return bad request
15ms
Deleting a waste record should return no content
15ms
Deleting a reading should remove it from the list
15ms
Listing orders when none exist should return an empty page
15ms
Waffle request with more toppings than allowed should return bad request
15ms
Audit logs should be filterable by entity id
15ms
Retrieving existing feedback by id should return the feedback
15ms
Valid pancake request with all ingredients should return a fresh batch
15ms
Adding a new inventory item should return the created item
14ms
Requesting goat milk when goat service unavailable should return bad gateway
14ms
Daily special order with invalid field should return bad request [field: "SpecialId", value: null, reason: "Special ID is required", expectedError: "'Special Id' is required.", expectedStatus: "Bad Request"]
14ms
Cancelling a reservation should return the cancelled reservation
12ms
Waffle recipe summary should return correct data
12ms
Order status update with invalid field should return bad request [field: "Status", value: "", reason: "Status is required", expectedError: "'Status' is required.", expectedStatus: "Bad Request"]
12ms
Order status for non existent order should return not found
12ms
Updating an inventory item should return the updated item
11ms
Retrieving an existing note by id should return the note
11ms
Request with correlation id should return same id in response
11ms
Goat milk endpoint should return fresh goat milk from goat service
11ms
Request with correlation id should forward it to supplier service
11ms
Updating customer preferences should return the updated preferences
11ms
Recording an equipment reading should return the created record
11ms
Same order with same idempotency key should return same confirmation
11ms
Updating status of non existent order should return not found
11ms
Update topping with invalid or dangerous input should return bad request [field: "Category", value: "", reason: "Category is required", expectedError: "'Category' is required.", expectedStatus: "Bad Request"]
10ms
Recording a reading with zero value should return bad request
10ms
The GraphQL UI endpoint should return a valid page
10ms
Deleting an inventory item should return no content
10ms
Menu should return cached results on subsequent requests
10ms
Pancake request with invalid ingredient should return bad request [field: "Flour", value: "", reason: "Flour is required", expectedError: "'Flour' is required.", expectedStatus: "Bad Request"]
10ms
Recording ingredient waste should return the created record
9ms
Listing orders should return a paginated response
9ms
Deleting a staff member should return no content
9ms
Valid daily special order should return a confirmation
9ms
The AsyncApi UI endpoint should return a valid page
9ms
Request with correlation id should forward it to cow service
9ms
Ordering daily special beyond threshold should return conflict
9ms
Requesting milk when cow service unavailable should return bad gateway
8ms
Valid status transition should update the order [fromStatus: "Created", toStatus: "Preparing"]
8ms
Request with unsupported content type should return unsupported media type [contentType: "text/plain"]
7ms
Pancake request with more toppings than allowed should return bad request
7ms
Order summaries should return an empty list when no orders exist
7ms
Cancelling an already cancelled reservation should return a conflict response
7ms
Recording waste with missing ingredient name should return bad request
6ms
Retrieving non existent feedback should return not found
6ms
Request without correlation id should have one generated in response
6ms
Updating a non existent topping should return not found
6ms
Filtering audit logs by a non existent entity type should return an empty collection
6ms
Saving customer preferences with missing customer name should return bad request
6ms
Creating an order should write an outbox message that gets processed
6ms
Creating a chef note should return the created note
5ms
Recording waste with zero quantity should return bad request
5ms
Deleting a reservation should return no content
5ms
Submitting a recipe review should return the created review
5ms
Recording ingredient usage should return the created record
5ms
Muffin request with invalid field should return bad request [field: "Cinnamon", value: "<script>alert('xss')</script>", reason: "XSS in cinnamon", expectedError: "Cinnamon contains potentially dangerous content.", expectedStatus: "Bad Request"]
5ms
Deleting an existing topping should return no content
5ms
Requesting second page should return different orders
5ms
Updating a non existent note should return not found
5ms
Requesting milk when cow service times out should return bad gateway
4ms
Recording usage with missing ingredient name should return bad request
4ms
The Grpc proto endpoint should return the proto file
4ms
Unknown recipe type should return zero batches
4ms
Recording a timing with zero prep seconds should return bad request
4ms
Requesting goat milk when goat service returns invalid response should return bad gateway
4ms
Submitting feedback with missing customer name should return bad request
3ms
Daily specials endpoint should return all available specials
3ms
Recording usage with zero quantity should return bad request
3ms
Retrieving a non existent inventory item should return not found
3ms
Ordering non existent daily special should return not found
3ms
Retrieving non existent review should return not found
3ms
Sending request with unsupported content type should return unsupported media type [contentType: "text/plain"]
3ms
Creating a note with missing note text should return bad request
3ms
Retrieving a non existent order should return not found
3ms
Retrieving non existent customer preferences should return not found
2ms
Submitting review with invalid rating should return bad request
2ms
Creating a note with missing recipe name should return bad request
2ms
Audit logs should be filterable by entity type
2ms
Retrieving a non existent note should return not found
2ms
Valid order should be created and an event published
2ms
Recording a reading with missing metric should return bad request
2ms
Recording waste with missing reason should return bad request
1ms
Muffin request with invalid field should return bad request [field: "Eggs", value: "", reason: "Eggs is required", expectedError: "'Eggs' is required.", expectedStatus: "Bad Request"]
1ms
Muffin request with invalid field should return bad request [field: "Apples", value: "", reason: "Apples is required", expectedError: "'Apples' is required.", expectedStatus: "Bad Request"]
1ms
Different muffin recipes should produce the expected batch [recipeName: "Rustic Wholesome", recipe: MuffinRecipeTestData { Ingredients = IngredientSet { Flour = Whole Wheat, Apples = Honeycrisp, Cinnamon = Cassia }, Toppings = System.Collections.Generic.List`1โฆ]
1ms
Muffin request with invalid field should return bad request [field: "Flour", value: "", reason: "Flour is required", expectedError: "'Flour' is required.", expectedStatus: "Bad Request"]
1ms
Topping request with invalid or dangerous input should return bad request [field: "Name", value: "", reason: "Name is required", expectedError: "'Name' is required.", expectedStatus: "Bad Request"]
1ms
Valid status transition should update the order [fromStatus: "Preparing", toStatus: "Ready"]
1ms
Different muffin recipes should produce the expected batch [recipeName: "Spiced Deluxe", recipe: MuffinRecipeTestData { Ingredients = IngredientSet { Flour = Almond Flour, Apples = Pink Lady, Cinnamon = Saigon }, Toppings = System.Collections.Generic.List`1[Brโฆ]
0ms
Daily special order with invalid field should return bad request [field: "Quantity", value: "0", reason: "Quantity must be greater than zero", expectedError: "Quantity must be greater than zero.", expectedStatus: "Bad Request"]
0ms
Valid status transition should update the order [fromStatus: "Created", toStatus: "Cancelled"]
0ms
Update topping with invalid or dangerous input should return bad request [field: "Category", value: "javascript:alert(1)", reason: "Javascript protocol", expectedError: "Category contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Waffle request with invalid ingredient should return bad request [field: "Milk", value: "<script>alert</script>", reason: "XSS in milk", expectedError: "Milk contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Muffin request with invalid field should return bad request [field: "Cinnamon", value: "", reason: "Cinnamon is required", expectedError: "'Cinnamon' is required.", expectedStatus: "Bad Request"]
0ms
Pancake request with invalid ingredient should return bad request [field: "Eggs", value: "", reason: "Eggs is required", expectedError: "'Eggs' is required.", expectedStatus: "Bad Request"]
0ms
Pancake request with invalid ingredient should return bad request [field: "Milk", value: "<script>alert</script>", reason: "XSS in milk", expectedError: "Milk contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Valid status transition should update the order [fromStatus: "Ready", toStatus: "Completed"]
0ms
Order with invalid field should return bad request [field: "Items[0].Quantity", value: "0", reason: "Quantity must be greater than zero", expectedError: "Quantity must be greater than zero.", expectedStatus: "Bad Request"]
0ms
Topping request with invalid or dangerous input should return bad request [field: "Category", value: "<script>alert('xss')</script>", reason: "Script tag in category", expectedError: "Category contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Order with invalid field should return bad request [field: "Items[0].BatchId", value: null, reason: "Batch ID is required", expectedError: "'Batch Id' is required.", expectedStatus: "Bad Request"]
0ms
Requesting milk when cow service returns invalid response should return bad gateway
0ms
Waffle request with invalid ingredient should return bad request [field: "Butter", value: "<img onerror=x>", reason: "XSS in butter", expectedError: "Butter contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Update topping with invalid or dangerous input should return bad request [field: "Name", value: "", reason: "Name is required", expectedError: "'Name' is required.", expectedStatus: "Bad Request"]
0ms
Waffle request with invalid ingredient should return bad request [field: "Eggs", value: "", reason: "Eggs is required", expectedError: "'Eggs' is required.", expectedStatus: "Bad Request"]
0ms
Invalid status transition should return conflict [fromStatus: "Created", toStatus: "Completed"]
0ms
Pancake request with invalid ingredient should return bad request [field: "Flour", value: "<img onerror=x>", reason: "XSS in flour", expectedError: "Flour contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Update topping with invalid or dangerous input should return bad request [field: "Category", value: "<script>alert('xss')</script>", reason: "Script tag in category", expectedError: "Category contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Update topping with invalid or dangerous input should return bad request [field: "Name", value: "<script>alert('xss')</script>", reason: "Script tag in name", expectedError: "Name contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Pancake request with invalid ingredient should return bad request [field: "Eggs", value: "javascript:void(0)", reason: "XSS in eggs", expectedError: "Eggs contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Waffle request with invalid ingredient should return bad request [field: "Flour", value: "", reason: "Flour is required", expectedError: "'Flour' is required.", expectedStatus: "Bad Request"]
0ms
Invalid status transition should return conflict [fromStatus: "Ready", toStatus: "Preparing"]
0ms
Topping request with invalid or dangerous input should return bad request [field: "Category", value: "", reason: "Category is required", expectedError: "'Category' is required.", expectedStatus: "Bad Request"]
0ms
Order with invalid field should return bad request [field: "CustomerName", value: "", reason: "Customer name is required", expectedError: "'Customer Name' is required.", expectedStatus: "Bad Request"]
0ms
Invalid status transition should return conflict [fromStatus: "Preparing", toStatus: "Cancelled"]
0ms
Invalid status transition should return conflict [fromStatus: "Completed", toStatus: "Preparing"]
0ms
Order with invalid field should return bad request [field: "Items", value: null, reason: "At least one item is required", expectedError: "The Items field is required.", expectedStatus: "Bad Request"]
0ms
Topping request with invalid or dangerous input should return bad request [field: "Category", value: "javascript:alert(1)", reason: "Javascript protocol", expectedError: "Category contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Waffle request with invalid ingredient should return bad request [field: "Butter", value: "", reason: "Butter is required", expectedError: "'Butter' is required.", expectedStatus: "Bad Request"]
0ms
Invalid status transition should return conflict [fromStatus: "Created", toStatus: "Ready"]
0ms
Update topping with invalid or dangerous input should return bad request [field: "Name", value: "<img src=x onerror=alert(1)>", reason: "Event handler in name", expectedError: "Name contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Pancake request with invalid ingredient should return bad request [field: "Milk", value: "", reason: "Milk is required", expectedError: "'Milk' is required.", expectedStatus: "Bad Request"]
0ms
Topping request with invalid or dangerous input should return bad request [field: "Name", value: "<img src=x onerror=alert(1)>", reason: "Event handler in name", expectedError: "Name contains potentially dangerous content.", expectedStatus: "Bad Request"]
0ms
Invalid status transition should return conflict [fromStatus: "Cancelled", toStatus: "Preparing"]
0ms
Request with unsupported content type should return unsupported media type [contentType: "application/xml"]
0ms
Request with unsupported content type should return unsupported media type [contentType: "text/html"]
0ms
Sending request with unsupported content type should return unsupported media type [contentType: "text/html"]
0ms
Sending request with unsupported content type should return unsupported media type [contentType: "application/xml"]
0ms
Component Diagram 🛈
ShowDirectionCall summaries
History nothing changed (against 50 earlier runs on main)
stream main ยท run gh:40290999167:1 ยท 50 earlier runs in the window