Skip to content

Commit edbb507

Browse files
committed
container refactoring to testcontainer.io
1 parent 1539689 commit edbb507

File tree

7 files changed

+48
-181
lines changed

7 files changed

+48
-181
lines changed

tests/shared/build_database.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
1-
from .docker.image import Image
2-
1+
import docker
2+
from docker import errors
33

44
def build_database(dockerfile_directory: str) -> None:
5-
Image('eventsourcingdb', 'latest').build(dockerfile_directory)
5+
"""Build the database image using the Docker SDK."""
6+
client = docker.from_env()
7+
try:
8+
client.images.build(
9+
path=dockerfile_directory,
10+
tag='eventsourcingdb:latest',
11+
rm=True
12+
)
13+
except errors.BuildError as e:
14+
raise RuntimeError(f"Failed to build database image: {e}")
15+
except errors.APIError as e:
16+
raise RuntimeError(f"Docker API error: {e}")

tests/shared/containerized_testing_database.py

Lines changed: 0 additions & 51 deletions
This file was deleted.

tests/shared/database.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,45 @@
11
import uuid
2-
32
from eventsourcingdb.client import Client
4-
5-
from .containerized_testing_database import ContainerizedTestingDatabase
6-
from .docker.image import Image
3+
from eventsourcingdb.container import Container
74
from .testing_database import TestingDatabase
85

9-
106
class Database:
117
__create_key = object()
128

139
def __init__(
1410
self,
1511
create_key,
16-
with_authorization: ContainerizedTestingDatabase,
12+
with_authorization: TestingDatabase,
1713
with_invalid_url: TestingDatabase
1814
):
1915
assert create_key == Database.__create_key, \
2016
'Database objects must be created using Database.create.'
2117

22-
self.with_authorization: ContainerizedTestingDatabase = with_authorization
18+
self.with_authorization: TestingDatabase = with_authorization
2319
self.with_invalid_url: TestingDatabase = with_invalid_url
2420

2521
@classmethod
2622
async def create(cls) -> 'Database':
27-
image = Image('eventsourcingdb', 'latest')
28-
2923
api_token = str(uuid.uuid4())
30-
with_authorization = await ContainerizedTestingDatabase.create(
31-
image,
32-
['run', '--api-token', f'{api_token}', '--data-directory-temporary'],
33-
api_token,
24+
25+
# Erstellen und Starten des Containers mit der zentralen Container-Klasse
26+
container = Container(
27+
api_token=api_token
28+
)
29+
container.start()
30+
31+
# Client mit Autorisierung erstellen
32+
with_authorization_client = container.get_client()
33+
await with_authorization_client.initialize()
34+
with_authorization = TestingDatabase(
35+
with_authorization_client,
36+
container # Container an TestingDatabase übergeben für cleanup
3437
)
3538

39+
# Client mit ungültiger URL erstellen - api_token statt auth_token verwenden
3640
with_invalid_url_client = Client(
37-
base_url='http://localhost.invalid', api_token=api_token
41+
base_url='http://localhost.invalid',
42+
api_token=api_token
3843
)
3944
await with_invalid_url_client.initialize()
4045
with_invalid_url = TestingDatabase(

tests/shared/docker/container.py

Lines changed: 0 additions & 54 deletions
This file was deleted.

tests/shared/docker/docker_command_failed_error.py

Lines changed: 0 additions & 2 deletions
This file was deleted.

tests/shared/docker/image.py

Lines changed: 0 additions & 52 deletions
This file was deleted.

tests/shared/testing_database.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
1-
from dataclasses import dataclass
2-
1+
from typing import Optional
32
from eventsourcingdb.client import Client
3+
from eventsourcingdb.container import Container
44

5-
6-
@dataclass
75
class TestingDatabase:
8-
client: Client
6+
def __init__(
7+
self,
8+
client: Client,
9+
container: Optional[Container] = None
10+
):
11+
self.__client = client
12+
self.__container = container
913

1014
async def stop(self) -> None:
15+
if self.__container is not None:
16+
self.__container.stop()
1117
await self.client.close()
18+
19+
@property
20+
def client(self) -> Client:
21+
return self.__client

0 commit comments

Comments
 (0)