Skip to content

Commit ec95671

Browse files
committed
tests(backend): Add (failing) integration test for project creation API
1 parent 49725e2 commit ec95671

File tree

2 files changed

+39
-10
lines changed

2 files changed

+39
-10
lines changed

backend/tests/integration/conftest.py

+8-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1+
from tempfile import NamedTemporaryFile
2+
13
import docker
24
import pytest
35
from fastapi.testclient import TestClient
46
from pytest_mock import MockFixture
5-
from sqlmodel import Session
67

7-
import jobq_server.db
88
import jobq_server.services.k8s
99
from jobq_server import app
1010
from jobq_server.config import settings
11-
from jobq_server.db import get_engine, upgrade_migrations
11+
from jobq_server.db import upgrade_migrations
1212

1313

1414
@pytest.fixture
@@ -24,10 +24,8 @@ def client(mocker: MockFixture) -> TestClient:
2424

2525
@pytest.fixture(scope="session", autouse=True)
2626
def db():
27-
# Use a SQLite in-memory database for testing
28-
settings.DB_CONNECTION_STRING = "sqlite:///:memory:"
29-
settings.AUTO_MIGRATE = True
30-
31-
upgrade_migrations()
32-
with Session(get_engine()) as session:
33-
yield session
27+
# Use a temporary SQLite database for testing
28+
with NamedTemporaryFile() as f:
29+
settings.DB_CONNECTION_STRING = f"sqlite:///{f.name}"
30+
upgrade_migrations()
31+
yield
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import random
2+
import string
3+
4+
from fastapi.encoders import jsonable_encoder
5+
from fastapi.testclient import TestClient
6+
7+
from jobq_server.db import Project, ProjectPublic
8+
9+
10+
def _random_project() -> Project:
11+
namespace = "test-" + "".join(random.choices(string.ascii_lowercase, k=6))
12+
return Project(
13+
name="test-project",
14+
namespace=namespace,
15+
local_queue="local-queue",
16+
cluster_queue="cluster-queue",
17+
)
18+
19+
20+
def test_project_create(client: TestClient) -> None:
21+
p = _random_project()
22+
response = client.post("/projects", json=jsonable_encoder(p))
23+
assert response.status_code == 201
24+
25+
project = ProjectPublic.model_validate_json(response.text)
26+
assert project.name == p.name
27+
assert project.description == p.description
28+
assert project.cluster_queue == p.cluster_queue
29+
assert project.local_queue == p.local_queue
30+
assert project.namespace == p.namespace
31+
assert project.id is not None

0 commit comments

Comments
 (0)