Skip to content

Commit 9eadcc7

Browse files
committed
fix tests
1 parent 32db0f4 commit 9eadcc7

File tree

3 files changed

+64
-7
lines changed

3 files changed

+64
-7
lines changed

services/web/server/src/simcore_service_webserver/login/_2fa_api.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
""" two-factor-authentication utils
1+
"""two-factor-authentication utils
22
33
Currently includes two parts:
44
@@ -10,14 +10,14 @@
1010
import asyncio
1111
import logging
1212

13+
import twilio.rest
1314
from aiohttp import web
1415
from models_library.users import UserID
1516
from pydantic import BaseModel, Field
1617
from servicelib.logging_utils import log_decorator
1718
from servicelib.utils_secrets import generate_passcode
1819
from settings_library.twilio import TwilioSettings
1920
from twilio.base.exceptions import TwilioException # type: ignore[import-untyped]
20-
from twilio.rest import Client # type: ignore[import-untyped]
2121

2222
from ..login.errors import SendingVerificationEmailError, SendingVerificationSmsError
2323
from ..products.models import Product
@@ -118,7 +118,8 @@ def _sender():
118118
#
119119
# SEE https://www.twilio.com/docs/sms/quickstart/python
120120
#
121-
client = Client(
121+
# NOTE: this is mocked
122+
client = twilio.rest.Client(
122123
twilio_auth.TWILIO_ACCOUNT_SID, twilio_auth.TWILIO_AUTH_TOKEN
123124
)
124125
message = client.messages.create(**create_kwargs)

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
)
3737
from simcore_service_webserver.login.storage import AsyncpgStorage
3838
from simcore_service_webserver.products import products_web
39+
from simcore_service_webserver.products.errors import UnknownProductError
3940
from simcore_service_webserver.products.models import Product
4041
from simcore_service_webserver.users import preferences_api as user_preferences_api
4142
from twilio.base.exceptions import TwilioRestException
@@ -370,7 +371,7 @@ async def test_send_email_code(
370371
):
371372
request = make_mocked_request("GET", "/dummy", app=client.app)
372373

373-
with pytest.raises(KeyError):
374+
with pytest.raises(UnknownProductError):
374375
# NOTE: this is a fake request and did not go through middlewares
375376
products_web.get_current_product(request)
376377

@@ -418,9 +419,9 @@ async def test_2fa_sms_failure_during_login(
418419
):
419420
assert client.app
420421

421-
# Mocks error in graylog https://monitoring.osparc.io/graylog/search/649e7619ce6e0838a96e9bf1?q=%222FA%22&rangetype=relative&from=172800
422422
mocker.patch(
423-
"simcore_service_webserver.login._2fa_api.TwilioSettings.is_alphanumeric_supported",
423+
# MD: Emulates error in graylog https://monitoring.osparc.io/graylog/search/649e7619ce6e0838a96e9bf1?q=%222FA%22&rangetype=relative&from=172800
424+
"simcore_service_webserver.login._2fa_api.twilio.rest.Client",
424425
autospec=True,
425426
side_effect=TwilioRestException(
426427
status=400,

services/web/server/tests/unit/with_dbs/04/products/test_products_service.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,19 @@
77
import pytest
88
from aiohttp import web
99
from aiohttp.test_utils import TestServer
10+
from models_library.groups import GroupID
1011
from models_library.products import ProductName
11-
from simcore_service_webserver.products import products_service
12+
from pydantic import ValidationError
13+
from servicelib.exceptions import InvalidConfig
14+
from simcore_postgres_database.utils_products_prices import ProductPriceInfo
15+
from simcore_service_webserver.products import _service, products_service
1216
from simcore_service_webserver.products._repository import ProductRepository
1317
from simcore_service_webserver.products.errors import (
1418
MissingStripeConfigError,
1519
ProductPriceNotDefinedError,
20+
ProductTemplateNotFoundError,
1621
)
22+
from simcore_service_webserver.products.models import Product
1723

1824

1925
@pytest.fixture
@@ -25,6 +31,27 @@ def app(
2531
return web_server.app
2632

2733

34+
async def test_load_products(app: web.Application):
35+
products = await _service.load_products(app)
36+
assert isinstance(products, list)
37+
assert all(isinstance(product, Product) for product in products)
38+
39+
40+
async def test_load_products_validation_error(app: web.Application, mocker):
41+
mock_repo = mocker.patch(
42+
"simcore_service_webserver.products._service.ProductRepository.create_from_app"
43+
)
44+
mock_repo.return_value.list_products.side_effect = ValidationError("Invalid data")
45+
46+
with pytest.raises(InvalidConfig, match="Invalid product configuration in db"):
47+
await _service.load_products(app)
48+
49+
50+
async def test_get_default_product_name(app: web.Application):
51+
default_product_name = await _service.get_default_product_name(app)
52+
assert isinstance(default_product_name, ProductName)
53+
54+
2855
async def test_get_product(app: web.Application, default_product_name: ProductName):
2956

3057
product = products_service.get_product(app, product_name=default_product_name)
@@ -65,3 +92,31 @@ async def test_get_credit_amount(
6592
await products_service.get_credit_amount(
6693
app, dollar_amount=1, product_name=default_product_name
6794
)
95+
96+
97+
async def test_list_products_names(app: web.Application):
98+
product_names = await products_service.list_products_names(app)
99+
assert isinstance(product_names, list)
100+
assert all(isinstance(name, ProductName) for name in product_names)
101+
102+
103+
async def test_get_credit_price_info(
104+
app: web.Application, default_product_name: ProductName
105+
):
106+
price_info = await _service.get_credit_price_info(
107+
app, product_name=default_product_name
108+
)
109+
assert price_info is None or isinstance(price_info, ProductPriceInfo)
110+
111+
112+
async def test_get_template_content(app: web.Application):
113+
template_name = "some_template"
114+
with pytest.raises(ProductTemplateNotFoundError):
115+
await _service.get_template_content(app, template_name=template_name)
116+
117+
118+
async def test_auto_create_products_groups(app: web.Application):
119+
groups = await _service.auto_create_products_groups(app)
120+
assert isinstance(groups, dict)
121+
assert all(isinstance(name, ProductName) for name in groups.keys())
122+
assert all(isinstance(group_id, GroupID) for group_id in groups.values())

0 commit comments

Comments
 (0)