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
|
from __future__ import annotations
from collections.abc import Callable
from typing import TYPE_CHECKING
from uuid import uuid4
import pytest
from pytest import FixtureRequest as Request
from generalresearch.models.definitions import Source
from generalresearch.models.thl.survey.model import Buyer, Survey
if TYPE_CHECKING:
from generalresearch.managers.thl.buyer import BuyerManager
from generalresearch.managers.thl.survey import SurveyManager
from generalresearch.models.thl.product import (
PayoutConfig,
Product,
)
# === THL ===
@pytest.fixture()
def payout_config(request: Request) -> PayoutConfig:
from generalresearch.models.thl.product import (
PayoutConfig,
PayoutTransformation,
PayoutTransformationPercentArgs,
)
return (
request.param
if hasattr(request, "payout_config")
else PayoutConfig(
payout_format="${payout/100:.2f}",
payout_transformation=PayoutTransformation(
f="payout_transformation_percent",
kwargs=PayoutTransformationPercentArgs(pct=0.40),
),
)
)
@pytest.fixture
def product_user_wallet_yes(
product_factory: Callable[..., Product],
payout_config: PayoutConfig,
) -> Product:
from generalresearch.models.thl.product import UserWalletConfig
return product_factory(
payout_config=payout_config, user_wallet_config=UserWalletConfig(enabled=True)
)
@pytest.fixture
def product_user_wallet_no(
product_factory: Callable[..., Product],
) -> Product:
from generalresearch.models.thl.product import UserWalletConfig
return product_factory(user_wallet_config=UserWalletConfig(enabled=False))
@pytest.fixture
def product_amt_true(
product_factory: Callable[..., Product],
payout_config: PayoutConfig,
) -> Product:
from generalresearch.models.thl.product import UserWalletConfig
return product_factory(
user_wallet_config=UserWalletConfig(amt=True, enabled=True),
payout_config=payout_config,
)
@pytest.fixture(scope="session")
def buyer(buyer_manager: BuyerManager) -> Buyer:
buyer_code = uuid4().hex
buyer_manager.bulk_get_or_create(source=Source.TESTING, codes=[buyer_code])
b = Buyer(
source=Source.TESTING, code=buyer_code, label=f"test-buyer-{buyer_code[:8]}"
)
buyer_manager.update(b)
return b
@pytest.fixture(scope="session")
def buyer_factory(buyer_manager: BuyerManager) -> Callable[..., Buyer]:
def _inner() -> Buyer:
return buyer_manager.bulk_get_or_create(
source=Source.TESTING, codes=[uuid4().hex]
)[0]
return _inner
@pytest.fixture(scope="session")
def survey(survey_manager: SurveyManager, buyer: Buyer) -> Survey:
s = Survey(source=Source.TESTING, survey_id=uuid4().hex, buyer_code=buyer.code)
survey_manager.create_bulk([s])
return s
@pytest.fixture(scope="session")
def survey_factory(
survey_manager: SurveyManager, buyer_factory: Callable[..., Buyer]
) -> Callable[..., Survey]:
def _inner(buyer: Buyer | None = None) -> Survey:
buyer = buyer or buyer_factory()
s = Survey(
source=Source.TESTING,
survey_id=uuid4().hex,
buyer_code=buyer.code,
buyer_id=buyer.id,
)
survey_manager.create_bulk([s])
return s
return _inner
|