4.45.0
All checks were successful
Build-Release-Image / Build-Image (linux/amd64) (push) Successful in 3m1s
Build-Release-Image / Build-Image (linux/arm64) (push) Successful in 4m13s
Build-Release-Image / Merge-Images (push) Successful in 22s
Build-Release-Image / Create-Release (push) Successful in 9s
Build-Release-Image / Notify (push) Successful in 4s
All checks were successful
Build-Release-Image / Build-Image (linux/amd64) (push) Successful in 3m1s
Build-Release-Image / Build-Image (linux/arm64) (push) Successful in 4m13s
Build-Release-Image / Merge-Images (push) Successful in 22s
Build-Release-Image / Create-Release (push) Successful in 9s
Build-Release-Image / Notify (push) Successful in 4s
This commit is contained in:
46
app/tests/jobs/test_send_alias_creation_events.py
Normal file
46
app/tests/jobs/test_send_alias_creation_events.py
Normal file
@ -0,0 +1,46 @@
|
||||
from app import config
|
||||
from app.db import Session
|
||||
from app.events.event_dispatcher import Dispatcher
|
||||
from app.events.generated import event_pb2
|
||||
from app.jobs.event_jobs import send_alias_creation_events_for_user
|
||||
from app.models import Alias
|
||||
from tests.utils import create_partner_linked_user
|
||||
|
||||
|
||||
class MemStoreDispatcher(Dispatcher):
|
||||
def __init__(self):
|
||||
self.events = []
|
||||
|
||||
def send(self, event: bytes):
|
||||
self.events.append(event)
|
||||
|
||||
|
||||
def setup_module():
|
||||
config.EVENT_WEBHOOK = True
|
||||
|
||||
|
||||
def teardown_module():
|
||||
config.EVENT_WEBHOOK = False
|
||||
|
||||
|
||||
def test_send_alias_creation_events():
|
||||
[user, partner_user] = create_partner_linked_user()
|
||||
aliases = [Alias.create_new_random(user) for i in range(2)]
|
||||
Session.flush()
|
||||
dispatcher = MemStoreDispatcher()
|
||||
send_alias_creation_events_for_user(user, dispatcher=dispatcher, chunk_size=2)
|
||||
# 2 batches. 1st newsletter + first alias. 2nd last alias
|
||||
assert len(dispatcher.events) == 2
|
||||
decoded_event = event_pb2.Event.FromString(dispatcher.events[0])
|
||||
assert decoded_event.user_id == user.id
|
||||
assert decoded_event.external_user_id == partner_user.external_user_id
|
||||
event_list = decoded_event.content.alias_create_list.events
|
||||
assert len(event_list) == 2
|
||||
# 0 is newsletter alias
|
||||
assert event_list[1].alias_id == aliases[0].id
|
||||
decoded_event = event_pb2.Event.FromString(dispatcher.events[1])
|
||||
assert decoded_event.user_id == user.id
|
||||
assert decoded_event.external_user_id == partner_user.external_user_id
|
||||
event_list = decoded_event.content.alias_create_list.events
|
||||
assert len(event_list) == 1
|
||||
assert event_list[0].alias_id == aliases[1].id
|
@ -9,7 +9,8 @@ from typing import Optional, Dict
|
||||
import jinja2
|
||||
from flask import url_for
|
||||
|
||||
from app.models import User
|
||||
from app.models import User, PartnerUser
|
||||
from app.proton.utils import get_proton_partner
|
||||
from app.utils import random_string
|
||||
|
||||
|
||||
@ -30,6 +31,18 @@ def create_new_user(email: Optional[str] = None, name: Optional[str] = None) ->
|
||||
return user
|
||||
|
||||
|
||||
def create_partner_linked_user() -> tuple[User, PartnerUser]:
|
||||
user = create_new_user()
|
||||
partner_user = PartnerUser.create(
|
||||
partner_id=get_proton_partner().id,
|
||||
user_id=user.id,
|
||||
external_user_id=random_token(10),
|
||||
flush=True,
|
||||
)
|
||||
|
||||
return user, partner_user
|
||||
|
||||
|
||||
def login(flask_client, user: Optional[User] = None) -> User:
|
||||
if not user:
|
||||
user = create_new_user()
|
||||
|
Reference in New Issue
Block a user