import sample from 'lodash/sample' import { createTestClient } from 'apollo-server-testing' import CONFIG from '../config' import createServer from '../server' import { faker } from '@faker-js/faker' import Factory from '../db/factories' import { getNeode, getDriver } from '../db/neo4j' import { createGroupMutation, joinGroupMutation, changeGroupMemberRoleMutation, } from '../graphql/groups' import { createPostMutation } from '../graphql/posts' import { createCommentMutation } from '../graphql/comments' import { categories } from '../constants/categories' if (CONFIG.PRODUCTION && !CONFIG.PRODUCTION_DB_CLEAN_ALLOW) { throw new Error(`You cannot seed the database in a non-staging and real production environment!`) } const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl'] /* eslint-disable no-multi-spaces */ ;(async function () { let authenticatedUser = null const driver = getDriver() const neode = getNeode() try { const { server } = createServer({ context: () => { return { driver, neode, user: authenticatedUser, } }, }) const { mutate } = createTestClient(server) const [Hamburg, Berlin, Germany, Paris, France] = await Promise.all([ Factory.build('location', { id: 'region.5127278006398860', name: 'Hamburg', type: 'region', lng: 10.0, lat: 53.55, nameES: 'Hamburgo', nameFR: 'Hambourg', nameIT: 'Amburgo', nameEN: 'Hamburg', namePT: 'Hamburgo', nameDE: 'Hamburg', nameNL: 'Hamburg', namePL: 'Hamburg', nameRU: 'Гамбург', }), Factory.build('location', { id: 'region.14880313158564380', type: 'region', name: 'Berlin', lng: 13.38333, lat: 52.51667, nameES: 'Berlín', nameFR: 'Berlin', nameIT: 'Berlino', nameEN: 'Berlin', namePT: 'Berlim', nameDE: 'Berlin', nameNL: 'Berlijn', namePL: 'Berlin', nameRU: 'Берлин', }), Factory.build('location', { id: 'country.10743216036480410', name: 'Germany', type: 'country', namePT: 'Alemanha', nameDE: 'Deutschland', nameES: 'Alemania', nameNL: 'Duitsland', namePL: 'Niemcy', nameFR: 'Allemagne', nameIT: 'Germania', nameEN: 'Germany', nameRU: 'Германия', }), Factory.build('location', { id: 'region.9397217726497330', name: 'Paris', type: 'region', lng: 2.35183, lat: 48.85658, nameES: 'París', nameFR: 'Paris', nameIT: 'Parigi', nameEN: 'Paris', namePT: 'Paris', nameDE: 'Paris', nameNL: 'Parijs', namePL: 'Paryż', nameRU: 'Париж', }), Factory.build('location', { id: 'country.9759535382641660', name: 'France', type: 'country', namePT: 'França', nameDE: 'Frankreich', nameES: 'Francia', nameNL: 'Frankrijk', namePL: 'Francja', nameFR: 'France', nameIT: 'Francia', nameEN: 'France', nameRU: 'Франция', }), ]) await Promise.all([ Berlin.relateTo(Germany, 'isIn'), Hamburg.relateTo(Germany, 'isIn'), Paris.relateTo(France, 'isIn'), ]) const [racoon, rabbit, wolf, bear, turtle, rhino] = await Promise.all([ Factory.build('badge', { id: 'indiegogo_en_racoon', icon: '/img/badges/indiegogo_en_racoon.svg', }), Factory.build('badge', { id: 'indiegogo_en_rabbit', icon: '/img/badges/indiegogo_en_rabbit.svg', }), Factory.build('badge', { id: 'indiegogo_en_wolf', icon: '/img/badges/indiegogo_en_wolf.svg', }), Factory.build('badge', { id: 'indiegogo_en_bear', icon: '/img/badges/indiegogo_en_bear.svg', }), Factory.build('badge', { id: 'indiegogo_en_turtle', icon: '/img/badges/indiegogo_en_turtle.svg', }), Factory.build('badge', { id: 'indiegogo_en_rhino', icon: '/img/badges/indiegogo_en_rhino.svg', }), ]) const [peterLustig, bobDerBaumeister, jennyRostock, huey, dewey, louie, dagobert] = await Promise.all([ Factory.build( 'user', { id: 'u1', name: 'Peter Lustig', slug: 'peter-lustig', role: 'admin', }, { email: 'admin@example.org', }, ), Factory.build( 'user', { id: 'u2', name: 'Bob der Baumeister', slug: 'bob-der-baumeister', role: 'moderator', }, { email: 'moderator@example.org', avatar: null, }, ), Factory.build( 'user', { id: 'u3', name: 'Jenny Rostock', slug: 'jenny-rostock', role: 'user', }, { email: 'user@example.org', }, ), Factory.build( 'user', { id: 'u4', name: 'Huey', slug: 'huey', role: 'user', }, { email: 'huey@example.org', }, ), Factory.build( 'user', { id: 'u5', name: 'Dewey', slug: 'dewey', role: 'user', }, { email: 'dewey@example.org', avatar: null, }, ), Factory.build( 'user', { id: 'u6', name: 'Louie', slug: 'louie', role: 'user', }, { email: 'louie@example.org', }, ), Factory.build( 'user', { id: 'u7', name: 'Dagobert', slug: 'dagobert', role: 'user', }, { email: 'dagobert@example.org', }, ), ]) await Promise.all([ peterLustig.relateTo(Berlin, 'isIn'), bobDerBaumeister.relateTo(Hamburg, 'isIn'), jennyRostock.relateTo(Paris, 'isIn'), huey.relateTo(Paris, 'isIn'), ]) await Promise.all([ peterLustig.relateTo(racoon, 'rewarded'), peterLustig.relateTo(rhino, 'rewarded'), peterLustig.relateTo(wolf, 'rewarded'), bobDerBaumeister.relateTo(racoon, 'rewarded'), bobDerBaumeister.relateTo(turtle, 'rewarded'), jennyRostock.relateTo(bear, 'rewarded'), dagobert.relateTo(rabbit, 'rewarded'), peterLustig.relateTo(bobDerBaumeister, 'friends'), peterLustig.relateTo(jennyRostock, 'friends'), bobDerBaumeister.relateTo(jennyRostock, 'friends'), peterLustig.relateTo(jennyRostock, 'following'), peterLustig.relateTo(huey, 'following'), bobDerBaumeister.relateTo(huey, 'following'), jennyRostock.relateTo(huey, 'following'), huey.relateTo(dewey, 'following'), dewey.relateTo(huey, 'following'), louie.relateTo(jennyRostock, 'following'), huey.relateTo(dagobert, 'muted'), dewey.relateTo(dagobert, 'muted'), louie.relateTo(dagobert, 'muted'), dagobert.relateTo(huey, 'blocked'), dagobert.relateTo(dewey, 'blocked'), dagobert.relateTo(louie, 'blocked'), ]) await Promise.all( categories.map(({ icon, name }, index) => { return Factory.build('category', { id: `cat${index + 1}`, slug: name, name, icon, }) }), ) const [environment, nature, democracy, freedom] = await Promise.all([ Factory.build('tag', { id: 'Environment', }), Factory.build('tag', { id: 'Nature', }), Factory.build('tag', { id: 'Democracy', }), Factory.build('tag', { id: 'Freedom', }), ]) // Create Groups authenticatedUser = await peterLustig.toJson() await Promise.all([ mutate({ mutation: createGroupMutation(), variables: { id: 'g0', name: 'Investigative Journalism', about: 'Investigative journalists share ideas and insights and can collaborate.', description: `

