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
|
from __future__ import annotations
from collections.abc import Callable
from uuid import uuid4
import pytest
from generalresearch.managers.thl.user_manager.user_metadata_manager import (
UserMetadataManager,
)
from generalresearch.models.thl.product import Product
from generalresearch.models.thl.user import User
from generalresearch.models.thl.user_profile import UserMetadata
class TestUserMetadataManager:
def test_get_notset(
self,
user: User,
user_metadata_manager: UserMetadataManager,
):
# The row in the db won't exist. It just returns the default obj with everything None (except for the user_id)
um1 = user_metadata_manager.get(user_id=user.user_id)
assert um1 == UserMetadata(user_id=user.user_id)
def test_create(
self,
user_factory: Callable[..., User],
product: Product,
user_metadata_manager: UserMetadataManager,
):
u1: User = user_factory(product=product)
email_address = f"{uuid4().hex}@example.com"
um = UserMetadata(user_id=u1.user_id, email_address=email_address)
# This happens in the model itself, nothing to do with the manager (a model_validator)
assert um.email_sha256 is not None
user_metadata_manager.update(um)
um2 = user_metadata_manager.get(email_address=email_address)
assert um == um2
def test_create_no_email(
self,
product: Product,
user_factory: Callable[..., User],
user_metadata_manager: UserMetadataManager,
):
u1: User = user_factory(product=product)
um = UserMetadata(user_id=u1.user_id)
assert um.email_sha256 is None
user_metadata_manager.update(um)
um2 = user_metadata_manager.get(user_id=u1.user_id)
assert um == um2
def test_update(
self,
product: Product,
user_factory: Callable[..., User],
user_metadata_manager: UserMetadataManager,
):
u: User = user_factory(product=product)
email_address = f"{uuid4().hex}@example1.com"
um = UserMetadata(user_id=u.user_id, email_address=email_address)
user_metadata_manager.update(user_metadata=um)
um.email_address = email_address.replace("example1", "example2")
user_metadata_manager.update(user_metadata=um)
um2 = user_metadata_manager.get(email_address=um.email_address)
assert um2.email_address != email_address
assert um2 == UserMetadata(
user_id=u.user_id,
email_address=email_address.replace("example1", "example2"),
)
def test_filter(
self, user_factory: Callable[..., User], product: Product, user_metadata_manager
):
user1: User = user_factory(product=product)
user2: User = user_factory(product=product)
email_address = f"{uuid4().hex}@example.com"
res = user_metadata_manager.filter(email_addresses=[email_address])
assert len(res) == 0
# Create 2 user metadata with the same email address
user_metadata_manager.update(
user_metadata=UserMetadata(
user_id=user1.user_id, email_address=email_address
)
)
user_metadata_manager.update(
user_metadata=UserMetadata(
user_id=user2.user_id, email_address=email_address
)
)
res = user_metadata_manager.filter(email_addresses=[email_address])
assert len(res) == 2
with pytest.raises(expected_exception=ValueError) as e:
res = user_metadata_manager.get(email_address=email_address)
assert "More than 1 result returned!" in str(e.value)
|