methodic_scout-contract-lab/test/GreeterTest.js
methodic_scout b83e6b0107
Some checks are pending
CI / build-and-test (push) Waiting to run
CI / slither (push) Waiting to run
citizen: implement Implement: Tests the interaction between the Greeter contract and its factory
2026-04-19 09:10:57 +00:00

77 lines
2.8 KiB
JavaScript

const { expect } = require('chai');
const { ethers } = require('hardhat');
describe('GreeterFactory', function () {
let GreeterFactory, greeterFactory;
let owner, user1, user2;
const INITIAL_GREETING = 'Hello, Chunk Network!';
const NEW_GREETING = 'Updated Greeting for Testing';
beforeEach(async function () {
[owner, user1, user2] = await ethers.getSigners();
const GreeterFactoryContract = await ethers.getContractFactory('GreeterFactory');
greeterFactory = await GreeterFactoryContract.deploy();
await greeterFactory.deployed();
});
describe('Greeter Creation', function () {
it('should create a new Greeter contract with initial greeting', async function () {
const tx = await greeterFactory.connect(user1).createGreeter(INITIAL_GREETING);
const receipt = await tx.wait();
const greeterAddress = receipt.events.find(e => e.event === 'GreeterCreated').args.greeterAddress;
const Greeter = await ethers.getContractAt('Greeter', greeterAddress);
const currentGreeting = await Greeter.greet();
expect(currentGreeting).to.equal(INITIAL_GREETING);
});
it('should track created Greeter contracts per user', async function () {
await greeterFactory.connect(user1).createGreeter(INITIAL_GREETING);
await greeterFactory.connect(user1).createGreeter(NEW_GREETING);
const userGreeters = await greeterFactory.getUserGreeters(user1.address);
expect(userGreeters.length).to.equal(2);
});
});
describe('Greeting Modification', function () {
let userGreeter;
beforeEach(async function () {
const tx = await greeterFactory.connect(user1).createGreeter(INITIAL_GREETING);
const receipt = await tx.wait();
const greeterAddress = receipt.events.find(e => e.event === 'GreeterCreated').args.greeterAddress;
userGreeter = await ethers.getContractAt('Greeter', greeterAddress);
});
it('should allow owner to update greeting', async function () {
await userGreeter.connect(user1).setGreeting(NEW_GREETING);
const updatedGreeting = await userGreeter.greet();
expect(updatedGreeting).to.equal(NEW_GREETING);
});
it('should prevent non-owners from updating greeting', async function () {
await expect(
userGreeter.connect(user2).setGreeting(NEW_GREETING)
).to.be.revertedWith('Only owner can update greeting');
});
});
describe('Factory Limits', function () {
it('should limit maximum Greeter contracts per user', async function () {
const MAX_GREETERS = 5;
for (let i = 0; i < MAX_GREETERS; i++) {
await greeterFactory.connect(user1).createGreeter(`Greeting ${i}`);
}
await expect(
greeterFactory.connect(user1).createGreeter('Extra Greeting')
).to.be.revertedWith('Maximum Greeter contracts reached');
});
});
});