English:

This group is hidden.

What is our group for?

This group was created to allow investigative journalists to share and collaborate.

How does it work?

Here you can internally share posts and comments about them.


Deutsch:

Diese Gruppe ist verborgen.

Wofür ist unsere Gruppe?

Diese Gruppe wurde geschaffen, um investigativen Journalisten den Austausch und die Zusammenarbeit zu ermöglichen.

Wie funktioniert das?

Hier könnt ihr euch intern über Beiträge und Kommentare zu ihnen austauschen.

`, groupType: 'hidden', actionRadius: 'global', categoryIds: ['cat6', 'cat12', 'cat16'], locationName: 'Hamburg, Germany', }, }), ]) await Promise.all([ mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g0', userId: 'u2', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g0', userId: 'u4', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g0', userId: 'u6', }, }), ]) await Promise.all([ mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g0', userId: 'u2', roleInGroup: 'usual', }, }), mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g0', userId: 'u4', roleInGroup: 'admin', }, }), ]) // post into group await Promise.all([ mutate({ mutation: createPostMutation(), variables: { id: 'p0-g0', groupId: 'g0', title: `What happend in Shanghai?`, content: 'A sack of rise dropped in Shanghai. Should we further investigate?', categoryIds: ['cat6'], }, }), ]) authenticatedUser = await bobDerBaumeister.toJson() await Promise.all([ mutate({ mutation: createPostMutation(), variables: { id: 'p1-g0', groupId: 'g0', title: `The man on the moon`, content: 'We have to further investigate about the stories of a man living on the moon.', categoryIds: ['cat12', 'cat16'], }, }), ]) authenticatedUser = await jennyRostock.toJson() await Promise.all([ mutate({ mutation: createGroupMutation(), variables: { id: 'g1', name: 'School For Citizens', about: 'Our children shall receive education for life.', description: `

