public async Task DAOManagementTest_Join()
        {
            await InitialDAOContract();

            // Alice want to join DAO.
            // First approve.
            var balanceBefore = (await AliceTokenContractStub.GetBalance.CallAsync(new GetBalanceInput
            {
                Owner = AliceAddress,
                Symbol = "ELF"
            })).Balance;
            await AliceTokenContractStub.Approve.SendAsync(new ApproveInput
            {
                Spender = DAOContractAddress,
                Symbol  = "ELF",
                Amount  = DepositAmount
            });

            var proposalId = (await AliceParliamentStub.CreateProposal.SendAsync(new CreateProposalInput
            {
                OrganizationAddress = ParliamentDefaultOrganizationAddress,
                ContractMethodName = nameof(DAOContractStub.ProposeJoin),
                ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1),
                Params = AliceAddress.ToByteString(),
                ToAddress = DAOContractAddress
            })).Output;

            await ParliamentApproveAsync(proposalId);

            await AliceParliamentStub.Release.SendAsync(proposalId);

            // Check DAO member list.
            var memberList = (await DAOContractStub.GetDAOMemberList.CallAsync(new Empty())).Value;

            memberList.ShouldContain(AliceAddress);

            var balanceAfter = (await AliceTokenContractStub.GetBalance.CallAsync(new GetBalanceInput
            {
                Owner = AliceAddress,
                Symbol = "ELF"
            })).Balance;

            (balanceBefore - balanceAfter).ShouldBe(DepositAmount);
        }
        public async Task DAOManagementTest_Expel()
        {
            await DAOManagementTest_Join();

            var balanceBefore = (await AliceTokenContractStub.GetBalance.CallAsync(new GetBalanceInput
            {
                Owner = AliceAddress,
                Symbol = "ELF"
            })).Balance;

            var proposalId = (await AliceParliamentStub.CreateProposal.SendAsync(new CreateProposalInput
            {
                OrganizationAddress = ParliamentDefaultOrganizationAddress,
                ContractMethodName = nameof(DAOContractStub.ProposeExpel),
                ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1),
                Params = AliceAddress.ToByteString(),
                ToAddress = DAOContractAddress
            })).Output;

            await ParliamentApproveAsync(proposalId);

            await AliceParliamentStub.Release.SendAsync(proposalId);

            // Check DAO member list.
            var memberList = (await DAOContractStub.GetDAOMemberList.CallAsync(new Empty())).Value;

            memberList.ShouldNotContain(AliceAddress);

            var balanceAfter = (await AliceTokenContractStub.GetBalance.CallAsync(new GetBalanceInput
            {
                Owner = AliceAddress,
                Symbol = "ELF"
            })).Balance;

            balanceAfter.ShouldBe(balanceBefore);
        }