Files

58 lines
1.6 KiB
Python

import pytest
from sqlmodel import Session, delete
from app.domain import Job, Miner
from app.models import JobCreate
from app.services.jobs import JobService
from app.storage.db import init_db, session_scope
@pytest.fixture(scope="module", autouse=True)
def _init_db(tmp_path_factory):
db_file = tmp_path_factory.mktemp("data") / "test.db"
# override settings dynamically
from app.config import settings
settings.database_url = f"sqlite:///{db_file}"
init_db()
yield
@pytest.fixture()
def session():
with session_scope() as sess:
sess.exec(delete(Job))
sess.exec(delete(Miner))
sess.commit()
yield sess
def test_create_and_fetch_job(session: Session):
svc = JobService(session)
job = svc.create_job("client1", JobCreate(payload={"task": "noop"}))
fetched = svc.get_job(job.id, client_id="client1")
assert fetched.id == job.id
assert fetched.payload["task"] == "noop"
def test_acquire_next_job(session: Session):
svc = JobService(session)
job1 = svc.create_job("client1", JobCreate(payload={"n": 1}))
job2 = svc.create_job("client1", JobCreate(payload={"n": 2}))
miner = Miner(id="miner1", capabilities={}, concurrency=1)
session.add(miner)
session.commit()
next_job = svc.acquire_next_job(miner)
assert next_job is not None
assert next_job.id == job1.id
assert next_job.state == "RUNNING"
next_job2 = svc.acquire_next_job(miner)
assert next_job2 is not None
assert next_job2.id == job2.id
# No more jobs
assert svc.acquire_next_job(miner) is None