Skip to content

Commit bd5f230

Browse files
author
Sergey Sysalov
committed
fix: add missing chat admin permission enum values
Prevent deserialization failures of Chats API responses when MAX returns short permission strings (e.g. view_stats, edit, delete).
1 parent b5fb923 commit bd5f230

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

src/Max.Bot/Types/Enums/ChatAdminPermission.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ namespace Max.Bot.Types.Enums;
77
/// </summary>
88
public enum ChatAdminPermission
99
{
10+
/// <summary>
11+
/// Permission to view stats.
12+
/// Serializes as "view_stats".
13+
/// </summary>
14+
ViewStats,
15+
1016
/// <summary>
1117
/// Permission to read all messages in the chat.
1218
/// Serializes as "read_all_messages".
@@ -55,6 +61,12 @@ public enum ChatAdminPermission
5561
/// </summary>
5662
EditLink,
5763

64+
/// <summary>
65+
/// Permission to edit messages (short form in MAX API).
66+
/// Serializes as "edit".
67+
/// </summary>
68+
Edit,
69+
5870
/// <summary>
5971
/// Permission to edit or delete posted messages.
6072
/// Serializes as "post_edit_delete_message".
@@ -72,4 +84,10 @@ public enum ChatAdminPermission
7284
/// Serializes as "delete_message".
7385
/// </summary>
7486
DeleteMessage,
87+
88+
/// <summary>
89+
/// Permission to delete messages (short form in MAX API).
90+
/// Serializes as "delete".
91+
/// </summary>
92+
Delete,
7593
}

tests/Max.Bot.Tests/Unit/Api/ChatsApiTests.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,53 @@ public async Task GetChatAdminsAsync_ShouldReturnAdmins_WhenRequestSucceeds()
580580
result[1].Id.Should().Be(200L);
581581
}
582582

583+
[Fact]
584+
public async Task GetChatAdminsAsync_ShouldDeserialize_AllPermissionStrings_WhenApiReturnsShortNames()
585+
{
586+
// Arrange - API returns permissions as short strings: "view_stats", "edit", "delete", ...
587+
var chatId = 123456L;
588+
589+
var responseJson = """
590+
{
591+
"members": [
592+
{
593+
"user_id": 100,
594+
"is_admin": true,
595+
"permissions": ["view_stats","read_all_messages","edit_link","write","edit","add_remove_members","change_chat_info","delete","pin_message"]
596+
}
597+
],
598+
"marker": null
599+
}
600+
""";
601+
602+
_mockHttpClient
603+
.Setup(x => x.SendAsyncRaw(
604+
It.Is<MaxApiRequest>(req =>
605+
req.Method == HttpMethod.Get &&
606+
req.Endpoint == $"/chats/{chatId}/members/admins"),
607+
It.IsAny<CancellationToken>()))
608+
.ReturnsAsync(responseJson);
609+
610+
var chatsApi = new ChatsApi(_mockHttpClient.Object, _options);
611+
612+
// Act
613+
var result = await chatsApi.GetChatAdminsAsync(chatId);
614+
615+
// Assert
616+
result.Should().NotBeNull();
617+
result.Should().HaveCount(1);
618+
result[0].Permissions.Should().NotBeNull();
619+
result[0].Permissions!.Should().Contain(new[]
620+
{
621+
ChatAdminPermission.ViewStats,
622+
ChatAdminPermission.EditLink,
623+
ChatAdminPermission.Write,
624+
ChatAdminPermission.Edit,
625+
ChatAdminPermission.Delete,
626+
ChatAdminPermission.PinMessage
627+
});
628+
}
629+
583630
#endregion
584631

585632
#region AddChatAdminAsync Tests

0 commit comments

Comments
 (0)