调整定时作业分布式锁Key名称规则
猿人易 编写于 2024-05-06 13:14:10
NewLife.Cube
using System;
using System.IO;
using System.Net.Http;
using NewLife.Log;
using NewLife.Serialization;
using NewLife.Web.OAuth;
using Xunit;

namespace XUnitTest
{
    public class QyWeiXinTests
    {
        static QyWeiXinTests()
        {
            DefaultTracer.Instance = new DefaultTracer();
        }

        protected String[] GetSecret(String name)
        {
            var file = $"Config/{name}.config".GetFullPath();
            if (File.Exists(file))
            {
                var str = File.ReadAllText(file);
                var ss = str.Split("#");
                if (ss != null && ss.Length >= 2) return ss;
            }
            else
            {
                file.EnsureDirectory(true);
                File.WriteAllText(file, "corpId#secret");
            }

            return new[] { "", "" };
        }

        [Fact]
        public async void GetToken()
        {
            var ss = GetSecret("Member");
            var wx = new QyWeiXin
            {
                CorpId = ss[0],
                CorpSecret = ss[1]
            };

            var token = await wx.GetToken();

            Assert.NotEmpty(token);
            Assert.NotEmpty(wx.AccessToken);
            Assert.True(wx.Expire > DateTime.Now);
        }

        [Fact]
        public async void GetDepartments()
        {
            var ss = GetSecret("Member");
            var wx = new QyWeiXin
            {
                CorpId = ss[0],
                CorpSecret = ss[1]
            };

            var dps = await wx.GetDepartments();

            Assert.NotNull(dps);
            Assert.Contains(dps, e => e.Name == "技术架构部");
        }

        [Fact]
        public async void GetUser()
        {
            var ss = GetSecret("Member");
            var wx = new QyWeiXin
            {
                CorpId = ss[0],
                CorpSecret = ss[1]
            };

            var user = await wx.GetUser("Stone");

            Assert.NotNull(user);
            Assert.Equal("大石头", user.Alias);
        }

        [Fact]
        public async void GetUsers()
        {
            var ss = GetSecret("Member");
            var wx = new QyWeiXin
            {
                CorpId = ss[0],
                CorpSecret = ss[1]
            };

            var users = await wx.GetUsers(17, true);

            Assert.NotNull(users);
            Assert.Contains(users, e => e.Alias == "大石头");
        }

        [Fact]
        public async void GetCheckIn()
        {
            var ss = GetSecret("CheckIn");
            var wx = new QyWeiXin
            {
                CorpId = ss[0],
                CorpSecret = ss[1]
            };

            var end = DateTime.Now;
            var start = new DateTime(end.Year, end.Month, 1);

            var cis = await wx.GetCheckIn(new[] { "MoRuo", "bigqiang", "stone" }, start, end);

            XTrace.WriteLine(cis.ToJson());
            Assert.NotNull(cis);
            Assert.Contains(cis, e => e.UserId == "stone");
        }

        [Fact]
        public async void GetApproval()
        {
            var ss = GetSecret("Approval");
            var wx = new QyWeiXin
            {
                CorpId = ss[0],
                CorpSecret = ss[1]
            };

            var end = DateTime.Now;
            var start = new DateTime(end.Year, end.Month, 1);

            var approvals = await wx.GetApprovals("3TkaYwKYVoU5xN5ws35sFKbN8vaYRZDgGxzKgfWo", start, end);

            Assert.NotNull(approvals);
            XTrace.WriteLine(approvals.ToJson());
            //Assert.Contains(cis, e => e.UserId == "huangguoshi");

            foreach (var item in approvals)
            {
                var info = await wx.GetApproval(item);
                Assert.NotNull(info);
                XTrace.WriteLine(info.ToJson());

                var pc = info.GetPunchCorrection();
            }
        }

        [Fact]
        public async void GetUserInfo()
        {
            var ss = GetSecret("SSO");
            var wx = new QyWeiXin
            {
                CorpId = ss[0],
                CorpSecret = ss[1]
            };

            var url = wx.Authorize("https://sso.diyibox.com/cube/info");
            XTrace.WriteLine(url);

            var http = new HttpClient();
            var rs = await http.GetAsync(url);
            rs.EnsureSuccessStatusCode();
            //var html = await rs.Content.ReadAsStringAsync();

            var url2 = rs.RequestMessage?.RequestUri + "";

            //var user = await wx.GetAccessToken("Stone");

            //Assert.NotNull(user);
            //Assert.Equal("大石头", user.Alias);
        }
    }
}