arkindex-base-worker 0.4.0rc2__py3-none-any.whl → 0.4.0rc4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {arkindex_base_worker-0.4.0rc2.dist-info → arkindex_base_worker-0.4.0rc4.dist-info}/METADATA +15 -14
  2. arkindex_base_worker-0.4.0rc4.dist-info/RECORD +60 -0
  3. {arkindex_base_worker-0.4.0rc2.dist-info → arkindex_base_worker-0.4.0rc4.dist-info}/WHEEL +1 -1
  4. arkindex_worker/cache.py +1 -1
  5. arkindex_worker/worker/__init__.py +1 -2
  6. arkindex_worker/worker/base.py +1 -1
  7. arkindex_worker/worker/classification.py +1 -1
  8. arkindex_worker/worker/corpus.py +21 -6
  9. arkindex_worker/worker/entity.py +1 -1
  10. arkindex_worker/worker/task.py +1 -2
  11. arkindex_worker/worker/training.py +1 -1
  12. tests/test_dataset_worker.py +1 -1
  13. tests/test_elements_worker/{test_classifications.py → test_classification.py} +87 -1
  14. tests/test_elements_worker/test_corpus.py +32 -1
  15. tests/test_elements_worker/test_dataset.py +1 -1
  16. tests/test_elements_worker/test_element.py +427 -0
  17. tests/test_elements_worker/test_element_create_multiple.py +715 -0
  18. tests/test_elements_worker/test_element_create_single.py +528 -0
  19. tests/test_elements_worker/test_element_list_children.py +969 -0
  20. tests/test_elements_worker/test_element_list_parents.py +530 -0
  21. tests/test_elements_worker/{test_entities.py → test_entity_create.py} +1 -154
  22. tests/test_elements_worker/test_entity_list_and_check.py +160 -0
  23. tests/test_elements_worker/test_image.py +2 -1
  24. tests/test_elements_worker/test_metadata.py +1 -1
  25. tests/test_elements_worker/test_task.py +1 -1
  26. tests/test_elements_worker/test_transcription_create.py +873 -0
  27. tests/test_elements_worker/test_transcription_create_with_elements.py +951 -0
  28. tests/test_elements_worker/test_transcription_list.py +450 -0
  29. tests/test_elements_worker/test_version.py +60 -0
  30. tests/test_elements_worker/test_worker.py +526 -89
  31. tests/test_image.py +181 -198
  32. arkindex_base_worker-0.4.0rc2.dist-info/RECORD +0 -52
  33. tests/test_elements_worker/test_elements.py +0 -3704
  34. tests/test_elements_worker/test_transcriptions.py +0 -2252
  35. {arkindex_base_worker-0.4.0rc2.dist-info → arkindex_base_worker-0.4.0rc4.dist-info}/LICENSE +0 -0
  36. {arkindex_base_worker-0.4.0rc2.dist-info → arkindex_base_worker-0.4.0rc4.dist-info}/top_level.txt +0 -0
@@ -1,89 +1,526 @@
1
1
  import json
2
2
  import sys
3
+ from argparse import Namespace
4
+ from uuid import UUID
3
5
 
4
6
  import pytest
5
- from apistar.exceptions import ErrorResponse
6
7
 
7
- from arkindex_worker.cache import CachedElement
8
+ from arkindex.exceptions import ErrorResponse
9
+ from arkindex_worker.cache import (
10
+ SQL_VERSION,
11
+ CachedElement,
12
+ create_version_table,
13
+ init_cache_db,
14
+ )
15
+ from arkindex_worker.models import Element
8
16
  from arkindex_worker.worker import ActivityState, ElementsWorker
17
+ from arkindex_worker.worker.dataset import DatasetState
18
+ from arkindex_worker.worker.process import ProcessMode
9
19
 
10
20
  from . import BASE_API_CALLS
11
21
 
12
- TEST_VERSION_ID = "test_123"
13
- TEST_SLUG = "some_slug"
14
22
 
23
+ def test_database_arg(mocker, mock_elements_worker, tmp_path):
24
+ database_path = tmp_path / "my_database.sqlite"
25
+ init_cache_db(database_path)
26
+ create_version_table()
27
+
28
+ mocker.patch(
29
+ "arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
30
+ return_value=Namespace(
31
+ element=["volumeid", "pageid"],
32
+ verbose=False,
33
+ elements_list=None,
34
+ database=database_path,
35
+ dev=False,
36
+ set=[],
37
+ ),
38
+ )
15
39
 
