Skip to content

Commit b5c7a1b

Browse files
alexanderankinsanti
andauthoredApr 2, 2024··
fix: Pin MongoDB images and improve test coverage for maintained versions (#448)
for some reason this causes an issue, see #401 for details --------- Co-authored-by: Vemund Santi <vemund@santi.no>
1 parent f819c7a commit b5c7a1b

File tree

2 files changed

+15
-56
lines changed

2 files changed

+15
-56
lines changed
 

‎modules/mongodb/testcontainers/mongodb/__init__.py

+9-14
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,20 @@ class MongoDbContainer(DbContainer):
3030
3131
>>> from testcontainers.mongodb import MongoDbContainer
3232
33-
>>> with MongoDbContainer("mongo:latest") as mongo:
33+
>>> with MongoDbContainer("mongo:7.0.7") as mongo:
3434
... db = mongo.get_connection_client().test
3535
... # Insert a database entry
3636
... result = db.restaurants.insert_one(
3737
... {
38-
... "address": {
39-
... "street": "2 Avenue",
40-
... "zipcode": "10075",
41-
... "building": "1480",
42-
... "coord": [-73.9557413, 40.7720266]
43-
... },
44-
... "borough": "Manhattan",
45-
... "cuisine": "Italian",
4638
... "name": "Vella",
47-
... "restaurant_id": "41704620"
39+
... "cuisine": "Italian",
40+
... "restaurant_id": "123456"
4841
... }
4942
... )
5043
... # Find the restaurant document
51-
... cursor = db.restaurants.find({"borough": "Manhattan"})
44+
... result = db.restaurants.find_one({"name": "Vella"})
45+
... result["restaurant_id"]
46+
'123456'
5247
"""
5348

5449
def __init__(
@@ -62,9 +57,9 @@ def __init__(
6257
) -> None:
6358
raise_for_deprecated_parameter(kwargs, "port_to_expose", "port")
6459
super().__init__(image=image, **kwargs)
65-
self.username = username or os.environ.get("MONGO_INITDB_ROOT_USERNAME", "test")
66-
self.password = password or os.environ.get("MONGO_INITDB_ROOT_PASSWORD", "test")
67-
self.dbname = dbname or os.environ.get("MONGO_DB", "test")
60+
self.username = username if username else os.environ.get("MONGO_INITDB_ROOT_USERNAME", "test")
61+
self.password = password if password else os.environ.get("MONGO_INITDB_ROOT_PASSWORD", "test")
62+
self.dbname = dbname if dbname else os.environ.get("MONGO_DB", "test")
6863
self.port = port
6964
self.with_exposed_ports(self.port)
7065

‎modules/mongodb/tests/test_mongodb.py

+6-42
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,12 @@
22
from pymongo import MongoClient
33
from pymongo.errors import OperationFailure
44

5-
from testcontainers.core.container import DockerContainer
6-
from testcontainers.core.waiting_utils import wait_for
75
from testcontainers.mongodb import MongoDbContainer
86

97

10-
def test_docker_generic_db():
11-
with DockerContainer("mongo:latest").with_bind_ports(27017, 27017) as mongo_container:
12-
13-
def connect():
14-
host = mongo_container.get_container_host_ip()
15-
port = mongo_container.get_exposed_port(27017)
16-
return MongoClient(f"mongodb://{host}:{port}")
17-
18-
db = wait_for(connect).primer
19-
result = db.restaurants.insert_one(
20-
{
21-
"address": {
22-
"street": "2 Avenue",
23-
"zipcode": "10075",
24-
"building": "1480",
25-
"coord": [-73.9557413, 40.7720266],
26-
},
27-
"borough": "Manhattan",
28-
"cuisine": "Italian",
29-
"name": "Vella",
30-
"restaurant_id": "41704620",
31-
}
32-
)
33-
assert result.inserted_id
34-
cursor = db.restaurants.find({"borough": "Manhattan"})
35-
for document in cursor:
36-
assert document
37-
38-
39-
def test_docker_run_mongodb():
40-
with MongoDbContainer("mongo:latest") as mongo:
8+
@pytest.mark.parametrize("version", ["7.0.7", "6.0.14", "5.0.26"])
9+
def test_docker_run_mongodb(version: str):
10+
with MongoDbContainer(f"mongo:{version}") as mongo:
4111
db = mongo.get_connection_client().test
4212
doc = {
4313
"address": {
@@ -51,14 +21,8 @@ def test_docker_run_mongodb():
5121
"name": "Vella",
5222
"restaurant_id": "41704620",
5323
}
54-
db.restaurants.insert_one(doc)
24+
result = db.restaurants.insert_one(doc)
25+
assert result.inserted_id
26+
5527
cursor = db.restaurants.find({"borough": "Manhattan"})
5628
assert cursor.next()["restaurant_id"] == doc["restaurant_id"]
57-
58-
59-
def test_docker_run_mongodb_connect_without_credentials():
60-
with MongoDbContainer() as mongo:
61-
connection_url = f"mongodb://{mongo.get_container_host_ip()}:" f"{mongo.get_exposed_port(mongo.port)}"
62-
db = MongoClient(connection_url).test
63-
with pytest.raises(OperationFailure):
64-
db.restaurants.insert_one({})

0 commit comments

Comments
 (0)
Please sign in to comment.