const faker = require('faker'); const capacities = { high: faker.random.number({ min: 400, max: 600 }), low: faker.random.number({ min: 125, max: 250 }), }; const dates = { near: faker.date.future(faker.random.number({ min: 0.125, max: 0.75 })), past: faker.date.recent(faker.random.number({ min: 3, max: 16 })), } const getPosts = (number = 3) => { let posts = []; for (let i = 0; i < number; i++) { const date = faker.date.recent(faker.random.number({ min: 3, max: 16 })); const scheduledPost = faker.random.boolean(); posts.push({ author: faker.name.findName(), title: faker.lorem.sentence(), content: faker.lorem.paragraphs(faker.random.number({ min: 3, max: 5 })), isPublic: faker.random.boolean(), scheduledPost: scheduledPost, sendNotification: scheduledPost ? faker.date.future(faker.random.number({ min: 0.125, max: 0.25 })) : null, timestamp: date, }); } return posts; }; const getTickets = (ticketItems = []) => { let tickets = []; if (ticketItems !== false) { const count = typeof ticketItems === 'array' ? ticketItems.length : faker.random.number({ min: 1, max: 5 }); for (let i = 0; i < count; i++) { const ticketItem = ticketItems[i] || {}; const { capacity = capacities[faker.random.arrayElement(['high', 'low'])], itemId = faker.random.uuid(), name = faker.lorem.sentence(), price = faker.random.number({ min: 50, max: 450 }), } = ticketItem; tickets.push({ available: (capacity - faker.random.number({ min: Math.floor(capacity / 2), max: (capacity - 50) })), capacity, endSale: dates.near, itemId, name, price, startSale: dates.past, }); } } return tickets; } const getEvent = (isTicketed = true) => ({ description: faker.lorem.sentences(faker.random.number({ min: 3, max: 5 }), '. '), endTime: dates.near, images: [ { url: faker.image.imageUrl(640, 480, 'cats', true, true) }, { url: faker.image.imageUrl(640, 480, 'cats', true, true) }, { url: faker.image.imageUrl(640, 480, 'cats', true, true) }, ], isTicketed: isTicketed, posts: getPosts(faker.random.number({ min: 4, max: 12 })), requireLoginToSeeAuction: false, showFrom: dates.past - (14*24*60*60*1000), showUntil: dates.near + (14*24*60*60*1000), startTime: dates.past, tagline: faker.lorem.sentence(), ticketClasses: getTickets(isTicketed), title: faker.lorem.words(faker.random.number({ min: 1, max: 4 })), url: 'https://www.mfa.org/summer-party', }); module.exports = { getEvent, getPosts, getTickets, };