def test_list_users_pagination_invalid_query_param(
    mock_domain_list_users: mock.Mock, query_param_string, expected_error
):
    response = client.get(f"/users?{query_param_string}")

    expected_response = (400, expected_error)
    assert (response.status_code, response.json()) == expected_response
    assert mock_domain_list_users.called_once_with()
def test_list_users_pagination(mock_domain_list_users: mock.Mock):
    mock_domain_list_users.return_value = dto.UserSummaryPaginatedResponse(
        results=[
            dto.UserSummary(
                id=dto.UserID("00000000000000000000000a"),
                email="*****@*****.**",
                ctime=datetime(2020, 1, 1, 0, 0, tzinfo=UTC),
                mtime=datetime(2020, 1, 2, 0, 0, tzinfo=UTC),
            ),
            dto.UserSummary(
                id=dto.UserID("00000000000000000000000b"),
                email="*****@*****.**",
                ctime=datetime(2020, 1, 1, 0, 0, tzinfo=UTC),
                mtime=datetime(2020, 1, 2, 0, 0, tzinfo=UTC),
            ),
            dto.UserSummary(
                id=dto.UserID("00000000000000000000000c"),
                email="*****@*****.**",
                ctime=datetime(2020, 1, 1, 0, 0, tzinfo=UTC),
                mtime=datetime(2020, 1, 2, 0, 0, tzinfo=UTC),
            ),
        ],
        next_cursor=dto.UserID("00000000000000000000000c"),
    )

    response = client.get("/users?limit=3")

    expected_response = (
        200,
        {
            "results": [
                {
                    "id": "00000000000000000000000a",
                    "email": "*****@*****.**",
                    "ctime": "2020-01-01T00:00:00+00:00",
                    "mtime": "2020-01-02T00:00:00+00:00",
                },
                {
                    "id": "00000000000000000000000b",
                    "email": "*****@*****.**",
                    "ctime": "2020-01-01T00:00:00+00:00",
                    "mtime": "2020-01-02T00:00:00+00:00",
                },
                {
                    "id": "00000000000000000000000c",
                    "email": "*****@*****.**",
                    "ctime": "2020-01-01T00:00:00+00:00",
                    "mtime": "2020-01-02T00:00:00+00:00",
                },
            ],
            "next_cursor": "00000000000000000000000c",
        },
    )
    assert (response.status_code, response.json()) == expected_response
    assert mock_domain_list_users.called_once_with()
def test_list_users(mock_domain_list_users: mock.Mock):
    mock_domain_list_users.return_value = dto.UserSummaryPaginatedResponse(
        results=[fixtures.user_summary_fixture()], next_cursor=None
    )

    response = client.get("/users")

    expected_response = (
        200,
        {"results": [fixtures.user_summary_json_fixture()], "next_cursor": None},
    )
    assert (response.status_code, response.json()) == expected_response
    assert mock_domain_list_users.called_once_with()