do not send double subscription email (#1118)

* do not send double subscription email

* remove unused import

* remove unused test
This commit is contained in:
Son Nguyen Kim 2022-06-28 17:51:44 +02:00 committed by GitHub
parent 90b767169b
commit f6a7ee981a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 5 additions and 134 deletions

View File

@ -1,15 +1,13 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from arrow import Arrow
from dataclasses import dataclass from dataclasses import dataclass
from enum import Enum from enum import Enum
from flask import url_for
from newrelic import agent
from typing import Optional from typing import Optional
from app import config from arrow import Arrow
from newrelic import agent
from app.db import Session from app.db import Session
from app.email_utils import send_email_at_most_times, send_welcome_email, render from app.email_utils import send_welcome_email
from app.errors import AccountAlreadyLinkedToAnotherPartnerException from app.errors import AccountAlreadyLinkedToAnotherPartnerException
from app.log import LOG from app.log import LOG
from app.models import ( from app.models import (
@ -17,10 +15,7 @@ from app.models import (
Partner, Partner,
PartnerUser, PartnerUser,
User, User,
AppleSubscription,
Subscription,
) )
from app.proton.utils import is_proton_partner
from app.utils import random_string from app.utils import random_string
@ -50,36 +45,6 @@ class LinkResult:
strategy: str strategy: str
def send_double_subscription_if_needed(partner_user: PartnerUser):
sub = partner_user.user.get_active_subscription()
if isinstance(sub, AppleSubscription):
channel = "Apple"
elif isinstance(sub, Subscription):
channel = "Paddle"
else:
return
send_email_at_most_times(
partner_user.user,
config.ALERT_DUAL_SUBSCRIPTION_WITH_PARTNER,
partner_user.user.email,
f"You have two subscriptions in SimpleLogin",
render(
"transactional/double-subscription-partner.txt.jinja2",
is_proton=is_proton_partner(partner_user.partner),
partner=partner_user.partner,
subscription_channel=channel,
cancel_link=url_for("dashboard.billing"),
),
render(
"transactional/double-subscription-partner.html",
is_proton=is_proton_partner(partner_user.partner),
partner=partner_user.partner,
subscription_channel=channel,
cancel_link=url_for("dashboard.billing"),
),
)
def set_plan_for_partner_user(partner_user: PartnerUser, plan: SLPlan): def set_plan_for_partner_user(partner_user: PartnerUser, plan: SLPlan):
sub = PartnerSubscription.get_by(partner_user_id=partner_user.id) sub = PartnerSubscription.get_by(partner_user_id=partner_user.id)
if plan.type == SLPlanType.Free: if plan.type == SLPlanType.Free:
@ -108,7 +73,6 @@ def set_plan_for_partner_user(partner_user: PartnerUser, plan: SLPlan):
"PlanChange", {"plan": "premium", "type": "extension"} "PlanChange", {"plan": "premium", "type": "extension"}
) )
sub.end_at = plan.expiration sub.end_at = plan.expiration
send_double_subscription_if_needed(partner_user)
Session.commit() Session.commit()

View File

@ -1,28 +0,0 @@
{% extends "base.html" %}
{% block content %}
{% call text() %}
Hi,
{% endcall %}
{% call text() %}
{% if is_proton %}
As a Proton user with a paid mail subscription you can have SimpleLogin premium for free, thanks to the SimpleLogin Proton integration.<br>
{% else %}
{{ partner.name }} has upgraded your account to premium.<br>
{% endif %}
You currently have a paid SimpleLogin subscription via {{ subscription_channel }}.<br>
{% if subscription_channel == 'apple' %}
You can cancel it to avoid automatic renewal on your Apple iCloud account page.
You can find more info <a href="https://support.apple.com/en-us/HT202039">here</a>.<br>
{% elif subscription_channel == 'paddle' %}
You can cancel it to avoid automatic renewal on <a href="{{ cancel_link }}">{{ cancel_link }}</a>.<br>
{% endif %}
You can also keep both subscriptions. In this case theres nothing to do.
{% endcall %}
{% call text() %}
Best, <br>
SimpleLogin team.
{% endcall %}
{% endblock %}

View File

@ -1,22 +0,0 @@
{% extends "base.txt.jinja2" %}
{% block content %}
Hi,
{% if is_proton -%}
As a Proton user with a paid mail subscription you can have SimpleLogin premium for free, thanks to the SimpleLogin Proton integration.
{% else -%}}
{{ partner.name }} has upgraded your account to premium.
{% endif -%}
You currently have a paid SimpleLogin subscription via {subscription_channel}.
{% if subscription_channel == 'Apple' %}
You can cancel it to avoid automatic renewal on your Apple iCloud account page.
Please find more info at https://support.apple.com/en-us/HT202039
{% elif subscription_channel == 'Paddle' %}
You can cancel it to avoid automatic renewal on {{ cancel_link }}.
{% endif %}
You can also keep both subscriptions. In this case theres nothing to do.
Best,
SimpleLogin team.
{% endblock %}

View File

@ -1,10 +1,6 @@
import random
import arrow
import pytest import pytest
from arrow import Arrow from arrow import Arrow
from app import config
from app.account_linking import ( from app.account_linking import (
process_link_case, process_link_case,
process_login_case, process_login_case,
@ -17,15 +13,12 @@ from app.account_linking import (
SLPlanType, SLPlanType,
PartnerLinkRequest, PartnerLinkRequest,
ClientMergeStrategy, ClientMergeStrategy,
set_plan_for_partner_user,
) )
from app.mail_sender import mail_sender
from app.db import Session from app.db import Session
from app.errors import AccountAlreadyLinkedToAnotherPartnerException from app.errors import AccountAlreadyLinkedToAnotherPartnerException
from app.models import Partner, PartnerUser, User, Subscription, PlanEnum, SentAlert from app.models import Partner, PartnerUser, User
from app.proton.utils import get_proton_partner from app.proton.utils import get_proton_partner
from app.utils import random_string from app.utils import random_string
from tests.utils import random_email from tests.utils import random_email
@ -326,39 +319,3 @@ def test_ensure_partner_user_exists_for_user_raises_exception_when_linked_to_ano
user, user,
partner_2, partner_2,
) )
@mail_sender.store_emails_test_decorator
def test_send_double_sub_email_is_sent(flask_client):
user = create_user(random_email())
Subscription.create(
user_id=user.id,
cancel_url="https://checkout.paddle.com/subscription/cancel?user=1234",
update_url="https://checkout.paddle.com/subscription/update?user=1234",
subscription_id=int(random.randint(10000, 999999999)),
event_time=arrow.now(),
next_bill_date=arrow.now().shift(days=10).date(),
plan=PlanEnum.monthly,
commit=True,
)
partner = Partner.create(
name=random_string(),
contact_email=random_email(),
flush=True,
)
partner_user = PartnerUser.create(
user_id=user.id,
partner_id=partner.id,
partner_email=user.email,
external_user_id=random_string(),
commit=True,
)
set_plan_for_partner_user(
partner_user,
SLPlan(type=SLPlanType.Premium, expiration=arrow.now().shift(months=10)),
)
emails_sent = mail_sender.get_stored_emails()
assert len(emails_sent) == 1
alerts = SentAlert.filter_by(user_id=user.id).all()
assert len(alerts) == 1
assert alerts[0].alert_type == config.ALERT_DUAL_SUBSCRIPTION_WITH_PARTNER