function test_anyone_can_bid_for_listed_item() public {
vm.prank(PROTOCOL_OWNER);
nft.mint(SELLER);
vm.startPrank(SELLER);
nft.approve(address(market), 0);
vm.expectEmit(true, true, true, true);
emit NftListed(0, SELLER, MIN_PRICE + 1, 0);
market.listNFT(0, MIN_PRICE + 1, 0);
vm.stopPrank();
assertEq(nft.ownerOf(0), address(market));
BidBeastsNFTMarket.Listing memory listing = market.getListing(0);
assertEq(listing.listed, true);
assertEq(listing.seller, SELLER);
assertEq(listing.minPrice, MIN_PRICE + 1);
assertEq(listing.buyNowPrice, 0);
assertEq(listing.auctionEnd, 0);
vm.warp(1 days);
vm.startPrank(BIDDER_1);
vm.expectEmit(true, true, true, true);
@> emit AuctionSettled(0, BIDDER_1, SELLER, MIN_PRICE + 2);
vm.expectEmit(true, true, false, false);
emit AuctionExtended(0, 1 days + 15 minutes);
vm.expectEmit(true, true, true, false);
emit BidPlaced(0, BIDDER_1, MIN_PRICE + 2);
market.placeBid{value: MIN_PRICE + 2}(0);
vm.stopPrank();
listing = market.getListing(0);
assertEq(listing.listed, true);
assertEq(listing.seller, SELLER);
assertEq(listing.minPrice, MIN_PRICE + 1);
assertEq(listing.buyNowPrice, 0);
assertEq(listing.auctionEnd, 1 days + 15 minutes);
BidBeastsNFTMarket.Bid memory bid = market.getHighestBid(0);
assertEq(bid.bidder, BIDDER_1);
assertEq(bid.amount, MIN_PRICE + 2);
}