42 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|