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