16
- def test_get_worker_version(fake_dummy_worker):
17
- api_client = fake_dummy_worker.api_client
40
+ worker = ElementsWorker(support_cache=True)
41
+ worker.configure()
18
42
 
19
- response = {"worker": {"slug": TEST_SLUG}}
43
+ assert worker.use_cache is True
44
+ assert worker.cache_path == database_path
20
45
 
21
- api_client.add_response("RetrieveWorkerVersion", response, id=TEST_VERSION_ID)
22
46
 
23
- with pytest.deprecated_call(match="WorkerVersion usage is deprecated."):
24
- res = fake_dummy_worker.get_worker_version(TEST_VERSION_ID)
47
+ def test_database_arg_cache_missing_version_table(
48
+ mocker, mock_elements_worker, tmp_path
49
+ ):
50
+ database_path = tmp_path / "my_database.sqlite"
51
+ database_path.touch()
52
+
53
+ mocker.patch(
54
+ "arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
55
+ return_value=Namespace(
56
+ element=["volumeid", "pageid"],
57
+ verbose=False,
58
+ elements_list=None,
59
+ database=database_path,
60
+ dev=False,
61
+ set=[],
62
+ ),
63
+ )
25
64
 
26
- assert res == response
27
- assert fake_dummy_worker._worker_version_cache[TEST_VERSION_ID] == response
65
+ worker = ElementsWorker(support_cache=True)
66
+ with pytest.raises(
67
+ AssertionError,
68
+ match=f"The SQLite database {database_path} does not have the correct cache version, it should be {SQL_VERSION}",
69
+ ):
70
+ worker.configure()
28
71
 
29
72
 
30
- def test_get_worker_version__uses_cache(fake_dummy_worker):
31
- api_client = fake_dummy_worker.api_client
73
+ def test_readonly(responses, mock_elements_worker):
74
+ """Test readonly worker does not trigger any API calls"""
32
75
 
33
- response = {"worker": {"slug": TEST_SLUG}}
76
+ # Setup the worker as read-only
77
+ mock_elements_worker.worker_run_id = None
78
+ assert mock_elements_worker.is_read_only is True
34
79
 
35
- api_client.add_response("RetrieveWorkerVersion", response, id=TEST_VERSION_ID)
80
+ out = mock_elements_worker.update_activity("1234-deadbeef", ActivityState.Processed)
36
81
 
37
- with pytest.deprecated_call(match="WorkerVersion usage is deprecated."):
38
- response_1 = fake_dummy_worker.get_worker_version(TEST_VERSION_ID)
82
+ # update_activity returns False in very specific cases
83
+ assert out is True
84
+ assert len(responses.calls) == len(BASE_API_CALLS)
85
+ assert [
86
+ (call.request.method, call.request.url) for call in responses.calls
87
+ ] == BASE_API_CALLS
39
88
 
40
- with pytest.deprecated_call(match="WorkerVersion usage is deprecated."):
41
- response_2 = fake_dummy_worker.get_worker_version(TEST_VERSION_ID)
42
89
 
43
- assert response_1 == response
44
- assert response_1 == response_2
90
+ def test_get_elements_elements_list_arg_wrong_type(
91
+ monkeypatch, tmp_path, mock_elements_worker
92
+ ):
93
+ elements_path = tmp_path / "elements.json"
94
+ elements_path.write_text("{}")
45
95
 
46
- # assert that only one call to the API
47
- assert len(api_client.history) == 1
48
- assert not api_client.responses
96
+ monkeypatch.setenv("TASK_ELEMENTS", str(elements_path))
97
+ worker = ElementsWorker()
98
+ worker.configure()
49
99
 
100
+ with pytest.raises(AssertionError, match="Elements list must be a list"):
101
+ worker.get_elements()
50
102
 
51
- def test_get_worker_version_slug(mocker, fake_dummy_worker):
52
- fake_dummy_worker.get_worker_version = mocker.MagicMock()
53
- fake_dummy_worker.get_worker_version.return_value = {
54
- "id": TEST_VERSION_ID,
55
- "worker": {"slug": "mock_slug"},
56
- }
57
103
 
