aboutsummaryrefslogtreecommitdiff
path: root/tests/models/morning/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/models/morning/test.py')
-rw-r--r--tests/models/morning/test.py199
1 files changed, 199 insertions, 0 deletions
diff --git a/tests/models/morning/test.py b/tests/models/morning/test.py
new file mode 100644
index 0000000..cf4982d
--- /dev/null
+++ b/tests/models/morning/test.py
@@ -0,0 +1,199 @@
+from datetime import datetime, timezone
+
+from generalresearch.models.morning.question import MorningQuestion
+
+bid = {
+ "buyer_account_id": "ab180f06-aa2b-4b8b-9b87-1031bfe8b16b",
+ "buyer_id": "5f3b4daa-6ff0-4826-a551-9d4572ea1c84",
+ "country_id": "us",
+ "end_date": "2024-07-19T09:01:13.520243Z",
+ "exclusions": [
+ {"group_id": "66070689-5198-5782-b388-33daa74f3269", "lockout_period": 28}
+ ],
+ "id": "5324c2ac-eca8-4ed0-8b0e-042ba3aa2a85",
+ "language_ids": ["en"],
+ "name": "Ad-Hoc Survey",
+ "published_at": "2024-06-19T09:01:13.520243Z",
+ "quotas": [
+ {
+ "cost_per_interview": 154,
+ "id": "b8ade883-a83d-4d8e-9ef7-953f4b692bd8",
+ "qualifications": [
+ {
+ "id": "age",
+ "response_ids": [
+ "18",
+ "19",
+ "20",
+ "21",
+ "22",
+ "23",
+ "24",
+ "25",
+ "26",
+ "27",
+ "28",
+ "29",
+ "30",
+ "31",
+ "32",
+ "33",
+ "34",
+ ],
+ },
+ {"id": "gender", "response_ids": ["1"]},
+ {"id": "hispanic", "response_ids": ["1"]},
+ ],
+ "statistics": {
+ "length_of_interview": 1353,
+ "median_length_of_interview": 1353,
+ "num_available": 3,
+ "num_completes": 7,
+ "num_failures": 0,
+ "num_in_progress": 4,
+ "num_over_quotas": 0,
+ "num_qualified": 27,
+ "num_quality_terminations": 14,
+ "num_timeouts": 1,
+ "qualified_conversion": 30,
+ },
+ }
+ ],
+ "state": "active",
+ "statistics": {
+ "earnings_per_click": 26,
+ "estimated_length_of_interview": 1140,
+ "incidence_rate": 77,
+ "length_of_interview": 1198,
+ "median_length_of_interview": 1198,
+ "num_available": 70,
+ "num_completes": 360,
+ "num_entrants": 1467,
+ "num_failures": 0,
+ "num_in_progress": 48,
+ "num_over_quotas": 10,
+ "num_qualified": 1121,
+ "num_quality_terminations": 584,
+ "num_screenouts": 380,
+ "num_timeouts": 85,
+ "qualified_conversion": 34,
+ "system_conversion": 25,
+ },
+ "supplier_exclusive": False,
+ "survey_type": "ad_hoc",
+ "timeout": 21600,
+ "topic_id": "general",
+}
+
+bid = {
+ "_experimental_single_use_qualifications": [
+ {
+ "id": "electric_car_test",
+ "name": "Electric Car Test",
+ "text": "What kind of vehicle do you drive?",
+ "language_ids": ["en"],
+ "responses": [{"id": "1", "text": "electric"}, {"id": "2", "text": "gas"}],
+ "type": "multiple_choice",
+ }
+ ],
+ "buyer_account_id": "0b6f207c-96e1-4dce-b032-566a815ad263",
+ "buyer_id": "9020f6f3-db41-470a-a5d7-c04fa2da9156",
+ "closed_at": "2022-01-01T00:00:00Z",
+ "country_id": "us",
+ "end_date": "2022-01-01T00:00:00Z",
+ "exclusions": [
+ {"group_id": "0bbae805-5a80-42e3-8d5f-cb056a0f825d", "lockout_period": 7}
+ ],
+ "id": "000f09a3-bc25-4adc-a443-a9975800e7ac",
+ "language_ids": ["en", "es"],
+ "name": "My Example Survey",
+ "published_at": "2021-12-30T00:00:00Z",
+ "quotas": [
+ {
+ "_experimental_single_use_qualifications": [
+ {"id": "electric_car_test", "response_ids": ["1"]}
+ ],
+ "cost_per_interview": 100,
+ "id": "6a7d0190-e6ad-4a59-9945-7ba460517f2b",
+ "qualifications": [
+ {"id": "gender", "response_ids": ["1"]},
+ {"id": "age", "response_ids": ["18", "19", "20", "21"]},
+ ],
+ "statistics": {
+ "length_of_interview": 600,
+ "median_length_of_interview": 600,
+ "num_available": 500,
+ "num_completes": 100,
+ "num_failures": 0,
+ "num_in_progress": 0,
+ "num_over_quotas": 0,
+ "num_qualified": 100,
+ "num_quality_terminations": 0,
+ "num_timeouts": 0,
+ "qualified_conversion": 100,
+ },
+ }
+ ],
+ "state": "active",
+ "statistics": {
+ "earnings_per_click": 50,
+ "estimated_length_of_interview": 720,
+ "incidence_rate": 100,
+ "length_of_interview": 600,
+ "median_length_of_interview": 600,
+ "num_available": 500,
+ "num_completes": 100,
+ "num_entrants": 100,
+ "num_failures": 0,
+ "num_in_progress": 0,
+ "num_over_quotas": 0,
+ "num_qualified": 100,
+ "num_quality_terminations": 0,
+ "num_screenouts": 0,
+ "num_timeouts": 0,
+ "qualified_conversion": 100,
+ "system_conversion": 100,
+ },
+ "supplier_exclusive": False,
+ "survey_type": "ad_hoc",
+ "timeout": 3600,
+ "topic_id": "general",
+}
+
+# what gets run in MorningAPI._format_bid
+bid["language_isos"] = ("eng",)
+bid["country_iso"] = "us"
+bid["end_date"] = datetime(2024, 7, 19, 9, 1, 13, 520243, tzinfo=timezone.utc)
+bid["published_at"] = datetime(2024, 6, 19, 9, 1, 13, 520243, tzinfo=timezone.utc)
+bid.update(bid["statistics"])
+bid["qualified_conversion"] /= 100
+bid["system_conversion"] /= 100
+for quota in bid["quotas"]:
+ quota.update(quota["statistics"])
+ quota["qualified_conversion"] /= 100
+ quota["cost_per_interview"] /= 100
+if "_experimental_single_use_qualifications" in bid:
+ bid["experimental_single_use_qualifications"] = [
+ MorningQuestion.from_api(q, bid["country_iso"], "eng")
+ for q in bid["_experimental_single_use_qualifications"]
+ ]
+
+
+class TestMorningBid:
+
+ def test_model_validate(self):
+ from generalresearch.models.morning.survey import MorningBid
+
+ s = MorningBid.model_validate(bid)
+ d = s.model_dump(mode="json")
+ d = s.to_mysql()
+
+ def test_manager(self):
+ # todo: credentials n stuff
+ pass
+ # sql_helper = SqlHelper(host="localhost", user="root", password="", db="300large-morning")
+ # m = MorningSurveyManager(sql_helper=sql_helper)
+ # s = MorningBid.model_validate(bid)
+ # m.create(s)
+ # res = m.get_survey_library()[0]
+ # MorningBid.model_validate(res)