123 lines
4.4 KiB
JavaScript
123 lines
4.4 KiB
JavaScript
/**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 }),
|
|
})),
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|
|
}
|
|
}
|