Skip to content

Commit 245d3f5

Browse files
authored
Merge pull request #653 from codex-team/master
Update prod
2 parents 95230b5 + 72fd7b7 commit 245d3f5

4 files changed

Lines changed: 97 additions & 5 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hawk.api",
3-
"version": "1.5.0",
3+
"version": "1.5.1",
44
"main": "index.ts",
55
"license": "BUSL-1.1",
66
"scripts": {

src/resolvers/project.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const { GitHubService } = require('../integrations/github/service');
1414
const EVENTS_GROUP_HASH_INDEX_NAME = 'groupHashUnique';
1515
const REPETITIONS_GROUP_HASH_INDEX_NAME = 'groupHash_hashed';
1616
const REPETITIONS_USER_ID_INDEX_NAME = 'userId';
17+
const REPETITIONS_TIMESTAMP_INDEX_NAME = 'timestamp';
1718
const EVENTS_TIMESTAMP_INDEX_NAME = 'timestamp';
1819
const EVENTS_PAYLOAD_RELEASE_INDEX_NAME = 'payloadRelease';
1920
const GROUPING_TIMESTAMP_INDEX_NAME = 'groupingTimestamp';
@@ -213,6 +214,13 @@ module.exports = {
213214
sparse: true,
214215
});
215216

217+
await projectRepetitionsEventsCollection.createIndex({
218+
timestamp: 1,
219+
}, {
220+
name: REPETITIONS_TIMESTAMP_INDEX_NAME,
221+
sparse: true,
222+
});
223+
216224
await projectEventsCollection.createIndex({
217225
timestamp: 1,
218226
}, {

test/resolvers/project.test.ts

Lines changed: 84 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,71 @@ 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+
return Promise.reject(new Error(`Unexpected collection name: ${name}`));
561+
});
562+
563+
const mockProject = {
564+
_id: projectId,
565+
createNotificationsRule: jest.fn().mockResolvedValue(undefined),
566+
};
567+
568+
const mockProjectsFactory = {
569+
create: jest.fn().mockResolvedValue(mockProject),
570+
findById: jest.fn().mockResolvedValue(mockProject),
571+
};
572+
573+
const mockWorkspacesFactory = {
574+
findById: jest.fn().mockResolvedValue({ _id: new ObjectId(), name: 'Test Workspace' }),
575+
};
576+
577+
const mockUsersFactory = {
578+
findById: jest.fn().mockResolvedValue({ email: 'test@example.com' }),
579+
};
580+
581+
const context = {
582+
user: { id: new ObjectId().toString() },
583+
factories: {
584+
workspacesFactory: mockWorkspacesFactory as any,
585+
projectsFactory: mockProjectsFactory as any,
586+
usersFactory: mockUsersFactory as any,
587+
plansFactory: {} as any,
588+
businessOperationsFactory: {} as any,
589+
releasesFactory: {} as any,
590+
},
591+
};
592+
593+
await projectResolver.Mutation.createProject(
594+
{},
595+
{ workspaceId: new ObjectId().toString(), name: 'Test Project', image: '' },
596+
context
597+
);
598+
599+
expect(repetitionsCollectionMock.createIndex).toHaveBeenCalledWith(
600+
{ timestamp: 1 },
601+
{ name: 'timestamp', sparse: true }
602+
);
603+
});
604+
});

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)