| 59 | |
| 60 | |
| 61 | class TestOpencode: |
| 62 | client = Opencode(base_url=base_url, _strict_response_validation=True) |
| 63 | |
| 64 | @pytest.mark.respx(base_url=base_url) |
| 65 | def test_raw_response(self, respx_mock: MockRouter) -> None: |
| 66 | respx_mock.post("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"})) |
| 67 | |
| 68 | response = self.client.post("/foo", cast_to=httpx.Response) |
| 69 | assert response.status_code == 200 |
| 70 | assert isinstance(response, httpx.Response) |
| 71 | assert response.json() == {"foo": "bar"} |
| 72 | |
| 73 | @pytest.mark.respx(base_url=base_url) |
| 74 | def test_raw_response_for_binary(self, respx_mock: MockRouter) -> None: |
| 75 | respx_mock.post("/foo").mock( |
| 76 | return_value=httpx.Response(200, headers={"Content-Type": "application/binary"}, content='{"foo": "bar"}') |
| 77 | ) |
| 78 | |
| 79 | response = self.client.post("/foo", cast_to=httpx.Response) |
| 80 | assert response.status_code == 200 |
| 81 | assert isinstance(response, httpx.Response) |
| 82 | assert response.json() == {"foo": "bar"} |
| 83 | |
| 84 | def test_copy(self) -> None: |
| 85 | copied = self.client.copy() |
| 86 | assert id(copied) != id(self.client) |
| 87 | |
| 88 | def test_copy_default_options(self) -> None: |
| 89 | # options that have a default are overridden correctly |
| 90 | copied = self.client.copy(max_retries=7) |
| 91 | assert copied.max_retries == 7 |
| 92 | assert self.client.max_retries == 2 |
| 93 | |
| 94 | copied2 = copied.copy(max_retries=6) |
| 95 | assert copied2.max_retries == 6 |
| 96 | assert copied.max_retries == 7 |
| 97 | |
| 98 | # timeout |
| 99 | assert isinstance(self.client.timeout, httpx.Timeout) |
| 100 | copied = self.client.copy(timeout=None) |
| 101 | assert copied.timeout is None |
| 102 | assert isinstance(self.client.timeout, httpx.Timeout) |
| 103 | |
| 104 | def test_copy_default_headers(self) -> None: |
| 105 | client = Opencode(base_url=base_url, _strict_response_validation=True, default_headers={"X-Foo": "bar"}) |
| 106 | assert client.default_headers["X-Foo"] == "bar" |
| 107 | |
| 108 | # does not override the already given value when not specified |
| 109 | copied = client.copy() |
| 110 | assert copied.default_headers["X-Foo"] == "bar" |
| 111 | |
| 112 | # merges already given headers |
| 113 | copied = client.copy(default_headers={"X-Bar": "stainless"}) |
| 114 | assert copied.default_headers["X-Foo"] == "bar" |
| 115 | assert copied.default_headers["X-Bar"] == "stainless" |
| 116 | |
| 117 | # uses new values for any already given headers |
| 118 | copied = client.copy(default_headers={"X-Foo": "stainless"}) |