diff options
| author | Max Nanis | 2026-03-06 16:49:46 -0500 |
|---|---|---|
| committer | Max Nanis | 2026-03-06 16:49:46 -0500 |
| commit | 91d040211a4ed6e4157896256a762d3854777b5e (patch) | |
| tree | cd95922ea4257dc8d3f4e4cbe8534474709a20dc /tests/wxet | |
| download | generalresearch-91d040211a4ed6e4157896256a762d3854777b5e.tar.gz generalresearch-91d040211a4ed6e4157896256a762d3854777b5e.zip | |
Initial commitv3.3.4
Diffstat (limited to 'tests/wxet')
| -rw-r--r-- | tests/wxet/__init__.py | 0 | ||||
| -rw-r--r-- | tests/wxet/models/__init__.py | 0 | ||||
| -rw-r--r-- | tests/wxet/models/test_definitions.py | 113 | ||||
| -rw-r--r-- | tests/wxet/models/test_finish_type.py | 136 |
4 files changed, 249 insertions, 0 deletions
diff --git a/tests/wxet/__init__.py b/tests/wxet/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/wxet/__init__.py diff --git a/tests/wxet/models/__init__.py b/tests/wxet/models/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/wxet/models/__init__.py diff --git a/tests/wxet/models/test_definitions.py b/tests/wxet/models/test_definitions.py new file mode 100644 index 0000000..543b9f1 --- /dev/null +++ b/tests/wxet/models/test_definitions.py @@ -0,0 +1,113 @@ +import pytest + + +class TestWXETStatusCode1: + + def test_is_pre_task_entry_fail_pre(self): + from generalresearch.wxet.models.definitions import ( + WXETStatusCode1, + ) + + assert WXETStatusCode1.UNKNOWN.is_pre_task_entry_fail + assert WXETStatusCode1.WXET_FAIL.is_pre_task_entry_fail + assert WXETStatusCode1.WXET_ABANDON.is_pre_task_entry_fail + + def test_is_pre_task_entry_fail_post(self): + from generalresearch.wxet.models.definitions import ( + WXETStatusCode1, + ) + + assert not WXETStatusCode1.BUYER_OVER_QUOTA.is_pre_task_entry_fail + assert not WXETStatusCode1.BUYER_DUPLICATE.is_pre_task_entry_fail + assert not WXETStatusCode1.BUYER_TASK_NOT_AVAILABLE.is_pre_task_entry_fail + + assert not WXETStatusCode1.BUYER_ABANDON.is_pre_task_entry_fail + assert not WXETStatusCode1.BUYER_FAIL.is_pre_task_entry_fail + assert not WXETStatusCode1.BUYER_QUALITY_FAIL.is_pre_task_entry_fail + assert not WXETStatusCode1.BUYER_POSTBACK_NOT_RECEIVED.is_pre_task_entry_fail + assert not WXETStatusCode1.COMPLETE.is_pre_task_entry_fail + + +class TestCheckWXETStatusConsistent: + + def test_completes(self): + + from generalresearch.wxet.models.definitions import ( + WXETStatus, + WXETStatusCode1, + check_wxet_status_consistent, + ) + + with pytest.raises(AssertionError) as cm: + check_wxet_status_consistent( + status=WXETStatus.COMPLETE, + status_code_1=WXETStatusCode1.UNKNOWN, + status_code_2=None, + ) + + assert ( + "Invalid StatusCode1 when Status=COMPLETE. Use WXETStatusCode1.COMPLETE" + == str(cm.value) + ) + + def test_abandon(self): + + from generalresearch.wxet.models.definitions import ( + WXETStatus, + WXETStatusCode1, + check_wxet_status_consistent, + ) + + with pytest.raises(AssertionError) as cm: + check_wxet_status_consistent( + status=WXETStatus.ABANDON, + status_code_1=WXETStatusCode1.COMPLETE, + status_code_2=None, + ) + assert ( + "Invalid StatusCode1 when Status=ABANDON. Use WXET_ABANDON or BUYER_ABANDON" + == str(cm.value) + ) + + def test_fail(self): + + from generalresearch.wxet.models.definitions import ( + WXETStatus, + WXETStatusCode1, + check_wxet_status_consistent, + ) + + for sc1 in [ + WXETStatusCode1.COMPLETE, + WXETStatusCode1.WXET_ABANDON, + WXETStatusCode1.WXET_ABANDON, + ]: + with pytest.raises(AssertionError) as cm: + check_wxet_status_consistent( + status=WXETStatus.FAIL, + status_code_1=sc1, + status_code_2=None, + ) + assert "Invalid StatusCode1 when Status=FAIL." == str(cm.value) + + def test_status_code_2(self): + """Any StatusCode2 should fail if the StatusCode1 isn't + StatusCode1.WXET_FAIL + """ + + from generalresearch.wxet.models.definitions import ( + WXETStatus, + WXETStatusCode1, + WXETStatusCode2, + check_wxet_status_consistent, + ) + + for sc2 in WXETStatusCode2: + with pytest.raises(AssertionError) as cm: + check_wxet_status_consistent( + status=WXETStatus.FAIL, + status_code_1=WXETStatusCode1.COMPLETE, + status_code_2=sc2, + ) + + assert "Invalid StatusCode1 when Status=FAIL." == str(cm.value) diff --git a/tests/wxet/models/test_finish_type.py b/tests/wxet/models/test_finish_type.py new file mode 100644 index 0000000..7bdeea7 --- /dev/null +++ b/tests/wxet/models/test_finish_type.py @@ -0,0 +1,136 @@ +import pytest + +from generalresearch.wxet.models.definitions import WXETStatus, WXETStatusCode1 +from generalresearch.wxet.models.finish_type import FinishType, is_a_finish + + +class TestFinishType: + + def test_init_entrance(self): + instance = FinishType.ENTRANCE + finish_statuses = instance.finish_statuses + assert isinstance(finish_statuses, set) + assert 5 == len(finish_statuses) + + def test_init_complete(self): + instance = FinishType.COMPLETE + finish_statuses = instance.finish_statuses + assert isinstance(finish_statuses, set) + assert 1 == len(finish_statuses) + + def test_init_fail_or_complete(self): + instance = FinishType.FAIL_OR_COMPLETE + finish_statuses = instance.finish_statuses + assert isinstance(finish_statuses, set) + assert 2 == len(finish_statuses) + + def test_init_fail(self): + instance = FinishType.FAIL + finish_statuses = instance.finish_statuses + assert isinstance(finish_statuses, set) + assert 1 == len(finish_statuses) + + +class TestFunctionIsAFinish: + + def test_init_ft_entrance(self): + assert is_a_finish( + status=None, + status_code_1=None, + finish_type=FinishType.ENTRANCE, + ) + + assert is_a_finish( + status=WXETStatus.ABANDON, + status_code_1=None, + finish_type=FinishType.ENTRANCE, + ) + + assert is_a_finish( + status=WXETStatus.ABANDON, + status_code_1=WXETStatusCode1.BUYER_ABANDON, + finish_type=FinishType.ENTRANCE, + ) + + # If it's a WXET Abandon, they ever entered the Task so don't + # consider it a Finish + assert not is_a_finish( + status=WXETStatus.ABANDON, + status_code_1=WXETStatusCode1.WXET_ABANDON, + finish_type=FinishType.ENTRANCE, + ) + + def test_init_ft_complete(self): + assert is_a_finish( + status=WXETStatus.COMPLETE, + status_code_1=None, + finish_type=FinishType.COMPLETE, + ) + + assert is_a_finish( + status=WXETStatus.COMPLETE, + status_code_1=WXETStatusCode1.COMPLETE, + finish_type=FinishType.COMPLETE, + ) + + def test_init_ft_fail_or_complete(self): + assert is_a_finish( + status=WXETStatus.FAIL, + status_code_1=None, + finish_type=FinishType.FAIL_OR_COMPLETE, + ) + + assert is_a_finish( + status=WXETStatus.FAIL, + status_code_1=WXETStatusCode1.BUYER_FAIL, + finish_type=FinishType.FAIL_OR_COMPLETE, + ) + + # If it's a WXET Fail, the Worker never made it into a WXET Task + # experience, so it should not be considered a Finish + assert not is_a_finish( + status=WXETStatus.FAIL, + status_code_1=WXETStatusCode1.WXET_FAIL, + finish_type=FinishType.FAIL_OR_COMPLETE, + ) + + assert is_a_finish( + status=WXETStatus.COMPLETE, + status_code_1=WXETStatusCode1.COMPLETE, + finish_type=FinishType.FAIL_OR_COMPLETE, + ) + + def test_init_ft_fail(self): + assert is_a_finish( + status=WXETStatus.FAIL, + status_code_1=None, + finish_type=FinishType.FAIL, + ) + + assert is_a_finish( + status=WXETStatus.FAIL, + status_code_1=WXETStatusCode1.BUYER_FAIL, + finish_type=FinishType.FAIL, + ) + + def test_invalid_status_code_1(self): + for ft in FinishType: + for s in WXETStatus: + with pytest.raises(expected_exception=AssertionError) as cm: + is_a_finish( + status=s, + status_code_1=WXETStatus.COMPLETE, + finish_type=ft, + ) + assert "Invalid status_code_1" == str(cm.value) + + def test_invalid_none_status(self): + for ft in FinishType: + for sc1 in WXETStatusCode1: + with pytest.raises(expected_exception=AssertionError) as cm: + is_a_finish( + status=None, + status_code_1=sc1, + finish_type=ft, + ) + assert "Cannot provide status_code_1 without a status" == str(cm.value) |
