---
sidebar:
  label: roboto.testing.stub_roboto_client
  order: 1
title: roboto.testing.stub_roboto_client
---
## Module Contents

### RequestBodyMatcher

```python
roboto.testing.stub_roboto_client.RequestBodyMatcher
```

`from roboto.testing.stub_roboto_client import RequestBodyMatcher`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L35-L35)

### StubResponse

```python
roboto.testing.stub_roboto_client.StubResponse
```

`from roboto.testing.stub_roboto_client import StubResponse`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L23-L33)

### StubRobotoClient

```python
class roboto.testing.stub_roboto_client.StubRobotoClient
```

`from roboto.testing import StubRobotoClient`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L50-L283)

Bases: [`roboto.http.RobotoClient`](/reference/python-sdk/roboto/http/roboto_client#roboto.http.roboto_client.RobotoClient)

A stub RobotoClient for unit testing that returns pre-configured responses for expected requests.

**Usage**

```python
from roboto_test_utils import StubRobotoClient
from roboto.domain.datasets import Dataset, DatasetRecord
from roboto.time import utcnow

client = StubRobotoClient()
client.expect_get(
    "/v1/datasets/ds_123",
    response=DatasetRecord(
        dataset_id="ds_123",
        created=utcnow(),
        created_by="test@example.com",
        modified=utcnow(),
        modified_by="test@example.com",
        org_id="og_test",
    ),
)

dataset = Dataset.from_id("ds_123", roboto_client=client)
assert dataset.dataset_id == "ds_123"
```

#### StubRobotoClient.delete()

```python
def delete(
    path: collections.abc.Sequence[str] | str,
    caller_org_id: Optional[str] = None,
    data: Any = None,
    headers: Optional[dict[str, str]] = None,
    idempotent: bool = True,
    owner_org_id: Optional[str] = None,
    query: Optional[dict[str, Any]] = None,
    retry_wait_fn: Optional[Any] = None,
    timeout: Any = None,
) -> roboto.http.response.HttpResponse
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L194-L206)

**Parameters**

- **path** (`collections.abc.Sequence[str] | str`)
- **caller_org_id** (`Optional[str]`)
- **data** (`Any`)
- **headers** (`Optional[dict[str, str]]`)
- **idempotent** (`bool`)
- **owner_org_id** (`Optional[str]`)
- **query** (`Optional[dict[str, Any]]`)
- **retry_wait_fn** (`Optional[Any]`)
- **timeout** (`Any`)

**Returns**

- `roboto.http.response.HttpResponse`

#### StubRobotoClient.expect_delete()

```python
def expect_delete(
    path: str,
    response: StubResponse,
    query: Optional[dict[str, Any]] = None,
    request_body_matcher: Optional[RequestBodyMatcher] = None,
) -> StubRobotoClient
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L128-L136)

**Parameters**

- **path** (`str`)
- **response** (`StubResponse`)
- **query** (`Optional[dict[str, Any]]`)
- **request_body_matcher** (`Optional[RequestBodyMatcher]`)

**Returns**

- `StubRobotoClient`

#### StubRobotoClient.expect_get()

```python
def expect_get(
    path: str,
    response: StubResponse,
    query: Optional[dict[str, Any]] = None,
    owner_org_id: Optional[str] = None,
) -> StubRobotoClient
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L88-L96)

**Parameters**

- **path** (`str`)
- **response** (`StubResponse`)
- **query** (`Optional[dict[str, Any]]`)
- **owner_org_id** (`Optional[str]`)

**Returns**

- `StubRobotoClient`

#### StubRobotoClient.expect_patch()

```python
def expect_patch(
    path: str,
    response: StubResponse,
    query: Optional[dict[str, Any]] = None,
    request_body_matcher: Optional[RequestBodyMatcher] = None,
) -> StubRobotoClient
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L118-L126)

**Parameters**

- **path** (`str`)
- **response** (`StubResponse`)
- **query** (`Optional[dict[str, Any]]`)
- **request_body_matcher** (`Optional[RequestBodyMatcher]`)

**Returns**

- `StubRobotoClient`

#### StubRobotoClient.expect_post()

```python
def expect_post(
    path: str,
    response: StubResponse,
    query: Optional[dict[str, Any]] = None,
    request_body_matcher: Optional[RequestBodyMatcher] = None,
) -> StubRobotoClient
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L98-L106)

**Parameters**

- **path** (`str`)
- **response** (`StubResponse`)
- **query** (`Optional[dict[str, Any]]`)
- **request_body_matcher** (`Optional[RequestBodyMatcher]`)

**Returns**

- `StubRobotoClient`

#### StubRobotoClient.expect_put()

```python
def expect_put(
    path: str,
    response: StubResponse,
    query: Optional[dict[str, Any]] = None,
    request_body_matcher: Optional[RequestBodyMatcher] = None,
) -> StubRobotoClient
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L108-L116)

