I’m working on this coding exercise from Hackerrank called the Analytics API (Intermediate Node.js).
The ask is to implement the router method to make this test pass. I’m stuck at it:
Starting code
router.post('/', (req, res) => {
const { body } = req;
// Implement method here
res.status(201).send(/* send body */);
})
it("should ingest click events only once per user every 3 seconds", async () => {
await setup(event_set_3);
const response1 = await chai
.request(server)
.post("/analytics")
.send(event_set_1);
response1.body.ingested.should.eql(1);
clock.tick(3010);
const response2 = await chai
.request(server)
.post("/analytics")
.send(event_set_1);
response2.body.ingested.should.eql(2);
});
Here’s the test setup:
const setup = (...sets) => {
return BlueBird.mapSeries(sets, (data) => {
return chai
.request(server)
.post("/analytics")
.send(data)
.then((response) => {
return response.body;
});
});
};
describe("analytics_api_medium", () => {
const event_set_1 = [
{
user: 1,
eventType: "click",
},
{
user: 2,
eventType: "click",
},
{
user: 1,
eventType: "pageView",
},
];
const event_set_2 = [
{
user: 2,
eventType: "pageView",
},
{
user: 1,
eventType: "pageView",
},
{
user: 1,
eventType: "pageView",
},
{
user: 2,
eventType: "click",
},
{
user: 2,
eventType: "pageView",
},
];
const event_set_3 = [
{
user: 1,
eventType: "click",
},
{
user: 2,
eventType: "pageView",
},
{
user: 1,
eventType: "pageView",
},
];
How I handle the timer in the post method?