58
- with pytest.deprecated_call(match="WorkerVersion usage is deprecated."):
59
- slug = fake_dummy_worker.get_worker_version_slug(TEST_VERSION_ID)
60
- assert slug == "mock_slug"
104
+ def test_get_elements_elements_list_arg_empty_list(
105
+ monkeypatch, tmp_path, mock_elements_worker
106
+ ):
107
+ elements_path = tmp_path / "elements.json"
108
+ elements_path.write_text("[]")
61
109
 
110
+ monkeypatch.setenv("TASK_ELEMENTS", str(elements_path))
111
+ worker = ElementsWorker()
112
+ worker.configure()
113
+
114
+ with pytest.raises(AssertionError, match="No elements in elements list"):
115
+ worker.get_elements()
62
116
 
63
- def test_get_worker_version_slug_none(fake_dummy_worker):
64
- # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
65
- with (
66
- pytest.deprecated_call(match="WorkerVersion usage is deprecated."),
67
- pytest.raises(ValueError, match="No worker version ID"),
117
+
118
+ def test_get_elements_elements_list_arg_missing_id(
119
+ monkeypatch, tmp_path, mock_elements_worker
120
+ ):
121
+ elements_path = tmp_path / "elements.json"
122
+ elements_path.write_text(json.dumps([{"type": "volume"}]))
123
+
124
+ monkeypatch.setenv("TASK_ELEMENTS", str(elements_path))
125
+ worker = ElementsWorker()
126
+ worker.configure()
127
+
128
+ elt_list = worker.get_elements()
129
+
130
+ assert elt_list == []
131
+
132
+
133
+ def test_get_elements_elements_list_arg_not_uuid(
134
+ monkeypatch, tmp_path, mock_elements_worker
135
+ ):
136
+ elements_path = tmp_path / "elements.json"
137
+ elements_path.write_text(
138
+ json.dumps(
139
+ [
140
+ {"id": "volumeid", "type": "volume"},
141
+ {"id": "pageid", "type": "page"},
142
+ {"id": "actid", "type": "act"},
143
+ {"id": "surfaceid", "type": "surface"},
144
+ ]
145
+ )
146
+ )
147
+
148
+ monkeypatch.setenv("TASK_ELEMENTS", str(elements_path))
149
+ worker = ElementsWorker()
150
+ worker.configure()
151
+
152
+ with pytest.raises(
153
+ Exception,
154
+ match="These element IDs are invalid: volumeid, pageid, actid, surfaceid",
68
155
  ):
69
- fake_dummy_worker.get_worker_version_slug(None)
156
+ worker.get_elements()
157
+
158
+
159
+ def test_get_elements_elements_list_arg(monkeypatch, tmp_path, mock_elements_worker):
160
+ elements_path = tmp_path / "elements.json"
161
+ elements_path.write_text(
162
+ json.dumps(
163
+ [
164
+ {"id": "11111111-1111-1111-1111-111111111111", "type": "volume"},
165
+ {"id": "22222222-2222-2222-2222-222222222222", "type": "page"},
166
+ {"id": "33333333-3333-3333-3333-333333333333", "type": "act"},
167
+ ]
168
+ )
169
+ )
70
170
 
171
+ monkeypatch.setenv("TASK_ELEMENTS", str(elements_path))
172
+ worker = ElementsWorker()
173
+ worker.configure()
71
174
 
72
- def test_readonly(responses, mock_elements_worker):
73
- """Test readonly worker does not trigger any API calls"""
175
+ elt_list = worker.get_elements()
74
176
 
75
- # Setup the worker as read-only
76
- mock_elements_worker.worker_run_id = None
77
- assert mock_elements_worker.is_read_only is True
177
+ assert elt_list == [
178
+ "11111111-1111-1111-1111-111111111111",
179
+ "22222222-2222-2222-2222-222222222222",
180
+ "33333333-3333-3333-3333-333333333333",
181
+ ]
78
182
 
79
- out = mock_elements_worker.update_activity("1234-deadbeef", ActivityState.Processed)
80
183
 
81
- # update_activity returns False in very specific cases
82
- assert out is True
83
- assert len(responses.calls) == len(BASE_API_CALLS)
84
- assert [
85
- (call.request.method, call.request.url) for call in responses.calls
86
- ] == BASE_API_CALLS
184
+ def test_get_elements_element_arg_not_uuid(mocker, mock_elements_worker):
185
+ mocker.patch(
186
+ "arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
187
+ return_value=Namespace(
188
+ element=["volumeid", "pageid"],
189
+ config={},
190
+ verbose=False,
191
+ elements_list=None,
192
+ database=None,
193
+ dev=True,
194
+ set=[],
195
+ ),
196
+ )
197
+
198
+ worker = ElementsWorker()
199
+ worker.configure()
200
+
201
+ with pytest.raises(
202
+ Exception, match="These element IDs are invalid: volumeid, pageid"
203
+ ):
204
+ worker.get_elements()
205
+
206
+
207
+ def test_get_elements_element_arg(mocker, mock_elements_worker):
208
+ mocker.patch(
209
+ "arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
210
+ return_value=Namespace(
211
+ element=[
212
+ "11111111-1111-1111-1111-111111111111",
213
+ "22222222-2222-2222-2222-222222222222",
214
+ ],
215
+ config={},
216
+ verbose=False,
217
+ elements_list=None,
218
+ database=None,
219
+ dev=True,
220
+ set=[],
221
+ ),
222
+ )
223
+
224
+ worker = ElementsWorker()
225
+ worker.configure()
226
+
227
+ elt_list = worker.get_elements()
228
+
229
+ assert elt_list == [
230
+ "11111111-1111-1111-1111-111111111111",
231
+ "22222222-2222-2222-2222-222222222222",
232
+ ]
233
+
234
+
235
+ def test_get_elements_dataset_set_arg(responses, mocker, mock_elements_worker):
236
+ mocker.patch(
237
+ "arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
238
+ return_value=Namespace(
239
+ element=[],
240
+ config={},
241
+ verbose=False,
242
+ elements_list=None,
243
+ database=None,
244
+ dev=True,
245
+ set=[(UUID("11111111-1111-1111-1111-111111111111"), "train")],
246
+ ),
247
+ )
248
+
249
+ # Mock RetrieveDataset call
250
+ responses.add(
251
+ responses.GET,
252
+ "http://testserver/api/v1/datasets/11111111-1111-1111-1111-111111111111/",
253
+ status=200,
254
+ json={
255
+ "id": "11111111-1111-1111-1111-111111111111",
256
+ "name": "My dataset",
257
+ "description": "A dataset about cats.",
258
+ "sets": ["train", "dev", "test"],
259
+ "state": DatasetState.Complete.value,
260
+ },
261
+ content_type="application/json",
262
+ )
263
+
264
+ # Mock ListSetElements call
265
+ element = {
266
+ "id": "22222222-2222-2222-2222-222222222222",
267
+ "type": "page",
268
+ "name": "1",
269
+ "corpus": {
270
+ "id": "11111111-1111-1111-1111-111111111111",
271
+ },
272
+ "thumbnail_url": "http://example.com",
273
+ "zone": {
274
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
275
+ "polygon": [[0, 0], [0, 0], [0, 0]],
276
+ "image": {
277
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
278
+ "path": "string",
279
+ "width": 0,
280
+ "height": 0,
281
+ "url": "http://example.com",
282
+ "s3_url": "string",
283
+ "status": "checked",
284
+ "server": {
285
+ "display_name": "string",
286
+ "url": "http://example.com",
287
+ "max_width": 2147483647,
288
+ "max_height": 2147483647,
289
+ },
290
+ },
291
+ "url": "http://example.com",
292
+ },
293
+ "rotation_angle": 0,
294
+ "mirrored": False,
295
+ "created": "2019-08-24T14:15:22Z",
296
+ "classes": [
297
+ {
298
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
299
+ "ml_class": {
300
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
301
+ "name": "string",
302
+ },
303
+ "state": "pending",
304
+ "confidence": 0,
305
+ "high_confidence": True,
306
+ "worker_run": {
307
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
308
+ "summary": "string",
309
+ },
310
+ }
311
+ ],
312
+ "metadata": [
313
+ {
314
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
315
+ "type": "text",
316
+ "name": "string",
317
+ "value": "string",
318
+ "dates": [{"type": "exact", "year": 0, "month": 1, "day": 1}],
319
+ }
320
+ ],
321
+ "transcriptions": [
322
+ {
323
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
324
+ "text": "string",
325
+ "confidence": 0,
326
+ "orientation": "horizontal-lr",
327
+ "worker_run": {
328
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
329
+ "summary": "string",
330
+ },
331
+ }
332
+ ],
333
+ "has_children": True,
334
+ "worker_run": {
335
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
336
+ "summary": "string",
337
+ },
338
+ "confidence": 1,
339
+ }
340
+ responses.add(
341
+ responses.GET,
342
+ "http://testserver/api/v1/datasets/11111111-1111-1111-1111-111111111111/elements/?set=train&with_count=true",
343
+ status=200,
344
+ json={
345
+ "next": None,
346
+ "previous": None,
347
+ "results": [
348
+ {
349
+ "set": "train",
350
+ "element": element,
351
+ }
352
+ ],
353
+ "count": 1,
354
+ },
355
+ content_type="application/json",
356
+ )
357
+
358
+ worker = ElementsWorker()
359
+ worker.configure()
360
+
361
+ elt_list = worker.get_elements()
362
+
363
+ assert elt_list == [
364
+ Element(**element),
365
+ ]
366
+
367
+
368
+ def test_get_elements_dataset_set_api(responses, mocker, mock_elements_worker):
369
+ # Mock ListProcessSets call
370
+ responses.add(
371
+ responses.GET,
372
+ "http://testserver/api/v1/process/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff/sets/",
373
+ status=200,
374
+ json={
375
+ "next": None,
376
+ "previous": None,
377
+ "results": [
378
+ {
379
+ "id": "33333333-3333-3333-3333-333333333333",
380
+ "dataset": {"id": "11111111-1111-1111-1111-111111111111"},
381
+ "set_name": "train",
382
+ }
383
+ ],
384
+ "count": 1,
385
+ },
386
+ content_type="application/json",
387
+ )
388
+
389
+ # Mock ListSetElements call
390
+ element = {
391
+ "id": "22222222-2222-2222-2222-222222222222",
392
+ "type": "page",
393
+ "name": "1",
394
+ "corpus": {
395
+ "id": "11111111-1111-1111-1111-111111111111",
396
+ },
397
+ "thumbnail_url": "http://example.com",
398
+ "zone": {
399
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
400
+ "polygon": [[0, 0], [0, 0], [0, 0]],
401
+ "image": {
402
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
403
+ "path": "string",
404
+ "width": 0,
405
+ "height": 0,
406
+ "url": "http://example.com",
407
+ "s3_url": "string",
408
+ "status": "checked",
409
+ "server": {
410
+ "display_name": "string",
411
+ "url": "http://example.com",
412
+ "max_width": 2147483647,
413
+ "max_height": 2147483647,
414
+ },
415
+ },
416
+ "url": "http://example.com",
417
+ },
418
+ "rotation_angle": 0,
419
+ "mirrored": False,
420
+ "created": "2019-08-24T14:15:22Z",
421
+ "classes": [
422
+ {
423
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
424
+ "ml_class": {
425
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
426
+ "name": "string",
427
+ },
428
+ "state": "pending",
429
+ "confidence": 0,
430
+ "high_confidence": True,
431
+ "worker_run": {
432
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
433
+ "summary": "string",
434
+ },
435
+ }
436
+ ],
437
+ "metadata": [
438
+ {
439
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
440
+ "type": "text",
441
+ "name": "string",
442
+ "value": "string",
443
+ "dates": [{"type": "exact", "year": 0, "month": 1, "day": 1}],
444
+ }
445
+ ],
446
+ "transcriptions": [
447
+ {
448
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
449
+ "text": "string",
450
+ "confidence": 0,
451
+ "orientation": "horizontal-lr",
452
+ "worker_run": {
453
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
454
+ "summary": "string",
455
+ },
456
+ }
457
+ ],
458
+ "has_children": True,
459
+ "worker_run": {
460
+ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
461
+ "summary": "string",
462
+ },
463
+ "confidence": 1,
464
+ }
465
+ responses.add(
466
+ responses.GET,
467
+ "http://testserver/api/v1/datasets/11111111-1111-1111-1111-111111111111/elements/?set=train&with_count=true",
468
+ status=200,
469
+ json={
470
+ "next": None,
471
+ "previous": None,
472
+ "results": [
473
+ {
474
+ "set": "train",
475
+ "element": element,
476
+ }
477
+ ],
478
+ "count": 1,
479
+ },
480
+ content_type="application/json",
481
+ )
482
+
483
+ # Update ProcessMode to Dataset
484
+ mock_elements_worker.process_information["mode"] = ProcessMode.Dataset
485
+
486
+ elt_list = mock_elements_worker.get_elements()
487
+
488
+ assert elt_list == [
489
+ Element(**element),
490
+ ]
491
+
492
+
493
+ def test_get_elements_both_args_error(mocker, mock_elements_worker, tmp_path):
494
+ elements_path = tmp_path / "elements.json"
495
+ elements_path.write_text(
496
+ json.dumps(
497
+ [
498
+ {"id": "volumeid", "type": "volume"},
499
+ {"id": "pageid", "type": "page"},
500
+ {"id": "actid", "type": "act"},
501
+ {"id": "surfaceid", "type": "surface"},
502
+ ]
503
+ )
504
+ )
505
+ mocker.patch(
506
+ "arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
507
+ return_value=Namespace(
508
+ element=["anotherid", "againanotherid"],
509
+ verbose=False,
510
+ elements_list=elements_path.open(),
511
+ database=None,
512
+ dev=False,
513
+ set=[],
514
+ ),
515
+ )
516
+
517
+ worker = ElementsWorker()
518
+ worker.configure()
519
+
520
+ with pytest.raises(
521
+ AssertionError, match="elements-list and element CLI args shouldn't be both set"
522
+ ):
523
+ worker.get_elements()
87
524
 
88
525
 
89
526
  @pytest.mark.usefixtures("_mock_worker_run_api")
@@ -114,43 +551,6 @@ def test_activities_dev_mode(mocker):
114
551
  assert worker.store_activity is False
115
552
 
116
553
 
117
- @pytest.mark.usefixtures("_mock_worker_run_api")
118
- def test_update_call(responses, mock_elements_worker):
119
- """Test an update call with feature enabled triggers an API call"""
120
- responses.add(
121
- responses.PUT,
122
- "http://testserver/api/v1/workers/versions/56785678-5678-5678-5678-567856785678/activity/",
123
- status=200,
124
- json={
125
- "element_id": "1234-deadbeef",
126
- "process_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff",
127
- "state": "processed",
128
- },
129
- )
130
-
131
- out = mock_elements_worker.update_activity("1234-deadbeef", ActivityState.Processed)
132
-
133
- # Check the response received by worker
134
- assert out is True
135
-
136
- assert len(responses.calls) == len(BASE_API_CALLS) + 1
137
- assert [
138
- (call.request.method, call.request.url) for call in responses.calls
139
- ] == BASE_API_CALLS + [
140
- (
141
- "PUT",
142
- "http://testserver/api/v1/workers/versions/56785678-5678-5678-5678-567856785678/activity/",
143
- ),
144
- ]
145
-
146
- # Check the request sent by worker
147
- assert json.loads(responses.calls[-1].request.body) == {
148
- "element_id": "1234-deadbeef",
149
- "process_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff",
150
- "state": "processed",
151
- }
152
-
153
-
154
554
  @pytest.mark.usefixtures("_mock_activity_calls")
155
555
  @pytest.mark.parametrize(
156
556
  ("process_exception", "final_state"),
@@ -312,3 +712,40 @@ def test_start_activity_error(
312
712
  assert logger.error.call_args_list == [
313
713
  mocker.call("Ran on 1 element: 0 completed, 1 failed")
314
714
  ]
715
+
716
+
717
+ @pytest.mark.usefixtures("_mock_worker_run_api")
718
+ def test_update_activity(responses, mock_elements_worker):
719
+ """Test an update call with feature enabled triggers an API call"""
720
+ responses.add(
721
+ responses.PUT,
722
+ "http://testserver/api/v1/workers/versions/56785678-5678-5678-5678-567856785678/activity/",
723
+ status=200,
724
+ json={
725
+ "element_id": "1234-deadbeef",
726
+ "process_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff",
727
+ "state": "processed",
728
+ },
729
+ )
730
+
731
+ out = mock_elements_worker.update_activity("1234-deadbeef", ActivityState.Processed)
732
+
733
+ # Check the response received by worker
734
+ assert out is True
735
+
736
+ assert len(responses.calls) == len(BASE_API_CALLS) + 1
737
+ assert [
738
+ (call.request.method, call.request.url) for call in responses.calls
739
+ ] == BASE_API_CALLS + [
740
+ (
741
+ "PUT",
742
+ "http://testserver/api/v1/workers/versions/56785678-5678-5678-5678-567856785678/activity/",
743
+ ),
744
+ ]
745
+
746
+ # Check the request sent by worker
747
+ assert json.loads(responses.calls[-1].request.body) == {
748
+ "element_id": "1234-deadbeef",
749
+ "process_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeffff",
750
+ "state": "processed",
751
+ }