diff --git a/lib/shared/messages/add-members-message-spec.js b/lib/shared/messages/add-members-message-spec.js --- a/lib/shared/messages/add-members-message-spec.js +++ b/lib/shared/messages/add-members-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - AddMembersMessageData, - AddMembersMessageInfo, - RawAddMembersMessageInfo, +import { + type AddMembersMessageData, + type AddMembersMessageInfo, + type RawAddMembersMessageInfo, + rawAddMembersMessageInfoValidator, } from '../../types/messages/add-members.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -156,4 +157,6 @@ userIDs(rawMessageInfo: RawAddMembersMessageInfo): $ReadOnlyArray { return rawMessageInfo.addedUserIDs; }, + + validator: rawAddMembersMessageInfoValidator, }); diff --git a/lib/shared/messages/change-role-message-spec.js b/lib/shared/messages/change-role-message-spec.js --- a/lib/shared/messages/change-role-message-spec.js +++ b/lib/shared/messages/change-role-message-spec.js @@ -14,10 +14,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - ChangeRoleMessageData, - ChangeRoleMessageInfo, - RawChangeRoleMessageInfo, +import { + type ChangeRoleMessageData, + type ChangeRoleMessageInfo, + type RawChangeRoleMessageInfo, + rawChangeRoleMessageInfoValidator, } from '../../types/messages/change-role.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -174,4 +175,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawChangeRoleMessageInfoValidator, }); diff --git a/lib/shared/messages/change-settings-message-spec.js b/lib/shared/messages/change-settings-message-spec.js --- a/lib/shared/messages/change-settings-message-spec.js +++ b/lib/shared/messages/change-settings-message-spec.js @@ -13,10 +13,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - ChangeSettingsMessageData, - ChangeSettingsMessageInfo, - RawChangeSettingsMessageInfo, +import { + type ChangeSettingsMessageData, + type ChangeSettingsMessageInfo, + type RawChangeSettingsMessageInfo, + rawChangeSettingsMessageInfoValidator, } from '../../types/messages/change-settings.js'; import type { NotifTexts } from '../../types/notif-types.js'; import { assertThreadType } from '../../types/thread-types.js'; @@ -173,4 +174,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawChangeSettingsMessageInfoValidator, }); diff --git a/lib/shared/messages/create-entry-message-spec.js b/lib/shared/messages/create-entry-message-spec.js --- a/lib/shared/messages/create-entry-message-spec.js +++ b/lib/shared/messages/create-entry-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - CreateEntryMessageData, - CreateEntryMessageInfo, - RawCreateEntryMessageInfo, +import { + type CreateEntryMessageData, + type CreateEntryMessageInfo, + type RawCreateEntryMessageInfo, + rawCreateEntryMessageInfoValidator, } from '../../types/messages/create-entry.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -119,4 +120,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawCreateEntryMessageInfoValidator, }); diff --git a/lib/shared/messages/create-sidebar-message-spec.js b/lib/shared/messages/create-sidebar-message-spec.js --- a/lib/shared/messages/create-sidebar-message-spec.js +++ b/lib/shared/messages/create-sidebar-message-spec.js @@ -16,10 +16,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - CreateSidebarMessageData, - CreateSidebarMessageInfo, - RawCreateSidebarMessageInfo, +import { + type CreateSidebarMessageData, + type CreateSidebarMessageInfo, + type RawCreateSidebarMessageInfo, + rawCreateSidebarMessageInfoValidator, } from '../../types/messages/create-sidebar.js'; import type { RawUnsupportedMessageInfo } from '../../types/messages/unsupported.js'; import type { NotifTexts } from '../../types/notif-types.js'; @@ -227,4 +228,6 @@ const { parentThreadID } = rawMessageInfo.initialThreadState; return [parentThreadID]; }, + + validator: rawCreateSidebarMessageInfoValidator, }); diff --git a/lib/shared/messages/create-sub-thread-message-spec.js b/lib/shared/messages/create-sub-thread-message-spec.js --- a/lib/shared/messages/create-sub-thread-message-spec.js +++ b/lib/shared/messages/create-sub-thread-message-spec.js @@ -15,10 +15,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - CreateSubthreadMessageData, - CreateSubthreadMessageInfo, - RawCreateSubthreadMessageInfo, +import { + type CreateSubthreadMessageData, + type CreateSubthreadMessageInfo, + type RawCreateSubthreadMessageInfo, + rawCreateSubthreadMessageInfoValidator, } from '../../types/messages/create-subthread.js'; import type { NotifTexts } from '../../types/notif-types.js'; import { threadPermissions, threadTypes } from '../../types/thread-types.js'; @@ -160,4 +161,6 @@ ): $ReadOnlyArray { return [rawMessageInfo.childThreadID]; }, + + validator: rawCreateSubthreadMessageInfoValidator, }); diff --git a/lib/shared/messages/create-thread-message-spec.js b/lib/shared/messages/create-thread-message-spec.js --- a/lib/shared/messages/create-thread-message-spec.js +++ b/lib/shared/messages/create-thread-message-spec.js @@ -14,10 +14,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - CreateThreadMessageData, - CreateThreadMessageInfo, - RawCreateThreadMessageInfo, +import { + type CreateThreadMessageData, + type CreateThreadMessageInfo, + type RawCreateThreadMessageInfo, + rawCreateThreadMessageInfoValidator, } from '../../types/messages/create-thread.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -200,4 +201,6 @@ const { parentThreadID } = rawMessageInfo.initialThreadState; return parentThreadID ? [parentThreadID] : []; }, + + validator: rawCreateThreadMessageInfoValidator, }); diff --git a/lib/shared/messages/delete-entry-message-spec.js b/lib/shared/messages/delete-entry-message-spec.js --- a/lib/shared/messages/delete-entry-message-spec.js +++ b/lib/shared/messages/delete-entry-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - DeleteEntryMessageData, - DeleteEntryMessageInfo, - RawDeleteEntryMessageInfo, +import { + type DeleteEntryMessageData, + type DeleteEntryMessageInfo, + type RawDeleteEntryMessageInfo, + rawDeleteEntryMessageInfoValidator, } from '../../types/messages/delete-entry.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -134,4 +135,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawDeleteEntryMessageInfoValidator, }); diff --git a/lib/shared/messages/edit-entry-message-spec.js b/lib/shared/messages/edit-entry-message-spec.js --- a/lib/shared/messages/edit-entry-message-spec.js +++ b/lib/shared/messages/edit-entry-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - EditEntryMessageData, - EditEntryMessageInfo, - RawEditEntryMessageInfo, +import { + type EditEntryMessageData, + type EditEntryMessageInfo, + type RawEditEntryMessageInfo, + rawEditEntryMessageInfoValidator, } from '../../types/messages/edit-entry.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -119,4 +120,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawEditEntryMessageInfoValidator, }); diff --git a/lib/shared/messages/edit-message-spec.js b/lib/shared/messages/edit-message-spec.js --- a/lib/shared/messages/edit-message-spec.js +++ b/lib/shared/messages/edit-message-spec.js @@ -9,10 +9,11 @@ messageTypes, } from '../../types/message-types-enum.js'; import { type ClientDBMessageInfo } from '../../types/message-types.js'; -import type { - EditMessageData, - RawEditMessageInfo, - EditMessageInfo, +import { + type EditMessageData, + type RawEditMessageInfo, + type EditMessageInfo, + rawEditMessageInfoValidator, } from '../../types/messages/edit.js'; import type { RawUnsupportedMessageInfo } from '../../types/messages/unsupported.js'; import type { RelativeUserInfo } from '../../types/user-types.js'; @@ -140,4 +141,6 @@ }, generatesNotifs: async () => undefined, + + validator: rawEditMessageInfoValidator, }); diff --git a/lib/shared/messages/join-thread-message-spec.js b/lib/shared/messages/join-thread-message-spec.js --- a/lib/shared/messages/join-thread-message-spec.js +++ b/lib/shared/messages/join-thread-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - JoinThreadMessageData, - JoinThreadMessageInfo, - RawJoinThreadMessageInfo, +import { + type JoinThreadMessageData, + type JoinThreadMessageInfo, + type RawJoinThreadMessageInfo, + rawJoinThreadMessageInfoValidator, } from '../../types/messages/join-thread.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -119,4 +120,6 @@ }, generatesNotifs: async () => undefined, + + validator: rawJoinThreadMessageInfoValidator, }); diff --git a/lib/shared/messages/leave-thread-message-spec.js b/lib/shared/messages/leave-thread-message-spec.js --- a/lib/shared/messages/leave-thread-message-spec.js +++ b/lib/shared/messages/leave-thread-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - LeaveThreadMessageData, - LeaveThreadMessageInfo, - RawLeaveThreadMessageInfo, +import { + type LeaveThreadMessageData, + type LeaveThreadMessageInfo, + type RawLeaveThreadMessageInfo, + rawLeaveThreadMessageInfoValidator, } from '../../types/messages/leave-thread.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -119,4 +120,6 @@ }, generatesNotifs: async () => undefined, + + validator: rawLeaveThreadMessageInfoValidator, }); diff --git a/lib/shared/messages/message-spec.js b/lib/shared/messages/message-spec.js --- a/lib/shared/messages/message-spec.js +++ b/lib/shared/messages/message-spec.js @@ -1,5 +1,7 @@ // @flow +import type { TType } from 'tcomb'; + import type { PlatformDetails } from '../../types/device-types.js'; import type { Media } from '../../types/media-types.js'; import type { @@ -114,4 +116,5 @@ +threadIDs?: (rawMessageInfo: RawInfo) => $ReadOnlyArray, +includedInRepliesCount?: boolean, +useCreationSideEffectsFunc?: () => CreationSideEffectsFunc, + +validator: TType, }; diff --git a/lib/shared/messages/multimedia-message-spec.js b/lib/shared/messages/multimedia-message-spec.js --- a/lib/shared/messages/multimedia-message-spec.js +++ b/lib/shared/messages/multimedia-message-spec.js @@ -18,7 +18,10 @@ assertMessageType, messageTypes, } from '../../types/message-types-enum.js'; -import { isMediaMessageType } from '../../types/message-types.js'; +import { + isMediaMessageType, + rawMultimediaMessageInfoValidator, +} from '../../types/message-types.js'; import type { MessageInfo, RawMessageInfo, @@ -323,6 +326,8 @@ ) => (messageData.sidebarCreation ? undefined : pushTypes.NOTIF), includedInRepliesCount: true, + + validator: rawMultimediaMessageInfoValidator, }); // Four photos were uploaded before dimensions were calculated server-side, diff --git a/lib/shared/messages/reaction-message-spec.js b/lib/shared/messages/reaction-message-spec.js --- a/lib/shared/messages/reaction-message-spec.js +++ b/lib/shared/messages/reaction-message-spec.js @@ -18,10 +18,11 @@ type MessageInfo, type ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - ReactionMessageData, - RawReactionMessageInfo, - ReactionMessageInfo, +import { + type ReactionMessageData, + type RawReactionMessageInfo, + type ReactionMessageInfo, + rawReactionMessageInfoValidator, } from '../../types/messages/reaction.js'; import type { RawUnsupportedMessageInfo } from '../../types/messages/unsupported.js'; import type { NotifTexts } from '../../types/notif-types.js'; @@ -216,4 +217,6 @@ } return action === 'add_reaction' ? pushTypes.NOTIF : pushTypes.RESCIND; }, + + validator: rawReactionMessageInfoValidator, }); diff --git a/lib/shared/messages/remove-members-message-spec.js b/lib/shared/messages/remove-members-message-spec.js --- a/lib/shared/messages/remove-members-message-spec.js +++ b/lib/shared/messages/remove-members-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - RawRemoveMembersMessageInfo, - RemoveMembersMessageData, - RemoveMembersMessageInfo, +import { + type RawRemoveMembersMessageInfo, + type RemoveMembersMessageData, + type RemoveMembersMessageInfo, + rawRemoveMembersMessageInfoValidator, } from '../../types/messages/remove-members.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -156,4 +157,6 @@ userIDs(rawMessageInfo: RawRemoveMembersMessageInfo): $ReadOnlyArray { return rawMessageInfo.removedUserIDs; }, + + validator: rawRemoveMembersMessageInfoValidator, }); diff --git a/lib/shared/messages/restore-entry-message-spec.js b/lib/shared/messages/restore-entry-message-spec.js --- a/lib/shared/messages/restore-entry-message-spec.js +++ b/lib/shared/messages/restore-entry-message-spec.js @@ -9,10 +9,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - RawRestoreEntryMessageInfo, - RestoreEntryMessageData, - RestoreEntryMessageInfo, +import { + type RawRestoreEntryMessageInfo, + type RestoreEntryMessageData, + type RestoreEntryMessageInfo, + rawRestoreEntryMessageInfoValidator, } from '../../types/messages/restore-entry.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -134,4 +135,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawRestoreEntryMessageInfoValidator, }); diff --git a/lib/shared/messages/sidebar-source-message-spec.js b/lib/shared/messages/sidebar-source-message-spec.js --- a/lib/shared/messages/sidebar-source-message-spec.js +++ b/lib/shared/messages/sidebar-source-message-spec.js @@ -17,6 +17,7 @@ type SidebarSourceMessageInfo, type ClientDBMessageInfo, isMessageSidebarSourceReactionOrEdit, + rawSidebarSourceMessageInfoValidator, } from '../../types/message-types.js'; import type { RawUnsupportedMessageInfo } from '../../types/messages/unsupported.js'; import type { NotifTexts } from '../../types/notif-types.js'; @@ -173,4 +174,6 @@ generatesNotifs: async () => pushTypes.NOTIF, startsThread: true, + + validator: rawSidebarSourceMessageInfoValidator, }); diff --git a/lib/shared/messages/text-message-spec.js b/lib/shared/messages/text-message-spec.js --- a/lib/shared/messages/text-message-spec.js +++ b/lib/shared/messages/text-message-spec.js @@ -19,10 +19,11 @@ MessageInfo, ClientDBMessageInfo, } from '../../types/message-types.js'; -import type { - RawTextMessageInfo, - TextMessageData, - TextMessageInfo, +import { + type RawTextMessageInfo, + type TextMessageData, + type TextMessageInfo, + rawTextMessageInfoValidator, } from '../../types/messages/text.js'; import type { NotifTexts } from '../../types/notif-types.js'; import { threadTypes } from '../../types/thread-types.js'; @@ -312,4 +313,6 @@ await addMembersPromise; }; }, + + validator: rawTextMessageInfoValidator, }); diff --git a/lib/shared/messages/toggle-pin-message-spec.js b/lib/shared/messages/toggle-pin-message-spec.js --- a/lib/shared/messages/toggle-pin-message-spec.js +++ b/lib/shared/messages/toggle-pin-message-spec.js @@ -10,10 +10,11 @@ import type { PlatformDetails } from '../../types/device-types'; import { messageTypes } from '../../types/message-types-enum.js'; import type { ClientDBMessageInfo } from '../../types/message-types.js'; -import type { - TogglePinMessageData, - TogglePinMessageInfo, - RawTogglePinMessageInfo, +import { + type TogglePinMessageData, + type TogglePinMessageInfo, + type RawTogglePinMessageInfo, + rawTogglePinMessageInfoValidator, } from '../../types/messages/toggle-pin.js'; import type { RawUnsupportedMessageInfo } from '../../types/messages/unsupported'; import type { RelativeUserInfo } from '../../types/user-types.js'; @@ -155,4 +156,6 @@ }, generatesNotifs: async () => undefined, + + validator: rawTogglePinMessageInfoValidator, }); diff --git a/lib/shared/messages/unsupported-message-spec.js b/lib/shared/messages/unsupported-message-spec.js --- a/lib/shared/messages/unsupported-message-spec.js +++ b/lib/shared/messages/unsupported-message-spec.js @@ -5,9 +5,10 @@ import { pushTypes, type MessageSpec } from './message-spec.js'; import { messageTypes } from '../../types/message-types-enum.js'; import { type ClientDBMessageInfo } from '../../types/message-types.js'; -import type { - RawUnsupportedMessageInfo, - UnsupportedMessageInfo, +import { + type RawUnsupportedMessageInfo, + type UnsupportedMessageInfo, + rawUnsupportedMessageInfoValidator, } from '../../types/messages/unsupported.js'; import type { RelativeUserInfo } from '../../types/user-types.js'; import { ET, type EntityText } from '../../utils/entity-text.js'; @@ -72,4 +73,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawUnsupportedMessageInfoValidator, }); diff --git a/lib/shared/messages/update-relationship-message-spec.js b/lib/shared/messages/update-relationship-message-spec.js --- a/lib/shared/messages/update-relationship-message-spec.js +++ b/lib/shared/messages/update-relationship-message-spec.js @@ -15,10 +15,11 @@ ClientDBMessageInfo, } from '../../types/message-types.js'; import type { RawUnsupportedMessageInfo } from '../../types/messages/unsupported.js'; -import type { - RawUpdateRelationshipMessageInfo, - UpdateRelationshipMessageData, - UpdateRelationshipMessageInfo, +import { + type RawUpdateRelationshipMessageInfo, + type UpdateRelationshipMessageData, + type UpdateRelationshipMessageInfo, + rawUpdateRelationshipMessageInfoValidator, } from '../../types/messages/update-relationship.js'; import type { NotifTexts } from '../../types/notif-types.js'; import type { ThreadInfo } from '../../types/thread-types.js'; @@ -175,4 +176,6 @@ }, generatesNotifs: async () => pushTypes.NOTIF, + + validator: rawUpdateRelationshipMessageInfoValidator, }); diff --git a/lib/types/message-types.js b/lib/types/message-types.js --- a/lib/types/message-types.js +++ b/lib/types/message-types.js @@ -239,10 +239,8 @@ export type RawMultimediaMessageInfo = | RawImagesMessageInfo | RawMediaMessageInfo; -const rawMultimediaMessageInfoValidator = t.union([ - rawImagesMessageInfoValidator, - rawMediaMessageInfoValidator, -]); +export const rawMultimediaMessageInfoValidator: TUnion = + t.union([rawImagesMessageInfoValidator, rawMediaMessageInfoValidator]); export type RawComposableMessageInfo = | RawTextMessageInfo diff --git a/lib/types/validation.test.js b/lib/types/validation.test.js --- a/lib/types/validation.test.js +++ b/lib/types/validation.test.js @@ -8,28 +8,7 @@ mediaValidator, } from './media-types.js'; import { messageTypes } from './message-types-enum.js'; -import { rawSidebarSourceMessageInfoValidator } from './message-types.js'; -import { rawAddMembersMessageInfoValidator } from './messages/add-members.js'; -import { rawChangeRoleMessageInfoValidator } from './messages/change-role.js'; -import { rawChangeSettingsMessageInfoValidator } from './messages/change-settings.js'; -import { rawCreateEntryMessageInfoValidator } from './messages/create-entry.js'; -import { rawCreateSidebarMessageInfoValidator } from './messages/create-sidebar.js'; -import { rawCreateSubthreadMessageInfoValidator } from './messages/create-subthread.js'; -import { rawCreateThreadMessageInfoValidator } from './messages/create-thread.js'; -import { rawDeleteEntryMessageInfoValidator } from './messages/delete-entry.js'; -import { rawEditEntryMessageInfoValidator } from './messages/edit-entry.js'; -import { rawEditMessageInfoValidator } from './messages/edit.js'; -import { rawImagesMessageInfoValidator } from './messages/images.js'; -import { rawJoinThreadMessageInfoValidator } from './messages/join-thread.js'; -import { rawLeaveThreadMessageInfoValidator } from './messages/leave-thread.js'; -import { rawMediaMessageInfoValidator } from './messages/media.js'; -import { rawReactionMessageInfoValidator } from './messages/reaction.js'; -import { rawRemoveMembersMessageInfoValidator } from './messages/remove-members.js'; -import { rawRestoreEntryMessageInfoValidator } from './messages/restore-entry.js'; -import { rawTextMessageInfoValidator } from './messages/text.js'; -import { rawTogglePinMessageInfoValidator } from './messages/toggle-pin.js'; -import { rawUnsupportedMessageInfoValidator } from './messages/unsupported.js'; -import { rawUpdateRelationshipMessageInfoValidator } from './messages/update-relationship.js'; +import { messageSpecs } from '../shared/messages/message-specs.js'; describe('media validation', () => { const photo = { @@ -314,45 +293,25 @@ }, ]; - const validatorByMessageType = { - '0': rawTextMessageInfoValidator, - '1': rawCreateThreadMessageInfoValidator, - '2': rawAddMembersMessageInfoValidator, - '3': rawCreateSubthreadMessageInfoValidator, - '4': rawChangeSettingsMessageInfoValidator, - '5': rawRemoveMembersMessageInfoValidator, - '6': rawChangeRoleMessageInfoValidator, - '7': rawLeaveThreadMessageInfoValidator, - '8': rawJoinThreadMessageInfoValidator, - '9': rawCreateEntryMessageInfoValidator, - '10': rawEditEntryMessageInfoValidator, - '11': rawDeleteEntryMessageInfoValidator, - '12': rawRestoreEntryMessageInfoValidator, - '13': rawUnsupportedMessageInfoValidator, - '14': rawImagesMessageInfoValidator, - '15': rawMediaMessageInfoValidator, - '16': rawUpdateRelationshipMessageInfoValidator, - '17': rawSidebarSourceMessageInfoValidator, - '18': rawCreateSidebarMessageInfoValidator, - '19': rawReactionMessageInfoValidator, - '20': rawEditMessageInfoValidator, - '21': rawTogglePinMessageInfoValidator, - }; - - for (const validatorMessageType in validatorByMessageType) { - const validator = validatorByMessageType[validatorMessageType]; - const validatorMessageTypeName = _findKey( - e => e === Number(validatorMessageType), - )(messageTypes); + for (const validatorMessageTypeName in messageTypes) { + const validatorMessageType = messageTypes[validatorMessageTypeName]; + const validator = messageSpecs[validatorMessageType].validator; for (const message of messages) { const messageTypeName = _findKey(e => e === message.type)(messageTypes); - if (Number(validatorMessageType) === message.type) { + if (validatorMessageType === message.type) { it(`${validatorMessageTypeName} should validate ${messageTypeName}`, () => { expect(validator.is(message)).toBe(true); }); - } else { + } else if ( + !( + (validatorMessageType === messageTypes.IMAGES && + message.type === messageTypes.MULTIMEDIA) || + (validatorMessageType === messageTypes.MULTIMEDIA && + message.type === messageTypes.IMAGES) + ) + ) { it(`${validatorMessageTypeName} shouldn't validate ${messageTypeName}`, () => { expect(validator.is(message)).toBe(false); });