aboutsummaryrefslogtreecommitdiff
path: root/tests/wxet/models/test_finish_type.py
blob: 7bdeea7f27b0a60d6bba96669a447ae403171248 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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)