@talkpilot/core-db 1.1.18 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/rules/development.mdc +65 -65
- package/DEVELOPMENT.md +98 -98
- package/README.md +160 -160
- package/dist/talkpilot/calls/calls.getters.d.ts +2 -1
- package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.getters.js +176 -0
- package/dist/talkpilot/calls/calls.getters.js.map +1 -1
- package/dist/talkpilot/calls/calls.types.d.ts +49 -2
- package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.types.js.map +1 -1
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts +1 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts.map +1 -1
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.js +13 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.js.map +1 -1
- package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts +2 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts.map +1 -1
- package/jest.config.js +19 -19
- package/package.json +45 -45
- package/src/__tests__/setup.ts +20 -20
- package/src/connection.ts +42 -42
- package/src/index.ts +16 -16
- package/src/municipal/__tests__/validation.spec.ts +62 -62
- package/src/municipal/cities/cities.getters.ts +50 -50
- package/src/municipal/cities/cities.types.ts +11 -11
- package/src/municipal/cities/index.ts +2 -2
- package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +282 -282
- package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +72 -72
- package/src/municipal/departmentsSubjects/index.ts +9 -9
- package/src/municipal/index.ts +21 -21
- package/src/municipal/mongodb-client.ts +61 -61
- package/src/municipal/streets/index.ts +2 -2
- package/src/municipal/streets/streets.getters.ts +125 -125
- package/src/municipal/streets/streets.types.ts +18 -18
- package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
- package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
- package/src/municipal/systemInstructions/index.ts +7 -7
- package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
- package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
- package/src/municipal/systemInstructions/instructions.types.ts +30 -30
- package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +66 -66
- package/src/municipal/tickets/index.ts +2 -2
- package/src/municipal/tickets/tickets.getters.ts +261 -261
- package/src/municipal/tickets/tickets.types.ts +43 -43
- package/src/municipal/utils/types.ts +11 -11
- package/src/talkpilot/__tests__/db.spec.ts +38 -38
- package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
- package/src/talkpilot/__tests__/validation.spec.ts +68 -68
- package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
- package/src/talkpilot/agents/agents.getters.ts +34 -34
- package/src/talkpilot/agents/agents.types.ts +14 -14
- package/src/talkpilot/agents/index.ts +2 -2
- package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
- package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
- package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
- package/src/talkpilot/backgroundToolResults/index.ts +2 -2
- package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
- package/src/talkpilot/calls/__tests__/calls.spec.ts +252 -252
- package/src/talkpilot/calls/calls.getters.ts +446 -248
- package/src/talkpilot/calls/calls.types.ts +171 -116
- package/src/talkpilot/calls/index.ts +2 -2
- package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
- package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
- package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
- package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
- package/src/talkpilot/clients/clients.getters.ts +16 -16
- package/src/talkpilot/clients/clients.types.ts +14 -14
- package/src/talkpilot/clients/index.ts +2 -2
- package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +106 -106
- package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +44 -22
- package/src/talkpilot/clientsConfig/clientsConfig.types.ts +94 -92
- package/src/talkpilot/clientsConfig/index.ts +2 -2
- package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +67 -67
- package/src/talkpilot/flows/flows.getter.ts +14 -14
- package/src/talkpilot/flows/flows.schema.ts +153 -153
- package/src/talkpilot/flows/flows.types.ts +184 -184
- package/src/talkpilot/flows/index.ts +2 -2
- package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
- package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
- package/src/talkpilot/groups/groups.getters.ts +30 -30
- package/src/talkpilot/groups/groups.types.ts +29 -29
- package/src/talkpilot/groups/index.ts +3 -3
- package/src/talkpilot/groups/phone.utils.ts +46 -46
- package/src/talkpilot/index.ts +29 -29
- package/src/talkpilot/leads/index.ts +2 -2
- package/src/talkpilot/leads/leads.getter.ts +6 -6
- package/src/talkpilot/leads/leads.schema.ts +33 -33
- package/src/talkpilot/leads/leads.types.ts +20 -20
- package/src/talkpilot/mongodb-client.ts +78 -78
- package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +247 -247
- package/src/talkpilot/phone_numbers/index.ts +2 -2
- package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +154 -154
- package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
- package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
- package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
- package/src/talkpilot/plans/index.ts +2 -2
- package/src/talkpilot/plans/plans.getters.ts +132 -132
- package/src/talkpilot/plans/plans.types.ts +89 -89
- package/src/talkpilot/results/index.ts +7 -7
- package/src/talkpilot/results/results.getter.ts +35 -35
- package/src/talkpilot/results/results.schema.ts +25 -25
- package/src/talkpilot/results/results.types.ts +34 -34
- package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
- package/src/talkpilot/retry_analyze/index.ts +2 -2
- package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +75 -75
- package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
- package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
- package/src/talkpilot/sessions/index.ts +2 -2
- package/src/talkpilot/sessions/sessions.getter.ts +92 -92
- package/src/talkpilot/sessions/sessions.schema.ts +34 -34
- package/src/talkpilot/sessions/sessions.types.ts +30 -30
- package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
- package/src/talkpilot/subscriptions/index.ts +3 -3
- package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
- package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
- package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
- package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
- package/src/talkpilot/utils/query.utils.ts +21 -21
- package/src/test-utils/db-utils.ts +24 -24
- package/src/test-utils/factories/index.ts +12 -12
- package/src/test-utils/factories/municipal/cities.ts +16 -16
- package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
- package/src/test-utils/factories/municipal/streets.ts +22 -22
- package/src/test-utils/factories/municipal/tickets.ts +39 -39
- package/src/test-utils/factories/talkpilot/agents.ts +19 -19
- package/src/test-utils/factories/talkpilot/calls.ts +37 -37
- package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
- package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
- package/src/test-utils/factories/talkpilot/flows.ts +33 -33
- package/src/test-utils/factories/talkpilot/groups.ts +33 -33
- package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
- package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
- package/src/utils/validation.ts +23 -23
- package/tsconfig.json +23 -23
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getFlowsCollection,
|
|
3
|
-
getSessionsCollection,
|
|
4
|
-
getResultsCollection,
|
|
5
|
-
getLeadsCollection,
|
|
6
|
-
getPhoneNumbersCollection,
|
|
7
|
-
getClientsCollection,
|
|
8
|
-
ObjectId,
|
|
9
|
-
getPlansCollection,
|
|
10
|
-
getSubscriptionsCollection,
|
|
11
|
-
} from "../index";
|
|
12
|
-
|
|
13
|
-
import { ObjectId as MongoObjectId } from "mongodb";
|
|
14
|
-
|
|
15
|
-
describe("talkpilot core/db", () => {
|
|
16
|
-
it.each([
|
|
17
|
-
["flows", getFlowsCollection],
|
|
18
|
-
["sessions", getSessionsCollection],
|
|
19
|
-
["results", getResultsCollection],
|
|
20
|
-
["leads", getLeadsCollection],
|
|
21
|
-
["phone_numbers", getPhoneNumbersCollection],
|
|
22
|
-
["clients", getClientsCollection],
|
|
23
|
-
["plans", getPlansCollection],
|
|
24
|
-
["subscriptions", getSubscriptionsCollection],
|
|
25
|
-
])('%s collection helper returns a "%s" collection', (name, getter) => {
|
|
26
|
-
expect(getter().collectionName).toBe(name);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("ObjectId re-export behaves like mongodb.ObjectId", () => {
|
|
30
|
-
expect(ObjectId).toBe(MongoObjectId);
|
|
31
|
-
|
|
32
|
-
const id = new ObjectId();
|
|
33
|
-
|
|
34
|
-
expect(id).toBeInstanceOf(MongoObjectId);
|
|
35
|
-
expect(ObjectId.isValid(id)).toBe(true);
|
|
36
|
-
expect(id.toHexString()).toHaveLength(24);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
1
|
+
import {
|
|
2
|
+
getFlowsCollection,
|
|
3
|
+
getSessionsCollection,
|
|
4
|
+
getResultsCollection,
|
|
5
|
+
getLeadsCollection,
|
|
6
|
+
getPhoneNumbersCollection,
|
|
7
|
+
getClientsCollection,
|
|
8
|
+
ObjectId,
|
|
9
|
+
getPlansCollection,
|
|
10
|
+
getSubscriptionsCollection,
|
|
11
|
+
} from "../index";
|
|
12
|
+
|
|
13
|
+
import { ObjectId as MongoObjectId } from "mongodb";
|
|
14
|
+
|
|
15
|
+
describe("talkpilot core/db", () => {
|
|
16
|
+
it.each([
|
|
17
|
+
["flows", getFlowsCollection],
|
|
18
|
+
["sessions", getSessionsCollection],
|
|
19
|
+
["results", getResultsCollection],
|
|
20
|
+
["leads", getLeadsCollection],
|
|
21
|
+
["phone_numbers", getPhoneNumbersCollection],
|
|
22
|
+
["clients", getClientsCollection],
|
|
23
|
+
["plans", getPlansCollection],
|
|
24
|
+
["subscriptions", getSubscriptionsCollection],
|
|
25
|
+
])('%s collection helper returns a "%s" collection', (name, getter) => {
|
|
26
|
+
expect(getter().collectionName).toBe(name);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("ObjectId re-export behaves like mongodb.ObjectId", () => {
|
|
30
|
+
expect(ObjectId).toBe(MongoObjectId);
|
|
31
|
+
|
|
32
|
+
const id = new ObjectId();
|
|
33
|
+
|
|
34
|
+
expect(id).toBeInstanceOf(MongoObjectId);
|
|
35
|
+
expect(ObjectId.isValid(id)).toBe(true);
|
|
36
|
+
expect(id.toHexString()).toHaveLength(24);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { getDb } from "../index";
|
|
2
|
-
|
|
3
|
-
describe("MongoDBClient", () => {
|
|
4
|
-
it("should have a connected database instance from global setup", () => {
|
|
5
|
-
const db = getDb();
|
|
6
|
-
expect(db).toBeDefined();
|
|
7
|
-
expect(db.databaseName).toBe("test"); // Based on our setup.ts
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
it("should report as connected", async () => {
|
|
11
|
-
// Note: mongodbClient.connect() was called in global setup
|
|
12
|
-
// but through setDb, not necessarily through the client singleton instance
|
|
13
|
-
// since initTestDb calls setDb directly.
|
|
14
|
-
|
|
15
|
-
// In a real scenario, you'd use the client.
|
|
16
|
-
expect(true).toBe(true);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
1
|
+
import { getDb } from "../index";
|
|
2
|
+
|
|
3
|
+
describe("MongoDBClient", () => {
|
|
4
|
+
it("should have a connected database instance from global setup", () => {
|
|
5
|
+
const db = getDb();
|
|
6
|
+
expect(db).toBeDefined();
|
|
7
|
+
expect(db.databaseName).toBe("test"); // Based on our setup.ts
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it("should report as connected", async () => {
|
|
11
|
+
// Note: mongodbClient.connect() was called in global setup
|
|
12
|
+
// but through setDb, not necessarily through the client singleton instance
|
|
13
|
+
// since initTestDb calls setDb directly.
|
|
14
|
+
|
|
15
|
+
// In a real scenario, you'd use the client.
|
|
16
|
+
expect(true).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import { mongodbClient } from "../mongodb-client";
|
|
2
|
-
import { MongoClient } from "mongodb";
|
|
3
|
-
|
|
4
|
-
describe("MongoDBClient Validation", () => {
|
|
5
|
-
const originalEnv = process.env;
|
|
6
|
-
|
|
7
|
-
beforeEach(() => {
|
|
8
|
-
process.env = { ...originalEnv };
|
|
9
|
-
delete process.env.MONGO_URI;
|
|
10
|
-
delete process.env.MONGODB_URI;
|
|
11
|
-
delete process.env.MONGODB_DB_NAME;
|
|
12
|
-
|
|
13
|
-
// Force reset singleton state
|
|
14
|
-
(mongodbClient as any).client = null;
|
|
15
|
-
(mongodbClient as any).db = null;
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
afterAll(async () => {
|
|
19
|
-
process.env = originalEnv;
|
|
20
|
-
// Ensure we are disconnected
|
|
21
|
-
await mongodbClient.disconnect();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it("should throw error if no URI is provided", async () => {
|
|
25
|
-
await expect(mongodbClient.connect()).rejects.toThrow(
|
|
26
|
-
"[core-db] Configuration Error: 'MONGO_URI' is missing",
|
|
27
|
-
);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it("should throw error if an invalid URI format is provided", async () => {
|
|
31
|
-
await expect(mongodbClient.connect("not-a-mongo-uri")).rejects.toThrow(
|
|
32
|
-
"[core-db] Connection Error: The provided MongoDB URI is invalid",
|
|
33
|
-
);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it("should throw error if URI is valid but database name is missing", async () => {
|
|
37
|
-
// We mock the actual MongoClient connection so it doesn't try to hit a real network
|
|
38
|
-
const connectSpy = jest
|
|
39
|
-
.spyOn(MongoClient.prototype, "connect")
|
|
40
|
-
.mockResolvedValue({} as any);
|
|
41
|
-
|
|
42
|
-
const uriWithoutDb = "mongodb://127.0.0.1:27017";
|
|
43
|
-
await expect(mongodbClient.connect(uriWithoutDb)).rejects.toThrow(
|
|
44
|
-
"[core-db] Database name not specified",
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
connectSpy.mockRestore();
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it("should succeed when valid URI and DB name are provided", async () => {
|
|
51
|
-
const mockDb = { databaseName: "my-db" };
|
|
52
|
-
const connectSpy = jest
|
|
53
|
-
.spyOn(MongoClient.prototype, "connect")
|
|
54
|
-
.mockResolvedValue({} as any);
|
|
55
|
-
const dbSpy = jest
|
|
56
|
-
.spyOn(MongoClient.prototype, "db")
|
|
57
|
-
.mockReturnValue(mockDb as any);
|
|
58
|
-
|
|
59
|
-
const validUri = "mongodb://127.0.0.1:27017/my-db";
|
|
60
|
-
await mongodbClient.connect(validUri);
|
|
61
|
-
|
|
62
|
-
expect(mongodbClient.getDb()).toBeDefined();
|
|
63
|
-
expect(mongodbClient.getDb().databaseName).toBe("my-db");
|
|
64
|
-
|
|
65
|
-
connectSpy.mockRestore();
|
|
66
|
-
dbSpy.mockRestore();
|
|
67
|
-
});
|
|
68
|
-
});
|
|
1
|
+
import { mongodbClient } from "../mongodb-client";
|
|
2
|
+
import { MongoClient } from "mongodb";
|
|
3
|
+
|
|
4
|
+
describe("MongoDBClient Validation", () => {
|
|
5
|
+
const originalEnv = process.env;
|
|
6
|
+
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
process.env = { ...originalEnv };
|
|
9
|
+
delete process.env.MONGO_URI;
|
|
10
|
+
delete process.env.MONGODB_URI;
|
|
11
|
+
delete process.env.MONGODB_DB_NAME;
|
|
12
|
+
|
|
13
|
+
// Force reset singleton state
|
|
14
|
+
(mongodbClient as any).client = null;
|
|
15
|
+
(mongodbClient as any).db = null;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
afterAll(async () => {
|
|
19
|
+
process.env = originalEnv;
|
|
20
|
+
// Ensure we are disconnected
|
|
21
|
+
await mongodbClient.disconnect();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("should throw error if no URI is provided", async () => {
|
|
25
|
+
await expect(mongodbClient.connect()).rejects.toThrow(
|
|
26
|
+
"[core-db] Configuration Error: 'MONGO_URI' is missing",
|
|
27
|
+
);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("should throw error if an invalid URI format is provided", async () => {
|
|
31
|
+
await expect(mongodbClient.connect("not-a-mongo-uri")).rejects.toThrow(
|
|
32
|
+
"[core-db] Connection Error: The provided MongoDB URI is invalid",
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("should throw error if URI is valid but database name is missing", async () => {
|
|
37
|
+
// We mock the actual MongoClient connection so it doesn't try to hit a real network
|
|
38
|
+
const connectSpy = jest
|
|
39
|
+
.spyOn(MongoClient.prototype, "connect")
|
|
40
|
+
.mockResolvedValue({} as any);
|
|
41
|
+
|
|
42
|
+
const uriWithoutDb = "mongodb://127.0.0.1:27017";
|
|
43
|
+
await expect(mongodbClient.connect(uriWithoutDb)).rejects.toThrow(
|
|
44
|
+
"[core-db] Database name not specified",
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
connectSpy.mockRestore();
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("should succeed when valid URI and DB name are provided", async () => {
|
|
51
|
+
const mockDb = { databaseName: "my-db" };
|
|
52
|
+
const connectSpy = jest
|
|
53
|
+
.spyOn(MongoClient.prototype, "connect")
|
|
54
|
+
.mockResolvedValue({} as any);
|
|
55
|
+
const dbSpy = jest
|
|
56
|
+
.spyOn(MongoClient.prototype, "db")
|
|
57
|
+
.mockReturnValue(mockDb as any);
|
|
58
|
+
|
|
59
|
+
const validUri = "mongodb://127.0.0.1:27017/my-db";
|
|
60
|
+
await mongodbClient.connect(validUri);
|
|
61
|
+
|
|
62
|
+
expect(mongodbClient.getDb()).toBeDefined();
|
|
63
|
+
expect(mongodbClient.getDb().databaseName).toBe("my-db");
|
|
64
|
+
|
|
65
|
+
connectSpy.mockRestore();
|
|
66
|
+
dbSpy.mockRestore();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { findAgents } from "../agents.getters";
|
|
2
|
-
import { setDb } from "../../index";
|
|
3
|
-
import { Db, Collection } from "mongodb";
|
|
4
|
-
import { createAgent } from "../../../test-utils/factories";
|
|
5
|
-
|
|
6
|
-
describe("agents getters", () => {
|
|
7
|
-
let mockDb: Partial<Db>;
|
|
8
|
-
let mockCollection: Partial<Collection>;
|
|
9
|
-
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
const mockAgent = createAgent({ name: "Agent Smith" });
|
|
12
|
-
mockCollection = {
|
|
13
|
-
find: jest.fn().mockReturnValue({
|
|
14
|
-
toArray: jest.fn().mockResolvedValue([mockAgent]),
|
|
15
|
-
}),
|
|
16
|
-
};
|
|
17
|
-
mockDb = {
|
|
18
|
-
collection: jest.fn().mockReturnValue(mockCollection),
|
|
19
|
-
};
|
|
20
|
-
setDb(mockDb as Db);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it("findAgents should return agents", async () => {
|
|
24
|
-
const result = await findAgents();
|
|
25
|
-
|
|
26
|
-
expect(mockDb.collection).toHaveBeenCalledWith("agents");
|
|
27
|
-
expect(result[0].name).toBe("Agent Smith");
|
|
28
|
-
});
|
|
29
|
-
});
|
|
1
|
+
import { findAgents } from "../agents.getters";
|
|
2
|
+
import { setDb } from "../../index";
|
|
3
|
+
import { Db, Collection } from "mongodb";
|
|
4
|
+
import { createAgent } from "../../../test-utils/factories";
|
|
5
|
+
|
|
6
|
+
describe("agents getters", () => {
|
|
7
|
+
let mockDb: Partial<Db>;
|
|
8
|
+
let mockCollection: Partial<Collection>;
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
const mockAgent = createAgent({ name: "Agent Smith" });
|
|
12
|
+
mockCollection = {
|
|
13
|
+
find: jest.fn().mockReturnValue({
|
|
14
|
+
toArray: jest.fn().mockResolvedValue([mockAgent]),
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
mockDb = {
|
|
18
|
+
collection: jest.fn().mockReturnValue(mockCollection),
|
|
19
|
+
};
|
|
20
|
+
setDb(mockDb as Db);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("findAgents should return agents", async () => {
|
|
24
|
+
const result = await findAgents();
|
|
25
|
+
|
|
26
|
+
expect(mockDb.collection).toHaveBeenCalledWith("agents");
|
|
27
|
+
expect(result[0].name).toBe("Agent Smith");
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { getDb, Agent, ObjectId } from "../index";
|
|
2
|
-
|
|
3
|
-
export const getAgentsCollection = () => {
|
|
4
|
-
return getDb().collection<Agent>("agents");
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
export const findAgents = async (filter: any = {}) => {
|
|
8
|
-
return getAgentsCollection().find(filter).toArray();
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const findAgentById = (agentId: string) => {
|
|
12
|
-
return getAgentsCollection().findOne({ _id: new ObjectId(agentId) });
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const findAgentsByClientId = (clientId: string) => {
|
|
16
|
-
return getAgentsCollection().find({ clientId }).toArray();
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export const createAgent = async (agent: Agent) => {
|
|
20
|
-
const { insertedId } = await getAgentsCollection().insertOne(agent);
|
|
21
|
-
return findAgentById(String(insertedId));
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export const updateAgent = (agentId: string, data: Partial<Agent>) => {
|
|
25
|
-
return getAgentsCollection().findOneAndUpdate(
|
|
26
|
-
{ _id: new ObjectId(agentId) },
|
|
27
|
-
{ $set: data },
|
|
28
|
-
{ returnDocument: "after" },
|
|
29
|
-
);
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const removeAgent = (agentId: string) => {
|
|
33
|
-
return getAgentsCollection().deleteOne({ _id: new ObjectId(agentId) });
|
|
34
|
-
};
|
|
1
|
+
import { getDb, Agent, ObjectId } from "../index";
|
|
2
|
+
|
|
3
|
+
export const getAgentsCollection = () => {
|
|
4
|
+
return getDb().collection<Agent>("agents");
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export const findAgents = async (filter: any = {}) => {
|
|
8
|
+
return getAgentsCollection().find(filter).toArray();
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const findAgentById = (agentId: string) => {
|
|
12
|
+
return getAgentsCollection().findOne({ _id: new ObjectId(agentId) });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const findAgentsByClientId = (clientId: string) => {
|
|
16
|
+
return getAgentsCollection().find({ clientId }).toArray();
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const createAgent = async (agent: Agent) => {
|
|
20
|
+
const { insertedId } = await getAgentsCollection().insertOne(agent);
|
|
21
|
+
return findAgentById(String(insertedId));
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const updateAgent = (agentId: string, data: Partial<Agent>) => {
|
|
25
|
+
return getAgentsCollection().findOneAndUpdate(
|
|
26
|
+
{ _id: new ObjectId(agentId) },
|
|
27
|
+
{ $set: data },
|
|
28
|
+
{ returnDocument: "after" },
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const removeAgent = (agentId: string) => {
|
|
33
|
+
return getAgentsCollection().deleteOne({ _id: new ObjectId(agentId) });
|
|
34
|
+
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { WithId } from "mongodb";
|
|
2
|
-
|
|
3
|
-
export type Agent = {
|
|
4
|
-
name: string;
|
|
5
|
-
language: string;
|
|
6
|
-
voice: string;
|
|
7
|
-
instructions: string;
|
|
8
|
-
labels: string[];
|
|
9
|
-
clientId: string;
|
|
10
|
-
role: string;
|
|
11
|
-
gender: "male" | "female";
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export type AgentDoc = WithId<Agent>;
|
|
1
|
+
import { WithId } from "mongodb";
|
|
2
|
+
|
|
3
|
+
export type Agent = {
|
|
4
|
+
name: string;
|
|
5
|
+
language: string;
|
|
6
|
+
voice: string;
|
|
7
|
+
instructions: string;
|
|
8
|
+
labels: string[];
|
|
9
|
+
clientId: string;
|
|
10
|
+
role: string;
|
|
11
|
+
gender: "male" | "female";
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type AgentDoc = WithId<Agent>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./agents.getters";
|
|
2
|
-
export * from "./agents.types";
|
|
1
|
+
export * from "./agents.getters";
|
|
2
|
+
export * from "./agents.types";
|