@@ -494,6 +494,130 @@ public async Task ThreadCreateEvent_MissingGuildCache_DoesNotThrowAndStillRaises
494494 Assert . False ( client . GuildsInternal . ContainsKey ( thread . GuildId . GetValueOrDefault ( ) ) ) ;
495495 }
496496
497+ [ Fact ]
498+ public async Task GuildCreateEvent_PopulatesGuildChannelCache ( )
499+ {
500+ var client = CreateClient ( ) ;
501+ const ulong guildId = 804032421678153819 ;
502+ const ulong channelId = 9001 ;
503+
504+ var guild = new DiscordGuild
505+ {
506+ Id = guildId ,
507+ Discord = client ,
508+ MemberCount = 0
509+ } ;
510+ guild . ChannelsInternal [ channelId ] = new DiscordChannel
511+ {
512+ Id = channelId ,
513+ GuildId = guildId ,
514+ Name = "appeals-queue" ,
515+ Type = ChannelType . Text
516+ } ;
517+
518+ await client . OnGuildCreateEventAsync ( guild , new JArray ( ) , null ) ;
519+
520+ var cachedGuild = client . GuildsInternal [ guildId ] ;
521+ var cachedChannel = cachedGuild . GetChannel ( channelId ) ;
522+
523+ Assert . NotNull ( cachedChannel ) ;
524+ Assert . Equal ( guildId , cachedChannel ! . GuildId ) ;
525+ Assert . Same ( client , cachedChannel . Discord ) ;
526+ }
527+
528+ [ Fact ]
529+ public async Task GuildUpdateEvent_PreservesExistingGuildChannelCacheWhenPayloadOmitsChannels ( )
530+ {
531+ var client = CreateClient ( ) ;
532+ const ulong guildId = 804032421678153819 ;
533+ const ulong channelId = 9001 ;
534+
535+ var guild = new DiscordGuild
536+ {
537+ Id = guildId ,
538+ Discord = client ,
539+ Name = "old-name"
540+ } ;
541+ guild . ChannelsInternal [ channelId ] = new DiscordChannel
542+ {
543+ Id = channelId ,
544+ GuildId = guildId ,
545+ Name = "appeals-queue" ,
546+ Type = ChannelType . Text ,
547+ Discord = client
548+ } ;
549+ client . GuildsInternal [ guildId ] = guild ;
550+
551+ var updatedGuild = new DiscordGuild
552+ {
553+ Id = guildId ,
554+ Name = "new-name"
555+ } ;
556+
557+ await client . OnGuildUpdateEventAsync ( updatedGuild , new JArray ( ) ) ;
558+
559+ var cachedGuild = client . GuildsInternal [ guildId ] ;
560+ var cachedChannel = cachedGuild . GetChannel ( channelId ) ;
561+
562+ Assert . NotNull ( cachedChannel ) ;
563+ Assert . Equal ( "appeals-queue" , cachedChannel ! . Name ) ;
564+ }
565+
566+ [ Fact ]
567+ public async Task ChannelCreateEvent_AddsChannelToCachedGuildChannelCache ( )
568+ {
569+ var client = CreateClient ( ) ;
570+ const ulong guildId = 804032421678153819 ;
571+ const ulong channelId = 9001 ;
572+
573+ var guild = new DiscordGuild
574+ {
575+ Id = guildId ,
576+ Discord = client
577+ } ;
578+ client . GuildsInternal [ guildId ] = guild ;
579+
580+ var channel = new DiscordChannel
581+ {
582+ Id = channelId ,
583+ GuildId = guildId ,
584+ Name = "appeals-queue" ,
585+ Type = ChannelType . Text
586+ } ;
587+
588+ await client . OnChannelCreateEventAsync ( channel ) ;
589+
590+ Assert . Same ( channel , guild . GetChannel ( channelId ) ) ;
591+ }
592+
593+ [ Fact ]
594+ public async Task ChannelDeleteEvent_RemovesChannelFromCachedGuildChannelCache ( )
595+ {
596+ var client = CreateClient ( ) ;
597+ const ulong guildId = 804032421678153819 ;
598+ const ulong channelId = 9001 ;
599+
600+ var guild = new DiscordGuild
601+ {
602+ Id = guildId ,
603+ Discord = client
604+ } ;
605+ var channel = new DiscordChannel
606+ {
607+ Id = channelId ,
608+ GuildId = guildId ,
609+ Name = "appeals-queue" ,
610+ Type = ChannelType . Text ,
611+ Discord = client
612+ } ;
613+ guild . ChannelsInternal [ channelId ] = channel ;
614+ client . GuildsInternal [ guildId ] = guild ;
615+
616+ await client . OnChannelDeleteEventAsync ( channel ) ;
617+
618+ Assert . Null ( guild . GetChannel ( channelId ) ) ;
619+ }
620+
497621 [ Fact ]
498622 public async Task ChannelCreate_MissingGuildCache_DoesNotThrowAndStillRaisesEvent ( )
499623 {
0 commit comments