Skip to content

Commit 3404b17

Browse files
Convert some tests
1 parent 0a1ba3a commit 3404b17

File tree

5 files changed

+49
-27
lines changed

5 files changed

+49
-27
lines changed

dyndns/dns.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import dns.message
1313
import dns.name
1414
import dns.query
15+
import dns.rdatatype
1516
import dns.resolver
1617
import dns.rrset
1718
import dns.tsig

tests/conftest.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
import pytest
66
from flask import Flask
7-
from flask.testing import FlaskClient, FlaskCliRunner
7+
from flask.testing import FlaskClient
88

99
from dyndns.dns import DnsZone
1010
from dyndns.environment import ConfiguredEnvironment
11+
from dyndns.types import RecordType
1112
from dyndns.webapp import create_app
1213

1314

@@ -29,15 +30,36 @@ def app(env: ConfiguredEnvironment) -> Generator[Flask, Any, None]:
2930
"TESTING": True,
3031
}
3132
)
32-
3333
yield app
3434

3535

3636
@pytest.fixture()
37-
def client(app: Flask) -> FlaskClient:
37+
def flask_client(app: Flask) -> FlaskClient:
3838
return app.test_client()
3939

4040

41+
class TestClient:
42+
__test__ = False
43+
44+
client: FlaskClient
45+
46+
dns: DnsZone
47+
48+
def __init__(self, client: FlaskClient, dns: DnsZone):
49+
self.client = client
50+
self.dns = dns
51+
52+
def get(self, path: str) -> str:
53+
response = self.client.get(path)
54+
return response.data.decode()
55+
56+
def add_record(self, name: str, record_type: RecordType, content: str) -> None:
57+
self.dns.add_record(name, record_type, content)
58+
59+
def delete_record(self, name: str, record_type: RecordType) -> None:
60+
self.dns.delete_record(name, record_type)
61+
62+
4163
@pytest.fixture()
42-
def runner(app: Flask) -> FlaskCliRunner:
43-
return app.test_cli_runner()
64+
def client(flask_client: FlaskClient, dns: DnsZone) -> TestClient:
65+
return TestClient(flask_client, dns)

tests/files/dyndnsX.dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
secret: 12345678
2+
secret: '12345678'
33
nameserver: 127.0.0.1
44
port: 55553
55
dyndns_domain: dyndns1.dev.
File renamed without changes.

tests/test_integration.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from dyndns.environment import ConfiguredEnvironment
1010
from dyndns.webapp import create_app
1111
from tests import _helper
12+
from tests.conftest import TestClient
1213

1314

1415
class TestIntegration:
@@ -80,29 +81,27 @@ def test_call_secret_fqdn_ip1_ip2(self, update: mock.Mock) -> None:
8081
)
8182

8283

83-
class TestUpdateByPath(TestIntegration):
84-
"""Test the path ``update-by-path`` of the Flask web app."""
85-
84+
class TestUpdateByPath:
8685
@staticmethod
8786
def _url(path: str) -> str:
88-
return f"/update-by-path/12345678/www.example.com/{path}"
89-
90-
@pytest.mark.skip
91-
def test_ipv4_update(self) -> None:
92-
self.get(self._url("1.2.3.5"), [["1.2.3.4"], ["1.2.3.5"]])
87+
return f"/update-by-path/12345678/test.dyndns1.dev/{path}"
9388

94-
self.mock_update.delete.assert_has_calls(
95-
[
96-
mock.call("www.example.com.", "A"),
97-
mock.call("www.example.com.", "AAAA"),
98-
]
99-
)
100-
self.mock_update.add.assert_called_with("www.example.com.", 300, "A", "1.2.3.5")
89+
def test_ipv4_update(self, client: TestClient) -> None:
90+
client.delete_record("test", "A")
91+
client.add_record("test", "A", "1.2.3.4")
10192
assert (
102-
self.data == "UPDATED: fqdn: www.example.com. old_ip: 1.2.3.4 new_ip: "
103-
"1.2.3.5\n"
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"
10495
)
10596

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+
106105
@pytest.mark.skip
107106
def test_ipv6_update(self) -> None:
108107
self.get(self._url("1::3"), [["1::2"], ["1::3"]])
@@ -254,12 +253,12 @@ def test_deletion(self) -> None:
254253

255254

256255
class TestMultiplePaths(TestIntegration):
257-
def test_home(self, client: FlaskClient) -> None:
258-
response = client.get("/")
256+
def test_home(self, flask_client: FlaskClient) -> None:
257+
response = flask_client.get("/")
259258
assert b"dyndns" in response.data
260259

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

0 commit comments

Comments
 (0)