# Test the flow

> Test the Price Watch Flow using Debug to upload and run it in your UiPath Cloud account as a debug session to check the outputs.

We will test our Flow by executing it twice to test each of the branches based on the current exchange rate. A Debug run executes the flow the same way it would if we had published and deployed it. The HTTP Request node calls Frankfurter, the Script node runs the JavaScript, and the Decision node takes one of its two paths. Debug runs execute server-side in the tenant you are signed in to, and they execute **in the cloud** rather than on your machine.

:::important
**A debug run is a real run.** The API call happens, and any side effects a flow has are real side effects. Frankfurter is a read-only public service, so a Price Watch run doesn't incur any costs from the Frankfurter API call, but treat a debug run as production traffic once a flow writes to a system.
:::

## Step 4 - Testing the flow

There are two ways you can test the Flow - using the Debug button in VS Code ([Step 4.1](#41---using-vs-code-to-test-the-flow)), or using CLI commands (Steps [4.2](#42---using-the-cli-to-test-the-flow-alert) and [4.3](#43---using-the-cli-to-test-the-flow-no-action)). You can pick either option, or both, depending on your preference.

### 4.1 - Using VS Code to test the Flow

1. Select **Debug** in the canvas toolbar (the play button - ▶️).

2. Supply values for the three trigger inputs when prompted - the defaults we set earlier should be set for each one:

   ![Debug configuration dialog showing the 3 variables with the values entered as shown above in the code block](https://dev-assets.cms.uipath.com/assets/images/getting-started/maestro-flow-price-watch-debug-variables-823236d0.png)

3. Watch the execution panel at the bottom of the editor as the trace populates, node by node.

Each node shows a success or failure indicator when the run finishes. Here is what the successful execution should look like when the `endAlert1` node was the end node:

![Flow shown on the Canvas with all the nodes except the "End no action" node having green outlines.](https://dev-assets.cms.uipath.com/assets/images/getting-started/maestro-flow-price-watch-success-alert-cbe930d4.png)

Follow the same steps to test the `endNoAction1` node, changing the `alertThreshold` to a value below the current rate (this will vary over time). This is what a successful run will look like when `0.1` is used to confirm the "No action" branch:

![Flow shown on the Canvas with all the nodes except the "End alert" node having green outlines.](https://dev-assets.cms.uipath.com/assets/images/getting-started/maestro-flow-price-watch-success-no-alert-e4ef32b6.png)

### 4.2 - Using the CLI to test the Flow (Alert)

To do a Debug run from terminal with the `uip` command, use the following from the solution's top-level directory, not the `PriceWatch` directory:

```bash
uip maestro flow debug PriceWatch \
   --inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
   --output table \
   --output-filter 'elementExecutions'
```

The response should end with `"Debug completed with status: Completed"` and carries an instance ID for correlating logs and traces.

With the values above, the `USD` to `EUR` rate was `0.86111` at the time of writing, which is below `0.9`, so the Decision node takes the **Alert** path and the run ends at `endAlert1`. In the response below, the `Data.elementExecutions` contains this info, and we only show it by adding `--output-filter 'elementExecutions'` to the command:

```text
elementId                             | elementType      | status    | startedAt                    | completedAt                 
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start                                 | StartEvent       | Completed | 2026-09-09T14:45:11.1800316Z | 2026-09-09T14:45:11.5424344Z
fetchRate1                            | SubProcess       | Completed | 2026-09-09T14:45:12.0084766Z | 2026-09-09T14:45:15.4191562Z
_Implicit_StartEvent_fetchRate1       | StartEvent       | Completed | 2026-09-09T14:45:12.5480076Z | 2026-09-09T14:45:12.811941Z 
_Implicit_HttpTask_fetchRate1         | SendTask         | Completed | 2026-09-09T14:45:13.1623209Z | 2026-09-09T14:45:14.0727369Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent         | Completed | 2026-09-09T14:45:14.6862017Z | 2026-09-09T14:45:14.9360746Z
reshapeRate1                          | ScriptTask       | Completed | 2026-09-09T14:45:15.6366731Z | 2026-09-09T14:45:15.973426Z 
belowThreshold1                       | InclusiveGateway | Completed | 2026-09-09T14:45:16.3758949Z | 2026-09-09T14:45:16.4578181Z
endAlert1                             | EndEvent         | Completed | 2026-09-09T14:45:16.7053678Z | 2026-09-09T14:45:17.0385488Z
```

Only one End node appears, which is how you confirm which branch was executed. The nested `_Implicit_*` entries under `fetchRate1` are the managed HTTP node expanding into a subprocess.

To look at what each global variable (in `Data.variables.globals`) held when the run finished, run it again without the `--output table` option to show the full JSON output:

```bash
uip maestro flow debug PriceWatch \
  --inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
  --output-filter 'variables.globals' 
  
```

Look for these sections in the returned JSON, specifically the line with `"belowThreshold": true`:

```json
{
  "reshapeRate1.output": {
    "pair": "USD/EUR",
    "rate": 0.85946,
    "asOf": "2026-09-10",
    "belowThreshold": true
  },
  "start.output.baseCurrency": "USD",
  "start.output.quoteCurrency": "EUR",
  "start.output.alertThreshold": 0.9,
  "watchResult": {
    "pair": "USD/EUR",
    "rate": 0.85946,
    "asOf": "2026-09-10",
    "belowThreshold": true
  }
}
```

That block is the fastest check that both the Script node and the End node mapping are right.

:::tip
The `--output-filter 'elementExecutions'` and `--output-filter 'variables.globals'` is included in the commands above to only return the part of the response we are interested in - if you omit it, you will see the full JSON response with all the details. The `--output table` parameter is used in the first command to also format the JSON output into an easily readable text table. It is not used on the second command due to the nested JSON fields, it would be hard to read - try it yourself by adding in `--output table`.
:::

### 4.3 - Using the CLI to test the Flow (No Action)

Rates move, so your numbers will differ from the ones in this tutorial. To take the false path deliberately, run again with `alertThreshold` set to `0.1`: the rate is then above the threshold, `belowThreshold` is `false`, and the run ends at `endNoAction1`.

```bash
uip maestro flow debug PriceWatch \
  --inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}' \
  --output table \
  --output-filter 'elementExecutions'
```

Looking at the output below, on the last line, you can see that `endNoAction1` was executed instead of `endAlert`:

```text
elementId                             | elementType      | status    | startedAt                    | completedAt                 
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start                                 | StartEvent       | Completed | 2026-09-09T19:35:16.9481084Z | 2026-09-09T19:35:17.8183474Z
fetchRate1                            | SubProcess       | Completed | 2026-09-09T19:35:18.2733427Z | 2026-09-09T19:35:23.0056514Z
_Implicit_StartEvent_fetchRate1       | StartEvent       | Completed | 2026-09-09T19:35:19.2552152Z | 2026-09-09T19:35:19.6644838Z
_Implicit_HttpTask_fetchRate1         | SendTask         | Completed | 2026-09-09T19:35:20.0168686Z | 2026-09-09T19:35:21.5714821Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent         | Completed | 2026-09-09T19:35:21.8821048Z | 2026-09-09T19:35:22.2081364Z
reshapeRate1                          | ScriptTask       | Completed | 2026-09-09T19:35:23.7685642Z | 2026-09-09T19:35:24.3541723Z
belowThreshold1                       | InclusiveGateway | Completed | 2026-09-09T19:35:24.6927348Z | 2026-09-09T19:35:24.8111957Z
endNoAction1                          | EndEvent         | Completed | 2026-09-09T19:35:25.393084Z  | 2026-09-09T19:35:26.086936Z
```

Run the following command to retrieve the values set for `variables.globals`:

```bash
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
  '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}'
```

Look for these sections in the returned JSON, specifically the line with `"belowThreshold": false`:

```json
{
  "reshapeRate1.output": {
    "pair": "USD/EUR",
    "rate": 0.85946,
    "asOf": "2026-09-10",
    "belowThreshold": false
  },
  "start.output.baseCurrency": "USD",
  "start.output.quoteCurrency": "EUR",
  "start.output.alertThreshold": 0.1,
  "watchResult": {
    "pair": "USD/EUR",
    "rate": 0.85946,
    "asOf": "2026-09-10",
    "belowThreshold": false
  }
}
```

:::tip
**Running both paths once is the fastest way to confirm the Decision node is wired correctly on both branches.** Confirm the second run ends at `endNoAction1` and that `watchResult` comes back with `belowThreshold` set to `false`.
:::

Try a third run with a different quote currency, such as `"quoteCurrency": "GBP"`, to confirm the Script node's lookup is not quietly tied to `EUR`. The `pair` and `rate` in `watchResult` should follow the currency you asked for.

```bash
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
  '{"baseCurrency": "USD", "quoteCurrency": "GBP", "alertThreshold": 0.9}'
```

```json
{
  "reshapeRate1.output": {
    "pair": "USD/GBP",
    "rate": 0.73782,
    "asOf": "2026-09-10",
    "belowThreshold": true
  },
  "start.output.baseCurrency": "USD",
  "start.output.quoteCurrency": "GBP",
  "start.output.alertThreshold": 0.9,
  "watchResult": {
    "pair": "USD/GBP",
    "rate": 0.73782,
    "asOf": "2026-09-10",
    "belowThreshold": true
  }
}
```

---

Now that we have confirmed it is working as expected, it is time to [Deploy the Flow](maestro-flow-price-watch-deploy.md) in your UiPath Cloud account's tenant.