English

Our goal

Only those who enjoy learning and do not lose their curiosity can obtain a good education for life and continue to learn with joy throughout their lives.

Curiosity

For this we need a school that takes up the curiosity of the children, the people, and satisfies it through a lot of experience.


Deutsch

Unser Ziel

Nur wer Spaß am Lernen hat und seine Neugier nicht verliert, kann gute Bildung für's Leben erlangen und sein ganzes Leben mit Freude weiter lernen.

Neugier

Dazu benötigen wir eine Schule, die die Neugier der Kinder, der Menschen, aufnimmt und durch viel Erfahrung befriedigt.

`, groupType: 'closed', actionRadius: 'national', categoryIds: ['cat8', 'cat14'], locationName: 'France', }, }), ]) await Promise.all([ mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g1', userId: 'u1', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g1', userId: 'u2', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g1', userId: 'u5', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g1', userId: 'u6', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g1', userId: 'u7', }, }), ]) await Promise.all([ mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g1', userId: 'u1', roleInGroup: 'usual', }, }), mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g1', userId: 'u5', roleInGroup: 'admin', }, }), mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g1', userId: 'u6', roleInGroup: 'owner', }, }), ]) // post into group await Promise.all([ mutate({ mutation: createPostMutation(), variables: { id: 'p0-g1', groupId: 'g1', title: `Can we use ocelot for education?`, content: 'I like the concept of this school. Can we use our software in this?', categoryIds: ['cat8'], }, }), ]) authenticatedUser = await peterLustig.toJson() await Promise.all([ mutate({ mutation: createPostMutation(), variables: { id: 'p1-g1', groupId: 'g1', title: `Can we push this idea out of France?`, content: 'This idea is too inportant to have the scope only on France.', categoryIds: ['cat14'], }, }), ]) authenticatedUser = await bobDerBaumeister.toJson() await Promise.all([ mutate({ mutation: createGroupMutation(), variables: { id: 'g2', name: 'Yoga Practice', about: 'We do yoga around the clock.', description: `

What Is yoga?

Yoga is not just about practicing asanas. It's about how we do it.

And practicing asanas doesn't have to be yoga, it can be more athletic than yogic.

What makes practicing asanas yogic?

The important thing is:

