Skip to content

Commit 6acb5f2

Browse files
committed
fixing phone
1 parent 20edfc2 commit 6acb5f2

File tree

8 files changed

+55
-37
lines changed

8 files changed

+55
-37
lines changed

packages/pytest-simcore/src/pytest_simcore/helpers/faker_factories.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ def random_thumbnail_url(fake: Faker):
3434
return fake.image_url(width=32, height=32)
3535

3636

37+
def random_phone_number(faker: Faker) -> str:
38+
# NOTE: faker.phone_number() does not validate with `phonenumbers` library.
39+
phone = faker.random_element(["+41763456789", "+19104630364", "+13013044567"])
40+
tail = f"{faker.pyint(100, 999)}"
41+
return phone[: -len(tail)] + tail # ensure phone keeps its length
42+
43+
3744
def _compute_hash(password: str) -> str:
3845
try:
3946
# 'passlib' will be used only if already installed.
@@ -105,7 +112,7 @@ def random_pre_registration_details(
105112
"pre_first_name": fake.first_name(),
106113
"pre_last_name": fake.last_name(),
107114
"pre_email": fake.email(),
108-
"pre_phone": fake.phone_number(),
115+
"pre_phone": random_phone_number(fake),
109116
"institution": fake.company(),
110117
"address": fake.address().replace("\n", ", "),
111118
"city": fake.city(),

services/web/server/tests/conftest.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from pydantic import TypeAdapter
2626
from pytest_mock import MockerFixture
2727
from pytest_simcore.helpers.assert_checks import assert_status
28+
from pytest_simcore.helpers.faker_factories import random_phone_number
2829
from pytest_simcore.helpers.monkeypatch_envs import EnvVarsDict, setenvs_from_dict
2930
from pytest_simcore.helpers.webserver_login import LoggedUser
3031
from pytest_simcore.helpers.webserver_users import NewUser, UserInfoDict
@@ -145,10 +146,8 @@ def fake_project(tests_data_dir: Path) -> ProjectDict:
145146

146147

147148
@pytest.fixture
148-
def user_phone(faker: Faker) -> PhoneNumberStr:
149-
phone = faker.random_element(["+41763456789", "+19104630364", "+13013044567"])
150-
tail = f"{faker.pyint(100, 999)}"
151-
valid_phone = phone[: -len(tail)] + tail # ensure phone keeps its length
149+
def user_phone_number(faker: Faker) -> PhoneNumberStr:
150+
valid_phone = random_phone_number(faker)
152151
assert TypeAdapter(PhoneNumberStr).validate_python(valid_phone) == valid_phone
153152
return valid_phone
154153

@@ -166,7 +165,10 @@ async def user(client: TestClient) -> AsyncIterator[UserInfoDict]:
166165

167166
@pytest.fixture
168167
async def logged_user(
169-
client: TestClient, user_role: UserRole, faker: Faker, user_phone: PhoneNumberStr
168+
client: TestClient,
169+
user_role: UserRole,
170+
faker: Faker,
171+
user_phone_number: PhoneNumberStr,
170172
) -> AsyncIterator[UserInfoDict]:
171173
"""adds a user in db and logs in with client
172174
@@ -178,7 +180,7 @@ async def logged_user(
178180
"role": user_role.name,
179181
"first_name": faker.first_name(),
180182
"last_name": faker.last_name(),
181-
"phone": user_phone,
183+
"phone": user_phone_number,
182184
},
183185
check_if_succeeds=user_role != UserRole.ANONYMOUS,
184186
) as user:

services/web/server/tests/unit/with_dbs/03/invitations/test_products_rest_invitations.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from pytest_simcore.helpers.webserver_users import UserInfoDict
2424
from servicelib.aiohttp import status
2525
from simcore_postgres_database.models.users import UserRole
26+
from simcore_service_webserver.models import PhoneNumberStr
2627

2728

2829
@pytest.mark.parametrize(
@@ -131,13 +132,14 @@ async def test_pre_registration_and_invitation_workflow(
131132
expected_status: HTTPStatus,
132133
guest_email: str,
133134
faker: Faker,
135+
user_phone_number: PhoneNumberStr,
134136
):
135137
requester_info = {
136138
"firstName": faker.first_name(),
137139
"lastName": faker.last_name(),
138140
"email": guest_email,
139141
"companyName": faker.company(),
140-
"phone": faker.phone_number(),
142+
"phone": user_phone_number,
141143
# billing info
142144
"address": faker.address().replace("\n", ", "),
143145
"city": faker.city(),

services/web/server/tests/unit/with_dbs/03/invitations/test_users_accounts_rest_registration.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
users_pre_registration_details,
4343
)
4444
from simcore_service_webserver.db.plugin import get_asyncpg_engine
45+
from simcore_service_webserver.models import PhoneNumberStr
4546

4647

4748
@pytest.fixture
@@ -115,13 +116,16 @@ async def test_access_rights_on_search_users_only_product_owners_can_access(
115116

116117

117118
@pytest.fixture
118-
def account_request_form(faker: Faker) -> dict[str, Any]:
119+
def account_request_form(
120+
faker: Faker,
121+
user_phone_number: PhoneNumberStr,
122+
) -> dict[str, Any]:
119123
# This is AccountRequestInfo.form
120124
form = {
121125
"firstName": faker.first_name(),
122126
"lastName": faker.last_name(),
123127
"email": faker.email(),
124-
"phone": faker.phone_number(),
128+
"phone": user_phone_number,
125129
"company": faker.company(),
126130
# billing info
127131
"address": faker.address().replace("\n", ", "),

services/web/server/tests/unit/with_dbs/03/login/conftest.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,6 @@ def app_environment(
7676
return {**app_environment, **envs_plugins, **envs_login, **envs_twilio}
7777

7878

79-
@pytest.fixture
80-
def user_phone_number(faker: Faker) -> str:
81-
return faker.phone_number()
82-
83-
8479
@pytest.fixture
8580
def fake_weak_password(faker: Faker) -> str:
8681
return faker.password(

services/web/server/tests/unit/with_dbs/03/test_users_rest_models.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,23 @@
1414
from faker import Faker
1515
from models_library.api_schemas_webserver.auth import AccountRequestInfo
1616
from pytest_simcore.helpers.faker_factories import random_pre_registration_details
17+
from simcore_service_webserver.models import PhoneNumberStr
1718
from simcore_service_webserver.users._controller.rest._rest_schemas import (
1819
MAX_BYTES_SIZE_EXTRAS,
1920
UserAccountRestPreRegister,
2021
)
2122

2223

2324
@pytest.fixture
24-
def account_request_form(faker: Faker) -> dict[str, Any]:
25+
def account_request_form(
26+
faker: Faker, user_phone_number: PhoneNumberStr
27+
) -> dict[str, Any]:
2528
# This is AccountRequestInfo.form
2629
form = {
2730
"firstName": faker.first_name(),
2831
"lastName": faker.last_name(),
2932
"email": faker.email(),
30-
"phone": faker.phone_number(),
33+
"phone": user_phone_number,
3134
"company": faker.company(),
3235
# billing info
3336
"address": faker.address().replace("\n", ", "),

services/web/server/tests/unit/with_dbs/03/test_users_rest_profiles.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from aiohttp.test_utils import TestClient
1818
from aiopg.sa.connection import SAConnection
1919
from common_library.users_enums import UserRole
20-
from faker import Faker
2120
from models_library.api_schemas_webserver.groups import GroupUserGet
2221
from models_library.api_schemas_webserver.users import (
2322
MyProfileRestGet,
@@ -33,6 +32,7 @@
3332
from pytest_simcore.helpers.webserver_users import NewUser, UserInfoDict
3433
from servicelib.aiohttp import status
3534
from servicelib.rest_constants import RESPONSE_MODEL_POLICY
35+
from simcore_service_webserver.models import PhoneNumberStr
3636
from simcore_service_webserver.user_preferences._service import (
3737
get_frontend_user_preferences_aggregation,
3838
)
@@ -602,7 +602,7 @@ async def test_phone_registration_basic_workflow(
602602
user_role: UserRole,
603603
logged_user: UserInfoDict,
604604
client: TestClient,
605-
faker: Faker,
605+
user_phone_number: PhoneNumberStr,
606606
):
607607
assert client.app
608608

@@ -615,7 +615,7 @@ async def test_phone_registration_basic_workflow(
615615
initial_phone = initial_profile.phone
616616

617617
# REGISTER phone number
618-
new_phone = faker.phone_number()
618+
new_phone = user_phone_number
619619
url = client.app.router["my_phone_register"].url_for()
620620
resp = await client.post(
621621
f"{url}",
@@ -658,7 +658,7 @@ async def test_phone_registration_workflow(
658658
user_role: UserRole,
659659
logged_user: UserInfoDict,
660660
client: TestClient,
661-
faker: Faker,
661+
user_phone_number: PhoneNumberStr,
662662
):
663663
assert client.app
664664

@@ -671,7 +671,7 @@ async def test_phone_registration_workflow(
671671
initial_phone = initial_profile.phone
672672

673673
# STEP 1: REGISTER phone number
674-
new_phone = faker.phone_number()
674+
new_phone = user_phone_number
675675
url = client.app.router["my_phone_register"].url_for()
676676
resp = await client.post(
677677
f"{url}",
@@ -714,12 +714,12 @@ async def test_phone_registration_with_resend(
714714
user_role: UserRole,
715715
logged_user: UserInfoDict,
716716
client: TestClient,
717-
faker: Faker,
717+
user_phone_number: PhoneNumberStr,
718718
):
719719
assert client.app
720720

721721
# STEP 1: REGISTER phone number
722-
new_phone = faker.phone_number()
722+
new_phone = user_phone_number
723723
url = client.app.router["my_phone_register"].url_for()
724724
resp = await client.post(
725725
f"{url}",
@@ -760,12 +760,12 @@ async def test_phone_registration_change_existing_phone(
760760
user_role: UserRole,
761761
logged_user: UserInfoDict,
762762
client: TestClient,
763-
faker: Faker,
763+
user_phone_number: PhoneNumberStr,
764764
):
765765
assert client.app
766766

767767
# Set initial phone
768-
first_phone = faker.phone_number()
768+
first_phone = user_phone_number
769769
url = client.app.router["my_phone_register"].url_for()
770770
resp = await client.post(
771771
f"{url}",
@@ -785,7 +785,8 @@ async def test_phone_registration_change_existing_phone(
785785
await assert_status(resp, status.HTTP_204_NO_CONTENT)
786786

787787
# Change to new phone
788-
new_phone = faker.phone_number()
788+
# Create a different phone number by changing the last digits
789+
new_phone = user_phone_number[:-4] + "9999"
789790
url = client.app.router["my_phone_register"].url_for()
790791
resp = await client.post(
791792
f"{url}",
@@ -859,12 +860,12 @@ async def test_phone_confirm_with_wrong_code(
859860
user_role: UserRole,
860861
logged_user: UserInfoDict,
861862
client: TestClient,
862-
faker: Faker,
863+
user_phone_number: PhoneNumberStr,
863864
):
864865
assert client.app
865866

866867
# STEP 1: REGISTER phone number
867-
new_phone = faker.phone_number()
868+
new_phone = user_phone_number
868869
url = client.app.router["my_phone_register"].url_for()
869870
resp = await client.post(
870871
f"{url}",
@@ -890,12 +891,12 @@ async def test_phone_confirm_with_invalid_code_format(
890891
user_role: UserRole,
891892
logged_user: UserInfoDict,
892893
client: TestClient,
893-
faker: Faker,
894+
user_phone_number: PhoneNumberStr,
894895
):
895896
assert client.app
896897

897898
# STEP 1: REGISTER phone number
898-
new_phone = faker.phone_number()
899+
new_phone = user_phone_number
899900
url = client.app.router["my_phone_register"].url_for()
900901
resp = await client.post(
901902
f"{url}",
@@ -950,12 +951,12 @@ async def test_phone_confirm_with_empty_code(
950951
user_role: UserRole,
951952
logged_user: UserInfoDict,
952953
client: TestClient,
953-
faker: Faker,
954+
user_phone_number: PhoneNumberStr,
954955
):
955956
assert client.app
956957

957958
# STEP 1: REGISTER phone number
958-
new_phone = faker.phone_number()
959+
new_phone = user_phone_number
959960
url = client.app.router["my_phone_register"].url_for()
960961
resp = await client.post(
961962
f"{url}",
@@ -988,7 +989,7 @@ async def test_phone_register_access_rights(
988989
logged_user: UserInfoDict,
989990
client: TestClient,
990991
expected: HTTPStatus,
991-
faker: Faker,
992+
user_phone_number: PhoneNumberStr,
992993
):
993994
assert client.app
994995

@@ -997,7 +998,7 @@ async def test_phone_register_access_rights(
997998
resp = await client.post(
998999
f"{url}",
9991000
json={
1000-
"phone": faker.phone_number(),
1001+
"phone": user_phone_number,
10011002
},
10021003
)
10031004
await assert_status(resp, expected)

services/web/server/tests/unit/with_dbs/04/wallets/payments/conftest.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
users_pre_registration_details,
4040
)
4141
from simcore_service_webserver.db.models import UserRole
42+
from simcore_service_webserver.models import PhoneNumberStr
4243
from simcore_service_webserver.payments._methods_api import (
4344
_fake_cancel_creation_of_wallet_payment_method,
4445
_fake_delete_wallet_payment_method,
@@ -320,7 +321,10 @@ async def _get_invoice_url(
320321

321322
@pytest.fixture
322323
def setup_user_pre_registration_details_db(
323-
postgres_db: sa.engine.Engine, logged_user: UserInfoDict, faker: Faker
324+
postgres_db: sa.engine.Engine,
325+
logged_user: UserInfoDict,
326+
faker: Faker,
327+
user_phone_number: PhoneNumberStr,
324328
) -> Iterator[int]:
325329
with postgres_db.connect() as con:
326330
result = con.execute(
@@ -330,7 +334,7 @@ def setup_user_pre_registration_details_db(
330334
pre_email=faker.email(),
331335
pre_first_name=faker.first_name(),
332336
pre_last_name=faker.last_name(),
333-
pre_phone=faker.phone_number(),
337+
pre_phone=user_phone_number,
334338
institution=faker.company(),
335339
address=faker.address().replace("\n", ", "),
336340
city=faker.city(),

0 commit comments

Comments
 (0)