import { expect } from 'chai'; import { ethers } from 'hardhat'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { EventManager } from '../typechain-types/EventManager'; describe('EventManager', function () { let eventManager: EventManager; let owner: SignerWithAddress; let addr1: SignerWithAddress; let addr2: SignerWithAddress; const EVENT_NAME = 'Test Event'; const EVENT_DESCRIPTION = 'This is a test event'; const EVENT_CAPACITY = 100; const EVENT_TICKET_PRICE = 1000; // 10 USD in cents const EVENT_DATE = Math.floor(Date.now() / 1000) + 86400; // 1 day from now const EVENT_IMAGES = ['image1.jpg', 'image2.jpg']; beforeEach(async function () { [owner, addr1, addr2] = await ethers.getSigners(); const EventManager = await ethers.getContractFactory('EventManager'); eventManager = await EventManager.deploy(); await eventManager.deployed(); }); async function createTestEvent() { await eventManager.createEvent( EVENT_NAME, EVENT_DESCRIPTION, EVENT_CAPACITY, EVENT_TICKET_PRICE, EVENT_DATE, EVENT_IMAGES ); } // describe("Event Creation", function () { // it("Should create an event with correct details", async function () { // await createTestEvent(); // const event = await eventManager.events(0); // expect(event.name).to.equal(EVENT_NAME); // expect(event.description).to.equal(EVENT_DESCRIPTION); // expect(event.capacity).to.equal(EVENT_CAPACITY); // expect(event.ticketPrice).to.equal(EVENT_TICKET_PRICE); // expect(event.eventDate).to.equal(EVENT_DATE); // expect(event.eventHost).to.equal(owner.address); // }); // it("Should emit EventCreated event", async function () { // await expect(await createTestEvent()) // .to.emit(eventManager, "EventCreated") // .withArgs(0, EVENT_NAME, EVENT_DATE); // }); // }); describe('Ticket Purchase', function () { beforeEach(async function () { await createTestEvent(); }); it('Should allow buying a ticket', async function () { const ticketPriceFlare = await eventManager.getEventPriceFlare(0); await expect( eventManager.connect(addr1).buyTicket(0, { value: ticketPriceFlare }) ) .to.emit(eventManager, 'TicketPurchased') .withArgs(0, 0, addr1.address, ticketPriceFlare); const ticket = await eventManager.tickets(0); expect(ticket.holder).to.equal(addr1.address); expect(ticket.eventId).to.equal(0); }); it('Should fail if insufficient funds are provided', async function () { const ticketPriceFlare = await eventManager.getEventPriceFlare(0); await expect( eventManager .connect(addr1) .buyTicket(0, { value: ticketPriceFlare.sub(1) }) ).to.be.revertedWith('Insufficient value provided'); }); }); describe('Ticket Transfer', function () { beforeEach(async function () { await createTestEvent(); const ticketPriceFlare = await eventManager.getEventPriceFlare(0); await eventManager .connect(addr1) .buyTicket(0, { value: ticketPriceFlare }); }); it('Should allow transferring a ticket', async function () { await expect(eventManager.connect(addr1).transferTicket(0, addr2.address)) .to.emit(eventManager, 'TicketTransferred') .withArgs(0, addr1.address, addr2.address); const ticket = await eventManager.tickets(0); expect(ticket.holder).to.equal(addr2.address); }); it('Should fail if non-owner tries to transfer', async function () { await expect( eventManager.connect(addr2).transferTicket(0, addr2.address) ).to.be.revertedWith('You do not own this ticket'); }); }); describe('Ticket Approval and Transfer', function () { beforeEach(async function () { await createTestEvent(); const ticketPriceFlare = await eventManager.getEventPriceFlare(0); await eventManager .connect(addr1) .buyTicket(0, { value: ticketPriceFlare }); }); it('Should allow approving and transferring a ticket', async function () { await expect( eventManager.connect(addr1).approveTicket(0, addr2.address, true) ) .to.emit(eventManager, 'TicketTransferApproved') .withArgs(0, addr1.address, addr2.address); await expect( eventManager.connect(addr2).transferTicketFrom(0, addr2.address) ) .to.emit(eventManager, 'TicketTransferred') .withArgs(0, addr1.address, addr2.address); const ticket = await eventManager.tickets(0); expect(ticket.holder).to.equal(addr2.address); }); it('Should fail if transferring without approval', async function () { await expect( eventManager.connect(addr2).transferTicketFrom(0, addr2.address) ).to.be.revertedWith('You are not allowed to transfer this ticket'); }); }); });