testcontainers-mockserver 7.2.0__tar.gz → 7.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testcontainers-mockserver
3
- Version: 7.2.0
3
+ Version: 7.4.0
4
4
  Summary: Testcontainers module for MockServer
5
5
  Author-email: James D Bloom <jamesdbloom@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -21,6 +21,7 @@ Classifier: Topic :: Software Development :: Testing
21
21
  Requires-Python: >=3.9
22
22
  Description-Content-Type: text/markdown
23
23
  Requires-Dist: testcontainers>=4.0.0
24
+ Requires-Dist: mockserver-client>=5.15
24
25
  Provides-Extra: test
25
26
  Requires-Dist: pytest>=7.0; extra == "test"
26
27
  Requires-Dist: requests>=2.20; extra == "test"
@@ -62,13 +63,14 @@ with MockServerContainer() as mockserver:
62
63
 
63
64
  ### `MockServerContainer(image=..., port=1080)`
64
65
 
65
- - `image` — Docker image to use. Defaults to `mockserver/mockserver:mockserver-7.1.0`.
66
+ - `image` — Docker image to use. Defaults to `mockserver/mockserver:mockserver-7.3.0`.
66
67
  - `port` — Container port MockServer listens on. Defaults to `1080`.
67
68
 
68
69
  ### Methods
69
70
 
70
71
  | Method | Returns | Description |
71
72
  |--------|---------|-------------|
73
+ | `get_client()` | `MockServerClient` | A cached, ready-wired `mockserver` client pointed at the mapped host/port |
72
74
  | `get_url()` | `str` | HTTP base URL (e.g. `http://localhost:49152`) |
73
75
  | `get_secure_url()` | `str` | HTTPS base URL (same port, `https://` scheme) |
74
76
  | `get_host()` | `str` | Mapped host IP |
@@ -35,13 +35,14 @@ with MockServerContainer() as mockserver:
35
35
 
36
36
  ### `MockServerContainer(image=..., port=1080)`
37
37
 
38
- - `image` — Docker image to use. Defaults to `mockserver/mockserver:mockserver-7.1.0`.
38
+ - `image` — Docker image to use. Defaults to `mockserver/mockserver:mockserver-7.3.0`.
39
39
  - `port` — Container port MockServer listens on. Defaults to `1080`.
40
40
 
41
41
  ### Methods
42
42
 
43
43
  | Method | Returns | Description |
44
44
  |--------|---------|-------------|
45
+ | `get_client()` | `MockServerClient` | A cached, ready-wired `mockserver` client pointed at the mapped host/port |
45
46
  | `get_url()` | `str` | HTTP base URL (e.g. `http://localhost:49152`) |
46
47
  | `get_secure_url()` | `str` | HTTPS base URL (same port, `https://` scheme) |
47
48
  | `get_host()` | `str` | Mapped host IP |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "testcontainers-mockserver"
7
- version = "7.2.0"
7
+ version = "7.4.0"
8
8
  description = "Testcontainers module for MockServer"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -27,6 +27,7 @@ classifiers = [
27
27
  ]
28
28
  dependencies = [
29
29
  "testcontainers>=4.0.0",
30
+ "mockserver-client>=5.15",
30
31
  ]
31
32
 
32
33
  [project.optional-dependencies]
@@ -14,7 +14,13 @@ Example::
14
14
  # Use requests or any HTTP client to interact with MockServer at this URL.
