From 019eb9811b8aaeca9d771873ef074afeb96e38c2 Mon Sep 17 00:00:00 2001 From: Tymoteusz Czech <2625371+Tymek@users.noreply.github.com> Date: Tue, 5 Nov 2024 15:46:04 +0100 Subject: [PATCH] feat: test user subscribed events --- .../user-subscriptions-service.e2e.test.ts | 67 ++++++++++++++++--- .../productivity-report.plain.mustache | 2 +- 2 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/lib/features/user-subscriptions/user-subscriptions-service.e2e.test.ts b/src/lib/features/user-subscriptions/user-subscriptions-service.e2e.test.ts index 39e5744a2ccd..76db78344447 100644 --- a/src/lib/features/user-subscriptions/user-subscriptions-service.e2e.test.ts +++ b/src/lib/features/user-subscriptions/user-subscriptions-service.e2e.test.ts @@ -1,7 +1,8 @@ import { + type IEventStore, type IUnleashConfig, type IUnleashStores, - type IUser, + type IUserStore, TEST_AUDIT_USER, } from '../../types'; import type { UserSubscriptionsService } from './user-subscriptions-service'; @@ -13,25 +14,27 @@ import type { IUserSubscriptionsReadModel } from './user-subscriptions-read-mode let stores: IUnleashStores; let db: ITestDb; +let userStore: IUserStore; let userSubscriptionService: UserSubscriptionsService; let userSubscriptionsReadModel: IUserSubscriptionsReadModel; +let eventsStore: IEventStore; let config: IUnleashConfig; -let user: IUser; beforeAll(async () => { db = await dbInit('user_subscriptions', getLogger); stores = db.stores; config = createTestConfig({}); + userStore = stores.userStore; userSubscriptionService = createUserSubscriptionsService(config)( db.rawDatabase, ); userSubscriptionsReadModel = db.stores.userSubscriptionsReadModel; + eventsStore = db.stores.eventStore; +}); - user = await stores.userStore.insert({ - email: 'test@getunleash.io', - name: 'Sample Name', - }); +beforeEach(async () => { + await userStore.deleteAll(); }); afterAll(async () => { @@ -39,6 +42,11 @@ afterAll(async () => { }); test('Subscribe and unsubscribe', async () => { + const user = await userStore.insert({ + email: 'test@getunleash.io', + name: 'Sample Name', + }); + const subscribers = await userSubscriptionsReadModel.getSubscribedUsers( 'productivity-report', ); @@ -47,7 +55,7 @@ test('Subscribe and unsubscribe', async () => { ]); const userSubscriptions = - await userSubscriptionsReadModel.getUserSubscriptions(user.id); + await userSubscriptionService.getUserSubscriptions(user.id); expect(userSubscriptions).toMatchObject(['productivity-report']); await userSubscriptionService.unsubscribe( @@ -62,6 +70,49 @@ test('Subscribe and unsubscribe', async () => { expect(noSubscribers).toMatchObject([]); const noUserSubscriptions = - await userSubscriptionsReadModel.getUserSubscriptions(user.id); + await userSubscriptionService.getUserSubscriptions(user.id); expect(noUserSubscriptions).toMatchObject([]); }); + +test('Event log for subscription actions', async () => { + const user = await userStore.insert({ + email: 'test@getunleash.io', + name: 'Sample Name', + }); + + await userSubscriptionService.unsubscribe( + user.id, + 'productivity-report', + TEST_AUDIT_USER, + ); + + const unsubscribeEvent = (await eventsStore.getAll())[0]; + + expect(unsubscribeEvent).toEqual( + expect.objectContaining({ + type: 'user-preference-updated', + data: { + subscription: 'productivity-report', + action: 'unsubscribed', + }, + }), + ); + + await userSubscriptionService.subscribe( + user.id, + 'productivity-report', + TEST_AUDIT_USER, + ); + + const subscribeEvent = (await eventsStore.getAll())[0]; + + expect(subscribeEvent).toEqual( + expect.objectContaining({ + type: 'user-preference-updated', + data: { + subscription: 'productivity-report', + action: 'subscribed', + }, + }), + ); +}); diff --git a/src/mailtemplates/productivity-report/productivity-report.plain.mustache b/src/mailtemplates/productivity-report/productivity-report.plain.mustache index 4c23236ce4b3..00c584100ee4 100644 --- a/src/mailtemplates/productivity-report/productivity-report.plain.mustache +++ b/src/mailtemplates/productivity-report/productivity-report.plain.mustache @@ -14,4 +14,4 @@ Production updates last month: {{productionUpdates}} Go to your Insights to learn more: {{unleashUrl}}/insights This email was sent to {{userEmail}}. You’ve received this as you are a user of Unleash. -If you wish to unsubscribe, go to you profile settings here. +If you wish to unsubscribe, go to you profile settings on {{unleashUrl}}/profile