aboutsummaryrefslogtreecommitdiff
path: root/tests/wxet
diff options
context:
space:
mode:
authorMax Nanis2026-03-06 16:49:46 -0500
committerMax Nanis2026-03-06 16:49:46 -0500
commit91d040211a4ed6e4157896256a762d3854777b5e (patch)
treecd95922ea4257dc8d3f4e4cbe8534474709a20dc /tests/wxet
downloadgeneralresearch-91d040211a4ed6e4157896256a762d3854777b5e.tar.gz
generalresearch-91d040211a4ed6e4157896256a762d3854777b5e.zip
Initial commitv3.3.4
Diffstat (limited to 'tests/wxet')
-rw-r--r--tests/wxet/__init__.py0
-rw-r--r--tests/wxet/models/__init__.py0
-rw-r--r--tests/wxet/models/test_definitions.py113
-rw-r--r--tests/wxet/models/test_finish_type.py136
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)