Skip to content

Commit 5b18d8e

Browse files
CopilotneSpecc
authored andcommitted
test: add unit test for createProject repetitions timestamp index
Agent-Logs-Url: https://github.com/codex-team/hawk.api.nodejs/sessions/5237af31-c1bb-495f-a4d2-c59bf81d4ccc Co-authored-by: neSpecc <3684889+neSpecc@users.noreply.github.com>
1 parent 5350ebf commit 5b18d8e

2 files changed

Lines changed: 87 additions & 4 deletions

File tree

test/resolvers/project.test.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,32 @@ jest.mock('../../src/integrations/github/service', () => require('../__mocks__/g
88
// eslint-disable-next-line @typescript-eslint/no-var-requires
99
import { deleteInstallationMock, GitHubService } from '../__mocks__/github-service';
1010

11+
jest.mock('../../src/mongo', () => ({
12+
databases: {
13+
events: {
14+
createCollection: jest.fn(),
15+
},
16+
},
17+
}));
18+
19+
jest.mock('../../src/utils/telegram', () => ({
20+
sendMessage: jest.fn(),
21+
}));
22+
1123
// @ts-expect-error - CommonJS module, TypeScript can't infer types properly
1224
import projectResolverModule from '../../src/resolvers/project';
1325

26+
// eslint-disable-next-line @typescript-eslint/no-var-requires
27+
const mongoMock = require('../../src/mongo');
28+
1429
/**
1530
* Type assertion for CommonJS module
1631
*/
1732
const projectResolver = projectResolverModule as {
1833
Mutation: {
1934
disconnectTaskManager: (...args: unknown[]) => Promise<unknown>;
2035
updateTaskManagerSettings: (...args: unknown[]) => Promise<unknown>;
36+
createProject: (...args: unknown[]) => Promise<unknown>;
2137
};
2238
Query: {
2339
project: (...args: unknown[]) => Promise<unknown>;
@@ -518,3 +534,70 @@ describe('Project Resolver - Task Manager Mutations', () => {
518534
});
519535
});
520536
});
537+
538+
describe('Project Resolver - createProject', () => {
539+
beforeEach(() => {
540+
jest.clearAllMocks();
541+
});
542+
543+
it('should create a timestamp index on the repetitions collection', async () => {
544+
const projectId = new ObjectId();
545+
546+
const eventsCollectionMock = { createIndex: jest.fn().mockResolvedValue(undefined) };
547+
const repetitionsCollectionMock = { createIndex: jest.fn().mockResolvedValue(undefined) };
548+
const dailyEventsCollectionMock = { createIndex: jest.fn().mockResolvedValue(undefined) };
549+
550+
mongoMock.databases.events.createCollection.mockImplementation((name: string) => {
551+
if (name.startsWith('events:')) {
552+
return Promise.resolve(eventsCollectionMock);
553+
}
554+
if (name.startsWith('repetitions:')) {
555+
return Promise.resolve(repetitionsCollectionMock);
556+
}
557+
if (name.startsWith('dailyEvents:')) {
558+
return Promise.resolve(dailyEventsCollectionMock);
559+
}
560+
});
561+
562+
const mockProject = {
563+
_id: projectId,
564+
createNotificationsRule: jest.fn().mockResolvedValue(undefined),
565+
};
566+
567+
const mockProjectsFactory = {
568+
create: jest.fn().mockResolvedValue(mockProject),
569+
findById: jest.fn().mockResolvedValue(mockProject),
570+
};
571+
572+
const mockWorkspacesFactory = {
573+
findById: jest.fn().mockResolvedValue({ _id: new ObjectId(), name: 'Test Workspace' }),
574+
};
575+
576+
const mockUsersFactory = {
577+
findById: jest.fn().mockResolvedValue({ email: 'test@example.com' }),
578+
};
579+
580+
const context = {
581+
user: { id: new ObjectId().toString() },
582+
factories: {
583+
workspacesFactory: mockWorkspacesFactory as any,
584+
projectsFactory: mockProjectsFactory as any,
585+
usersFactory: mockUsersFactory as any,
586+
plansFactory: {} as any,
587+
businessOperationsFactory: {} as any,
588+
releasesFactory: {} as any,
589+
},
590+
};
591+
592+
await projectResolver.Mutation.createProject(
593+
{},
594+
{ workspaceId: new ObjectId().toString(), name: 'Test Project', image: '' },
595+
context
596+
);
597+
598+
expect(repetitionsCollectionMock.createIndex).toHaveBeenCalledWith(
599+
{ timestamp: 1 },
600+
{ name: 'timestamp', sparse: true }
601+
);
602+
});
603+
});

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -494,10 +494,10 @@
494494
dependencies:
495495
tslib "^2.4.0"
496496

497-
"@hawk.so/nodejs@^3.3.1":
498-
version "3.3.1"
499-
resolved "https://registry.yarnpkg.com/@hawk.so/nodejs/-/nodejs-3.3.1.tgz#23e304607a64cd3a91e488d481cc968fccab6dba"
500-
integrity sha512-GALpgM/96As5gE3YdwVcMglTc57Dfqez3b2EciKJoq0u174gK/h+8tayEL+/65pqBy7BNni8ptCQWdgw5Zv5yA==
497+
"@hawk.so/nodejs@^3.3.2":
498+
version "3.3.2"
499+
resolved "https://registry.yarnpkg.com/@hawk.so/nodejs/-/nodejs-3.3.2.tgz#113db57546f82e5c405c43b6dc5709232827c4df"
500+
integrity sha512-i8KFHjFfwmtgN///Q1oxNDTJSQEtjy5iBqDZBuSMAzpQhBBmBE2n9RNIRDaVOby8r+Z+oo3g4Sik2LlffB5AWQ==
501501
dependencies:
502502
"@hawk.so/types" "^0.5.8"
503503
axios "^0.21.1"

0 commit comments

Comments
 (0)