test_contracts.py python
62 lines 1.9 KB
Raw
sha256:1d3182b1c5c2833c8ab0d437e03eeadfd3ad6679a2877a6baab8d17442d38936 Bootstrap Scooling Lab repository Human patch 43 days ago
1 """Unit tests for Scooling Lab training contracts."""
2
3 from unittest import TestCase
4
5 from scooling_lab.contracts import (
6 TrainingDatasetRef,
7 TrainingJobRequest,
8 TrainingJobStatus,
9 validate_training_job_request,
10 )
11
12
13 class TrainingContractTests(TestCase):
14 """Validate stable request and status behavior."""
15
16 def test_valid_training_job_request_has_no_errors(self) -> None:
17 dataset = TrainingDatasetRef(
18 dataset_id="dataset_001",
19 workspace_id="workspace_001",
20 source_commit="sha256:abc123",
21 approved_by="reviewer_001",
22 )
23 request = TrainingJobRequest(
24 job_id="job_001",
25 dataset=dataset,
26 base_model="gemma-family",
27 adapter_kind="lora",
28 location_policy="local",
29 )
30
31 self.assertEqual(validate_training_job_request(request), ())
32
33 def test_blank_required_fields_are_reported_deterministically(self) -> None:
34 dataset = TrainingDatasetRef(
35 dataset_id="",
36 workspace_id="",
37 source_commit="",
38 approved_by="",
39 )
40 request = TrainingJobRequest(
41 job_id="",
42 dataset=dataset,
43 base_model="",
44 adapter_kind="qlora",
45 location_policy="cloud_policy",
46 )
47
48 self.assertEqual(
49 validate_training_job_request(request),
50 (
51 "job_id is required",
52 "dataset.dataset_id is required",
53 "dataset.workspace_id is required",
54 "dataset.source_commit is required",
55 "dataset.approved_by is required",
56 "base_model is required",
57 ),
58 )
59
60 def test_training_status_values_are_stable(self) -> None:
61 self.assertEqual(TrainingJobStatus.QUEUED.value, "queued")
62 self.assertEqual(TrainingJobStatus.SUCCEEDED.value, "succeeded")
File History 1 commit
sha256:1d3182b1c5c2833c8ab0d437e03eeadfd3ad6679a2877a6baab8d17442d38936 Bootstrap Scooling Lab repository Human patch 43 days ago