Files

42 lines
1.5 KiB
C#

using WxAgent.Core;
using Xunit;
namespace WxAgent.Core.Tests;
public sealed class WechatGroupMemberQueryTests
{
[Fact]
public void QueryUsesStableIdsAndBoundParameters()
{
var parameters = WechatGroupMemberQuery.Parameters("123@chatroom", 2, 4).ToDictionary(pair => pair.Key, pair => pair.Value);
Assert.Equal("123@chatroom", parameters["$group"]);
Assert.Equal(3, parameters["$limit"]);
Assert.Equal(4, parameters["$offset"]);
Assert.Contains("c.id = m.member_id", WechatGroupMemberQuery.Sql);
Assert.Contains("ORDER BY m.member_id", WechatGroupMemberQuery.Sql);
Assert.DoesNotContain("123@chatroom", WechatGroupMemberQuery.Sql);
}
[Theory]
[InlineData("group")]
[InlineData("")]
[InlineData(" ")]
public void StableGroupUsernameIsRequired(string group) =>
Assert.Equal(WxAgentErrorCode.InvalidArgument,
Assert.Throws<WxAgentException>(() => WechatGroupMemberQuery.Parameters(group, 1, 0)).Code);
[Fact]
public void PagePreservesDuplicateDisplayNamesAndSignalsNextOffset()
{
WechatDatabaseGroupMember[] rows =
[
new(1, "one", "same", true), new(2, "two", "same", false), new(3, "three", "three", false)
];
var page = WechatGroupMemberQuery.Page("123@chatroom", rows, 2, 4);
Assert.True(page.HasMore);
Assert.Equal(6, page.NextOffset);
Assert.Equal(new[] { "one", "two" }, page.Members.Select(member => member.Username));
Assert.True(page.Members[0].IsOwner);
}
}