Files
workavia-drive/twake/backend/node/test/e2e/counters.spec.ts
T
montaghanmy 10fe6f78d1 feat: init
2023-03-23 11:03:16 +01:00

240 lines
6.4 KiB
TypeScript

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { beforeAll, describe, expect, it } from "@jest/globals";
import { init, TestPlatform } from "./setup";
import { v1 as uuidv1 } from "uuid";
import { CounterAPI } from "../../src/core/platform/services/counter/types";
import {
WorkspaceCounterEntity,
WorkspaceCounterPrimaryKey,
WorkspaceCounterType,
} from "../../src/services/workspaces/entities/workspace_counters";
import { CounterProvider } from "../../src/core/platform/services/counter/provider";
import WorkspaceUser, {
getInstance as getWorkspaceUserInstance,
TYPE as WorkspaceUserEntityType,
} from "../../src/services/workspaces/entities/workspace_user";
import { countRepositoryItems } from "../../src/utils/counters";
import { TestDbService } from "./utils.prepare.db";
import {
ChannelCounterEntity,
ChannelCounterPrimaryKey,
ChannelUserCounterType,
} from "../../src/services/channels/entities/channel-counters";
import { ChannelMemberType } from "../../src/services/channels/types";
import { getMemberOfChannelInstance, MemberOfChannel } from "../../src/services/channels/entities";
import gr from "../../src/services/global-resolver";
describe("Counters implementation", () => {
let platform: TestPlatform;
// let database: DatabaseServiceAPI;
let counterApi: CounterAPI;
let testDbService: TestDbService;
beforeAll(async ends => {
platform = await init();
testDbService = new TestDbService(platform);
await gr.database.getConnector().drop();
counterApi = platform.platform.getProvider<CounterAPI>("counter");
expect(counterApi).toBeTruthy();
ends();
});
afterAll(done => {
platform.tearDown().then(done);
});
const getCounter = async (type, entity) => {
return counterApi.getCounter<entity>(await testDbService.getRepository<entity>(type, entity));
};
describe("Workspace counters", () => {
let counter: CounterProvider;
const counterPk = { id: uuidv1(), counter_type: WorkspaceCounterType.MEMBERS };
beforeAll(async ends => {
counter = await getCounter("workspace_counters", WorkspaceCounterEntity);
const workspaceUserRepository = await testDbService.getRepository(
WorkspaceUserEntityType,
WorkspaceUser,
);
await workspaceUserRepository.save(
getWorkspaceUserInstance({
workspaceId: counterPk.id,
userId: uuidv1(),
id: uuidv1(),
}),
);
expect(counter).toBeTruthy();
ends();
});
it("Initializing empty value", async done => {
await counter.increase(counterPk, 0);
const val = await counter.get(counterPk);
expect(val).toEqual(0);
done();
});
it("Adding value", async done => {
// adding 1
await counter.increase(counterPk, 1);
let val = await counter.get(counterPk);
expect(val).toEqual(1);
// adding 2
await counter.increase(counterPk, 2);
val = await counter.get(counterPk);
expect(val).toEqual(3);
done();
});
it("Subtracting value", async done => {
// Subtracting 2
await counter.increase(counterPk, -2);
let val = await counter.get(counterPk);
expect(val).toEqual(1);
// Subtracting 10
await counter.increase(counterPk, -10);
val = await counter.get(counterPk);
expect(val).toEqual(-9);
done();
});
it("Revising counter", async done => {
// Subtracting 2
const workspaceUserRepository = await testDbService.getRepository(
WorkspaceUserEntityType,
WorkspaceUser,
);
counter.setReviseCallback(async (pk: WorkspaceCounterPrimaryKey) => {
if (pk.counter_type == "members") {
return countRepositoryItems(workspaceUserRepository, { workspace_id: pk.id });
}
}, 4);
await counter.increase(counterPk, 1);
const val = await counter.get(counterPk);
expect(val).toEqual(1);
done();
});
});
describe("Channel counters", () => {
let counter: CounterProvider;
let counterPk: ChannelCounterPrimaryKey;
beforeAll(async ends => {
counterPk = {
id: uuidv1(),
company_id: uuidv1(),
workspace_id: uuidv1(),
counter_type: ChannelUserCounterType.MEMBERS,
};
counter = await getCounter("channel_counters", ChannelCounterEntity);
const memberOfChannelRepository = await testDbService.getRepository(
"channel_members",
MemberOfChannel,
);
await memberOfChannelRepository.save(
getMemberOfChannelInstance({
company_id: counterPk.company_id,
workspace_id: counterPk.workspace_id,
channel_id: counterPk.id,
user_id: uuidv1(),
}),
);
expect(counter).toBeTruthy();
ends();
});
it("Initializing empty value", async done => {
await counter.increase(counterPk, 0);
const val = await counter.get(counterPk);
expect(val).toEqual(0);
done();
});
it("Adding value", async done => {
// adding 1
await counter.increase(counterPk, 1);
let val = await counter.get(counterPk);
expect(val).toEqual(1);
// adding 2
await counter.increase(counterPk, 2);
val = await counter.get(counterPk);
expect(val).toEqual(3);
done();
});
it("Subtracting value", async done => {
// Subtracting 2
await counter.increase(counterPk, -2);
let val = await counter.get(counterPk);
expect(val).toEqual(1);
// Subtracting 10
await counter.increase(counterPk, -10);
val = await counter.get(counterPk);
expect(val).toEqual(-9);
done();
});
it("Revising counter", async done => {
// Subtracting 2
const memberOfChannelRepository = await testDbService.getRepository(
"channel_members",
MemberOfChannel,
);
counter.setReviseCallback(async (pk: ChannelCounterPrimaryKey) => {
if (pk.counter_type == ChannelUserCounterType.MEMBERS) {
return countRepositoryItems(
memberOfChannelRepository,
{ channel_id: pk.id, company_id: pk.company_id, workspace_id: pk.workspace_id },
{ type: ChannelMemberType.MEMBER },
);
}
}, 4);
await counter.increase(counterPk, 1);
const val = await counter.get(counterPk);
expect(val).toEqual(1);
done();
});
});
});