Skip to main content

Test the dapp

We will test the dapp manually by starting three blockchains locally, placing a customer order, and then tracing its path through the blockchains.

First, ensure that your chains are configured in the following order in your chromia.yml file.

chromia.yml
blockchains:
order-chain: # internal id 0
...
delivery-chain: # internal id 1
...
factory-chain: # internal id 2
...

The Chromia CLI will initiate the chains sequentially based on their internal IDs as defined. Knowing these IDs is advantageous for testing purposes, as they are more convenient to handle compared to the referential ID (brid).

Let's start testing by starting the node in a separate terminal window.

chr node start

We then proceed with the setup by registering two products, with ID 101 and 102:

chr tx --cid 0 register_product 101 --await
chr tx --cid 0 register_product 102 --await

Now we are ready to make our first order. The input argument to make_customer_order is a struct of type order_details. A struct should be encoded as an array when passed through the CLI, so making an order for 1 product of type 101 and 10 products of type 102 sent to a customer with id 1104 on address Homestreet 2 would be encoded as [1104, "Homestreet 2", [[101, 1], [102, 10]]]. Let's make an order using these details to chain 0:

chr tx --cid 0 make_customer_order '[1104, "Homestreet 2", [[101, 1], [102, 10]]]' --await

Note the additional quotes around the order details to ensure our terminal parses it as a single program argument.

To verify that our order was created, we can query the order chain for all orders:

chr query --cid 0 list_orders
Result
[{details=[{product_id=102, quantity=10}, {product_id=101, quantity=1}], order_id=3}]

Let's also verify that the factory chain with ID 2 has manufactured the products with the correct amount. We will perform the following query:

chr query --cid 2 get_total_manufactured_products
Result
[{id=101, quantity=1}, {id=102, quantity=10}]

Finally, verifying that the delivery chain, with ID 1, has created a delivery for us and has a status:

chr query --cid 1 list_deliveries
Result
[{customer_id=1104, order_id=3, shipping_address="Homestreet 2", shipping_state="DISPATCHED"}]

The shipping_state will be either CREATED or DISPATCHED depending on whether the chain has processed the second message. If it has not, wait a few seconds. For completeness, we can mark the delivery as DELIVERED by calling the following command:

chr tx --cid 1 accept_delivery 3

Congratulations! You have now built your first multi-chain app!