Add stackoverflow plugin (#159)

This commit is contained in:
Simon Lecoq
2021-02-27 23:24:51 +01:00
committed by GitHub
parent a43f217297
commit cfca5d3892
11 changed files with 563 additions and 3 deletions

View File

@@ -91,8 +91,8 @@
return string
.replace(/&lt;/g, u["<"] ? "<" : "&lt;")
.replace(/&gt;/g, u[">"] ? ">" : "&gt;")
.replace(/&quot;/g, u['"'] ? '"' : '&quot;')
.replace(/&apos;/g, u["'"] ? "'" : "&apos;")
.replace(/&quot;/g, u['"'] ? '"' : "&quot;")
.replace(/&(?:apos|#39);/g, u["'"] ? "'" : "&apos;")
.replace(/&amp;/g, u["&"] ? "&" : "&amp;")
}

View 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),
},
})
}
}
}

View File

@@ -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