# How to Run Tests for rowboatlabs/rowboat: A Complete pytest Guide

> Learn how to run tests for rowboatlabs/rowboat with this complete pytest guide. Install dependencies and execute pytest commands from the repository root to ensure your code is working correctly.

- Repository: [RowBoat Labs/rowboat](https://github.com/rowboatlabs/rowboat)
- Tags: how-to-guide
- Published: 2026-02-16

---

**To run tests for rowboatlabs/rowboat, install dependencies from [`apps/experimental/tools_webhook/requirements.txt`](https://github.com/rowboatlabs/rowboat/blob/main/apps/experimental/tools_webhook/requirements.txt) and execute `pytest apps/experimental/tools_webhook/tests/` from the repository root.**

The rowboat repository is a monorepo containing an Electron application and Python-based webhook services. While the frontend uses pnpm for package management, the automated test suite relies on **pytest** to validate the Python tooling logic. This guide covers the exact steps to execute the test suite and verify the webhook service functionality.

## Prerequisites for Running rowboat Tests

Before executing tests, ensure you have Python 3.8+ installed. The repository does not use Jest or Playwright for testing; instead, it uses pytest (v8.3.4) as specified in [`apps/experimental/tools_webhook/requirements.txt`](https://github.com/rowboatlabs/rowboat/blob/main/apps/experimental/tools_webhook/requirements.txt).

You will need:
- Python 3.8 or higher
- `pip` package manager
- Virtual environment support (recommended)

## How to Run Tests for rowboatlabs/rowboat

### Install Python Dependencies

Navigate to the webhook service directory and create an isolated Python environment. This prevents conflicts with the monorepo's pnpm-managed Node.js dependencies.

```bash
cd apps/experimental/tools_webhook
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

pip install -r requirements.txt

```

The [`requirements.txt`](https://github.com/rowboatlabs/rowboat/blob/main/requirements.txt) file installs pytest alongside the Flask and utility libraries required by the webhook service.

### Execute the pytest Suite

From the repository root, run pytest against the test directory:

```bash
pytest apps/experimental/tools_webhook/tests/

```

Alternatively, if you are already in the `tools_webhook` directory with the virtual environment activated:

```bash
pytest tests/

```

You should see output confirming that **5 tests** pass across the two test modules:

```

============================= test session starts ==============================
collected 5 items

apps/experimental/tools_webhook/tests/test_tool_caller.py ..               [40%]
apps/experimental/tools_webhook/tests/test_app.py ..                       [80%]
...
============================== 5 passed in 0.42s ==============================

```

### Verify Test Coverage

The test suite validates two critical components of the experimental webhook service:

- **[`test_tool_caller.py`](https://github.com/rowboatlabs/rowboat/blob/main/test_tool_caller.py)** – Unit tests for the `call_tool` function in [`tool_caller.py`](https://github.com/rowboatlabs/rowboat/blob/main/tool_caller.py), covering successful invocations, missing functions, parameter validation, and type-conversion errors.
- **[`test_app.py`](https://github.com/rowboatlabs/rowboat/blob/main/test_app.py)** – Integration tests for the Flask application in [`app.py`](https://github.com/rowboatlabs/rowboat/blob/main/app.py), verifying that the `/tool_call` endpoint returns correct JSON responses for both success and error cases.

## Understanding the Test Structure

The Python tests are located at `apps/experimental/tools_webhook/tests/` and exercise the following production code:

| Test File | Production Code Tested | Purpose |
|-----------|------------------------|---------|
| [`test_tool_caller.py`](https://github.com/rowboatlabs/rowboat/blob/main/test_tool_caller.py) | [`tool_caller.py`](https://github.com/rowboatlabs/rowboat/blob/main/tool_caller.py) | Validates the dispatcher that checks `FUNCTIONS_MAP` and invokes target functions with argument validation. |
| [`test_app.py`](https://github.com/rowboatlabs/rowboat/blob/main/test_app.py) | [`app.py`](https://github.com/rowboatlabs/rowboat/blob/main/app.py) | Tests the Flask server exposing the `/tool_call` HTTP endpoint. |

Both test files use standard pytest fixtures and assertions. They do not require a running database or external services, making them suitable for CI/CD pipelines.

## Optional: Linting the TypeScript Codebase

While the repository does not include JavaScript test runners, you can run static analysis on the Electron application using the provided lint script:

```bash
cd apps/x
pnpm install
npm run lint

```

This executes ESLint across the TypeScript codebase as defined in [`apps/x/package.json`](https://github.com/rowboatlabs/rowboat/blob/main/apps/x/package.json). Note that this is a quality gate, not a test suite, and does not verify runtime behavior.

## Summary

- **Rowboat tests use pytest**, not Jest or Playwright, and are located in `apps/experimental/tools_webhook/tests/`.
- **Install dependencies** via `pip install -r requirements.txt` in the `tools_webhook` directory.
- **Execute tests** with `pytest apps/experimental/tools_webhook/tests/` from the repository root.
- **Five tests** cover the [`tool_caller.py`](https://github.com/rowboatlabs/rowboat/blob/main/tool_caller.py) dispatcher and [`app.py`](https://github.com/rowboatlabs/rowboat/blob/main/app.py) Flask endpoint.
- **TypeScript linting** is available via `npm run lint` in `apps/x` but does not replace Python tests.

## Frequently Asked Questions

### How do I run tests for rowboatlabs/rowboat without installing Node.js dependencies?

You can run the Python test suite independently of the pnpm workspace. Navigate to `apps/experimental/tools_webhook`, create a Python virtual environment, install requirements with `pip install -r requirements.txt`, and run `pytest tests/`. The Electron app's Node.js dependencies are not required for pytest execution.

### What Python version is required to run the rowboat test suite?

The repository requires Python 3.8 or higher. The [`requirements.txt`](https://github.com/rowboatlabs/rowboat/blob/main/requirements.txt) file specifies pytest 8.3.4 and Flask dependencies that are compatible with modern Python versions. Always use a virtual environment to avoid conflicts with system packages.

### Does rowboatlabs/rowboat include JavaScript or frontend tests?

No, the current codebase does not include Jest, Playwright, or other JavaScript test harnesses. The only automated tests are the Python pytest suite in `apps/experimental/tools_webhook/tests/`. Frontend code quality is maintained via ESLint using `npm run lint` in the `apps/x` directory.

### How do I add new tests to the rowboat repository?

Create new Python files prefixed with `test_` in the `apps/experimental/tools_webhook/tests/` directory. Use standard pytest functions and fixtures to test your code. Run `pytest apps/experimental/tools_webhook/tests/` to verify your new tests pass alongside the existing five tests covering [`tool_caller.py`](https://github.com/rowboatlabs/rowboat/blob/main/tool_caller.py) and [`app.py`](https://github.com/rowboatlabs/rowboat/blob/main/app.py).