UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

172 lines (171 loc) 12.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const hardhat_1 = require("hardhat"); const chai_1 = require("chai"); const mocha_1 = require("mocha"); const helpers_1 = require("../helpers"); const fixture_test_1 = require("./fixture.test"); const xnodes_1 = require("../helpers/xnodes"); // Helper to create a second app using a fresh creator account async function createSecondApp(contracts) { const { owner, otherAccounts, x2EarnApps, veBetterPassport } = contracts; const { x2EarnCreator } = await (0, helpers_1.getOrDeployContractInstances)({ forceDeploy: false }); const app2Creator = otherAccounts[10]; await x2EarnCreator.connect(owner).safeMint(app2Creator.address); await x2EarnApps.connect(app2Creator).submitApp(app2Creator.address, app2Creator, app2Creator.address, "uri2"); const app2Id = hardhat_1.ethers.keccak256(hardhat_1.ethers.toUtf8Bytes(app2Creator.address)); await (0, xnodes_1.endorseApp)(app2Id, app2Creator); await veBetterPassport.connect(owner).setAppSecurity(app2Id, 1); return app2Id; } (0, mocha_1.describe)("VeBetterPassport Round Tracking - @shard8a", function () { (0, mocha_1.describe)("userRoundAppCount", function () { (0, mocha_1.it)("should return 0 for a user with no interactions", async function () { const { veBetterPassport, otherAccounts } = await (0, fixture_test_1.setupSignalingFixture)(); (0, chai_1.expect)(await veBetterPassport.userRoundAppCount(otherAccounts[2].address, 1)).to.equal(0); }); (0, mocha_1.it)("should increment when a user interacts with an app in a round", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); (0, chai_1.expect)(await veBetterPassport.userRoundAppCount(user.address, 1)).to.equal(1); }); (0, mocha_1.it)("should not double-count the same app in the same round", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); (0, chai_1.expect)(await veBetterPassport.userRoundAppCount(user.address, 1)).to.equal(1); }); (0, mocha_1.it)("should count distinct apps in the same round", async function () { const contracts = await (0, fixture_test_1.setupSignalingFixture)(); const { veBetterPassport, owner, otherAccounts, appId } = contracts; const user = otherAccounts[2]; const app2Id = await createSecondApp(contracts); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, app2Id, 1); (0, chai_1.expect)(await veBetterPassport.userRoundAppCount(user.address, 1)).to.equal(2); }); (0, mocha_1.it)("should track counts independently per round", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 2); (0, chai_1.expect)(await veBetterPassport.userRoundAppCount(user.address, 1)).to.equal(1); (0, chai_1.expect)(await veBetterPassport.userRoundAppCount(user.address, 2)).to.equal(1); (0, chai_1.expect)(await veBetterPassport.userRoundAppCount(user.address, 3)).to.equal(0); }); }); (0, mocha_1.describe)("userRoundActionCount", function () { (0, mocha_1.it)("should return 0 for a user with no actions", async function () { const { veBetterPassport, otherAccounts } = await (0, fixture_test_1.setupSignalingFixture)(); (0, chai_1.expect)(await veBetterPassport.userRoundActionCount(otherAccounts[2].address, 1)).to.equal(0); }); (0, mocha_1.it)("should increment for each action registered in the round", async function () { const contracts = await (0, fixture_test_1.setupSignalingFixture)(); const { veBetterPassport, owner, otherAccounts, appId } = contracts; const user = otherAccounts[2]; const app2Id = await createSecondApp(contracts); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, app2Id, 1); (0, chai_1.expect)(await veBetterPassport.userRoundActionCount(user.address, 1)).to.equal(3); }); (0, mocha_1.it)("should track counts independently per round", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 2); (0, chai_1.expect)(await veBetterPassport.userRoundActionCount(user.address, 1)).to.equal(2); (0, chai_1.expect)(await veBetterPassport.userRoundActionCount(user.address, 2)).to.equal(1); (0, chai_1.expect)(await veBetterPassport.userRoundActionCount(user.address, 3)).to.equal(0); }); (0, mocha_1.it)("should not count actions for blacklisted users", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).blacklist(user.address); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); (0, chai_1.expect)(await veBetterPassport.userRoundActionCount(user.address, 1)).to.equal(0); }); }); (0, mocha_1.describe)("appRoundActionCount", function () { (0, mocha_1.it)("should return 0 for an app with no actions", async function () { const { veBetterPassport, appId } = await (0, fixture_test_1.setupSignalingFixture)(); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(appId, 1)).to.equal(0); }); (0, mocha_1.it)("should increment for each action registered", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); await veBetterPassport.connect(owner).registerActionForRound(otherAccounts[2].address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(otherAccounts[3].address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(otherAccounts[4].address, appId, 1); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(appId, 1)).to.equal(3); }); (0, mocha_1.it)("should count multiple actions from the same user", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(appId, 1)).to.equal(2); }); (0, mocha_1.it)("should track counts independently per round", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 2); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(appId, 1)).to.equal(2); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(appId, 2)).to.equal(1); }); (0, mocha_1.it)("should track counts independently per app", async function () { const contracts = await (0, fixture_test_1.setupSignalingFixture)(); const { veBetterPassport, owner, otherAccounts, appId } = contracts; const user = otherAccounts[2]; const app2Id = await createSecondApp(contracts); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, app2Id, 1); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(appId, 1)).to.equal(3); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(app2Id, 1)).to.equal(1); }); (0, mocha_1.it)("should not count actions for blacklisted users", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).blacklist(user.address); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); (0, chai_1.expect)(await veBetterPassport.appRoundActionCount(appId, 1)).to.equal(0); }); }); (0, mocha_1.describe)("userUniqueAppInteraction", function () { (0, mocha_1.it)("should return false for a user that never interacted with an app", async function () { const { veBetterPassport, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); (0, chai_1.expect)(await veBetterPassport.userUniqueAppInteraction(otherAccounts[2].address, appId)).to.equal(false); }); (0, mocha_1.it)("should return true after a user interacts with an app", async function () { const { veBetterPassport, owner, otherAccounts, appId } = await (0, fixture_test_1.setupSignalingFixture)(); const user = otherAccounts[2]; await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); (0, chai_1.expect)(await veBetterPassport.userUniqueAppInteraction(user.address, appId)).to.equal(true); }); }); (0, mocha_1.describe)("userInteractedApps", function () { (0, mocha_1.it)("should return empty array for a user with no interactions", async function () { const { veBetterPassport, otherAccounts } = await (0, fixture_test_1.setupSignalingFixture)(); (0, chai_1.expect)(await veBetterPassport.userInteractedApps(otherAccounts[2].address)).to.deep.equal([]); }); (0, mocha_1.it)("should return all apps a user has interacted with", async function () { const contracts = await (0, fixture_test_1.setupSignalingFixture)(); const { veBetterPassport, owner, otherAccounts, appId } = contracts; const user = otherAccounts[2]; const app2Id = await createSecondApp(contracts); await veBetterPassport.connect(owner).registerActionForRound(user.address, appId, 1); await veBetterPassport.connect(owner).registerActionForRound(user.address, app2Id, 1); const apps = await veBetterPassport.userInteractedApps(user.address); (0, chai_1.expect)(apps).to.have.lengthOf(2); (0, chai_1.expect)(apps).to.include(appId); (0, chai_1.expect)(apps).to.include(app2Id); }); }); });