Skip to content

Commit 2dafd2d

Browse files
Convert some tests
1 parent 3404b17 commit 2dafd2d

File tree

6 files changed

+60
-66
lines changed

6 files changed

+60
-66
lines changed

dyndns/ipaddresses.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def validate(
2020
raise IpAddressesError(f'IP version "{ip_version}" does not match.')
2121
return str(address), address.version
2222
except ValueError:
23-
raise IpAddressesError(f'Invalid ip address "{address}"')
23+
raise IpAddressesError(f"Invalid IP address '{address}'.")
2424

2525

2626
def format_attr(ip_version: IpVersion) -> str:

dyndns/names.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def __init__(
7575
zone_name = split[1]
7676
else:
7777
raise DnsNameError(
78-
f'The fully qualified domain name "{fqdn}" could not be split into a record and a zone name.'
78+
f"The fully qualified domain name '{fqdn}' could not be split into a record and a zone name."
7979
)
8080

8181
if not fqdn and zone_name and record_name:

dyndns/webapp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def handle_exception(e: Exception) -> tuple[str, int]:
4949

5050
@app.route("/")
5151
def home() -> str:
52-
return "dyndns"
52+
return "dyndns\n"
5353

5454
@app.route("/check")
5555
def check() -> str:

tests/conftest.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import pytest
66
from flask import Flask
77
from flask.testing import FlaskClient
8+
from werkzeug.test import TestResponse
89

910
from dyndns.dns import DnsZone
1011
from dyndns.environment import ConfiguredEnvironment
@@ -45,20 +46,27 @@ class TestClient:
4546

4647
dns: DnsZone
4748

48-
def __init__(self, client: FlaskClient, dns: DnsZone):
49+
def __init__(self, client: FlaskClient, dns: DnsZone) -> None:
4950
self.client = client
5051
self.dns = dns
52+
self.dns.delete_records("test")
5153

5254
def get(self, path: str) -> str:
53-
response = self.client.get(path)
55+
response: TestResponse = self.client.get(path)
5456
return response.data.decode()
5557

58+
def get_response(self, path: str) -> TestResponse:
59+
return self.client.get(path)
60+
5661
def add_record(self, name: str, record_type: RecordType, content: str) -> None:
5762
self.dns.add_record(name, record_type, content)
5863

5964
def delete_record(self, name: str, record_type: RecordType) -> None:
6065
self.dns.delete_record(name, record_type)
6166

67+
def read_record(self, name: str, record_type: RecordType) -> str | None:
68+
return self.dns.read_record(name, record_type)
69+
6270

6371
@pytest.fixture()
6472
def client(flask_client: FlaskClient, dns: DnsZone) -> TestClient:

tests/test_integration.py

Lines changed: 45 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -83,80 +83,68 @@ def test_call_secret_fqdn_ip1_ip2(self, update: mock.Mock) -> None:
8383

8484
class TestUpdateByPath:
8585
@staticmethod
86-
def _url(path: str) -> str:
86+
def url(path: str) -> str:
8787
return f"/update-by-path/12345678/test.dyndns1.dev/{path}"
8888

8989
def test_ipv4_update(self, client: TestClient) -> None:
90-
client.delete_record("test", "A")
9190
client.add_record("test", "A", "1.2.3.4")
9291
assert (
93-
client.get(self._url("1.2.3.5"))
94-
== "UPDATED: test.dyndns1.dev. A 1.2.3.4 -> 1.2.3.5\nUNCHANGED: test.dyndns1.dev. AAAA None\n"
92+
client.get(self.url("1.2.3.5"))
93+
== "UPDATED: test.dyndns1.dev. A 1.2.3.4 -> 1.2.3.5\n"
94+
+ "UNCHANGED: test.dyndns1.dev. AAAA None\n"
9595
)
96+
assert client.read_record("test", "A") == "1.2.3.5"
9697

97-
98-
class TestUpdateByPathOld(TestIntegration):
99-
"""Test the path ``update-by-path`` of the Flask web app."""
100-
101-
@staticmethod
102-
def _url(path: str) -> str:
103-
return f"/update-by-path/12345678/www.dyndns1.dev/{path}"
104-
105-
@pytest.mark.skip
106-
def test_ipv6_update(self) -> None:
107-
self.get(self._url("1::3"), [["1::2"], ["1::3"]])
108-
self.mock_update.delete.assert_called_with("www.example.com.", "AAAA")
109-
self.mock_update.add.assert_called_with("www.example.com.", 300, "AAAA", "1::3")
98+
def test_ipv6_update(self, client: TestClient) -> None:
99+
client.add_record("test", "AAAA", "1::2")
110100
assert (
111-
self.data == "UPDATED: fqdn: www.example.com. old_ip: 1::2 new_ip: 1::3\n"
101+
client.get(self.url("1::3"))
102+
== "UNCHANGED: test.dyndns1.dev. A None\n"
103+
+ "UPDATED: test.dyndns1.dev. AAAA 1::2 -> 1::3\n"
112104
)
105+
assert client.read_record("test", "AAAA") == "1::3"
113106

114-
@pytest.mark.skip
115-
def test_ipv4_ipv6_update(self) -> None:
116-
self.get(
117-
self._url("1.2.3.5/1::3"), [["1.2.3.4"], ["1.2.3.5"], ["1::2"], ["1::3"]]
118-
)
119-
self.mock_update.delete.assert_called_with("www.example.com.", "AAAA")
120-
self.mock_update.add.assert_called_with("www.example.com.", 300, "AAAA", "1::3")
107+
def test_ipv4_ipv6_update(self, client: TestClient) -> None:
108+
client.add_record("test", "A", "1.2.3.4")
109+
client.add_record("test", "AAAA", "1::2")
121110
assert (
122-
self.data
123-
== "UPDATED: fqdn: www.example.com. old_ip: 1.2.3.4 new_ip: 1.2.3.5\n"
124-
"UPDATED: fqdn: www.example.com. old_ip: 1::2 new_ip: 1::3\n"
111+
client.get(self.url("1.2.3.5/1::3"))
112+
== "UPDATED: test.dyndns1.dev. A 1.2.3.4 -> 1.2.3.5\n"
113+
+ "UPDATED: test.dyndns1.dev. AAAA 1::2 -> 1::3\n"
125114
)
115+
assert client.read_record("test", "A") == "1.2.3.5"
116+
assert client.read_record("test", "AAAA") == "1::3"
126117

127-
@pytest.mark.skip
128-
def test_ipv6_ipv4_update(self) -> None:
129-
self.get(
130-
self._url("1::3/1.2.3.5"), [["1.2.3.4"], ["1.2.3.5"], ["1::2"], ["1::3"]]
118+
def test_wrong_secret(self, client: TestClient) -> None:
119+
response = client.get_response(
120+
"/update-by-path/wrong-secret/test.example.com/1.2.3.4"
131121
)
132-
self.mock_update.delete.assert_called_with("www.example.com.", "AAAA")
133-
self.mock_update.add.assert_called_with("www.example.com.", 300, "AAAA", "1::3")
122+
assert response.status_code == 456
134123
assert (
135-
self.data
136-
== "UPDATED: fqdn: www.example.com. old_ip: 1.2.3.4 new_ip: 1.2.3.5\n"
137-
"UPDATED: fqdn: www.example.com. old_ip: 1::2 new_ip: 1::3\n"
124+
response.data.decode()
125+
== "PARAMETER_ERROR: You specified a wrong secret key.\n"
138126
)
139127

140-
def test_wrong_secret(self) -> None:
141-
self.get("/update-by-path/wrong-secret/test.example.com/1.2.3.4")
142-
assert self.response.status_code == 456
128+
assert client.read_record("test", "A") is None
129+
assert client.read_record("test", "AAAA") is None
130+
131+
def test_wrong_fqdn(self, client: TestClient) -> None:
132+
response = client.get_response(
133+
"/update-by-path/12345678/test.wrong-domain.de/1.2.3.4"
134+
)
135+
assert response.status_code == 453
143136
assert (
144-
b"PARAMETER_ERROR: You specified a wrong secret key." in self.response.data
137+
response.data.decode()
138+
== "DNS_NAME_ERROR: The fully qualified domain name 'test.wrong-domain.de.' could not be split into a record and a zone name.\n"
145139
)
146140

147-
def test_wrong_fqdn(self) -> None:
148-
self.get("/update-by-path/12345678/test.wrong-domain.de/1.2.3.4")
149-
assert self.response.status_code == 453
141+
def test_wrong_ip(self, client: TestClient) -> None:
142+
response = client.get_response(self.url("1.2.3"))
143+
assert response.status_code == 454
150144
assert (
151-
b'DNS_NAME_ERROR: The fully qualified domain name "test.wrong-domain.de." could not be split into a record and a zone name.\n'
152-
in self.response.data
145+
response.data.decode() == "IP_ADDRESS_ERROR: Invalid IP address '1.2.3'.\n"
153146
)
154147

155-
def test_wrong_ip(self) -> None:
156-
self.get("/update-by-path/12345678/test.example.com/1.2.3")
157-
assert self.response.status_code == 454
158-
assert b'IP_ADDRESS_ERROR: Invalid ip address "1.2.3"\n' in self.response.data
159-
160148

161149
class TestUpdateByQuery(TestIntegration):
162150
"""Test the path ``update-by-query`` of the Flask web app."""
@@ -224,7 +212,7 @@ def test_ip_1_ip_2_update(self) -> None:
224212

225213
def test_invalid_ipv4(self) -> None:
226214
self.get(self._url("ipv4=1.2.3.4.5"))
227-
assert self.data == 'IP_ADDRESS_ERROR: Invalid ip address "1.2.3.4.5"\n'
215+
assert self.data == "IP_ADDRESS_ERROR: Invalid IP address '1.2.3.4.5'.\n"
228216

229217
@pytest.mark.skip
230218
def test_ttl(self) -> None:
@@ -252,13 +240,11 @@ def test_deletion(self) -> None:
252240
assert self.data == 'UPDATED: Deleted "www.example.com.".\n'
253241

254242

255-
class TestMultiplePaths(TestIntegration):
256-
def test_home(self, flask_client: FlaskClient) -> None:
257-
response = flask_client.get("/")
258-
assert b"dyndns" in response.data
243+
class TestMultiplePaths:
244+
def test_home(self, client: TestClient) -> None:
245+
assert client.get("/") == "dyndns\n"
259246

260-
def test_check(self, flask_client: FlaskClient) -> None:
261-
response = flask_client.get("/check")
262-
content = response.data.decode()
247+
def test_check(self, client: TestClient) -> None:
248+
content: str = client.get("/check")
263249
assert "could be updated on the zone 'dyndns1.dev.'" in content
264250
assert "could be updated on the zone 'dyndns2.dev.'" in content

tests/test_ipaddresses.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ def assert_raises_msg(self, kwargs: IpAddressContainerKwargs, message: str) -> N
1919
IpAddressContainer(**kwargs)
2020

2121
def test_invalid_ipv4(self) -> None:
22-
self.assert_raises_msg({"ipv4": "test"}, 'Invalid ip address "test"')
22+
self.assert_raises_msg({"ipv4": "test"}, "Invalid IP address 'test'.")
2323

2424
def test_invalid_ipv4_version(self) -> None:
2525
self.assert_raises_msg({"ipv4": "1::2"}, 'IP version "4" does not match.')
2626

2727
def test_invalid_ipv6(self) -> None:
28-
self.assert_raises_msg({"ipv6": "test"}, 'Invalid ip address "test"')
28+
self.assert_raises_msg({"ipv6": "test"}, "Invalid IP address 'test'.")
2929

3030
def test_invalid_ipv6_version(self) -> None:
3131
self.assert_raises_msg({"ipv6": "1.2.3.4"}, 'IP version "6" does not match.')

0 commit comments

Comments
 (0)