public async Task GetCandidateList_Success() { //no candidate { var candidates = await Starter.GetCandidatesListAsync(); candidates.Values.Count.ShouldBe(0); } //with candidate { var candidateInformation = TestUserHelper.GenerateNewUser(); await Starter.TransferTokenAsync(candidateInformation, DPoSContractConsts.LockTokenForElection); var balance = await Starter.GetBalanceAsync(candidateInformation); Assert.Equal(DPoSContractConsts.LockTokenForElection, balance); // The candidate announce election. var candidate = Starter.CreateNewContractTester(candidateInformation); await candidate.AnnounceElectionAsync("AElfin"); //Assert var candidatesList = await candidate.GetCandidatesListAsync(); candidatesList.Values.Count.ShouldBe(1); } }
public async Task IsCandidate_Success() { var candidateLists = await Starter.GenerateCandidatesAsync(2); var nonCandidateInfo = TestUserHelper.GenerateNewUser(); var candidate = Starter.CreateNewContractTester(nonCandidateInfo.KeyPair); var candidateResult = BoolValue.Parser.ParseFrom( await candidate.CallContractMethodAsync( candidate.GetConsensusContractAddress(), nameof(ConsensusContract.IsCandidate), new PublicKey() { Hex = nonCandidateInfo.PublicKey })); candidateResult.Value.ShouldBeFalse(); var candidateResult1 = BoolValue.Parser.ParseFrom( await candidate.CallContractMethodAsync(candidate.GetConsensusContractAddress(), nameof(ConsensusContract.IsCandidate), new PublicKey() { Hex = candidateLists[0].PublicKey })).Value; candidateResult1.ShouldBeTrue(); }
public async Task Quit_Election_Success() { // The starter transfer a specific amount of tokens to candidate for further testing. var candidateInfo = TestUserHelper.GenerateNewUser(); await Starter.TransferTokenAsync(candidateInfo, DPoSContractConsts.LockTokenForElection); // Check balance. { var balance = await Starter.GetBalanceAsync(candidateInfo); Assert.Equal(DPoSContractConsts.LockTokenForElection, balance); } // The candidate announce election. var candidate = Starter.CreateNewContractTester(candidateInfo); await candidate.AnnounceElectionAsync("AElfin"); // Check balance. { var balance = await candidate.GetBalanceAsync(candidateInfo); balance.ShouldBe(0L); } // Check candidates list. { var candidatesList = await candidate.GetCandidatesListAsync(); candidatesList.Values.ToList().Contains(candidateInfo).ShouldBeTrue(); } // Quit election var result = await candidate.QuitElectionAsync(); result.Status.ShouldBe(TransactionResultStatus.Mined); // Check candidates list. { var candidatesList = await candidate.GetCandidatesListAsync(); candidatesList.Values.Contains(candidateInfo).ShouldBeFalse(); } // Check balance. { var balance = await candidate.GetBalanceAsync(candidateInfo); balance.ShouldBe(DPoSContractConsts.LockTokenForElection); } }
public async Task Announce_Election_Twice() { // The starter transfer 200_000L var candidateInfo = TestUserHelper.GenerateNewUser(); await Starter.TransferTokenAsync(candidateInfo, DPoSContractConsts.LockTokenForElection * 2); // Check balance. { var balance = await Starter.GetBalanceAsync(candidateInfo); balance.ShouldBe(DPoSContractConsts.LockTokenForElection * 2); } var candidate = Starter.CreateNewContractTester(candidateInfo); // Announce election. { var result = await candidate.AnnounceElectionAsync("AElfin"); result.Status.ShouldBe(TransactionResultStatus.Mined); } // Check candidates list. { var candidatesList = await candidate.GetCandidatesListAsync(); candidatesList.Values.ToList().Contains(candidateInfo).ShouldBeTrue(); } // Check balance. { var balance = await Starter.GetBalanceAsync(candidateInfo); balance.ShouldBe(DPoSContractConsts.LockTokenForElection); } // Announce election again. { var result = await candidate.AnnounceElectionAsync("AElfinAgain"); result.Status.ShouldBe(TransactionResultStatus.Failed); } // Check candidate list again. { var candidatesList = await candidate.GetCandidatesListAsync(); candidatesList.Values.ToList().Contains(candidateInfo).ShouldBeTrue(); } }
public async Task Vote_Not_Candidate() { const long pocketMoney = 10000; const long amount = 10000; await Starter.GenerateCandidatesAsync(1); var voter = (await Starter.GenerateVotersAsync(1, pocketMoney)).AnyOne(); var notCandidate = TestUserHelper.GenerateNewUser(); var result = await voter.Vote(notCandidate, amount, 100); result.Status.ShouldBe(TransactionResultStatus.Failed); result.Error.Contains(ContractErrorCode.Message[ContractErrorCode.InvalidOperation]).ShouldBeTrue(); var balance = await Starter.GetBalanceAsync(voter.GetCallOwnerAddress()); balance.ShouldBe(amount); }
public async Task Announce_Election_Success() { // The starter transfer a specific amount of tokens to candidate for further testing. var candidateInformation = TestUserHelper.GenerateNewUser(); await Starter.TransferTokenAsync(candidateInformation, DPoSContractConsts.LockTokenForElection); var balance = await Starter.GetBalanceAsync(candidateInformation); Assert.Equal(DPoSContractConsts.LockTokenForElection, balance); // The candidate announce election. var candidate = Starter.CreateNewContractTester(candidateInformation); var result = await candidate.AnnounceElectionAsync("AElfin"); var candidatesList = await candidate.GetCandidatesListAsync(); // Check the candidates list. Assert.Contains(candidate.KeyPair.PublicKey.ToHex(), candidatesList.Values.ToList()); }
public async Task Announce_Election_WithoutEnough_Token() { // The starter transfer not enough token var candidateInformation = TestUserHelper.GenerateNewUser(); await Starter.TransferTokenAsync(candidateInformation, 50_000L); var balance = await Starter.GetBalanceAsync(candidateInformation); balance.ShouldBe(50_000L); // The candidate announce election. var candidate = Starter.CreateNewContractTester(candidateInformation); var result = await candidate.AnnounceElectionAsync("AElfin"); result.Status.ShouldBe(TransactionResultStatus.Failed); result.Error.Contains("Insufficient balance").ShouldBeTrue(); var candidatesList = await candidate.GetCandidatesListAsync(); candidatesList.Values.ToList().Contains(candidateInformation).ShouldBeFalse(); }
public async Task Quit_Election_NoOneAnnounce() { var candidateInfo = TestUserHelper.GenerateNewUser(); await Starter.TransferTokenAsync(candidateInfo, DPoSContractConsts.LockTokenForElection); var balance = await Starter.GetBalanceAsync(candidateInfo); balance.ShouldBe(DPoSContractConsts.LockTokenForElection); // Didn't announce election, but call quit announce. candidateInfo = TestUserHelper.GenerateNewUser(); var notCandidate = Starter.CreateNewContractTester(candidateInfo); var result = await notCandidate.QuitElectionAsync(); result.Status.ShouldBe(TransactionResultStatus.Failed); result.Error.Contains(ContractErrorCode.Message[ContractErrorCode.InvalidField]).ShouldBeTrue(); balance = await Starter.GetBalanceAsync(candidateInfo); balance.ShouldBe(0L); }