Add stackoverflow plugin (#159)
This commit is contained in:
@@ -91,8 +91,8 @@
|
||||
return string
|
||||
.replace(/</g, u["<"] ? "<" : "<")
|
||||
.replace(/>/g, u[">"] ? ">" : ">")
|
||||
.replace(/"/g, u['"'] ? '"' : '"')
|
||||
.replace(/'/g, u["'"] ? "'" : "'")
|
||||
.replace(/"/g, u['"'] ? '"' : """)
|
||||
.replace(/&(?:apos|#39);/g, u["'"] ? "'" : "'")
|
||||
.replace(/&/g, u["&"] ? "&" : "&")
|
||||
}
|
||||
|
||||
|
||||
99
source/app/mocks/api/axios/get/stackoverflow.mjs
Normal file
99
source/app/mocks/api/axios/get/stackoverflow.mjs
Normal file
@@ -0,0 +1,99 @@
|
||||
/**Mocked data */
|
||||
export default function({faker, url, options, login = faker.internet.userName()}) {
|
||||
//Stackoverflow api
|
||||
if (/^https:..api.stackexchange.com.2.2.*$/.test(url)) {
|
||||
//Extract user id
|
||||
const user_id = url.match(/[/]users[/](?<id>\d+)/)?.groups?.id ?? NaN
|
||||
const pagesize = Number(url.match(/pagesize=(?<pagesize>\d+)/)?.groups?.pagesize) || 30
|
||||
//User account
|
||||
if (/users[/]\d+[/][?]site=stackoverflow$/.test(url)) {
|
||||
console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`)
|
||||
return ({
|
||||
status:200,
|
||||
data:{
|
||||
items:[
|
||||
{
|
||||
badge_counts:{bronze:faker.random.number(500), silver:faker.random.number(300), gold:faker.random.number(100)},
|
||||
accept_rate:faker.random.number(100),
|
||||
answer_count:faker.random.number(1000),
|
||||
question_count:faker.random.number(1000),
|
||||
view_count:faker.random.number(10000),
|
||||
creation_date:faker.date.past(),
|
||||
display_name:faker.internet.userName(),
|
||||
user_id,
|
||||
reputation:faker.random.number(100000),
|
||||
},
|
||||
],
|
||||
has_more:false,
|
||||
quota_max:300,
|
||||
quota_remaining:faker.random.number(300),
|
||||
},
|
||||
})
|
||||
}
|
||||
//Total metrics
|
||||
if (/[?]site=stackoverflow&filter=total$/.test(url)) {
|
||||
console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`)
|
||||
return ({
|
||||
status:200,
|
||||
data:{
|
||||
total:faker.random.number(10000),
|
||||
},
|
||||
})
|
||||
}
|
||||
//Questions
|
||||
if ((/questions[?]site=stackoverflow/.test(url))||(/questions[/][\d;]+[?]site=stackoverflow/.test(url))) {
|
||||
console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`)
|
||||
return ({
|
||||
status:200,
|
||||
data:{
|
||||
items:new Array(pagesize).fill(null).map(_ => ({
|
||||
tags:new Array(5).fill(null).map(_ => faker.lorem.slug()),
|
||||
owner:{display_name:faker.internet.userName()},
|
||||
is_answered:faker.random.boolean(),
|
||||
view_count:faker.random.number(10000),
|
||||
accepted_answer_id:faker.random.number(1000000),
|
||||
answer_count:faker.random.number(100),
|
||||
score:faker.random.number(1000),
|
||||
creation_date:faker.time.recent(),
|
||||
down_vote_count:faker.random.number(1000),
|
||||
up_vote_count:faker.random.number(1000),
|
||||
comment_count:faker.random.number(1000),
|
||||
favorite_count:faker.random.number(1000),
|
||||
title:faker.lorem.sentence(),
|
||||
body_markdown:faker.lorem.paragraphs(),
|
||||
link:faker.internet.url(),
|
||||
question_id:faker.random.number(1000000),
|
||||
})),
|
||||
has_more:false,
|
||||
quota_max:300,
|
||||
quota_remaining:faker.random.number(300),
|
||||
},
|
||||
})
|
||||
}
|
||||
//Answers
|
||||
if ((/answers[?]site=stackoverflow/.test(url))||(/answers[/][\d;]+[?]site=stackoverflow/.test(url))) {
|
||||
console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`)
|
||||
return ({
|
||||
status:200,
|
||||
data:{
|
||||
items:new Array(pagesize).fill(null).map(_ => ({
|
||||
owner:{display_name:faker.internet.userName()},
|
||||
link:faker.internet.url(),
|
||||
is_accepted:faker.random.boolean(),
|
||||
score:faker.random.number(1000),
|
||||
down_vote_count:faker.random.number(1000),
|
||||
up_vote_count:faker.random.number(1000),
|
||||
comment_count:faker.random.number(1000),
|
||||
creation_date:faker.time.recent(),
|
||||
question_id:faker.random.number(1000000),
|
||||
body_markdown:faker.lorem.paragraphs(),
|
||||
answer_id:faker.random.number(1000000),
|
||||
})),
|
||||
has_more:false,
|
||||
quota_max:300,
|
||||
quota_remaining:faker.random.number(300),
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -651,6 +651,65 @@
|
||||
duration:options["isocalendar.duration"]
|
||||
}
|
||||
}) : null),
|
||||
//Stackoverflow
|
||||
...(set.plugins.enabled.stackoverflow ? ({
|
||||
stackoverflow:{
|
||||
sections:options["stackoverflow.sections"].split(",").map(x => x.trim()).filter(x => x),
|
||||
lines:options["stackoverflow.lines"],
|
||||
user:{
|
||||
reputation:faker.random.number(100000),
|
||||
badges:faker.random.number(1000),
|
||||
questions:faker.random.number(1000),
|
||||
answers:faker.random.number(1000),
|
||||
comments:faker.random.number(1000),
|
||||
views:faker.random.number(1000),
|
||||
},
|
||||
"answers-top":new Array(options["stackoverflow.limit"]).fill(null).map(_ => ({
|
||||
type:"answer",
|
||||
body:faker.lorem.paragraphs(),
|
||||
score:faker.random.number(1000),
|
||||
upvotes:faker.random.number(1000),
|
||||
downvotes:faker.random.number(1000),
|
||||
accepted:faker.random.boolean(),
|
||||
comments:faker.random.number(1000),
|
||||
author:set.user,
|
||||
created:"01/01/1970",
|
||||
link:null,
|
||||
id:faker.random.number(100000),
|
||||
question_id:faker.random.number(100000),
|
||||
question:{
|
||||
title:faker.lorem.sentence(),
|
||||
tags:[faker.lorem.slug(), faker.lorem.slug()],
|
||||
}
|
||||
})),
|
||||
get ["answers-recent"]() {
|
||||
return this["answers-top"]
|
||||
},
|
||||
"questions-top":new Array(options["stackoverflow.limit"]).fill(null).map(_ => ({
|
||||
type:"question",
|
||||
title:faker.lorem.sentence(),
|
||||
body:faker.lorem.paragraphs(),
|
||||
score:faker.random.number(1000),
|
||||
upvotes:faker.random.number(1000),
|
||||
downvotes:faker.random.number(1000),
|
||||
favorites:faker.random.number(1000),
|
||||
tags:[faker.lorem.slug(), faker.lorem.slug()],
|
||||
answered:faker.random.boolean(),
|
||||
answers:faker.random.number(1000),
|
||||
comments:faker.random.number(1000),
|
||||
views:faker.random.number(1000),
|
||||
author:set.user,
|
||||
created:"01/01/1970",
|
||||
link:null,
|
||||
id:faker.random.number(100000),
|
||||
accepted_answer_id:faker.random.number(100000),
|
||||
answer:null,
|
||||
})),
|
||||
get ["questions-recent"]() {
|
||||
return this["questions-top"]
|
||||
},
|
||||
}
|
||||
}) : null),
|
||||
},
|
||||
}
|
||||
//Formatters
|
||||
|
||||
Reference in New Issue
Block a user