Skip to content

Commit 2738f32

Browse files
Adds unit tests for Job class
Signed-off-by: Elena Kolevska <[email protected]>
1 parent 3c25bda commit 2738f32

File tree

1 file changed

+137
-0
lines changed

1 file changed

+137
-0
lines changed

tests/clients/test_jobs.py

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
#!/usr/bin/env python3
2+
3+
"""
4+
Unit tests for the Job class and its proto conversion methods.
5+
"""
6+
7+
import unittest
8+
from google.protobuf.any_pb2 import Any as GrpcAny
9+
10+
from dapr.clients.grpc._jobs import Job
11+
from dapr.proto.runtime.v1 import dapr_pb2 as api_v1
12+
13+
14+
class TestJobClass(unittest.TestCase):
15+
"""Test cases for the Job class and its proto conversion methods."""
16+
17+
def test_job_creation(self):
18+
"""Test Job dataclass creation."""
19+
# Test minimal job
20+
job = Job(name='test-job', schedule='@every 1m')
21+
self.assertEqual(job.name, 'test-job')
22+
self.assertEqual(job.schedule, '@every 1m')
23+
self.assertIsNone(job.repeats)
24+
self.assertIsNone(job.due_time)
25+
self.assertIsNone(job.ttl)
26+
self.assertIsNone(job.data)
27+
self.assertEqual(job.overwrite, False)
28+
29+
# Test job with all fields
30+
data = GrpcAny()
31+
data.value = b'{"message": "test"}'
32+
33+
job_full = Job(
34+
name='full-job',
35+
schedule='0 0 * * *',
36+
repeats=5,
37+
due_time='2024-01-01T00:00:00Z',
38+
ttl='1h',
39+
data=data,
40+
overwrite=True,
41+
)
42+
self.assertEqual(job_full.name, 'full-job')
43+
self.assertEqual(job_full.schedule, '0 0 * * *')
44+
self.assertEqual(job_full.repeats, 5)
45+
self.assertEqual(job_full.due_time, '2024-01-01T00:00:00Z')
46+
self.assertEqual(job_full.ttl, '1h')
47+
self.assertEqual(job_full.data, data)
48+
self.assertEqual(job_full.overwrite, True)
49+
50+
def test_job_get_proto_full(self):
51+
"""Test _get_proto() method with all fields."""
52+
data = GrpcAny()
53+
data.value = b'{"message": "test"}'
54+
55+
job = Job(
56+
name='full-job',
57+
schedule='0 0 * * *',
58+
repeats=5,
59+
due_time='2024-01-01T00:00:00Z',
60+
ttl='1h',
61+
data=data,
62+
overwrite=True,
63+
)
64+
job_proto = job._get_proto()
65+
66+
# Verify all proto fields
67+
self.assertIsInstance(job_proto, api_v1.Job)
68+
self.assertEqual(job_proto.name, 'full-job')
69+
self.assertEqual(job_proto.schedule, '0 0 * * *')
70+
self.assertEqual(job_proto.repeats, 5)
71+
self.assertEqual(job_proto.due_time, '2024-01-01T00:00:00Z')
72+
self.assertEqual(job_proto.ttl, '1h')
73+
self.assertTrue(job_proto.overwrite)
74+
75+
# Verify data field
76+
self.assertTrue(job_proto.HasField('data'))
77+
self.assertEqual(job_proto.data.value, b'{"message": "test"}')
78+
79+
def test_job_get_proto_no_data(self):
80+
"""Test _get_proto() method when data is None."""
81+
job = Job(name='no-data-job', schedule='@every 1m', data=None)
82+
job_proto = job._get_proto()
83+
84+
# Verify data field is set to empty Any
85+
self.assertTrue(job_proto.HasField('data'))
86+
self.assertEqual(job_proto.data.value, b'')
87+
88+
def test_job_from_proto_no_data(self):
89+
"""Test _from_proto() method with minimal proto."""
90+
# Create minimal proto
91+
job_proto = api_v1.Job(name='test-job', overwrite=False)
92+
job_proto.data.CopyFrom(GrpcAny()) # Empty data
93+
94+
# Convert to Job
95+
job = Job._from_proto(job_proto)
96+
97+
# Verify Job fields
98+
self.assertEqual(job.name, 'test-job')
99+
self.assertIsNone(job.schedule)
100+
self.assertIsNone(job.repeats)
101+
self.assertIsNone(job.due_time)
102+
self.assertIsNone(job.ttl)
103+
self.assertIsNone(job.data) # Empty data becomes None
104+
self.assertEqual(job.overwrite, False)
105+
106+
def test_job_from_proto_full(self):
107+
"""Test _from_proto() method with all fields."""
108+
# Create full proto
109+
data = GrpcAny()
110+
data.value = b'{"message": "test"}'
111+
112+
job_proto = api_v1.Job(
113+
name='full-job',
114+
schedule='0 0 * * *',
115+
repeats=5,
116+
due_time='2024-01-01T00:00:00Z',
117+
ttl='1h',
118+
overwrite=True,
119+
)
120+
job_proto.data.CopyFrom(data)
121+
122+
# Convert to Job
123+
job = Job._from_proto(job_proto)
124+
125+
# Verify all Job fields
126+
self.assertEqual(job.name, 'full-job')
127+
self.assertEqual(job.schedule, '0 0 * * *')
128+
self.assertEqual(job.repeats, 5)
129+
self.assertEqual(job.due_time, '2024-01-01T00:00:00Z')
130+
self.assertEqual(job.ttl, '1h')
131+
self.assertEqual(job.data.value, b'{"message": "test"}')
132+
self.assertTrue(job.overwrite)
133+
134+
135+
136+
if __name__ == '__main__':
137+
unittest.main()

0 commit comments

Comments
 (0)