@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
JavaScript
;
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);
});
});
});