# Direct Tests

Write and run fast direct mode tests for GenLayer intelligent contracts.

- Repository: https://github.com/internet-court/internet-court-skill (7050 stars)
- Category: Testing
- License: see repository
- Last updated: 2026-10-26
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add internet-court/internet-court-skill --skill direct-tests -g -a claude-code -y`
Codex: `npx skills add internet-court/internet-court-skill --skill direct-tests -g -a codex -y`
Cursor: `npx skills add internet-court/internet-court-skill --skill direct-tests -g -a cursor -y`
Gemini CLI: `npx skills add internet-court/internet-court-skill --skill direct-tests -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add internet-court/internet-court-skill`

## Description

Write and run fast direct mode tests for GenLayer intelligent contracts.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Direct Mode Tests

Write fast, in-memory tests for intelligent contracts. No server, no Docker, tests run in ~30-50ms.

## Running Tests

```bash
pytest tests/direct/ -v
pytest tests/direct/test_specific.py -v
pytest tests/direct/test_specific.py::test_one_case -v
```

## Fixtures

Available from `genlayer-test` pytest plugin:

```python
def test_example(direct_vm, direct_deploy, direct_alice, direct_bob):
    # direct_vm, VMContext with cheatcodes
    # direct_deploy, deploy a contract file
    # direct_alice, test address
    # direct_bob, test address
    pass
```

All fixtures: `direct_vm`, `direct_deploy`, `direct_alice`, `direct_bob`, `direct_charlie`, `direct_owner`, `direct_accounts`

## Basic Test Pattern

```python
def test_set_and_get(direct_vm, direct_deploy, direct_alice):
    contract = direct_deploy("contracts/my_contract.py")
    direct_vm.sender = direct_alice

    contract.set_data("hello")

    result = contract.get_data(direct_alice)
    assert result == "hello"
```

## Mocking Web Requests

For contracts that call `gl.nondet.web.get()`:

```python
import json

def test_with_web_mock(direct_vm, direct_deploy, direct_alice):
    contract = direct_deploy("contracts/my_contract.py")
    direct_vm.sender = direct_alice

    # Pattern: regex matching on URL
    direct_vm.mock_web(
        r".*api\.example\.com/prices.*",
        {"status": 200, "body": '{"price": 42.5}'},
    )

    contract.update_price("ETH/USD")
    assert contract.get_price("ETH/USD") == 42.5
```

### Full mock format (when you need headers/method control)

```python
direct_vm.mock_web(
    r"api\.example\.com/data",
    {
        "response": {
            "status": 200,
            "headers": {},
            "body": json.dumps({"key": "value"}).encode()
        },
        "method": "GET"
    }
)
```

## Mocking LLM Responses

For contracts that call `gl.nondet.exec_prompt()`:

The rest: https://github.com/internet-court/internet-court-skill/blob/HEAD/vendored/genlayer/direct-tests/SKILL.md
