unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
129 lines • 5.42 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_init_1 = __importDefault(require("../../../test/e2e/helpers/database-init"));
const no_logger_1 = __importDefault(require("../../../test/fixtures/no-logger"));
const user_subscriptions_read_model_1 = require("./user-subscriptions-read-model");
const user_subscriptions_read_model_type_1 = require("./user-subscriptions-read-model-type");
let db;
let stores;
let userStore;
let userUnsubscribeStore;
let userSubscriptionsReadModel;
const subscription = 'productivity-report';
beforeAll(async () => {
db = await (0, database_init_1.default)('user_subscriptions_read_model_test', no_logger_1.default);
stores = db.stores;
userStore = stores.userStore;
userUnsubscribeStore = stores.userUnsubscribeStore;
userSubscriptionsReadModel = new user_subscriptions_read_model_1.UserSubscriptionsReadModel(db.rawDatabase);
});
beforeEach(async () => {
await db.stores.userStore.deleteAll();
});
afterAll(async () => {
await db.destroy();
});
describe('User subscription read model', () => {
test('returns subscribed and unsubscribed users', async () => {
const user1 = await userStore.insert({
email: 'user1@example.com',
name: 'User One',
});
// user seen
await userStore.successfullyLogin(user1);
const user2 = await userStore.insert({
email: 'user2@example.com',
name: 'User Two',
});
// never seen
const user3 = await userStore.insert({
email: 'user3@example.com',
name: 'User Three',
});
// unsubscribe
await userUnsubscribeStore.insert({
userId: user2.id,
subscription,
});
const subscribers = await userSubscriptionsReadModel.getSubscribedUsers(subscription);
expect(subscribers).toHaveLength(1);
expect(subscribers).toEqual(expect.arrayContaining([
{ email: 'user1@example.com', name: 'User One' },
]));
const unsubscribers = await userSubscriptionsReadModel.getUnsubscribedUsers(subscription);
expect(unsubscribers).toEqual(expect.arrayContaining([
{ email: 'user2@example.com', name: 'User Two' },
]));
});
test('reflects changes after unsubscribe and resubscribe', async () => {
const user = await userStore.insert({
email: 'user7@example.com',
name: 'User Seven',
});
await userStore.successfullyLogin(user);
let subscribers = await userSubscriptionsReadModel.getSubscribedUsers(subscription);
expect(subscribers).toEqual(expect.arrayContaining([
{ email: 'user7@example.com', name: 'User Seven' },
]));
await userUnsubscribeStore.insert({
userId: user.id,
subscription,
});
subscribers =
await userSubscriptionsReadModel.getSubscribedUsers(subscription);
expect(subscribers).not.toEqual(expect.arrayContaining([
{ email: 'user7@example.com', name: 'User Seven' },
]));
await userUnsubscribeStore.delete({
userId: user.id,
subscription,
});
subscribers =
await userSubscriptionsReadModel.getSubscribedUsers(subscription);
expect(subscribers).toEqual(expect.arrayContaining([
{ email: 'user7@example.com', name: 'User Seven' },
]));
});
test('should not include deleted users', async () => {
const user = await userStore.insert({
email: 'todelete@getunleash.io',
name: 'To Delete',
});
await userStore.delete(user.id);
const subscribers = await userSubscriptionsReadModel.getSubscribedUsers(subscription);
expect(subscribers).toHaveLength(0);
});
});
describe('User subscription read model', () => {
test('returns all user subscriptions if user has not unsubscribed', async () => {
const user = await userStore.insert({
email: 'user4@example.com',
name: 'User Four',
});
const userSubscriptions = await userSubscriptionsReadModel.getUserSubscriptions(user.id);
expect(userSubscriptions).toEqual(user_subscriptions_read_model_type_1.SUBSCRIPTION_TYPES);
});
test('returns correct subscriptions if user unsubscribed and resubscribed', async () => {
const user = await userStore.insert({
email: 'user5@example.com',
name: 'User Five',
});
const subscription = 'productivity-report';
await userUnsubscribeStore.insert({
userId: user.id,
subscription,
});
const userSubscriptions = await userSubscriptionsReadModel.getUserSubscriptions(user.id);
expect(userSubscriptions).not.toContain(subscription);
await userUnsubscribeStore.delete({
userId: user.id,
subscription,
});
const userSubscriptionsAfterResubscribe = await userSubscriptionsReadModel.getUserSubscriptions(user.id);
expect(userSubscriptionsAfterResubscribe).toContain(subscription);
});
});
//# sourceMappingURL=user-subscriptions-read-model.test.js.map