Allow to get premium partner domains without premium sl domains (#1880)
* Allow to get premium partner domains without premium sl domains * Set condition on domains
This commit is contained in:
parent
373c30e53b
commit
989a577db6
|
@ -280,6 +280,7 @@ class IntEnumType(sa.types.TypeDecorator):
|
||||||
class AliasOptions:
|
class AliasOptions:
|
||||||
show_sl_domains: bool = True
|
show_sl_domains: bool = True
|
||||||
show_partner_domains: Optional[Partner] = None
|
show_partner_domains: Optional[Partner] = None
|
||||||
|
show_partner_premium: Optional[bool] = None
|
||||||
|
|
||||||
|
|
||||||
class Hibp(Base, ModelMixin):
|
class Hibp(Base, ModelMixin):
|
||||||
|
@ -1038,29 +1039,35 @@ class User(Base, ModelMixin, UserMixin, PasswordOracle):
|
||||||
) -> list["SLDomain"]:
|
) -> list["SLDomain"]:
|
||||||
if alias_options is None:
|
if alias_options is None:
|
||||||
alias_options = AliasOptions()
|
alias_options = AliasOptions()
|
||||||
conditions = [SLDomain.hidden == False] # noqa: E712
|
top_conds = [SLDomain.hidden == False] # noqa: E712
|
||||||
if not self.is_premium():
|
or_conds = [] # noqa:E711
|
||||||
conditions.append(SLDomain.premium_only == False) # noqa: E712
|
|
||||||
partner_domain_cond = [] # noqa:E711
|
|
||||||
if self.default_alias_public_domain_id is not None:
|
if self.default_alias_public_domain_id is not None:
|
||||||
partner_domain_cond.append(
|
default_domain_conds = [SLDomain.id == self.default_alias_public_domain_id]
|
||||||
SLDomain.id == self.default_alias_public_domain_id
|
if not self.is_premium():
|
||||||
)
|
default_domain_conds.append(
|
||||||
|
SLDomain.premium_only == False # noqa: E712
|
||||||
|
)
|
||||||
|
or_conds.append(and_(*default_domain_conds).self_group())
|
||||||
if alias_options.show_partner_domains is not None:
|
if alias_options.show_partner_domains is not None:
|
||||||
partner_user = PartnerUser.filter_by(
|
partner_user = PartnerUser.filter_by(
|
||||||
user_id=self.id, partner_id=alias_options.show_partner_domains.id
|
user_id=self.id, partner_id=alias_options.show_partner_domains.id
|
||||||
).first()
|
).first()
|
||||||
if partner_user is not None:
|
if partner_user is not None:
|
||||||
partner_domain_cond.append(
|
partner_domain_cond = [SLDomain.partner_id == partner_user.partner_id]
|
||||||
SLDomain.partner_id == partner_user.partner_id
|
if alias_options.show_partner_premium is None:
|
||||||
)
|
alias_options.show_partner_premium = self.is_premium()
|
||||||
|
if not alias_options.show_partner_premium:
|
||||||
|
partner_domain_cond.append(
|
||||||
|
SLDomain.premium_only == False # noqa: E712
|
||||||
|
)
|
||||||
|
or_conds.append(and_(*partner_domain_cond).self_group())
|
||||||
if alias_options.show_sl_domains:
|
if alias_options.show_sl_domains:
|
||||||
partner_domain_cond.append(SLDomain.partner_id == None) # noqa:E711
|
sl_conds = [SLDomain.partner_id == None] # noqa: E711
|
||||||
if len(partner_domain_cond) == 1:
|
if not self.is_premium():
|
||||||
conditions.append(partner_domain_cond[0])
|
sl_conds.append(SLDomain.premium_only == False) # noqa: E712
|
||||||
else:
|
or_conds.append(and_(*sl_conds).self_group())
|
||||||
conditions.append(or_(*partner_domain_cond))
|
top_conds.append(or_(*or_conds))
|
||||||
query = Session.query(SLDomain).filter(*conditions).order_by(SLDomain.order)
|
query = Session.query(SLDomain).filter(*top_conds).order_by(SLDomain.order)
|
||||||
return query.all()
|
return query.all()
|
||||||
|
|
||||||
def available_alias_domains(
|
def available_alias_domains(
|
||||||
|
|
|
@ -199,3 +199,31 @@ def test_get_free_partner_and_hidden_default_domain():
|
||||||
assert [d.domain for d in domains] == user.available_sl_domains(
|
assert [d.domain for d in domains] == user.available_sl_domains(
|
||||||
alias_options=options
|
alias_options=options
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_free_partner_and_premium_partner():
|
||||||
|
user = create_new_user()
|
||||||
|
user.trial_end = None
|
||||||
|
PartnerUser.create(
|
||||||
|
partner_id=get_proton_partner().id,
|
||||||
|
user_id=user.id,
|
||||||
|
external_user_id=random_token(10),
|
||||||
|
flush=True,
|
||||||
|
)
|
||||||
|
user.default_alias_public_domain_id = (
|
||||||
|
SLDomain.filter_by(hidden=False, premium_only=False).first().id
|
||||||
|
)
|
||||||
|
Session.flush()
|
||||||
|
options = AliasOptions(
|
||||||
|
show_sl_domains=False,
|
||||||
|
show_partner_domains=get_proton_partner(),
|
||||||
|
show_partner_premium=True,
|
||||||
|
)
|
||||||
|
domains = user.get_sl_domains(alias_options=options)
|
||||||
|
assert len(domains) == 3
|
||||||
|
assert domains[0].domain == "premium_partner"
|
||||||
|
assert domains[1].domain == "free_partner"
|
||||||
|
assert domains[2].domain == "free_non_partner"
|
||||||
|
assert [d.domain for d in domains] == user.available_sl_domains(
|
||||||
|
alias_options=options
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue