2024-03-15 10:13:06 +01:00
|
|
|
import arrow
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
import cron
|
|
|
|
from app.db import Session
|
|
|
|
from app.models import (
|
|
|
|
Alias,
|
|
|
|
AppleSubscription,
|
|
|
|
PlanEnum,
|
|
|
|
CoinbaseSubscription,
|
|
|
|
ManualSubscription,
|
|
|
|
Subscription,
|
|
|
|
PartnerUser,
|
|
|
|
PartnerSubscription,
|
|
|
|
User,
|
|
|
|
)
|
|
|
|
from app.proton.utils import get_proton_partner
|
|
|
|
from tests.utils import create_new_user, random_token
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_alias_for_free_user_has_no_alias():
|
|
|
|
user = create_new_user()
|
|
|
|
alias_id = Alias.create_new_random(user).id
|
|
|
|
Session.commit()
|
|
|
|
aliases = list(
|
|
|
|
cron.get_alias_to_check_hibp(arrow.now(), [], alias_id, alias_id + 1)
|
|
|
|
)
|
|
|
|
assert len(aliases) == 0
|
|
|
|
|
|
|
|
|
2024-03-18 16:00:21 +01:00
|
|
|
def test_get_alias_for_lifetime_with_null_hibp_date():
|
2024-03-15 10:13:06 +01:00
|
|
|
user = create_new_user()
|
|
|
|
user.lifetime = True
|
|
|
|
alias_id = Alias.create_new_random(user).id
|
|
|
|
Session.commit()
|
|
|
|
aliases = list(
|
|
|
|
cron.get_alias_to_check_hibp(arrow.now(), [], alias_id, alias_id + 1)
|
|
|
|
)
|
|
|
|
assert alias_id == aliases[0].id
|
|
|
|
|
|
|
|
|
2024-03-18 16:00:21 +01:00
|
|
|
def test_get_alias_for_lifetime_with_old_hibp_date():
|
|
|
|
user = create_new_user()
|
|
|
|
user.lifetime = True
|
|
|
|
alias = Alias.create_new_random(user)
|
|
|
|
alias.hibp_last_check = arrow.now().shift(days=-1)
|
|
|
|
alias_id = alias.id
|
|
|
|
Session.commit()
|
|
|
|
aliases = list(
|
|
|
|
cron.get_alias_to_check_hibp(arrow.now(), [], alias_id, alias_id + 1)
|
|
|
|
)
|
|
|
|
assert alias_id == aliases[0].id
|
|
|
|
|
|
|
|
|
2024-03-15 10:13:06 +01:00
|
|
|
def create_partner_sub(user: User):
|
|
|
|
pu = PartnerUser.create(
|
|
|
|
partner_id=get_proton_partner().id,
|
|
|
|
partner_email=user.email,
|
|
|
|
external_user_id=random_token(10),
|
|
|
|
user_id=user.id,
|
|
|
|
flush=True,
|
|
|
|
)
|
|
|
|
PartnerSubscription.create(
|
|
|
|
partner_user_id=pu.id, end_at=arrow.utcnow().shift(days=15)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
sub_generator_list = [
|
|
|
|
lambda u: AppleSubscription.create(
|
|
|
|
user_id=u.id,
|
|
|
|
expires_date=arrow.now().shift(days=15),
|
|
|
|
original_transaction_id=random_token(10),
|
|
|
|
receipt_data=random_token(10),
|
|
|
|
plan=PlanEnum.monthly,
|
|
|
|
),
|
|
|
|
lambda u: CoinbaseSubscription.create(
|
|
|
|
user_id=u.id,
|
|
|
|
end_at=arrow.now().shift(days=15),
|
|
|
|
),
|
|
|
|
lambda u: ManualSubscription.create(
|
|
|
|
user_id=u.id,
|
|
|
|
end_at=arrow.now().shift(days=15),
|
|
|
|
),
|
|
|
|
lambda u: Subscription.create(
|
|
|
|
user_id=u.id,
|
|
|
|
cancel_url="",
|
|
|
|
update_url="",
|
|
|
|
subscription_id=random_token(10),
|
|
|
|
event_time=arrow.now(),
|
|
|
|
next_bill_date=arrow.now().shift(days=15).date(),
|
|
|
|
plan=PlanEnum.monthly,
|
|
|
|
),
|
|
|
|
create_partner_sub,
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("sub_generator", sub_generator_list)
|
|
|
|
def test_get_alias_for_sub(sub_generator):
|
|
|
|
user = create_new_user()
|
|
|
|
sub_generator(user)
|
|
|
|
alias_id = Alias.create_new_random(user).id
|
|
|
|
Session.commit()
|
|
|
|
aliases = list(
|
|
|
|
cron.get_alias_to_check_hibp(arrow.now(), [], alias_id, alias_id + 1)
|
|
|
|
)
|
|
|
|
assert alias_id == aliases[0].id
|
|
|
|
|
|
|
|
|
|
|
|
def test_disabled_user_is_not_checked():
|
|
|
|
user = create_new_user()
|
|
|
|
user.lifetime = True
|
|
|
|
user.disabled = True
|
|
|
|
alias_id = Alias.create_new_random(user).id
|
|
|
|
Session.commit()
|
|
|
|
aliases = list(
|
|
|
|
cron.get_alias_to_check_hibp(arrow.now(), [], alias_id, alias_id + 1)
|
|
|
|
)
|
|
|
|
assert len(aliases) == 0
|
|
|
|
|
|
|
|
|
|
|
|
def test_skipped_user_is_not_checked():
|
|
|
|
user = create_new_user()
|
|
|
|
user.lifetime = True
|
|
|
|
alias_id = Alias.create_new_random(user).id
|
|
|
|
Session.commit()
|
|
|
|
aliases = list(
|
|
|
|
cron.get_alias_to_check_hibp(arrow.now(), [user.id], alias_id, alias_id + 1)
|
|
|
|
)
|
|
|
|
assert len(aliases) == 0
|
2024-03-18 16:00:21 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_already_checked_is_not_checked():
|
|
|
|
user = create_new_user()
|
|
|
|
user.lifetime = True
|
|
|
|
alias = Alias.create_new_random(user)
|
|
|
|
alias.hibp_last_check = arrow.now().shift(days=1)
|
|
|
|
alias_id = alias.id
|
|
|
|
Session.commit()
|
|
|
|
aliases = list(
|
|
|
|
cron.get_alias_to_check_hibp(arrow.now(), [user.id], alias_id, alias_id + 1)
|
|
|
|
)
|
|
|
|
assert len(aliases) == 0
|