logos-storage-contracts-eth/test/EnumerableSetExtensions.test.js
Eric Mastro 8fde295b73
refactor Mappings.Mapping, add ClearableBytes32Set
- refactor Mappings.Mapping to use a ClearableBytes32Set and multiple EnumerableSet.Bytes32Sets instead of implementing that code directly in Mappings.Mapping.
- update the api for better readability and reasoning.

This should be much cleaner now.
2022-11-28 14:39:11 +11:00

91 lines
2.8 KiB
JavaScript

const { ethers } = require("hardhat")
const { expect } = require("chai")
const { hexlify, randomBytes } = ethers.utils
const { exampleAddress } = require("./examples")
describe("EnumerableSetExtensions", function () {
let account
let key
let value
let contract
describe("ClearableBytes32Set", function () {
beforeEach(async function () {
let ClearableBytes32Set = await ethers.getContractFactory(
"TestClearableBytes32Set"
)
contract = await ClearableBytes32Set.deploy()
;[account] = await ethers.getSigners()
value = randomBytes(32)
})
it("starts empty", async function () {
await expect(await contract.values()).to.deep.equal([])
})
it("adds a value", async function () {
await expect(contract.add(value))
.to.emit(contract, "OperationResult")
.withArgs(true)
await expect(await contract.values()).to.deep.equal([hexlify(value)])
})
it("adds a value that already exists", async function () {
await contract.add(value)
await expect(contract.add(value))
.to.emit(contract, "OperationResult")
.withArgs(false)
await expect(await contract.values()).to.deep.equal([hexlify(value)])
})
it("contains a value", async function () {
let key1 = randomBytes(32)
let value1 = randomBytes(32)
await contract.add(value)
await contract.add(value1)
await expect(await contract.contains(value)).to.equal(true)
await expect(await contract.contains(value1)).to.equal(true)
})
it("removes a value", async function () {
let value1 = randomBytes(32)
await contract.add(value)
await contract.add(value1)
await expect(contract.remove(value))
.to.emit(contract, "OperationResult")
.withArgs(true)
await expect(await contract.values()).to.deep.equal([hexlify(value1)])
})
it("removes a value that doesn't exist", async function () {
let value1 = randomBytes(32)
await contract.add(value)
await contract.add(value1)
await contract.remove(value)
await expect(contract.remove(value))
.to.emit(contract, "OperationResult")
.withArgs(false)
await expect(await contract.values()).to.deep.equal([hexlify(value1)])
})
it("clears all values", async function () {
let value1 = randomBytes(32)
let value2 = randomBytes(32)
await contract.add(value)
await contract.add(value1)
await contract.add(value2)
await expect(contract.clear())
await expect(await contract.values()).to.deep.equal([])
})
it("gets the length of values", async function () {
let value1 = randomBytes(32)
let value2 = randomBytes(32)
await contract.add(value)
await contract.add(value1)
await contract.add(value2)
await expect(await contract.length()).to.equal(3)
})
})
})