Rename TransactionalComplaint to ProviderComplaint
This commit is contained in:
parent
fcd2ab6fed
commit
5208c549fa
|
@ -21,9 +21,9 @@ from app.models import (
|
||||||
AppleSubscription,
|
AppleSubscription,
|
||||||
AdminAuditLog,
|
AdminAuditLog,
|
||||||
AuditLogActionEnum,
|
AuditLogActionEnum,
|
||||||
TransactionalComplaintState,
|
ProviderComplaintState,
|
||||||
Phase,
|
Phase,
|
||||||
TransactionalComplaint,
|
ProviderComplaint,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -376,7 +376,7 @@ class AdminAuditLogAdmin(SLModelView):
|
||||||
|
|
||||||
|
|
||||||
def _transactionalcomplaint_state_formatter(view, context, model, name):
|
def _transactionalcomplaint_state_formatter(view, context, model, name):
|
||||||
return "{} ({})".format(TransactionalComplaintState(model.state).name, model.state)
|
return "{} ({})".format(ProviderComplaintState(model.state).name, model.state)
|
||||||
|
|
||||||
|
|
||||||
def _transactionalcomplaint_phase_formatter(view, context, model, name):
|
def _transactionalcomplaint_phase_formatter(view, context, model, name):
|
||||||
|
@ -390,7 +390,7 @@ def _transactionalcomplaint_refused_email_id_formatter(view, context, model, nam
|
||||||
return Markup(markupstring)
|
return Markup(markupstring)
|
||||||
|
|
||||||
|
|
||||||
class TransactionalComplaintAdmin(SLModelView):
|
class ProviderComplaintAdmin(SLModelView):
|
||||||
column_searchable_list = ["id", "user.id", "created_at"]
|
column_searchable_list = ["id", "user.id", "created_at"]
|
||||||
column_filters = ["user.id", "state"]
|
column_filters = ["user.id", "state"]
|
||||||
column_hide_backrefs = False
|
column_hide_backrefs = False
|
||||||
|
@ -410,12 +410,12 @@ class TransactionalComplaintAdmin(SLModelView):
|
||||||
EndpointLinkRowAction("fa fa-check-square", ".mark_ok"),
|
EndpointLinkRowAction("fa fa-check-square", ".mark_ok"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def _get_complaint(self) -> Optional[TransactionalComplaint]:
|
def _get_complaint(self) -> Optional[ProviderComplaint]:
|
||||||
complain_id = request.args.get("id")
|
complain_id = request.args.get("id")
|
||||||
if complain_id is None:
|
if complain_id is None:
|
||||||
flash("Missing id", "error")
|
flash("Missing id", "error")
|
||||||
return None
|
return None
|
||||||
complaint = TransactionalComplaint.get_by(id=complain_id)
|
complaint = ProviderComplaint.get_by(id=complain_id)
|
||||||
if not complaint:
|
if not complaint:
|
||||||
flash("Could not find complaint", "error")
|
flash("Could not find complaint", "error")
|
||||||
return None
|
return None
|
||||||
|
@ -426,7 +426,7 @@ class TransactionalComplaintAdmin(SLModelView):
|
||||||
complaint = self._get_complaint()
|
complaint = self._get_complaint()
|
||||||
if not complaint:
|
if not complaint:
|
||||||
return redirect("/admin/transactionalcomplaint/")
|
return redirect("/admin/transactionalcomplaint/")
|
||||||
complaint.state = TransactionalComplaintState.reviewed.value
|
complaint.state = ProviderComplaintState.reviewed.value
|
||||||
Session.commit()
|
Session.commit()
|
||||||
return redirect("/admin/transactionalcomplaint/")
|
return redirect("/admin/transactionalcomplaint/")
|
||||||
|
|
||||||
|
@ -437,7 +437,7 @@ class TransactionalComplaintAdmin(SLModelView):
|
||||||
return redirect("/admin/transactionalcomplaint/")
|
return redirect("/admin/transactionalcomplaint/")
|
||||||
eml_path = complaint.refused_email.full_report_path
|
eml_path = complaint.refused_email.full_report_path
|
||||||
eml_data = s3.download_email(eml_path)
|
eml_data = s3.download_email(eml_path)
|
||||||
AdminAuditLog.downloaded_transactional_complaint(current_user.id, complaint.id)
|
AdminAuditLog.downloaded_provider_complaint(current_user.id, complaint.id)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
return Response(
|
return Response(
|
||||||
eml_data,
|
eml_data,
|
||||||
|
|
|
@ -26,14 +26,14 @@ from app.models import (
|
||||||
DeletedAlias,
|
DeletedAlias,
|
||||||
DomainDeletedAlias,
|
DomainDeletedAlias,
|
||||||
Contact,
|
Contact,
|
||||||
TransactionalComplaint,
|
ProviderComplaint,
|
||||||
Phase,
|
Phase,
|
||||||
TransactionalComplaintState,
|
ProviderComplaintState,
|
||||||
RefusedEmail,
|
RefusedEmail,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TransactionalComplaintOrigin(ABC):
|
class ProviderComplaintOrigin(ABC):
|
||||||
@classmethod
|
@classmethod
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_original_message(cls, message: Message) -> Optional[Message]:
|
def get_original_message(cls, message: Message) -> Optional[Message]:
|
||||||
|
@ -45,7 +45,7 @@ class TransactionalComplaintOrigin(ABC):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class TransactionalYahooOrigin(TransactionalComplaintOrigin):
|
class TransactionalYahooOrigin(ProviderComplaintOrigin):
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_original_message(cls, message: Message) -> Optional[Message]:
|
def get_original_message(cls, message: Message) -> Optional[Message]:
|
||||||
# 1st part is the container
|
# 1st part is the container
|
||||||
|
@ -63,7 +63,7 @@ class TransactionalYahooOrigin(TransactionalComplaintOrigin):
|
||||||
return "yahoo"
|
return "yahoo"
|
||||||
|
|
||||||
|
|
||||||
class TransactionalHotmailOrigin(TransactionalComplaintOrigin):
|
class TransactionalHotmailOrigin(ProviderComplaintOrigin):
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_original_message(cls, message: Message) -> Optional[Message]:
|
def get_original_message(cls, message: Message) -> Optional[Message]:
|
||||||
# 1st part is the container
|
# 1st part is the container
|
||||||
|
@ -97,7 +97,7 @@ def find_alias_with_address(address: str) -> Optional[Alias]:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) -> bool:
|
def handle_complaint(message: Message, origin: ProviderComplaintOrigin) -> bool:
|
||||||
original_message = origin.get_original_message(message)
|
original_message = origin.get_original_message(message)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -114,7 +114,7 @@ def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) ->
|
||||||
|
|
||||||
user = User.get_by(email=to_address)
|
user = User.get_by(email=to_address)
|
||||||
if user:
|
if user:
|
||||||
LOG.d(f"Handle transactional {origin.name()} complaint for {user}")
|
LOG.d(f"Handle provider {origin.name()} complaint for {user}")
|
||||||
report_complaint_to_user(user, origin)
|
report_complaint_to_user(user, origin)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) ->
|
||||||
f"Complaint from {origin.name} during reply phase {alias} -> {to_address}, {user}"
|
f"Complaint from {origin.name} during reply phase {alias} -> {to_address}, {user}"
|
||||||
)
|
)
|
||||||
report_complaint_to_user_in_reply_phase(alias, to_address, origin)
|
report_complaint_to_user_in_reply_phase(alias, to_address, origin)
|
||||||
store_transactional_complaint(alias, message)
|
store_provider_complaint(alias, message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
contact = Contact.get_by(reply_email=from_address)
|
contact = Contact.get_by(reply_email=from_address)
|
||||||
|
@ -145,7 +145,7 @@ def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) ->
|
||||||
|
|
||||||
|
|
||||||
def report_complaint_to_user_in_reply_phase(
|
def report_complaint_to_user_in_reply_phase(
|
||||||
alias: Alias, to_address: str, origin: TransactionalComplaintOrigin
|
alias: Alias, to_address: str, origin: ProviderComplaintOrigin
|
||||||
):
|
):
|
||||||
capitalized_name = origin.name().capitalize()
|
capitalized_name = origin.name().capitalize()
|
||||||
send_email_with_rate_control(
|
send_email_with_rate_control(
|
||||||
|
@ -154,7 +154,7 @@ def report_complaint_to_user_in_reply_phase(
|
||||||
alias.user.email,
|
alias.user.email,
|
||||||
f"Abuse report from {capitalized_name}",
|
f"Abuse report from {capitalized_name}",
|
||||||
render(
|
render(
|
||||||
"transactional/transactional-complaint-reply-phase.txt.jinja2",
|
"transactional/provider-complaint-reply-phase.txt.jinja2",
|
||||||
user=alias.user,
|
user=alias.user,
|
||||||
alias=alias,
|
alias=alias,
|
||||||
destination=to_address,
|
destination=to_address,
|
||||||
|
@ -165,7 +165,7 @@ def report_complaint_to_user_in_reply_phase(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def report_complaint_to_user(user: User, origin: TransactionalComplaintOrigin):
|
def report_complaint_to_user(user: User, origin: ProviderComplaintOrigin):
|
||||||
capitalized_name = origin.name().capitalize()
|
capitalized_name = origin.name().capitalize()
|
||||||
send_email_with_rate_control(
|
send_email_with_rate_control(
|
||||||
user,
|
user,
|
||||||
|
@ -173,12 +173,12 @@ def report_complaint_to_user(user: User, origin: TransactionalComplaintOrigin):
|
||||||
user.email,
|
user.email,
|
||||||
f"Abuse report from {capitalized_name}",
|
f"Abuse report from {capitalized_name}",
|
||||||
render(
|
render(
|
||||||
"transactional/transactional-complaint-to-user.txt.jinja2",
|
"transactional/provider-complaint-to-user.txt.jinja2",
|
||||||
user=user,
|
user=user,
|
||||||
provider=capitalized_name,
|
provider=capitalized_name,
|
||||||
),
|
),
|
||||||
render(
|
render(
|
||||||
"transactional/transactional-complaint-to-user.html",
|
"transactional/provider-complaint-to-user.html",
|
||||||
user=user,
|
user=user,
|
||||||
provider=capitalized_name,
|
provider=capitalized_name,
|
||||||
),
|
),
|
||||||
|
@ -188,7 +188,7 @@ def report_complaint_to_user(user: User, origin: TransactionalComplaintOrigin):
|
||||||
|
|
||||||
|
|
||||||
def report_complaint_to_user_in_forward_phase(
|
def report_complaint_to_user_in_forward_phase(
|
||||||
alias: Alias, origin: TransactionalComplaintOrigin
|
alias: Alias, origin: ProviderComplaintOrigin
|
||||||
):
|
):
|
||||||
capitalized_name = origin.name().capitalize()
|
capitalized_name = origin.name().capitalize()
|
||||||
user = alias.user
|
user = alias.user
|
||||||
|
@ -198,12 +198,12 @@ def report_complaint_to_user_in_forward_phase(
|
||||||
user.email,
|
user.email,
|
||||||
f"Abuse report from {capitalized_name}",
|
f"Abuse report from {capitalized_name}",
|
||||||
render(
|
render(
|
||||||
"transactional/transactional-complaint-forward-phase.txt.jinja2",
|
"transactional/provider-complaint-forward-phase.txt.jinja2",
|
||||||
user=user,
|
user=user,
|
||||||
provider=capitalized_name,
|
provider=capitalized_name,
|
||||||
),
|
),
|
||||||
render(
|
render(
|
||||||
"transactional/transactional-complaint-forward-phase.html",
|
"transactional/provider-complaint-forward-phase.html",
|
||||||
user=user,
|
user=user,
|
||||||
provider=capitalized_name,
|
provider=capitalized_name,
|
||||||
),
|
),
|
||||||
|
@ -212,9 +212,9 @@ def report_complaint_to_user_in_forward_phase(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def store_transactional_complaint(alias, message):
|
def store_provider_complaint(alias, message):
|
||||||
email_name = f"reply-{uuid.uuid4().hex}.eml"
|
email_name = f"reply-{uuid.uuid4().hex}.eml"
|
||||||
full_report_path = f"transactional_complaint/{email_name}"
|
full_report_path = f"provider_complaint/{email_name}"
|
||||||
s3.upload_email_from_bytesio(
|
s3.upload_email_from_bytesio(
|
||||||
full_report_path, BytesIO(to_bytes(message)), email_name
|
full_report_path, BytesIO(to_bytes(message)), email_name
|
||||||
)
|
)
|
||||||
|
@ -224,9 +224,9 @@ def store_transactional_complaint(alias, message):
|
||||||
path=email_name,
|
path=email_name,
|
||||||
commit=True,
|
commit=True,
|
||||||
)
|
)
|
||||||
TransactionalComplaint.create(
|
ProviderComplaint.create(
|
||||||
user_id=alias.user_id,
|
user_id=alias.user_id,
|
||||||
state=TransactionalComplaintState.new.value,
|
state=ProviderComplaintState.new.value,
|
||||||
phase=Phase.reply.value,
|
phase=Phase.reply.value,
|
||||||
refused_email_id=refused_email.id,
|
refused_email_id=refused_email.id,
|
||||||
commit=True,
|
commit=True,
|
|
@ -235,7 +235,7 @@ class AuditLogActionEnum(EnumE):
|
||||||
disable_2fa = 5
|
disable_2fa = 5
|
||||||
logged_as_user = 6
|
logged_as_user = 6
|
||||||
extend_subscription = 7
|
extend_subscription = 7
|
||||||
download_transactional_complaint = 8
|
download_provider_complaint = 8
|
||||||
|
|
||||||
|
|
||||||
class Phase(EnumE):
|
class Phase(EnumE):
|
||||||
|
@ -2997,23 +2997,23 @@ class AdminAuditLog(Base):
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def downloaded_transactional_complaint(cls, admin_user_id: int, complaint_id: int):
|
def downloaded_provider_complaint(cls, admin_user_id: int, complaint_id: int):
|
||||||
cls.create(
|
cls.create(
|
||||||
admin_user_id=admin_user_id,
|
admin_user_id=admin_user_id,
|
||||||
action=AuditLogActionEnum.download_transactional_complaint.value,
|
action=AuditLogActionEnum.download_provider_complaint.value,
|
||||||
model="TransactionalComplaint",
|
model="ProviderComplaint",
|
||||||
model_id=complaint_id,
|
model_id=complaint_id,
|
||||||
data={},
|
data={},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TransactionalComplaintState(EnumE):
|
class ProviderComplaintState(EnumE):
|
||||||
new = 0
|
new = 0
|
||||||
reviewed = 1
|
reviewed = 1
|
||||||
|
|
||||||
|
|
||||||
class TransactionalComplaint(Base, ModelMixin):
|
class ProviderComplaint(Base, ModelMixin):
|
||||||
__tablename__ = "transactional_complaint"
|
__tablename__ = "provider_complaint"
|
||||||
|
|
||||||
user_id = sa.Column(sa.ForeignKey("users.id"), nullable=False)
|
user_id = sa.Column(sa.ForeignKey("users.id"), nullable=False)
|
||||||
state = sa.Column(sa.Integer, nullable=False)
|
state = sa.Column(sa.Integer, nullable=False)
|
||||||
|
|
|
@ -140,7 +140,7 @@ from app.handler.spamd_result import (
|
||||||
SpamdResult,
|
SpamdResult,
|
||||||
SPFCheckResult,
|
SPFCheckResult,
|
||||||
)
|
)
|
||||||
from app.handler.transactional_complaint import (
|
from app.handler.provider_complaint import (
|
||||||
handle_hotmail_complaint,
|
handle_hotmail_complaint,
|
||||||
handle_yahoo_complaint,
|
handle_yahoo_complaint,
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,7 +18,7 @@ depends_on = None
|
||||||
|
|
||||||
def upgrade():
|
def upgrade():
|
||||||
op.create_table(
|
op.create_table(
|
||||||
"transactional_complaint",
|
"provider_complaint",
|
||||||
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
||||||
sa.Column("created_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=False),
|
sa.Column("created_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=False),
|
||||||
sa.Column("updated_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=True),
|
sa.Column("updated_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=True),
|
||||||
|
@ -33,4 +33,4 @@ def upgrade():
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
def downgrade():
|
||||||
op.drop_table("transactional_complaint")
|
op.drop_table("provider_complaint")
|
|
@ -37,7 +37,7 @@ from app.admin_model import (
|
||||||
CouponAdmin,
|
CouponAdmin,
|
||||||
CustomDomainAdmin,
|
CustomDomainAdmin,
|
||||||
AdminAuditLogAdmin,
|
AdminAuditLogAdmin,
|
||||||
TransactionalComplaintAdmin,
|
ProviderComplaintAdmin,
|
||||||
)
|
)
|
||||||
from app.api.base import api_bp
|
from app.api.base import api_bp
|
||||||
from app.auth.base import auth_bp
|
from app.auth.base import auth_bp
|
||||||
|
@ -91,7 +91,7 @@ from app.models import (
|
||||||
ManualSubscription,
|
ManualSubscription,
|
||||||
Coupon,
|
Coupon,
|
||||||
AdminAuditLog,
|
AdminAuditLog,
|
||||||
TransactionalComplaint,
|
ProviderComplaint,
|
||||||
)
|
)
|
||||||
from app.monitor.base import monitor_bp
|
from app.monitor.base import monitor_bp
|
||||||
from app.oauth.base import oauth_bp
|
from app.oauth.base import oauth_bp
|
||||||
|
@ -693,7 +693,7 @@ def init_admin(app):
|
||||||
admin.add_view(ManualSubscriptionAdmin(ManualSubscription, Session))
|
admin.add_view(ManualSubscriptionAdmin(ManualSubscription, Session))
|
||||||
admin.add_view(CustomDomainAdmin(CustomDomain, Session))
|
admin.add_view(CustomDomainAdmin(CustomDomain, Session))
|
||||||
admin.add_view(AdminAuditLogAdmin(AdminAuditLog, Session))
|
admin.add_view(AdminAuditLogAdmin(AdminAuditLog, Session))
|
||||||
admin.add_view(TransactionalComplaintAdmin(TransactionalComplaint, Session))
|
admin.add_view(ProviderComplaintAdmin(ProviderComplaint, Session))
|
||||||
|
|
||||||
|
|
||||||
def register_custom_commands(app):
|
def register_custom_commands(app):
|
||||||
|
|
|
@ -12,11 +12,11 @@ from app.config import (
|
||||||
)
|
)
|
||||||
from app.db import Session
|
from app.db import Session
|
||||||
from app.email import headers
|
from app.email import headers
|
||||||
from app.handler.transactional_complaint import (
|
from app.handler.provider_complaint import (
|
||||||
handle_hotmail_complaint,
|
handle_hotmail_complaint,
|
||||||
handle_yahoo_complaint,
|
handle_yahoo_complaint,
|
||||||
)
|
)
|
||||||
from app.models import Alias, TransactionalComplaint, SentAlert
|
from app.models import Alias, ProviderComplaint, SentAlert
|
||||||
from tests.utils import create_new_user
|
from tests.utils import create_new_user
|
||||||
|
|
||||||
origins = [
|
origins = [
|
||||||
|
@ -38,7 +38,7 @@ def prepare_complaint(message: Message, part_num: int) -> Message:
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
|
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
|
||||||
def test_transactional_to_user(flask_client, handle_ftor, provider, part_num):
|
def test_provider_to_user(flask_client, handle_ftor, provider, part_num):
|
||||||
user = create_new_user()
|
user = create_new_user()
|
||||||
original_message = Message()
|
original_message = Message()
|
||||||
original_message[headers.TO] = user.email
|
original_message[headers.TO] = user.email
|
||||||
|
@ -47,7 +47,7 @@ def test_transactional_to_user(flask_client, handle_ftor, provider, part_num):
|
||||||
|
|
||||||
complaint = prepare_complaint(original_message, part_num)
|
complaint = prepare_complaint(original_message, part_num)
|
||||||
assert handle_ftor(complaint)
|
assert handle_ftor(complaint)
|
||||||
found = TransactionalComplaint.filter_by(user_id=user.id).all()
|
found = ProviderComplaint.filter_by(user_id=user.id).all()
|
||||||
assert len(found) == 0
|
assert len(found) == 0
|
||||||
alerts = SentAlert.filter_by(user_id=user.id).all()
|
alerts = SentAlert.filter_by(user_id=user.id).all()
|
||||||
assert len(alerts) == 1
|
assert len(alerts) == 1
|
||||||
|
@ -55,7 +55,7 @@ def test_transactional_to_user(flask_client, handle_ftor, provider, part_num):
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
|
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
|
||||||
def test_transactional_forward_phase(flask_client, handle_ftor, provider, part_num):
|
def test_provider_forward_phase(flask_client, handle_ftor, provider, part_num):
|
||||||
user = create_new_user()
|
user = create_new_user()
|
||||||
alias = Alias.create_new_random(user)
|
alias = Alias.create_new_random(user)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
@ -66,7 +66,7 @@ def test_transactional_forward_phase(flask_client, handle_ftor, provider, part_n
|
||||||
|
|
||||||
complaint = prepare_complaint(original_message, part_num)
|
complaint = prepare_complaint(original_message, part_num)
|
||||||
assert handle_ftor(complaint)
|
assert handle_ftor(complaint)
|
||||||
found = TransactionalComplaint.filter_by(user_id=user.id).all()
|
found = ProviderComplaint.filter_by(user_id=user.id).all()
|
||||||
assert len(found) == 1
|
assert len(found) == 1
|
||||||
alerts = SentAlert.filter_by(user_id=user.id).all()
|
alerts = SentAlert.filter_by(user_id=user.id).all()
|
||||||
assert len(alerts) == 1
|
assert len(alerts) == 1
|
||||||
|
@ -74,7 +74,7 @@ def test_transactional_forward_phase(flask_client, handle_ftor, provider, part_n
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
|
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
|
||||||
def test_transactional_reply_phase(flask_client, handle_ftor, provider, part_num):
|
def test_provider_reply_phase(flask_client, handle_ftor, provider, part_num):
|
||||||
user = create_new_user()
|
user = create_new_user()
|
||||||
alias = Alias.create_new_random(user)
|
alias = Alias.create_new_random(user)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
@ -85,7 +85,7 @@ def test_transactional_reply_phase(flask_client, handle_ftor, provider, part_num
|
||||||
|
|
||||||
complaint = prepare_complaint(original_message, part_num)
|
complaint = prepare_complaint(original_message, part_num)
|
||||||
assert handle_ftor(complaint)
|
assert handle_ftor(complaint)
|
||||||
found = TransactionalComplaint.filter_by(user_id=user.id).all()
|
found = ProviderComplaint.filter_by(user_id=user.id).all()
|
||||||
assert len(found) == 0
|
assert len(found) == 0
|
||||||
alerts = SentAlert.filter_by(user_id=user.id).all()
|
alerts = SentAlert.filter_by(user_id=user.id).all()
|
||||||
assert len(alerts) == 1
|
assert len(alerts) == 1
|
Loading…
Reference in New Issue