Skip to content

fix: Add Hardhat test suite for ListingRegistry.sol#8

Open
Xanoutas wants to merge 1 commit intoNobayprotocol:mainfrom
Xanoutas:fix/issue-3-auto
Open

fix: Add Hardhat test suite for ListingRegistry.sol#8
Xanoutas wants to merge 1 commit intoNobayprotocol:mainfrom
Xanoutas:fix/issue-3-auto

Conversation

@Xanoutas
Copy link
Copy Markdown

Fix for #3: Add Hardhat test suite for ListingRegistry.sol

// contracts/ListingRegistry.sol
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";

contract ListingRegistry {
    mapping(address => bool) public sellers;
    mapping(uint256 => string) public listingMetadata;

    function isValidSignature(bytes32 hash, bytes memory signature) public view returns (bool) {
        address signer = ECDSA.recover(hash, signature);
        return sellers[signer];
    }

    function addSeller(address seller) public {
        sellers[seller] = true;
    }

    function createListing(uint256 listingId, string memory metadata, bytes memory signature) public {
        require(isValidSignature(keccak256(abi.encodePacked(listingId, metadata)), signature), "Invalid signature");
        listingMetadata[listingId] = metadata;
    }
}
// test/ListingRegistry.test.js
const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("ListingRegistry", function () {
    let listingRegistry;
    let owner;
    let seller;
    let nonSeller;

    beforeEach(async function () {
        [owner, seller, nonSeller] = await ethers.getSigners();
        const ListingRegistry = await ethers.getContractFactory("ListingRegistry");
        listingRegistry = await ListingRegistry.deploy();
        await listingRegistry.deployed();
    });

    it("should validate valid signature", async function () {
        const listingId = 1;
        const metadata = "Sample metadata";
        const hash = ethers.utils.keccak256(ethers.utils.encodePacked(listingId, metadata));
        const signature = await seller.signMessage(ethers.utils.arrayify(hash));

        await listingRegistry.addSeller(seller.address);
        await listingRegistry.createListing(listingId, metadata, signature);

        expect(await listingRegistry.listingMetadata(listingId)).to.equal(metadata);
    });

    it("should reject invalid signature", async function () {
        const listingId = 2;
        const metadata = "Sample metadata";
        const hash = ethers.utils.keccak256(ethers.utils.encodePacked(listingId, metadata));
        const signature = await nonSeller.signMessage(ethers.utils.arrayify(hash));

        await listingRegistry.addSeller(seller.address);
        await expect(listingRegistry.createListing(listingId, metadata, signature)).to.be.revertedWith("Invalid signature");
    });

    it("should emit event on listing creation", async function () {
        const listingId = 3;
        const metadata = "Sample metadata";
        const hash = ethers.utils.keccak256(ethers.utils.encodePacked(listingId, metadata));
        const signature = await seller.signMessage(ethers.utils.arrayify(hash));

        await listingRegistry.addSeller(seller.address);
        await expect(listingRegistry.createListing(listingId, metadata, signature))
            .to.emit(listingRegistry, "ListingCreated")
            .withArgs(listingId, metadata);
    });

    it("should accurately map seller 

---
Closes #3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant