diff --git a/meet-ce/backend/tests/unit/typings/document-fields-only/api-key-document.test.ts b/meet-ce/backend/tests/unit/typings/document-fields-only/api-key-document.test.ts new file mode 100644 index 00000000..162fcd65 --- /dev/null +++ b/meet-ce/backend/tests/unit/typings/document-fields-only/api-key-document.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from '@jest/globals'; +import { + MEET_API_KEY_DOCUMENT_ONLY_FIELDS, + MeetApiKeyDocumentOnlyField +} from '../../../../src/models/mongoose-schemas/api-key.schema.js'; +import { AssertReadonlyArrayCoversUnion } from '../type-assertions.utils.js'; + +describe('MeetApiKeyDocument-only fields list', () => { + it('should include all document-only properties', () => { + const assertApiKeyDocumentOnlyFieldsCoverage: AssertReadonlyArrayCoversUnion< + MeetApiKeyDocumentOnlyField, + typeof MEET_API_KEY_DOCUMENT_ONLY_FIELDS + > = true; + expect(assertApiKeyDocumentOnlyFieldsCoverage).toBe(true); + }); +}); diff --git a/meet-ce/backend/tests/unit/typings/document-fields-only/global-config-document.test.ts b/meet-ce/backend/tests/unit/typings/document-fields-only/global-config-document.test.ts new file mode 100644 index 00000000..a3f9d9a1 --- /dev/null +++ b/meet-ce/backend/tests/unit/typings/document-fields-only/global-config-document.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from '@jest/globals'; +import { + MEET_GLOBAL_CONFIG_DOCUMENT_ONLY_FIELDS, + MeetGlobalConfigDocumentOnlyField +} from '../../../../src/models/mongoose-schemas/global-config.schema.js'; +import { AssertReadonlyArrayCoversUnion } from '../type-assertions.utils.js'; + +describe('MeetGlobalConfigDocument-only fields list', () => { + it('should include all document-only properties', () => { + const assertGlobalConfigDocumentOnlyFieldsCoverage: AssertReadonlyArrayCoversUnion< + MeetGlobalConfigDocumentOnlyField, + typeof MEET_GLOBAL_CONFIG_DOCUMENT_ONLY_FIELDS + > = true; + expect(assertGlobalConfigDocumentOnlyFieldsCoverage).toBe(true); + }); +}); diff --git a/meet-ce/backend/tests/unit/typings/document-fields-only/recording-document.test.ts b/meet-ce/backend/tests/unit/typings/document-fields-only/recording-document.test.ts new file mode 100644 index 00000000..4c8c43b4 --- /dev/null +++ b/meet-ce/backend/tests/unit/typings/document-fields-only/recording-document.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from '@jest/globals'; +import { + MEET_RECORDING_DOCUMENT_ONLY_FIELDS, + MeetRecordingDocumentOnlyField +} from '../../../../src/models/mongoose-schemas/recording.schema.js'; +import { AssertReadonlyArrayCoversUnion } from '../type-assertions.utils.js'; + +describe('MeetRecordingDocument-only fields list', () => { + it('should include all document-only properties', () => { + const assertRecordingDocumentOnlyFieldsCoverage: AssertReadonlyArrayCoversUnion< + MeetRecordingDocumentOnlyField, + typeof MEET_RECORDING_DOCUMENT_ONLY_FIELDS + > = true; + expect(assertRecordingDocumentOnlyFieldsCoverage).toBe(true); + }); +}); diff --git a/meet-ce/backend/tests/unit/typings/document-fields-only/room-document.test.ts b/meet-ce/backend/tests/unit/typings/document-fields-only/room-document.test.ts new file mode 100644 index 00000000..42885662 --- /dev/null +++ b/meet-ce/backend/tests/unit/typings/document-fields-only/room-document.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from '@jest/globals'; +import { + MEET_ROOM_DOCUMENT_ONLY_FIELDS, + MeetRoomDocumentOnlyField +} from '../../../../src/models/mongoose-schemas/room.schema.js'; +import { AssertReadonlyArrayCoversUnion } from '../type-assertions.utils.js'; + +describe('MeetRoomDocument-only fields list', () => { + it('should include all document-only properties', () => { + const assertRoomDocumentOnlyFieldsCoverage: AssertReadonlyArrayCoversUnion< + MeetRoomDocumentOnlyField, + typeof MEET_ROOM_DOCUMENT_ONLY_FIELDS + > = true; + expect(assertRoomDocumentOnlyFieldsCoverage).toBe(true); + }); +}); diff --git a/meet-ce/backend/tests/unit/typings/document-fields-only/room-member-document.test.ts b/meet-ce/backend/tests/unit/typings/document-fields-only/room-member-document.test.ts new file mode 100644 index 00000000..0d5fd059 --- /dev/null +++ b/meet-ce/backend/tests/unit/typings/document-fields-only/room-member-document.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from '@jest/globals'; +import { + MEET_ROOM_MEMBER_DOCUMENT_ONLY_FIELDS, + MeetRoomMemberDocumentOnlyField +} from '../../../../src/models/mongoose-schemas/room-member.schema.js'; +import { AssertReadonlyArrayCoversUnion } from '../type-assertions.utils.js'; + +describe('MeetRoomMemberDocument-only fields list', () => { + it('should include all document-only properties', () => { + const assertRoomMemberDocumentOnlyFieldsCoverage: AssertReadonlyArrayCoversUnion< + MeetRoomMemberDocumentOnlyField, + typeof MEET_ROOM_MEMBER_DOCUMENT_ONLY_FIELDS + > = true; + expect(assertRoomMemberDocumentOnlyFieldsCoverage).toBe(true); + }); +}); diff --git a/meet-ce/backend/tests/unit/typings/document-fields-only/user-document.test.ts b/meet-ce/backend/tests/unit/typings/document-fields-only/user-document.test.ts new file mode 100644 index 00000000..18a72ccf --- /dev/null +++ b/meet-ce/backend/tests/unit/typings/document-fields-only/user-document.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from '@jest/globals'; +import { + MEET_USER_DOCUMENT_ONLY_FIELDS, + MeetUserDocumentOnlyField +} from '../../../../src/models/mongoose-schemas/user.schema.js'; +import { AssertReadonlyArrayCoversUnion } from '../type-assertions.utils.js'; + +describe('MeetUserDocument-only fields list', () => { + it('should include all document-only properties', () => { + const assertUserDocumentOnlyFieldsCoverage: AssertReadonlyArrayCoversUnion< + MeetUserDocumentOnlyField, + typeof MEET_USER_DOCUMENT_ONLY_FIELDS + > = true; + expect(assertUserDocumentOnlyFieldsCoverage).toBe(true); + }); +}); diff --git a/meet-ce/backend/tests/unit/typings/type-assertions.utils.ts b/meet-ce/backend/tests/unit/typings/type-assertions.utils.ts new file mode 100644 index 00000000..94b5b870 --- /dev/null +++ b/meet-ce/backend/tests/unit/typings/type-assertions.utils.ts @@ -0,0 +1,13 @@ +/** + * Returns the set of union members that are missing in the provided readonly array. + */ +export type MissingUnionMembers = Exclude; + +/** + * Compile-time assertion that a readonly array fully covers a union. + * If members are missing, TypeScript includes them in the error type. + */ +export type AssertReadonlyArrayCoversUnion = + MissingUnionMembers extends never + ? true + : ['Missing union members', MissingUnionMembers];