15
15
  """
16
16
 
17
+ from importlib import metadata
18
+
17
19
  from testcontainers_mockserver.container import MockServerContainer
18
20
 
19
21
  __all__ = ["MockServerContainer"]
20
- __version__ = "7.0.0"
22
+
23
+ try:
24
+ __version__ = metadata.version("testcontainers-mockserver")
25
+ except metadata.PackageNotFoundError: # pragma: no cover - source tree without install
26
+ __version__ = "0.0.0"
@@ -8,7 +8,7 @@ methods for the mapped host, port, and URL.
8
8
 
9
9
  from __future__ import annotations
10
10
 
11
- from typing import Optional
11
+ from importlib import metadata
12
12
 
13
13
  from testcontainers.core.container import DockerContainer
14
14
  from testcontainers.core.wait_strategies import HttpWaitStrategy
@@ -20,8 +20,23 @@ MOCKSERVER_PORT = 1080
20
20
  #: Default Docker image name for MockServer.
21
21
  _IMAGE_NAME = "mockserver/mockserver"
22
22
 
23
- #: Default image tag, pinned to the current MockServer release version.
24
- _DEFAULT_TAG = "mockserver-7.0.0"
23
+
24
+ def _default_tag() -> str:
25
+ """Derive the default image tag from the installed MockServer client version.
26
+
27
+ Mirrors the Java module: the tag is ``mockserver-<client-version>`` so the
28
+ container image stays in lockstep with the ``mockserver-client`` package.
29
+ Falls back to ``latest`` when the client version cannot be resolved (e.g. the
30
+ client is not installed), matching the Java ``:latest`` fallback.
31
+ """
32
+ try:
33
+ return "mockserver-" + metadata.version("mockserver-client")
34
+ except metadata.PackageNotFoundError:
35
+ return "latest"
36
+
37
+
38
+ #: Default image tag, derived from the installed MockServer client version.
39
+ _DEFAULT_TAG = _default_tag()
25
40
 
26
41
 
27
42
  class MockServerContainer(DockerContainer):
@@ -58,6 +73,7 @@ class MockServerContainer(DockerContainer):
58
73
  ) -> None:
59
74
  super().__init__(image=image, **kwargs)
60
75
  self._port = port
76
+ self._client = None
61
77
  self.with_exposed_ports(self._port)
62
78
  self.with_env("SERVER_PORT", str(self._port))
63
79
 
@@ -100,6 +116,21 @@ class MockServerContainer(DockerContainer):
100
116
  """Return the HTTPS base URL for MockServer (same port, different scheme)."""
101
117
  return f"https://{self.get_host()}:{self.get_port()}"
102
118
 
119
+ def get_client(self):
120
+ """Return a ``MockServerClient`` connected to this container.
121
+
122
+ The client is created lazily on first call and cached. Mirrors the Java
123
+ module's ``getClient()``. Requires the ``mockserver-client`` package,
124
+ which is declared as a dependency of this module.
125
+
126
+ :returns: a ``mockserver.MockServerClient`` pointed at the mapped host/port
127
+ """
128
+ if self._client is None:
129
+ from mockserver import MockServerClient
130
+
131
+ self._client = MockServerClient(self.get_host(), self.get_port())
132
+ return self._client
133
+
103
134
  # ------------------------------------------------------------------
104
135
  # Configuration helpers (fluent)
105
136
  # ------------------------------------------------------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testcontainers-mockserver
3
- Version: 7.2.0
3
+ Version: 7.4.0
4
4
  Summary: Testcontainers module for MockServer
5
5
  Author-email: James D Bloom <jamesdbloom@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -21,6 +21,7 @@ Classifier: Topic :: Software Development :: Testing
21
21
  Requires-Python: >=3.9
22
22
  Description-Content-Type: text/markdown
23
23
  Requires-Dist: testcontainers>=4.0.0
24
+ Requires-Dist: mockserver-client>=5.15
24
25
  Provides-Extra: test
25
26
  Requires-Dist: pytest>=7.0; extra == "test"
26
27
  Requires-Dist: requests>=2.20; extra == "test"
@@ -62,13 +63,14 @@ with MockServerContainer() as mockserver:
62
63
 
63
64
  ### `MockServerContainer(image=..., port=1080)`
64
65
 
65
- - `image` — Docker image to use. Defaults to `mockserver/mockserver:mockserver-7.1.0`.
66
+ - `image` — Docker image to use. Defaults to `mockserver/mockserver:mockserver-7.3.0`.
66
67
  - `port` — Container port MockServer listens on. Defaults to `1080`.
67
68
 
68
69
  ### Methods
69
70
 
70
71
  | Method | Returns | Description |
71
72
  |--------|---------|-------------|
73
+ | `get_client()` | `MockServerClient` | A cached, ready-wired `mockserver` client pointed at the mapped host/port |
72
74
  | `get_url()` | `str` | HTTP base URL (e.g. `http://localhost:49152`) |
73
75
  | `get_secure_url()` | `str` | HTTPS base URL (same port, `https://` scheme) |
74
76
  | `get_host()` | `str` | Mapped host IP |
@@ -1,4 +1,5 @@
1
1
  testcontainers>=4.0.0
2
+ mockserver-client>=5.15
2
3
 
3
4
  [test]
4
5
  pytest>=7.0
@@ -175,14 +175,45 @@ class TestUrlShaping:
175
175
  assert called_with == [9090]
176
176
 
177
177
 
178
- class TestVersionPinning:
179
- """Tests that verify the version is correctly pinned."""
178
+ class TestVersionDerivation:
179
+ """Tests that verify the default image tag is derived, not hard-pinned."""
180
180
 
181
- def test_default_tag_matches_release_version(self):
182
- """The default tag must match the current MockServer release."""
183
- assert _DEFAULT_TAG == "mockserver-7.0.0"
181
+ def test_default_tag_derives_from_client_or_latest(self):
182
+ """The default tag derives from the client version, or falls back to latest."""
183
+ # Either 'mockserver-<version>' (client installed) or 'latest' (fallback).
184
+ assert _DEFAULT_TAG == "latest" or _DEFAULT_TAG.startswith("mockserver-")
184
185
 
185
- def test_module_version(self):
186
- """The package version must match the MockServer release."""
187
- import testcontainers_mockserver
188
- assert testcontainers_mockserver.__version__ == "7.0.0"
186
+ def test_default_tag_helper_falls_back_to_latest(self, monkeypatch):
187
+ """When the client package is absent, the tag falls back to 'latest'."""
188
+ from importlib import metadata
189
+
190
+ from testcontainers_mockserver import container as container_module
191
+
192
+ def _raise(_name):
193
+ raise metadata.PackageNotFoundError
194
+
195
+ monkeypatch.setattr(container_module.metadata, "version", _raise)
196
+ assert container_module._default_tag() == "latest"
197
+
198
+
199
+ class TestGetClient:
200
+ """Tests for the get_client convenience helper."""
201
+
202
+ def test_get_client_returns_configured_client(self):
203
+ """get_client returns a MockServerClient pointed at the mapped host/port."""
204
+ from mockserver import MockServerClient
205
+
206
+ container = MockServerContainer()
207
+ container.get_container_host_ip = lambda: "127.0.0.1"
208
+ container.get_exposed_port = lambda port: 49152
209
+
210
+ client = container.get_client()
211
+ assert isinstance(client, MockServerClient)
212
+
213
+ def test_get_client_is_cached(self):
214
+ """get_client caches the client across calls."""
215
+ container = MockServerContainer()
216
+ container.get_container_host_ip = lambda: "127.0.0.1"
217
+ container.get_exposed_port = lambda port: 49152
218
+
219
+ assert container.get_client() is container.get_client()