@@ -19,10 +19,12 @@ import { RoomEvent, StateEvent, ToDeviceMessageEvent } from '../types';
1919import {
2020 isRoomEvent ,
2121 isStateEvent ,
22+ isValidCreateEventSchema ,
2223 isValidPowerLevelStateEvent ,
2324 isValidRoomEvent ,
2425 isValidStateEvent ,
2526 isValidToDeviceMessageEvent ,
27+ StateEventCreateContent ,
2628} from './events' ;
2729
2830// Mock console.warn for tests
@@ -315,3 +317,117 @@ describe('isValidPowerLevelStateEvent', () => {
315317 expect ( isValidPowerLevelStateEvent ( event ) ) . toEqual ( false ) ;
316318 } ) ;
317319} ) ;
320+
321+ describe ( 'isValidCreateEventSchema' , ( ) => {
322+ it ( 'should accept valid create event' , ( ) => {
323+ const event : StateEvent < StateEventCreateContent > = {
324+ content : {
325+ room_version : '12' ,
326+ } ,
327+ event_id : 'event-id' ,
328+ origin_server_ts : 0 ,
329+ room_id : '!room-id:example.com' ,
330+ sender : '@user-id:example.com' ,
331+ state_key : '' ,
332+ type : 'm.room.create' ,
333+ } ;
334+
335+ expect ( isValidCreateEventSchema ( event ) ) . toEqual ( true ) ;
336+ } ) ;
337+
338+ it ( 'should accept additional properties' , ( ) => {
339+ const event : StateEvent < StateEventCreateContent > = {
340+ content : {
341+ room_version : '12' ,
342+ // @ts -expect-error - additionalProperty is not part of the schema but this is what we want to test
343+ additionalProperty : true ,
344+ } ,
345+ event_id : 'event-id' ,
346+ origin_server_ts : 0 ,
347+ room_id : '!room-id:example.com' ,
348+ sender : '@user-id:example.com' ,
349+ state_key : '' ,
350+ type : 'm.room.create' ,
351+ } ;
352+
353+ expect ( isValidCreateEventSchema ( event ) ) . toEqual ( true ) ;
354+ } ) ;
355+
356+ it ( 'should reject wrong event type' , ( ) => {
357+ const event : StateEvent < StateEventCreateContent > = {
358+ content : {
359+ room_version : '12' ,
360+ } ,
361+ event_id : 'event-id' ,
362+ origin_server_ts : 0 ,
363+ room_id : '!room-id:example.com' ,
364+ sender : '@user-id:example.com' ,
365+ state_key : '' ,
366+ type : 'another-type' ,
367+ } ;
368+
369+ expect ( isValidCreateEventSchema ( event ) ) . toEqual ( false ) ;
370+ } ) ;
371+
372+ it ( 'should accept room id without a server name' , ( ) => {
373+ const event : StateEvent < StateEventCreateContent > = {
374+ content : {
375+ room_version : '12' ,
376+ } ,
377+ event_id : 'event-id' ,
378+ origin_server_ts : 0 ,
379+ room_id : '!room-id' ,
380+ sender : '@user-id:example.com' ,
381+ state_key : '' ,
382+ type : 'm.room.create' ,
383+ } ;
384+
385+ expect ( isValidCreateEventSchema ( event ) ) . toEqual ( true ) ;
386+ } ) ;
387+
388+ it ( 'should reject wrong event structure (missing content)' , ( ) => {
389+ // @ts -expect-error - we are in a test case
390+ const event : StateEvent < StateEventCreateContent > = {
391+ event_id : 'event-id' ,
392+ origin_server_ts : 0 ,
393+ room_id : '!room-id:example.com' ,
394+ sender : '@user-id:example.com' ,
395+ state_key : '' ,
396+ type : 'm.room.create' ,
397+ } ;
398+
399+ expect ( isValidCreateEventSchema ( event ) ) . toEqual ( false ) ;
400+ } ) ;
401+
402+ it ( 'should reject invalid sender' , ( ) => {
403+ const event : StateEvent < StateEventCreateContent > = {
404+ content : {
405+ room_version : '12' ,
406+ } ,
407+ event_id : 'event-id' ,
408+ origin_server_ts : 0 ,
409+ room_id : '!room-id:example.com' ,
410+ sender : '@user-id' ,
411+ state_key : '' ,
412+ type : 'm.room.create' ,
413+ } ;
414+
415+ expect ( isValidCreateEventSchema ( event ) ) . toEqual ( false ) ;
416+ } ) ;
417+
418+ it ( 'should reject invalid room id' , ( ) => {
419+ const event : StateEvent < StateEventCreateContent > = {
420+ content : {
421+ room_version : '12' ,
422+ } ,
423+ event_id : 'event-id' ,
424+ origin_server_ts : 0 ,
425+ room_id : '!room-id' ,
426+ sender : '@user-id' ,
427+ state_key : '' ,
428+ type : 'm.room.create' ,
429+ } ;
430+
431+ expect ( isValidCreateEventSchema ( event ) ) . toEqual ( false ) ;
432+ } ) ;
433+ } ) ;
0 commit comments