public async Task Handle_GetUserAccessTokenCommand_OpenIdOfUserAccessTokenExisted()
        {
            //Arrange
            var expected = new UserAccessToken()
            {
                openid        = "321",
                access_token  = "1",
                expires_in    = "1",
                refresh_token = "1",
                scope         = "1"
            };
            var db = new List <UserAccessToken> {
                new UserAccessToken
                {
                    openid        = "321",
                    access_token  = "2",
                    expires_in    = "2",
                    refresh_token = "2",
                    scope         = "2"
                }
            };

            communicator.Setup(c => c.GetUserAccessTokenAsync("123"))
            .Returns(Task.FromResult(expected));
            context.SetupGet(c => c.UserAccessTokens).Returns(Mocking.GetMockDbSet(db));
            context.Setup(c => c.SaveAsync()).Returns(Task.CompletedTask);

            var command = new GetUserAccessTokenCommand(code: "123");
            var handler = createHandler();

            //Act
            var result = await handler.Handle(command);

            //Assert
            communicator.VerifyAll();
            context.VerifyAll();
            Assert.True(Jsonning.EqualsOrThrows(expected, result));
            Assert.NotSame(expected, db.FirstOrDefault());
            Assert.Equal(expected.access_token, db.FirstOrDefault().access_token);
            Assert.Equal(expected.expires_in, db.FirstOrDefault().expires_in);
            Assert.Equal(expected.refresh_token, db.FirstOrDefault().refresh_token);
            Assert.Equal(expected.scope, db.FirstOrDefault().scope);
        }
        public async Task Handle_GetUserAccessTokenCommand_OpenIdOfUserAccessTokenNotExisted()
        {
            //Arrange
            var expected = new UserAccessToken();
            var db       = new List <UserAccessToken>();

            communicator.Setup(c => c.GetUserAccessTokenAsync("123"))
            .Returns(Task.FromResult(expected));
            context.SetupGet(c => c.UserAccessTokens).Returns(Mocking.GetMockDbSet(db));
            context.Setup(c => c.SaveAsync()).Returns(Task.CompletedTask);

            var command = new GetUserAccessTokenCommand(code: "123");
            var handler = createHandler();

            //Act
            var result = await handler.Handle(command);

            //Assert
            communicator.VerifyAll();
            context.VerifyAll();
            Assert.True(Jsonning.EqualsOrThrows(expected, result));
            Assert.Same(expected, db.FirstOrDefault());
        }