Skip to content

Commit 97bbf76

Browse files
committed
chore(v3): add basic verifier tests
These tests are purely meant to detect any issues with the FFI and changes in any of the verifier methods. The compatibility suite will ensure that the verifier is functioning correctly. Signed-off-by: JP-Ellis <josh@jpellis.me>
1 parent 00d6fbb commit 97bbf76

File tree

2 files changed

+184
-0
lines changed

2 files changed

+184
-0
lines changed

tests/v3/assets/pacts/basic.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"consumer": { "name": "Example Consumer" },
3+
"provider": { "name": "Example Producer" },
4+
"metadata": {
5+
"pactSpecification": { "version": "2.0" }
6+
},
7+
"interactions": []
8+
}

tests/v3/test_verifier.py

+176
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
"""
2+
Unit tests for the pact.v3.verifier module.
3+
4+
These tests perform only very basic checks to ensure that the FFI module is
5+
working correctly. They are not intended to test the Verifier API much, as
6+
that is handled by the compatibility suite.
7+
"""
8+
9+
import re
10+
from pathlib import Path
11+
12+
import pytest
13+
14+
from pact.v3.verifier import Verifier
15+
16+
ASSETS_DIR = Path(__file__).parent / "assets"
17+
18+
19+
@pytest.fixture()
20+
def verifier() -> Verifier:
21+
return Verifier()
22+
23+
24+
def test_str_repr(verifier: Verifier) -> None:
25+
assert str(verifier) == "Verifier"
26+
assert re.match(r"<Verifier: VerifierHandle\(0x[0-9a-f]+\)>", repr(verifier))
27+
28+
29+
def test_set_provider_info(verifier: Verifier) -> None:
30+
name = "test_provider"
31+
url = "http://localhost:8888/api"
32+
verifier.set_info(name, url=url)
33+
34+
scheme = "http"
35+
host = "localhost"
36+
port = 8888
37+
path = "/api"
38+
verifier.set_info(
39+
name,
40+
scheme=scheme,
41+
host=host,
42+
port=port,
43+
path=path,
44+
)
45+
46+
47+
def test_add_provider_transport(verifier: Verifier) -> None:
48+
# HTTP
49+
verifier.add_transport(
50+
protocol="http",
51+
port=1234,
52+
path="/api",
53+
scheme="http",
54+
)
55+
56+
# HTTPS
57+
verifier.add_transport(
58+
protocol="http",
59+
port=4321,
60+
path="/api",
61+
scheme="https",
62+
)
63+
64+
# message
65+
verifier.add_transport(
66+
protocol="message",
67+
)
68+
69+
# gRPC
70+
verifier.add_transport(
71+
protocol="grpc",
72+
port=1234,
73+
)
74+
75+
76+
def test_set_filter(verifier: Verifier) -> None:
77+
verifier.filter("test_filter")
78+
verifier.filter("test_filter", state="test_value")
79+
verifier.filter("no_state", no_state=True)
80+
81+
82+
def test_set_state(verifier: Verifier) -> None:
83+
verifier.set_state("test_state")
84+
verifier.set_state("test_state", teardown=True)
85+
verifier.set_state("test_state", body=True)
86+
87+
88+
def test_disable_ssl_verification(verifier: Verifier) -> None:
89+
verifier.disable_ssl_verification()
90+
91+
92+
def test_set_request_timeout(verifier: Verifier) -> None:
93+
verifier.set_request_timeout(1000)
94+
95+
96+
def test_set_coloured_output(verifier: Verifier) -> None:
97+
verifier.set_coloured_output(enabled=True)
98+
verifier.set_coloured_output(enabled=False)
99+
100+
101+
def test_set_error_on_empty_pact(verifier: Verifier) -> None:
102+
verifier.set_error_on_empty_pact(enabled=True)
103+
verifier.set_error_on_empty_pact(enabled=False)
104+
105+
106+
def test_set_publish_options(verifier: Verifier) -> None:
107+
verifier.set_publish_options(
108+
version="1.0.0",
109+
url="http://localhost:8080/build/1234",
110+
branch="main",
111+
tags=["main", "test", "prod"],
112+
)
113+
114+
115+
def test_filter_consumers(verifier: Verifier) -> None:
116+
verifier.filter_consumers("consumer1")
117+
verifier.filter_consumers("consumer1", "consumer2")
118+
119+
120+
def test_add_custom_header(verifier: Verifier) -> None:
121+
verifier.add_custom_header("Authorization", "Bearer: 1234")
122+
123+
124+
def test_add_custom_headers(verifier: Verifier) -> None:
125+
verifier.add_custom_headers({
126+
"Authorization": "Bearer: 1234",
127+
"Content-Type": "application/json",
128+
})
129+
130+
131+
def test_add_source(verifier: Verifier) -> None:
132+
# URL
133+
verifier.add_source("http://localhost:8080/pact.json")
134+
135+
# File
136+
verifier.add_source(ASSETS_DIR / "pacts" / "basic.json")
137+
138+
# Directory
139+
verifier.add_source(ASSETS_DIR / "pacts")
140+
141+
142+
def test_broker_source(verifier: Verifier) -> None:
143+
verifier.broker_source("http://localhost:8080")
144+
verifier.broker_source(
145+
"http://localhost:8080",
146+
username="user",
147+
password="password", # noqa: S106
148+
)
149+
verifier.broker_source(
150+
"http://localhost:8080",
151+
token="1234", # noqa: S106
152+
)
153+
154+
155+
def test_broker_source_selector(verifier: Verifier) -> None:
156+
(
157+
verifier.broker_source("http://localhost:8080", selector=True)
158+
.consumer_tags("main", "test")
159+
.provider_tags("main", "test")
160+
.consumer_versions("1.2.3")
161+
.build()
162+
)
163+
164+
165+
def test_verify(verifier: Verifier) -> None:
166+
verifier.verify()
167+
168+
169+
def test_logs(verifier: Verifier) -> None:
170+
logs = verifier.logs
171+
assert logs == ""
172+
173+
174+
def test_output(verifier: Verifier) -> None:
175+
output = verifier.output()
176+
assert output == ""

0 commit comments

Comments
 (0)