diff --git a/test/DODONFT/mysteryBoxV1.test.ts b/test/DODONFT/mysteryBoxV1.test.ts new file mode 100644 index 0000000..5c322b3 --- /dev/null +++ b/test/DODONFT/mysteryBoxV1.test.ts @@ -0,0 +1,131 @@ +/* + + Copyright 2020 DODO ZOO. + SPDX-License-Identifier: Apache-2.0 + +*/ +import { decimalStr, mweiStr, fromWei } from '../utils/Converter'; +import { logGas } from '../utils/Log'; +import { DVMContext, getDVMContext } from '../utils/DVMContext'; +import { assert } from 'chai'; +import * as contracts from '../utils/Contracts'; +import { Contract } from 'web3-eth-contract'; + +let owner: string; +let user1: string; +let user2: string; +let user3: string; + +var urls = [ + "ipfs://QmbfDhXJG5MCqJfYyiSN8YnNWV9iGyd15PqAysGwmE5WMp", + "ipfs://QmatCfrHHFf31ik29dNjnwFhZdpiNsK1VrA2omYsyPR3h1", + "ipfs://Qmbh6R7YQpBAhE1DK6tFoxa8BWaJmkzrq8Z2Q8StSJhveq", + "ipfs://QmWuwBk7V9ehm8ojxsmB9d1mYeEE1LSJkxTrFbmAiGKrT3", + "ipfs://QmTYVLtmgv2BzWi5qqRL3XZb6xTQj1UbhzU7N4VEk3SG4z", + "ipfs://QmNfGx7YAnPDauDMddDKoDE9QvaQzVrBkitPNpBfRvi9TM", + "ipfs://QmVRKLYq3DtKHAe7W5o1MAQGPXWn8uLiGBrtYg9337fFdS", + "ipfs://QmQDgqN8LjEPEJ9Demv6F2nEXw2RBPJttpMh3LtwxjL8vV", + "ipfs://QmZuNBHTfRPpJWB7zHKyF5S8yd7MQrKyBQ2QFuUo5WfK97", + "ipfs://QmfM9KWipChobyKxPyuGUqygvddqTtWQAtrzkqG2WfiCQn" +] + +let RandomGenerator: Contract; +let MysteryBoxV1: Contract; + +async function init(ctx: DVMContext): Promise { + owner = ctx.SpareAccounts[1]; + user1 = ctx.SpareAccounts[2]; + user2 = ctx.SpareAccounts[3]; + user3 = ctx.SpareAccounts[4]; + + await ctx.mintTestToken(owner, decimalStr("10"), decimalStr("1000")); + await ctx.transferBaseToDVM(owner, decimalStr("10")) + await ctx.transferQuoteToDVM(owner, decimalStr("1000")) + await ctx.DVM.methods.buyShares(owner).send(ctx.sendParam(owner)); + + RandomGenerator = await contracts.newContract(contracts.RANDOM_GENERATOR, + [ + [ + ctx.DVM.options.address, + ctx.DVM.options.address, + ctx.DVM.options.address + ] + ] + ) + + MysteryBoxV1 = await contracts.newContract(contracts.MYSTERY_BOX_V1) + await MysteryBoxV1.methods.init( + "DODOMYSTERT", + "BOX", + "", + owner, + RandomGenerator.options.address + ).send(ctx.sendParam(owner)); +} + +async function getTokenIdAndUrlByUser(user: string) { + var tokenIds = [] + var urls = [] + var balance = await MysteryBoxV1.methods.balanceOf(user).call(); + for (var i = 0; i < balance; i++) { + var curTokenId = await MysteryBoxV1.methods.tokenOfOwnerByIndex(user, i).call() + tokenIds.push(curTokenId); + var curUrl = await MysteryBoxV1.methods.tokenURI(curTokenId).call(); + urls.push(curUrl); + console.log("tokenId:" + curTokenId + " uri:" + curUrl); + } + return [tokenIds, urls]; +} + + +describe("DODOMysteryBox", () => { + let snapshotId: string; + let ctx: DVMContext; + + before(async () => { + let config = { + lpFeeRate: decimalStr("0.002"), + mtFeeRate: decimalStr("0.001"), + k: decimalStr("1"), + i: "1", + }; + ctx = await getDVMContext(config); + await init(ctx); + }); + + beforeEach(async () => { + snapshotId = await ctx.EVM.snapshot(); + }); + + afterEach(async () => { + await ctx.EVM.reset(snapshotId); + }); + + describe("DODO MysteryBoxV1", () => { + it.only("batchMint", async () => { + await logGas(await MysteryBoxV1.methods.batchMint(urls), ctx.sendParam(owner), "batchMint-10"); + let [tokenIds,]: any = await getTokenIdAndUrlByUser(MysteryBoxV1.options.address); + assert(10, tokenIds.length); + }); + + it("buyTicket", async () => { + await MysteryBoxV1.methods.updateSellingInfo(100, decimalStr("0.5")).send(ctx.sendParam(owner)); + + //两阶段卖币 + + //withdraw + }); + + it("redeemPrize", async () => { + //redeem + + //列表查询 + + }); + + + it("transferNFT", async () => { + + }); + }); +}); diff --git a/test/utils/Contracts.ts b/test/utils/Contracts.ts index 1d1d43c..bee1cd5 100644 --- a/test/utils/Contracts.ts +++ b/test/utils/Contracts.ts @@ -64,6 +64,9 @@ export const NFT_TOKEN_FACTORY = "NFTTokenFactory" export const NFT_REGISTER = "DODONFTRegistry" export const NFT_PROXY = "DODONFTProxy" +export const RANDOM_GENERATOR = "RandomGenerator" +export const MYSTERY_BOX_V1 = "MysteryBoxV1" + interface ContractJson { abi: any; networks: { [network: number]: any }; diff --git a/truffle-test.sh b/truffle-test.sh index bb25922..18fd135 100644 --- a/truffle-test.sh +++ b/truffle-test.sh @@ -61,6 +61,10 @@ then truffle test ./test/DODONFT/nftMainFlow.test.ts fi +if [ "$1"x = "boxV1"x ] +then + truffle test ./test/DODONFT/mysteryBoxV1.test.ts +fi # if [ "$1"x = "route-incentive"x ] # then