using System.Net.Http;
using Xunit;

namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.UnitTests
{
    public class TestCase_RequestSignTests
    {
        internal class InnerFakeRequest : WechatTenpaySignableRequest
        {
            [Newtonsoft.Json.JsonProperty("appid")]
            [System.Text.Json.Serialization.JsonPropertyName("appid")]
            public override string? AppId { get; set; }

            [Newtonsoft.Json.JsonProperty("mch_id")]
            [System.Text.Json.Serialization.JsonPropertyName("mch_id")]
            public override string? MerchantId { get; set; }

            [Newtonsoft.Json.JsonProperty("device_info")]
            [System.Text.Json.Serialization.JsonPropertyName("device_info")]
            public string? DeviceInfo { get; set; }

            [Newtonsoft.Json.JsonProperty("body")]
            [System.Text.Json.Serialization.JsonPropertyName("body")]
            public string? Body { get; set; }
        }

        [Fact(DisplayName = "测试用例：生成请求签名")]
        public void TestRequestSign()
        {
            const string MCHID = "10000100";
            const string MCHKEY = "192006250b4c09247ec02edce69f6a2d";
            var request = new InnerFakeRequest()
            {
                AppId = "wxd930ea5d5a258f4f",
                MerchantId = MCHID,
                DeviceInfo = "1000",
                Body = "test",
                NonceString = "ibuaiVcKdpRxkhJA"
            };
            var client = new WechatTenpayClient(MCHID, MCHKEY);
            client.CreateRequest(request, HttpMethod.Post);

            string actualSign = "9A0A8659F005D6984697E2CA0A9CF3B7";
            string expectedSign = request.Signature!;

            Assert.Equal(actualSign, expectedSign);
        }
    }
}
