From 15443d92fc59e6e5612ad8e9c722e783f098c02a Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Sun, 13 Sep 2020 15:17:55 +1000 Subject: [PATCH 1/9] Added support for the DNS rewrite rules AdGuard API --- adguardhome/adguardhome.py | 2 + adguardhome/rewrite.py | 41 ++++++++++++++++++ tests/test_rewrite.py | 88 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 adguardhome/rewrite.py create mode 100644 tests/test_rewrite.py diff --git a/adguardhome/adguardhome.py b/adguardhome/adguardhome.py index 1750b727..2d5ede68 100644 --- a/adguardhome/adguardhome.py +++ b/adguardhome/adguardhome.py @@ -13,6 +13,7 @@ from .filtering import AdGuardHomeFiltering from .parental import AdGuardHomeParental from .querylog import AdGuardHomeQueryLog +from .rewrite import AdGuardHomeRewrite from .safebrowsing import AdGuardHomeSafeBrowsing from .safesearch import AdGuardHomeSafeSearch from .stats import AdGuardHomeStats @@ -57,6 +58,7 @@ def __init__( self.filtering = AdGuardHomeFiltering(self) self.parental = AdGuardHomeParental(self) self.querylog = AdGuardHomeQueryLog(self) + self.rewrite = AdGuardHomeRewrite(self) self.safebrowsing = AdGuardHomeSafeBrowsing(self) self.safesearch = AdGuardHomeSafeSearch(self) self.stats = AdGuardHomeStats(self) diff --git a/adguardhome/rewrite.py b/adguardhome/rewrite.py new file mode 100644 index 00000000..49b8dcdf --- /dev/null +++ b/adguardhome/rewrite.py @@ -0,0 +1,41 @@ +"""Asynchronous Python client for the AdGuard Home API.""" + +from typing import List, Dict + +from .exceptions import AdGuardHomeError + + +class AdGuardHomeRewrite: + """Controls AdGuard Home DNS rewrites.""" + + def __init__(self, adguard) -> None: + """Initialise object.""" + self._adguard = adguard + + async def list(self) -> List[Dict[str, str]]: + """Return all defined DNS rewrites.""" + response = await self._adguard._request("rewrite/list") + return response + + async def add(self, domain: str, answer: str) -> None: + """Add a new DNS rewrite rule to AdGuard Home.""" + response = await self._adguard._request( + "rewrite/add", method="POST", json_data={"domain": domain, "answer": answer} + ) + if response != "": + raise AdGuardHomeError( + "Failed to add DNS rewrite rule to AdGuard Home", {"response": response} + ) + + async def delete(self, domain: str, answer: str) -> None: + """Delete a DNS rewrite rule from AdGuard Home.""" + response = await self._adguard._request( + "rewrite/delete", + method="POST", + json_data={"domain": domain, "answer": answer}, + ) + if response != "": + raise AdGuardHomeError( + "Failed to delete DNS rewrite rule from AdGuard Home", + {"response": response}, + ) diff --git a/tests/test_rewrite.py b/tests/test_rewrite.py new file mode 100644 index 00000000..d4705949 --- /dev/null +++ b/tests/test_rewrite.py @@ -0,0 +1,88 @@ +"""Tests for `adguardhome.rewrite`.""" +import aiohttp +import pytest +from adguardhome import AdGuardHome +from adguardhome.exceptions import AdGuardHomeError + + +@pytest.mark.asyncio +async def test_list(aresponses): + """Test getting all DNS rewrite rules from AdGuard Home rewrite""" + # async def response_handler(request): + # data = await request.json() + # assert data is None + # return aresponses.Response(status=200) + + aresponses.add( + "example.com:3000", "/control/rewrite/list", "GET", + aresponses.Response( + status=200, + headers={"Content-Type": "application/json"}, + text='[{"domain": "*.example.com", "answer": "192.168.1.2"}, \ + {"domain": "*.example.com", "answer": "192.168.1.2"}]' + ) + ) + + aresponses.add( + "example.com:3000", "/control/rewrite/list", "GET", + aresponses.Response( + status=200, + headers={"Content-Type": "application/json"}, + text='[]' + ) + ) + + async with aiohttp.ClientSession() as session: + adguard = AdGuardHome("example.com", session=session) + result = await adguard.rewrite.list() + assert result == [ + {"domain": "*.example.com", "answer": "192.168.1.2"}, + {"domain": "*.example.com", "answer": "192.168.1.2"} + ] + result = await adguard.rewrite.list() + assert result == [] + + +@pytest.mark.asyncio +async def test_add(aresponses): + """Test add new DNS rewrite to AdGuard rewrite""" + async def response_handler(request): + data = await request.json() + assert data == {"domain": "*.example.com", "answer": "192.168.1.2"} + return aresponses.Response(status=200) + + aresponses.add( + "example.com:3000", "/control/rewrite/add", "POST", response_handler + ) + aresponses.add( + "example.com:3000", "/control/rewrite/add", "POST", aresponses.Response(status=200, text="Bad Request") + ) + + async with aiohttp.ClientSession() as session: + adguard = AdGuardHome("example.com", session=session) + await adguard.rewrite.add("*.example.com", "192.168.1.2") + with pytest.raises(AdGuardHomeError): + await adguard.rewrite.add("*.example.com", "192.168.1.2") + + +@pytest.mark.asyncio +async def test_remove(aresponses): + """Test add remove DNS rewrite from AdGuard rewrite""" + + async def response_handler(request): + data = await request.json() + assert data == {"domain": "*.example.com", "answer": "192.168.1.2"} + return aresponses.Response(status=200) + + aresponses.add( + "example.com:3000", "/control/rewrite/delete", "POST", response_handler + ) + aresponses.add( + "example.com:3000", "/control/rewrite/delete", "POST", aresponses.Response(status=200, text="Bad Request") + ) + + async with aiohttp.ClientSession() as session: + adguard = AdGuardHome("example.com", session=session) + await adguard.rewrite.delete("*.example.com", "192.168.1.2") + with pytest.raises(AdGuardHomeError): + await adguard.rewrite.delete("*.example.com", "192.168.1.2") From a4bf244cbe238c07cb67a9cf75af17fdd4af2740 Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Sun, 13 Sep 2020 15:57:16 +1000 Subject: [PATCH 2/9] Fixed some linting issues --- adguardhome/rewrite.py | 2 +- tests/test_rewrite.py | 45 ++++++++++++++++++++++-------------------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/adguardhome/rewrite.py b/adguardhome/rewrite.py index 49b8dcdf..69782493 100644 --- a/adguardhome/rewrite.py +++ b/adguardhome/rewrite.py @@ -1,6 +1,6 @@ """Asynchronous Python client for the AdGuard Home API.""" -from typing import List, Dict +from typing import Dict, List from .exceptions import AdGuardHomeError diff --git a/tests/test_rewrite.py b/tests/test_rewrite.py index d4705949..d79cac6f 100644 --- a/tests/test_rewrite.py +++ b/tests/test_rewrite.py @@ -7,29 +7,27 @@ @pytest.mark.asyncio async def test_list(aresponses): - """Test getting all DNS rewrite rules from AdGuard Home rewrite""" - # async def response_handler(request): - # data = await request.json() - # assert data is None - # return aresponses.Response(status=200) + """Test getting all DNS rewrite rules from AdGuard Home rewrite.""" aresponses.add( - "example.com:3000", "/control/rewrite/list", "GET", + "example.com:3000", + "/control/rewrite/list", + "GET", aresponses.Response( status=200, headers={"Content-Type": "application/json"}, text='[{"domain": "*.example.com", "answer": "192.168.1.2"}, \ - {"domain": "*.example.com", "answer": "192.168.1.2"}]' - ) + {"domain": "*.example.com", "answer": "192.168.1.2"}]', + ), ) aresponses.add( - "example.com:3000", "/control/rewrite/list", "GET", + "example.com:3000", + "/control/rewrite/list", + "GET", aresponses.Response( - status=200, - headers={"Content-Type": "application/json"}, - text='[]' - ) + status=200, headers={"Content-Type": "application/json"}, text="[]" + ), ) async with aiohttp.ClientSession() as session: @@ -37,7 +35,7 @@ async def test_list(aresponses): result = await adguard.rewrite.list() assert result == [ {"domain": "*.example.com", "answer": "192.168.1.2"}, - {"domain": "*.example.com", "answer": "192.168.1.2"} + {"domain": "*.example.com", "answer": "192.168.1.2"}, ] result = await adguard.rewrite.list() assert result == [] @@ -45,17 +43,19 @@ async def test_list(aresponses): @pytest.mark.asyncio async def test_add(aresponses): - """Test add new DNS rewrite to AdGuard rewrite""" + """Test add new DNS rewrite to AdGuard rewrite.""" + async def response_handler(request): data = await request.json() assert data == {"domain": "*.example.com", "answer": "192.168.1.2"} return aresponses.Response(status=200) + aresponses.add("example.com:3000", "/control/rewrite/add", "POST", response_handler) aresponses.add( - "example.com:3000", "/control/rewrite/add", "POST", response_handler - ) - aresponses.add( - "example.com:3000", "/control/rewrite/add", "POST", aresponses.Response(status=200, text="Bad Request") + "example.com:3000", + "/control/rewrite/add", + "POST", + aresponses.Response(status=200, text="Bad Request"), ) async with aiohttp.ClientSession() as session: @@ -67,7 +67,7 @@ async def response_handler(request): @pytest.mark.asyncio async def test_remove(aresponses): - """Test add remove DNS rewrite from AdGuard rewrite""" + """Test add remove DNS rewrite from AdGuard rewrite.""" async def response_handler(request): data = await request.json() @@ -78,7 +78,10 @@ async def response_handler(request): "example.com:3000", "/control/rewrite/delete", "POST", response_handler ) aresponses.add( - "example.com:3000", "/control/rewrite/delete", "POST", aresponses.Response(status=200, text="Bad Request") + "example.com:3000", + "/control/rewrite/delete", + "POST", + aresponses.Response(status=200, text="Bad Request"), ) async with aiohttp.ClientSession() as session: From d64c2c394256ab9455bd76b00e3fa519154e4c4f Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Thu, 20 Nov 2025 09:44:11 +1100 Subject: [PATCH 3/9] Update rewrite module --- src/adguardhome/adguardhome.py | 2 ++ src/adguardhome/rewrite.py | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/adguardhome/adguardhome.py b/src/adguardhome/adguardhome.py index 345f02eb..542b3b13 100644 --- a/src/adguardhome/adguardhome.py +++ b/src/adguardhome/adguardhome.py @@ -14,6 +14,7 @@ from .filtering import AdGuardHomeFiltering from .parental import AdGuardHomeParental from .querylog import AdGuardHomeQueryLog +from .rewrite import AdGuardHomeRewrite from .safebrowsing import AdGuardHomeSafeBrowsing from .safesearch import AdGuardHomeSafeSearch from .stats import AdGuardHomeStats @@ -77,6 +78,7 @@ def __init__( # noqa: PLR0913 self.filtering = AdGuardHomeFiltering(self) self.parental = AdGuardHomeParental(self) self.querylog = AdGuardHomeQueryLog(self) + self.rewrite = AdGuardHomeRewrite(self) self.safebrowsing = AdGuardHomeSafeBrowsing(self) self.safesearch = AdGuardHomeSafeSearch(self) self.stats = AdGuardHomeStats(self) diff --git a/src/adguardhome/rewrite.py b/src/adguardhome/rewrite.py index 69782493..6452635d 100644 --- a/src/adguardhome/rewrite.py +++ b/src/adguardhome/rewrite.py @@ -1,25 +1,30 @@ """Asynchronous Python client for the AdGuard Home API.""" -from typing import Dict, List +from __future__ import annotations + +from dataclasses import dataclass +from typing import Dict, List, TYPE_CHECKING from .exceptions import AdGuardHomeError +if TYPE_CHECKING: + from . import AdGuardHome + +@dataclass class AdGuardHomeRewrite: """Controls AdGuard Home DNS rewrites.""" - def __init__(self, adguard) -> None: - """Initialise object.""" - self._adguard = adguard + adguard: AdGuardHome async def list(self) -> List[Dict[str, str]]: """Return all defined DNS rewrites.""" - response = await self._adguard._request("rewrite/list") + response = await self.adguard.request("rewrite/list") return response async def add(self, domain: str, answer: str) -> None: """Add a new DNS rewrite rule to AdGuard Home.""" - response = await self._adguard._request( + response = await self.adguard.request( "rewrite/add", method="POST", json_data={"domain": domain, "answer": answer} ) if response != "": @@ -29,7 +34,7 @@ async def add(self, domain: str, answer: str) -> None: async def delete(self, domain: str, answer: str) -> None: """Delete a DNS rewrite rule from AdGuard Home.""" - response = await self._adguard._request( + response = await self.adguard.request( "rewrite/delete", method="POST", json_data={"domain": domain, "answer": answer}, From 486fae035d466ef32d77ffeafe4db3efa848a93e Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Thu, 20 Nov 2025 10:04:54 +1100 Subject: [PATCH 4/9] Update tests/test_rewrite.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- tests/test_rewrite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_rewrite.py b/tests/test_rewrite.py index d79cac6f..745f0367 100644 --- a/tests/test_rewrite.py +++ b/tests/test_rewrite.py @@ -67,7 +67,7 @@ async def response_handler(request): @pytest.mark.asyncio async def test_remove(aresponses): - """Test add remove DNS rewrite from AdGuard rewrite.""" + """Test removing DNS rewrite from AdGuard rewrite.""" async def response_handler(request): data = await request.json() From d446d7d0b5a3262aa2eda47191aa723f3bd2a377 Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Thu, 20 Nov 2025 11:11:21 +1100 Subject: [PATCH 5/9] Fix tests and loosen AdGuardHome.request type to reflect that can return a list, dict or raw text response --- src/adguardhome/adguardhome.py | 4 ++-- src/adguardhome/rewrite.py | 38 +++++++++++++++++----------------- tests/test_rewrite.py | 38 ++++++++++++++++------------------ 3 files changed, 39 insertions(+), 41 deletions(-) diff --git a/src/adguardhome/adguardhome.py b/src/adguardhome/adguardhome.py index 542b3b13..38859d7f 100644 --- a/src/adguardhome/adguardhome.py +++ b/src/adguardhome/adguardhome.py @@ -92,7 +92,7 @@ async def request( data: Any | None = None, json_data: dict[str, Any] | None = None, params: Mapping[str, str] | None = None, - ) -> dict[str, Any]: + ) -> Any: """Handle a request to the AdGuard Home instance. Make a request against the AdGuard Home API and handles the response. @@ -109,7 +109,7 @@ async def request( ------- The response from the API. In case the response is a JSON response, the method will return a decoded JSON response as a Python - dictionary. In other cases, it will return the RAW text response. + dictionary or list. In other cases, it will return the RAW text response. Raises: ------ diff --git a/src/adguardhome/rewrite.py b/src/adguardhome/rewrite.py index 6452635d..108145da 100644 --- a/src/adguardhome/rewrite.py +++ b/src/adguardhome/rewrite.py @@ -3,7 +3,7 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Dict, List, TYPE_CHECKING +from typing import TYPE_CHECKING from .exceptions import AdGuardHomeError @@ -17,30 +17,30 @@ class AdGuardHomeRewrite: adguard: AdGuardHome - async def list(self) -> List[Dict[str, str]]: + async def list(self) -> list[dict[str, str]]: """Return all defined DNS rewrites.""" - response = await self.adguard.request("rewrite/list") - return response + return await self.adguard.request("rewrite/list") async def add(self, domain: str, answer: str) -> None: """Add a new DNS rewrite rule to AdGuard Home.""" - response = await self.adguard.request( - "rewrite/add", method="POST", json_data={"domain": domain, "answer": answer} - ) - if response != "": - raise AdGuardHomeError( - "Failed to add DNS rewrite rule to AdGuard Home", {"response": response} + try: + await self.adguard.request( + "rewrite/add", + method="POST", + json_data={"domain": domain, "answer": answer}, ) + except AdGuardHomeError as exception: + msg = "Failed to add DNS rewrite rule to AdGuard Home" + raise AdGuardHomeError(msg) from exception async def delete(self, domain: str, answer: str) -> None: """Delete a DNS rewrite rule from AdGuard Home.""" - response = await self.adguard.request( - "rewrite/delete", - method="POST", - json_data={"domain": domain, "answer": answer}, - ) - if response != "": - raise AdGuardHomeError( - "Failed to delete DNS rewrite rule from AdGuard Home", - {"response": response}, + try: + await self.adguard.request( + "rewrite/delete", + method="POST", + json_data={"domain": domain, "answer": answer}, ) + except AdGuardHomeError as exception: + msg = "Failed to delete DNS rewrite rule from AdGuard Home" + raise AdGuardHomeError(msg) from exception diff --git a/tests/test_rewrite.py b/tests/test_rewrite.py index 745f0367..9e8fcb4b 100644 --- a/tests/test_rewrite.py +++ b/tests/test_rewrite.py @@ -1,14 +1,16 @@ """Tests for `adguardhome.rewrite`.""" + import aiohttp import pytest +from aresponses import ResponsesMockServer + from adguardhome import AdGuardHome from adguardhome.exceptions import AdGuardHomeError @pytest.mark.asyncio -async def test_list(aresponses): +async def test_list(aresponses: ResponsesMockServer) -> None: """Test getting all DNS rewrite rules from AdGuard Home rewrite.""" - aresponses.add( "example.com:3000", "/control/rewrite/list", @@ -42,20 +44,19 @@ async def test_list(aresponses): @pytest.mark.asyncio -async def test_add(aresponses): +async def test_add(aresponses: ResponsesMockServer) -> None: """Test add new DNS rewrite to AdGuard rewrite.""" - - async def response_handler(request): - data = await request.json() - assert data == {"domain": "*.example.com", "answer": "192.168.1.2"} - return aresponses.Response(status=200) - - aresponses.add("example.com:3000", "/control/rewrite/add", "POST", response_handler) aresponses.add( "example.com:3000", "/control/rewrite/add", "POST", - aresponses.Response(status=200, text="Bad Request"), + aresponses.Response(status=200), + ) + aresponses.add( + "example.com:3000", + "/control/rewrite/add", + "POST", + aresponses.Response(status=400, text="Bad Request"), ) async with aiohttp.ClientSession() as session: @@ -66,22 +67,19 @@ async def response_handler(request): @pytest.mark.asyncio -async def test_remove(aresponses): +async def test_remove(aresponses: ResponsesMockServer) -> None: """Test removing DNS rewrite from AdGuard rewrite.""" - - async def response_handler(request): - data = await request.json() - assert data == {"domain": "*.example.com", "answer": "192.168.1.2"} - return aresponses.Response(status=200) - aresponses.add( - "example.com:3000", "/control/rewrite/delete", "POST", response_handler + "example.com:3000", + "/control/rewrite/delete", + "POST", + aresponses.Response(status=200), ) aresponses.add( "example.com:3000", "/control/rewrite/delete", "POST", - aresponses.Response(status=200, text="Bad Request"), + aresponses.Response(status=400, text="Bad Request"), ) async with aiohttp.ClientSession() as session: From 7642e006be88d1c8a7d9651f681fd40bad3c44e0 Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Thu, 20 Nov 2025 11:20:24 +1100 Subject: [PATCH 6/9] String concat fix --- tests/test_rewrite.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_rewrite.py b/tests/test_rewrite.py index 9e8fcb4b..57aaf3ce 100644 --- a/tests/test_rewrite.py +++ b/tests/test_rewrite.py @@ -18,8 +18,8 @@ async def test_list(aresponses: ResponsesMockServer) -> None: aresponses.Response( status=200, headers={"Content-Type": "application/json"}, - text='[{"domain": "*.example.com", "answer": "192.168.1.2"}, \ - {"domain": "*.example.com", "answer": "192.168.1.2"}]', + text='[{"domain": "*.example.com", "answer": "192.168.1.2"},' + '{"domain": "*.example.com", "answer": "192.168.1.2"}]', ), ) From cb2091dd67616bda6d544f276ccbfc1f3aafe0ab Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Thu, 20 Nov 2025 11:28:13 +1100 Subject: [PATCH 7/9] Add proper doc strings --- src/adguardhome/rewrite.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/adguardhome/rewrite.py b/src/adguardhome/rewrite.py index 108145da..b33c99e8 100644 --- a/src/adguardhome/rewrite.py +++ b/src/adguardhome/rewrite.py @@ -18,11 +18,24 @@ class AdGuardHomeRewrite: adguard: AdGuardHome async def list(self) -> list[dict[str, str]]: - """Return all defined DNS rewrites.""" + """Return all defined DNS rewrites. + + Returns: + A list of all defined DNS rewrites in the AdGuardHome instance. + Each rewrite is represented as a dictionary with 'domain' and 'answer' keys. + + """ return await self.adguard.request("rewrite/list") async def add(self, domain: str, answer: str) -> None: - """Add a new DNS rewrite rule to AdGuard Home.""" + """Add a new DNS rewrite rule to AdGuard Home. + + Args: + ---- + domain: The domain name or wildcard for the DNS rewrite rule. + answer: The new domain or ip address associated with the DNS rewrite rule. + + """ try: await self.adguard.request( "rewrite/add", @@ -34,7 +47,15 @@ async def add(self, domain: str, answer: str) -> None: raise AdGuardHomeError(msg) from exception async def delete(self, domain: str, answer: str) -> None: - """Delete a DNS rewrite rule from AdGuard Home.""" + """Delete a DNS rewrite rule from AdGuard Home. + + Args: + ---- + domain: The domain name or wildcard of the DNS rewrite rule to delete. + answer: The new domain or ip address associated with the DNS rewrite rule + to delete. + + """ try: await self.adguard.request( "rewrite/delete", From 44602f6e49bfae9450e2f33b23d466dcaa41a628 Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Thu, 20 Nov 2025 11:40:11 +1100 Subject: [PATCH 8/9] Improve docstrings and tests --- src/adguardhome/rewrite.py | 17 ++++++++++++----- tests/test_rewrite.py | 21 +++++++++++++++------ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/adguardhome/rewrite.py b/src/adguardhome/rewrite.py index b33c99e8..9f6ce9da 100644 --- a/src/adguardhome/rewrite.py +++ b/src/adguardhome/rewrite.py @@ -32,8 +32,12 @@ async def add(self, domain: str, answer: str) -> None: Args: ---- - domain: The domain name or wildcard for the DNS rewrite rule. - answer: The new domain or ip address associated with the DNS rewrite rule. + domain: The domain pattern to rewrite (e.g., "*.example.com"). + answer: The IP address or domain to rewrite to. + + Raises: + ------ + AdGuardHomeError: Failed adding the DNS rewrite rule. """ try: @@ -51,9 +55,12 @@ async def delete(self, domain: str, answer: str) -> None: Args: ---- - domain: The domain name or wildcard of the DNS rewrite rule to delete. - answer: The new domain or ip address associated with the DNS rewrite rule - to delete. + domain: The domain pattern of the rewrite rule to delete. + answer: The IP address or domain of the rewrite rule to delete. + + Raises: + ------ + AdGuardHomeError: Failed to delete DNS rewrite rule. """ try: diff --git a/tests/test_rewrite.py b/tests/test_rewrite.py index 57aaf3ce..cae78ab5 100644 --- a/tests/test_rewrite.py +++ b/tests/test_rewrite.py @@ -2,13 +2,12 @@ import aiohttp import pytest -from aresponses import ResponsesMockServer +from aresponses import Response, ResponsesMockServer from adguardhome import AdGuardHome from adguardhome.exceptions import AdGuardHomeError -@pytest.mark.asyncio async def test_list(aresponses: ResponsesMockServer) -> None: """Test getting all DNS rewrite rules from AdGuard Home rewrite.""" aresponses.add( @@ -43,14 +42,19 @@ async def test_list(aresponses: ResponsesMockServer) -> None: assert result == [] -@pytest.mark.asyncio async def test_add(aresponses: ResponsesMockServer) -> None: """Test add new DNS rewrite to AdGuard rewrite.""" + + async def response_handler(request: aiohttp.ClientResponse) -> Response: + data = await request.json() + assert data == {"domain": "*.example.com", "answer": "192.168.1.2"} + return aresponses.Response(status=200) + aresponses.add( "example.com:3000", "/control/rewrite/add", "POST", - aresponses.Response(status=200), + response_handler, ) aresponses.add( "example.com:3000", @@ -66,14 +70,19 @@ async def test_add(aresponses: ResponsesMockServer) -> None: await adguard.rewrite.add("*.example.com", "192.168.1.2") -@pytest.mark.asyncio async def test_remove(aresponses: ResponsesMockServer) -> None: """Test removing DNS rewrite from AdGuard rewrite.""" + + async def response_handler(request: aiohttp.ClientResponse) -> Response: + data = await request.json() + assert data == {"domain": "*.example.com", "answer": "192.168.1.2"} + return aresponses.Response(status=200) + aresponses.add( "example.com:3000", "/control/rewrite/delete", "POST", - aresponses.Response(status=200), + response_handler, ) aresponses.add( "example.com:3000", From 49a5b10bb80b8c0fbe06880259f95c8ca351588a Mon Sep 17 00:00:00 2001 From: Finn Hartshorn Date: Thu, 20 Nov 2025 11:47:53 +1100 Subject: [PATCH 9/9] Update tests/test_rewrite.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- tests/test_rewrite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_rewrite.py b/tests/test_rewrite.py index cae78ab5..3a70119a 100644 --- a/tests/test_rewrite.py +++ b/tests/test_rewrite.py @@ -71,7 +71,7 @@ async def response_handler(request: aiohttp.ClientResponse) -> Response: async def test_remove(aresponses: ResponsesMockServer) -> None: - """Test removing DNS rewrite from AdGuard rewrite.""" + """Test deleting DNS rewrite from AdGuard Home rewrite.""" async def response_handler(request: aiohttp.ClientResponse) -> Response: data = await request.json()