Skip to main content

OpenTelemetry Store - Check shopping cart contents

In this use case, we want to validate the following story:

As a consumer
I want to see my shopping cart
And see all products that I've added to it
So I can go to the checkout process

You can trigger this use case by calling the endpoint GET /api/cart?sessionId={some-uuid}&currecyCode= from the Frontend service. It should return a payload similar to this:

{
"userId": "8c0465e2-32bb-4ecb-a9c8-5a2861629ff1",
"items": [
{
"productId": "66VCHSJNUP",
"quantity" : 1,
"product": {
"id": "66VCHSJNUP",
"name": "Starsense Explorer Refractor Telescope",
"description": "The first telescope that uses your smartphone to analyze the night sky and calculate its position in real time. StarSense Explorer is ideal for beginners thanks to the app’s user-friendly interface and detailed tutorials. It’s like having your own personal tour guide of the night sky",
"picture": "/images/products/StarsenseExplorer.jpg",
"priceUsd": {
"currencyCode": "USD",
"units": 349,
"nanos": 950000000
},
"categories": [
"telescopes"
]
}
}
]
}

If it is the first time that you are calling this endpoint, to see an item into the shopping cart you need first to Add item into shopping cart.

Building a Test for This Scenario

Using Tracetest, we can create a test that will execute an API call on GET /api/cart?sessionId={some-uuid}&currecyCode= and validate the following properties:

  • The product ID 66VCHSJNUP, previously added, exists in the cart.
  • The size of the shopping cart should be 1.

Traces

Running these tests for the first time will create an Observability trace like the image below, where you can see spans for the API calls (HTTP and gRPC):

Assertions

With this trace, now we can build assertions on Tracetest and validate the properties:

  • The product ID 66VCHSJNUP, previously added, exists in the cart.

  • The size of the shopping cart should be 1.

Now you can validate this entire use case.

Test Definition

To replicate this entire test on Tracetest, you can replicate these steps on our Web UI or using our CLI, saving the following test definition as the file test-definition.yml and later running:

tracetest run test -f test-definition.yml

We are assuming that the Frontend service is exposed on http://otel-demo-frontend:8080:

type: Test
spec:
name: OpenTelemetry Store - Check shopping cart contents
trigger:
type: http
httpRequest:
url: http://otel-demo-frontend:8080/api/cart?sessionId=8c0465e2-32bb-4ecb-a9c8-5a2861629ff1&currencyCode=
method: GET
headers:
- key: Content-Type
value: application/json
specs:
- selector: span[tracetest.span.type="rpc" name="hipstershop.ProductCatalogService/GetProduct"
rpc.system="grpc" rpc.method="GetProduct" rpc.service="hipstershop.ProductCatalogService"]
assertions:
- attr:app.product.id = "66VCHSJNUP"
- selector: span[tracetest.span.type="general" name="Tracetest trigger"]
assertions:
- attr:tracetest.response.body | json_path '$.items.length' = 1