/**Mocked data */ export default function({ faker, url, body, login = faker.internet.userName() }) { if (/^https:..graphql.anilist.co.*$/.test(url)) { //Initialization and media generator const { query } = body const media = ({ type }) => ({ title: { romaji: faker.lorem.words(), english: faker.lorem.words(), native: faker.lorem.words() }, description: faker.lorem.paragraphs(), type, status: faker.random.arrayElement(["FINISHED", "RELEASING", "NOT_YET_RELEASED", "CANCELLED", "HIATUS"]), episodes: 100 + faker.datatype.number(100), volumes: faker.datatype.number(100), chapters: 100 + faker.datatype.number(1000), averageScore: faker.datatype.number(100), countryOfOrigin: "JP", genres: new Array(6).fill(null).map(_ => faker.lorem.word()), coverImage: { medium: null }, startDate: { year: faker.date.past(20).getFullYear() }, }) //User statistics query if (/^query Statistics /.test(query)) { console.debug("metrics/compute/mocks > mocking anilist api result > Statistics") return ({ status: 200, data: { data: { User: { id: faker.datatype.number(100000), name: faker.internet.userName(), about: null, statistics: { anime: { count: faker.datatype.number(1000), minutesWatched: faker.datatype.number(100000), episodesWatched: faker.datatype.number(10000), genres: new Array(4).fill(null).map(_ => ({ genre: faker.lorem.word() })), }, manga: { count: faker.datatype.number(1000), chaptersRead: faker.datatype.number(100000), volumesRead: faker.datatype.number(10000), genres: new Array(4).fill(null).map(_ => ({ genre: faker.lorem.word() })), }, }, }, }, }, }) } //Favorites characters if (/^query FavoritesCharacters /.test(query)) { console.debug("metrics/compute/mocks > mocking anilist api result > Favorites characters") return ({ status: 200, data: { data: { User: { favourites: { characters: { nodes: new Array(2 + faker.datatype.number(16)).fill(null).map(_ => ({ name: { full: faker.name.findName(), native: faker.name.findName() }, image: { medium: null }, })), pageInfo: { currentPage: 1, hasNextPage: false }, }, }, }, }, }, }) } //Favorites anime/manga query if (/^query Favorites /.test(query)) { console.debug("metrics/compute/mocks > mocking anilist api result > Favorites") const type = /anime[(]/.test(query) ? "ANIME" : /manga[(]/.test(query) ? "MANGA" : "OTHER" return ({ status: 200, data: { data: { User: { favourites: { [type.toLocaleLowerCase()]: { nodes: new Array(16).fill(null).map(_ => media({ type })), pageInfo: { currentPage: 1, hasNextPage: false }, }, }, }, }, }, }) } //Medias query if (/^query Medias /.test(query)) { console.debug("metrics/compute/mocks > mocking anilist api result > Medias") const { type } = body.variables return ({ status: 200, data: { data: { MediaListCollection: { lists: [ { name: { ANIME: "Watching", MANGA: "Reading", OTHER: "Completed" }[type], isCustomList: false, entries: new Array(16).fill(null).map(_ => ({ status: faker.random.arrayElement(["CURRENT", "PLANNING", "COMPLETED", "DROPPED", "PAUSED", "REPEATING"]), progress: faker.datatype.number(100), progressVolumes: null, score: 0, startedAt: { year: null, month: null, day: null }, completedAt: { year: null, month: null, day: null }, media: media({ type }), })), }, ], }, }, }, }) } } }