`, groupType: 'public', actionRadius: 'interplanetary', categoryIds: ['cat4', 'cat5', 'cat17'], }, }), ]) await Promise.all([ mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g2', userId: 'u3', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g2', userId: 'u4', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g2', userId: 'u5', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g2', userId: 'u6', }, }), mutate({ mutation: joinGroupMutation(), variables: { groupId: 'g2', userId: 'u7', }, }), ]) await Promise.all([ mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g2', userId: 'u3', roleInGroup: 'usual', }, }), mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g2', userId: 'u4', roleInGroup: 'pending', }, }), mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g2', userId: 'u5', roleInGroup: 'admin', }, }), mutate({ mutation: changeGroupMemberRoleMutation(), variables: { groupId: 'g2', userId: 'u6', roleInGroup: 'usual', }, }), ]) authenticatedUser = await louie.toJson() await Promise.all([ mutate({ mutation: createPostMutation(), variables: { id: 'p0-g2', groupId: 'g2', title: `I am a Noob`, content: 'I am new to Yoga and did not join this group so far.', categoryIds: ['cat4'], }, }), ]) // Create Events (by peter lustig) authenticatedUser = await peterLustig.toJson() const now = new Date() await Promise.all([ mutate({ mutation: createPostMutation(), variables: { id: 'e0', title: 'Illegaler Kindergeburtstag', content: 'Elli hat nächste Woche Geburtstag. Wir feiern das!', categoryIds: ['cat4'], postType: 'Event', eventInput: { eventStart: new Date( now.getFullYear(), now.getMonth(), now.getDate() + 7, ).toISOString(), eventVenue: 'Ellis Kinderzimmer', eventLocationName: 'Deutschland', }, }, }), mutate({ mutation: createPostMutation(), variables: { id: 'e1', title: 'Wir Schützen den Stuttgarter Schlossgarten', content: 'Kein Baum wird gefällt werden!', categoryIds: ['cat5'], postType: 'Event', eventInput: { eventStart: new Date( now.getFullYear(), now.getMonth(), now.getDate() + 1, ).toISOString(), eventVenue: 'Schlossgarten', eventLocationName: 'Stuttgart', }, }, }), mutate({ mutation: createPostMutation(), variables: { id: 'e2', title: 'IT 4 Change Treffen', content: 'Wir sitzen eine Woche zusammen rum und glotzen uns blöde an.', categoryIds: ['cat5'], postType: 'Event', eventInput: { eventStart: new Date( now.getFullYear(), now.getMonth(), now.getDate() + 1, ).toISOString(), eventEnd: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 4).toISOString(), eventVenue: 'Ferienlager', eventLocationName: 'Bahra, Sachsen', }, }, }), ]) let passedEvent = await neode.find('Post', 'e1') await passedEvent.update({ eventStart: new Date(2010, 8, 30, 10).toISOString() }) passedEvent = await neode.find('Post', 'e2') await passedEvent.update({ eventStart: new Date(now.getFullYear(), now.getMonth(), now.getDate() - 3).toISOString(), }) // Create Posts (Articles) const [p0, p1, p3, p4, p5, p6, p9, p10, p11, p13, p14, p15] = await Promise.all([ Factory.build( 'post', { id: 'p0', language: sample(languages), }, { categoryIds: ['cat16'], author: peterLustig, image: Factory.build('image', { url: faker.image.unsplash.food(300, 169), sensitive: true, aspectRatio: 300 / 169, }), }, ), Factory.build( 'post', { id: 'p1', language: sample(languages), }, { categoryIds: ['cat1'], author: bobDerBaumeister, image: Factory.build('image', { url: faker.image.unsplash.technology(300, 1500), aspectRatio: 300 / 1500, }), }, ), Factory.build( 'post', { id: 'p3', language: sample(languages), }, { categoryIds: ['cat3'], author: huey, }, ), Factory.build( 'post', { id: 'p4', language: sample(languages), }, { categoryIds: ['cat4'], author: dewey, }, ), Factory.build( 'post', { id: 'p5', language: sample(languages), }, { categoryIds: ['cat5'], author: louie, }, ), Factory.build( 'post', { id: 'p6', language: sample(languages), }, { categoryIds: ['cat6'], author: peterLustig, image: Factory.build('image', { url: faker.image.unsplash.buildings(300, 857), aspectRatio: 300 / 857, }), }, ), Factory.build( 'post', { id: 'p9', language: sample(languages), }, { categoryIds: ['cat9'], author: huey, }, ), Factory.build( 'post', { id: 'p10', }, { categoryIds: ['cat10'], author: dewey, image: Factory.build('image', { sensitive: true, }), }, ), Factory.build( 'post', { id: 'p11', language: sample(languages), }, { categoryIds: ['cat11'], author: louie, image: Factory.build('image', { url: faker.image.unsplash.people(300, 901), aspectRatio: 300 / 901, }), }, ), Factory.build( 'post', { id: 'p13', language: sample(languages), }, { categoryIds: ['cat13'], author: bobDerBaumeister, }, ), Factory.build( 'post', { id: 'p14', language: sample(languages), }, { categoryIds: ['cat14'], author: jennyRostock, image: Factory.build('image', { url: faker.image.unsplash.objects(300, 200), aspectRatio: 300 / 450, }), }, ), Factory.build( 'post', { id: 'p15', language: sample(languages), }, { categoryIds: ['cat15'], author: huey, }, ), ]) await Factory.build( 'inviteCode', { code: 'ABCDEF', }, { generatedBy: jennyRostock, }, ) authenticatedUser = await louie.toJson() const mention1 = 'Hey @jenny-rostock, what\'s up?' const mention2 = 'Hey @jenny-rostock, here is another notification for you!' const hashtag1 = 'See #NaturphilosophieYoga, it can really help you!' const hashtagAndMention1 = 'The new physics of #QuantenFlussTheorie can explain #QuantumGravity! @peter-lustig got that already. ;-)' await Promise.all([ mutate({ mutation: createPostMutation(), variables: { id: 'p2', title: `Nature Philosophy Yoga`, content: hashtag1, categoryIds: ['cat2'], }, }), mutate({ mutation: createPostMutation(), variables: { id: 'p7', title: 'This is post #7', content: `${mention1} ${faker.lorem.paragraph()}`, categoryIds: ['cat7'], }, }), mutate({ mutation: createPostMutation(), variables: { id: 'p8', image: faker.image.unsplash.nature(), title: `Quantum Flow Theory explains Quantum Gravity`, content: hashtagAndMention1, categoryIds: ['cat8'], }, }), mutate({ mutation: createPostMutation(), variables: { id: 'p12', title: 'This is post #12', content: `${mention2} ${faker.lorem.paragraph()}`, categoryIds: ['cat12'], }, }), ]) const [p2, p7, p8, p12] = await Promise.all( ['p2', 'p7', 'p8', 'p12'].map((id) => neode.find('Post', id)), ) authenticatedUser = null authenticatedUser = await dewey.toJson() const mentionInComment1 = 'I heard @jenny-rostock has practiced it for 3 years now.' const mentionInComment2 = 'Did @peter-lustig tell you?' await Promise.all([ mutate({ mutation: createCommentMutation, variables: { id: 'c4', postId: 'p2', content: mentionInComment1, }, }), mutate({ mutation: createCommentMutation, variables: { id: 'c4-1', postId: 'p2', content: mentionInComment2, }, }), mutate({ mutation: createCommentMutation, variables: { postId: 'p14', content: faker.lorem.paragraph(), }, }), // should send a notification ]) authenticatedUser = null const comments = await Promise.all([ Factory.build( 'comment', { id: 'c1', }, { author: jennyRostock, postId: 'p1', }, ), Factory.build( 'comment', { id: 'c2', }, { author: huey, postId: 'p1', }, ), Factory.build( 'comment', { id: 'c3', }, { author: louie, postId: 'p3', }, ), Factory.build( 'comment', { id: 'c5', }, { author: jennyRostock, postId: 'p3', }, ), Factory.build( 'comment', { id: 'c6', }, { author: peterLustig, postId: 'p4', }, ), Factory.build( 'comment', { id: 'c7', }, { author: jennyRostock, postId: 'p2', }, ), Factory.build( 'comment', { id: 'c8', }, { author: huey, postId: 'p15', }, ), Factory.build( 'comment', { id: 'c9', }, { author: dewey, postId: 'p15', }, ), Factory.build( 'comment', { id: 'c10', }, { author: louie, postId: 'p15', }, ), Factory.build( 'comment', { id: 'c11', }, { author: jennyRostock, postId: 'p15', }, ), Factory.build( 'comment', { id: 'c12', }, { author: jennyRostock, postId: 'p15', }, ), ]) const trollingComment = comments[0] await Promise.all([ democracy.relateTo(p3, 'post'), democracy.relateTo(p11, 'post'), democracy.relateTo(p15, 'post'), democracy.relateTo(p7, 'post'), environment.relateTo(p1, 'post'), environment.relateTo(p5, 'post'), environment.relateTo(p9, 'post'), environment.relateTo(p13, 'post'), freedom.relateTo(p0, 'post'), freedom.relateTo(p4, 'post'), freedom.relateTo(p8, 'post'), freedom.relateTo(p12, 'post'), nature.relateTo(p2, 'post'), nature.relateTo(p6, 'post'), nature.relateTo(p10, 'post'), nature.relateTo(p14, 'post'), peterLustig.relateTo(p15, 'emoted', { emotion: 'surprised' }), bobDerBaumeister.relateTo(p15, 'emoted', { emotion: 'surprised' }), jennyRostock.relateTo(p15, 'emoted', { emotion: 'surprised' }), huey.relateTo(p15, 'emoted', { emotion: 'surprised' }), dewey.relateTo(p15, 'emoted', { emotion: 'surprised' }), louie.relateTo(p15, 'emoted', { emotion: 'surprised' }), dagobert.relateTo(p15, 'emoted', { emotion: 'surprised' }), bobDerBaumeister.relateTo(p14, 'emoted', { emotion: 'cry' }), jennyRostock.relateTo(p13, 'emoted', { emotion: 'angry' }), huey.relateTo(p12, 'emoted', { emotion: 'funny' }), dewey.relateTo(p11, 'emoted', { emotion: 'surprised' }), louie.relateTo(p10, 'emoted', { emotion: 'cry' }), dewey.relateTo(p9, 'emoted', { emotion: 'happy' }), huey.relateTo(p8, 'emoted', { emotion: 'angry' }), jennyRostock.relateTo(p7, 'emoted', { emotion: 'funny' }), bobDerBaumeister.relateTo(p6, 'emoted', { emotion: 'surprised' }), peterLustig.relateTo(p5, 'emoted', { emotion: 'cry' }), bobDerBaumeister.relateTo(p4, 'emoted', { emotion: 'happy' }), jennyRostock.relateTo(p3, 'emoted', { emotion: 'angry' }), huey.relateTo(p2, 'emoted', { emotion: 'funny' }), dewey.relateTo(p1, 'emoted', { emotion: 'surprised' }), louie.relateTo(p0, 'emoted', { emotion: 'cry' }), ]) await Promise.all([ peterLustig.relateTo(p1, 'shouted'), peterLustig.relateTo(p6, 'shouted'), bobDerBaumeister.relateTo(p0, 'shouted'), bobDerBaumeister.relateTo(p6, 'shouted'), jennyRostock.relateTo(p6, 'shouted'), jennyRostock.relateTo(p7, 'shouted'), huey.relateTo(p8, 'shouted'), huey.relateTo(p9, 'shouted'), dewey.relateTo(p10, 'shouted'), peterLustig.relateTo(p2, 'shouted'), peterLustig.relateTo(p6, 'shouted'), bobDerBaumeister.relateTo(p0, 'shouted'), bobDerBaumeister.relateTo(p6, 'shouted'), jennyRostock.relateTo(p6, 'shouted'), jennyRostock.relateTo(p7, 'shouted'), huey.relateTo(p8, 'shouted'), huey.relateTo(p9, 'shouted'), louie.relateTo(p10, 'shouted'), ]) const reports = await Promise.all([ Factory.build('report'), Factory.build('report'), Factory.build('report'), Factory.build('report'), ]) const reportAgainstDagobert = reports[0] const reportAgainstTrollingPost = reports[1] const reportAgainstTrollingComment = reports[2] const reportAgainstDewey = reports[3] // report resource first time await Promise.all([ reportAgainstDagobert.relateTo(jennyRostock, 'filed', { resourceId: 'u7', reasonCategory: 'discrimination_etc', reasonDescription: 'This user is harassing me with bigoted remarks!', }), reportAgainstDagobert.relateTo(dagobert, 'belongsTo'), reportAgainstTrollingPost.relateTo(jennyRostock, 'filed', { resourceId: 'p2', reasonCategory: 'doxing', reasonDescription: "This shouldn't be shown to anybody else! It's my private thing!", }), reportAgainstTrollingPost.relateTo(p2, 'belongsTo'), reportAgainstTrollingComment.relateTo(huey, 'filed', { resourceId: 'c1', reasonCategory: 'other', reasonDescription: 'This comment is bigoted', }), reportAgainstTrollingComment.relateTo(trollingComment, 'belongsTo'), reportAgainstDewey.relateTo(dagobert, 'filed', { resourceId: 'u5', reasonCategory: 'discrimination_etc', reasonDescription: 'This user is harassing me!', }), reportAgainstDewey.relateTo(dewey, 'belongsTo'), ]) // report resource a second time await Promise.all([ reportAgainstDagobert.relateTo(louie, 'filed', { resourceId: 'u7', reasonCategory: 'discrimination_etc', reasonDescription: 'this user is attacking me for who I am!', }), reportAgainstDagobert.relateTo(dagobert, 'belongsTo'), reportAgainstTrollingPost.relateTo(peterLustig, 'filed', { resourceId: 'p2', reasonCategory: 'discrimination_etc', reasonDescription: 'This post is bigoted', }), reportAgainstTrollingPost.relateTo(p2, 'belongsTo'), reportAgainstTrollingComment.relateTo(bobDerBaumeister, 'filed', { resourceId: 'c1', reasonCategory: 'pornographic_content_links', reasonDescription: 'This comment is porno!!!', }), reportAgainstTrollingComment.relateTo(trollingComment, 'belongsTo'), ]) const disableVariables = { resourceId: 'undefined-resource', disable: true, closed: false, } // review resource first time await Promise.all([ reportAgainstDagobert.relateTo(bobDerBaumeister, 'reviewed', { ...disableVariables, resourceId: 'u7', }), dagobert.update({ disabled: true, updatedAt: new Date().toISOString() }), reportAgainstTrollingPost.relateTo(peterLustig, 'reviewed', { ...disableVariables, resourceId: 'p2', }), p2.update({ disabled: true, updatedAt: new Date().toISOString() }), reportAgainstTrollingComment.relateTo(bobDerBaumeister, 'reviewed', { ...disableVariables, resourceId: 'c1', }), trollingComment.update({ disabled: true, updatedAt: new Date().toISOString() }), ]) // second review of resource and close report await Promise.all([ reportAgainstDagobert.relateTo(peterLustig, 'reviewed', { resourceId: 'u7', disable: false, closed: true, }), dagobert.update({ disabled: false, updatedAt: new Date().toISOString(), closed: true }), reportAgainstTrollingPost.relateTo(bobDerBaumeister, 'reviewed', { resourceId: 'p2', disable: true, closed: true, }), p2.update({ disabled: true, updatedAt: new Date().toISOString(), closed: true }), reportAgainstTrollingComment.relateTo(peterLustig, 'reviewed', { ...disableVariables, resourceId: 'c1', disable: true, closed: true, }), trollingComment.update({ disabled: true, updatedAt: new Date().toISOString(), closed: true }), ]) const additionalUsers = await Promise.all( [...Array(30).keys()].map(() => Factory.build('user')), ) await Promise.all( additionalUsers.map(async (user) => { await jennyRostock.relateTo(user, 'following') await user.relateTo(jennyRostock, 'following') }), ) await Promise.all( [...Array(30).keys()].map((index) => Factory.build('user', { name: `Jenny${index}` })), ) await Promise.all( [...Array(30).keys()].map(() => Factory.build( 'post', { content: `Jenny ${faker.lorem.sentence()}` }, { categoryIds: ['cat1'], author: jennyRostock, image: Factory.build('image', { url: faker.image.unsplash.objects(), }), }, ), ), ) await Promise.all( [...Array(30).keys()].map(() => Factory.build( 'post', {}, { categoryIds: ['cat1'], author: jennyRostock, image: Factory.build('image', { url: faker.image.unsplash.objects(), }), }, ), ), ) await Promise.all( [...Array(6).keys()].map(() => Factory.build( 'comment', {}, { author: jennyRostock, postId: 'p2', }, ), ), ) await Promise.all( [...Array(4).keys()].map(() => Factory.build( 'comment', {}, { author: jennyRostock, postId: 'p15', }, ), ), ) await Promise.all( [...Array(2).keys()].map(() => Factory.build( 'comment', {}, { author: jennyRostock, postId: 'p4', }, ), ), ) await Promise.all( [...Array(21).keys()].map(() => Factory.build( 'post', {}, { categoryIds: ['cat1'], author: peterLustig, image: Factory.build('image', { url: faker.image.unsplash.buildings(), }), }, ), ), ) await Promise.all( [...Array(3).keys()].map(() => Factory.build( 'comment', {}, { author: peterLustig, postId: 'p4', }, ), ), ) await Promise.all( [...Array(3).keys()].map(() => Factory.build( 'comment', {}, { author: peterLustig, postId: 'p14', }, ), ), ) await Promise.all( [...Array(6).keys()].map(() => Factory.build( 'comment', {}, { author: peterLustig, postId: 'p0', }, ), ), ) await Promise.all( [...Array(11).keys()].map(() => Factory.build( 'post', {}, { categoryIds: ['cat1'], author: dewey, image: Factory.build('image', { url: faker.image.unsplash.food(), }), }, ), ), ) await Promise.all( [...Array(7).keys()].map(() => Factory.build( 'comment', {}, { author: dewey, postId: 'p2', }, ), ), ) await Promise.all( [...Array(5).keys()].map(() => Factory.build( 'comment', {}, { author: dewey, postId: 'p6', }, ), ), ) await Promise.all( [...Array(2).keys()].map(() => Factory.build( 'comment', {}, { author: dewey, postId: 'p9', }, ), ), ) await Promise.all( [...Array(16).keys()].map(() => Factory.build( 'post', {}, { categoryIds: ['cat1'], author: louie, image: Factory.build('image', { url: faker.image.unsplash.technology(), }), }, ), ), ) await Promise.all( [...Array(4).keys()].map(() => Factory.build( 'comment', {}, { postId: 'p1', author: louie, }, ), ), ) await Promise.all( [...Array(8).keys()].map(() => Factory.build( 'comment', {}, { author: louie, postId: 'p10', }, ), ), ) await Promise.all( [...Array(5).keys()].map(() => Factory.build( 'comment', {}, { author: louie, postId: 'p13', }, ), ), ) await Promise.all( [...Array(45).keys()].map(() => Factory.build( 'post', {}, { categoryIds: ['cat1'], author: bobDerBaumeister, image: Factory.build('image', { url: faker.image.unsplash.people(), }), }, ), ), ) await Promise.all( [...Array(2).keys()].map(() => Factory.build( 'comment', {}, { author: bobDerBaumeister, postId: 'p2', }, ), ), ) await Promise.all( [...Array(3).keys()].map(() => Factory.build( 'comment', {}, { author: bobDerBaumeister, postId: 'p12', }, ), ), ) await Promise.all( [...Array(7).keys()].map(() => Factory.build( 'comment', {}, { author: bobDerBaumeister, postId: 'p13', }, ), ), ) await Promise.all( [...Array(8).keys()].map(() => Factory.build( 'post', {}, { categoryIds: ['cat1'], author: huey, image: Factory.build('image', { url: faker.image.unsplash.nature(), }), }, ), ), ) await Promise.all( [...Array(6).keys()].map(() => Factory.build( 'comment', {}, { author: huey, postId: 'p0', }, ), ), ) await Promise.all( [...Array(8).keys()].map(() => Factory.build( 'comment', {}, { author: huey, postId: 'p13', }, ), ), ) await Promise.all( [...Array(8).keys()].map(() => Factory.build( 'comment', {}, { author: huey, postId: 'p15', }, ), ), ) await Factory.build('donations') /* eslint-disable-next-line no-console */ console.log('Seeded Data...') await driver.close() await neode.close() process.exit(0) } catch (err) { /* eslint-disable-next-line no-console */ console.error(err) process.exit(1) } })() /* eslint-enable no-multi-spaces */