**Parameters**

- **path** (`str`)
- **response** (`StubResponse`)
- **query** (`Optional[dict[str, Any]]`)
- **request_body_matcher** (`Optional[RequestBodyMatcher]`)

**Returns**

- `StubRobotoClient`

#### StubRobotoClient.get()

```python
def get(
    path: collections.abc.Sequence[str] | str,
    caller_org_id: Optional[str] = None,
    headers: Optional[dict[str, str]] = None,
    idempotent: bool = True,
    owner_org_id: Optional[str] = None,
    query: Optional[dict[str, Any]] = None,
    retry_wait_fn: Optional[Any] = None,
    timeout: Any = None,
) -> roboto.http.response.HttpResponse
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L139-L150)

**Parameters**

- **path** (`collections.abc.Sequence[str] | str`)
- **caller_org_id** (`Optional[str]`)
- **headers** (`Optional[dict[str, str]]`)
- **idempotent** (`bool`)
- **owner_org_id** (`Optional[str]`)
- **query** (`Optional[dict[str, Any]]`)
- **retry_wait_fn** (`Optional[Any]`)
- **timeout** (`Any`)

**Returns**

- `roboto.http.response.HttpResponse`

#### StubRobotoClient.patch()

```python
def patch(
    path: collections.abc.Sequence[str] | str,
    caller_org_id: Optional[str] = None,
    data: Any = None,
    headers: Optional[dict[str, str]] = None,
    idempotent: bool = True,
    owner_org_id: Optional[str] = None,
    query: Optional[dict[str, Any]] = None,
    retry_wait_fn: Optional[Any] = None,
    timeout: Any = None,
) -> roboto.http.response.HttpResponse
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L180-L192)

**Parameters**

- **path** (`collections.abc.Sequence[str] | str`)
- **caller_org_id** (`Optional[str]`)
- **data** (`Any`)
- **headers** (`Optional[dict[str, str]]`)
- **idempotent** (`bool`)
- **owner_org_id** (`Optional[str]`)
- **query** (`Optional[dict[str, Any]]`)
- **retry_wait_fn** (`Optional[Any]`)
- **timeout** (`Any`)

**Returns**

- `roboto.http.response.HttpResponse`

#### StubRobotoClient.post()

```python
def post(
    path: collections.abc.Sequence[str] | str,
    caller_org_id: Optional[str] = None,
    data: Any = None,
    headers: Optional[dict[str, str]] = None,
    idempotent: bool = True,
    owner_org_id: Optional[str] = None,
    query: Optional[dict[str, Any]] = None,
    retry_wait_fn: Optional[Any] = None,
    timeout: Any = None,
) -> roboto.http.response.HttpResponse
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L152-L164)

**Parameters**

- **path** (`collections.abc.Sequence[str] | str`)
- **caller_org_id** (`Optional[str]`)
- **data** (`Any`)
- **headers** (`Optional[dict[str, str]]`)
- **idempotent** (`bool`)
- **owner_org_id** (`Optional[str]`)
- **query** (`Optional[dict[str, Any]]`)
- **retry_wait_fn** (`Optional[Any]`)
- **timeout** (`Any`)

**Returns**

- `roboto.http.response.HttpResponse`

#### StubRobotoClient.put()

```python
def put(
    path: collections.abc.Sequence[str] | str,
    caller_org_id: Optional[str] = None,
    data: Any = None,
    headers: Optional[dict[str, str]] = None,
    idempotent: bool = True,
    owner_org_id: Optional[str] = None,
    query: Optional[dict[str, Any]] = None,
    retry_wait_fn: Optional[Any] = None,
    timeout: Any = None,
) -> roboto.http.response.HttpResponse
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L166-L178)

**Parameters**

- **path** (`collections.abc.Sequence[str] | str`)
- **caller_org_id** (`Optional[str]`)
- **data** (`Any`)
- **headers** (`Optional[dict[str, str]]`)
- **idempotent** (`bool`)
- **owner_org_id** (`Optional[str]`)
- **query** (`Optional[dict[str, Any]]`)
- **retry_wait_fn** (`Optional[Any]`)
- **timeout** (`Any`)

**Returns**

- `roboto.http.response.HttpResponse`

#### StubRobotoClient.verify_no_pending_expectations()

```python
def verify_no_pending_expectations() -> None
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/testing/stub_roboto_client.py#L208-L217)

Verify that all registered expectations have been consumed.

**Raises**

- `AssertionError`: If there are any pending expectations that were not consumed.

**Returns**

- `None`
