Skip to content

Commit

Permalink
Add pagination and tests to friends endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
Piterson25 committed Mar 24, 2024
1 parent 0cd5393 commit d21f343
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 32 deletions.
40 changes: 38 additions & 2 deletions backend/src/routes/usersFriendsRoute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ friendshipRouter.get(
try {
const session = driver.session();
const userId = req.params.userId;
const page: number = parseInt(req.query.page as string);
const maxUsersOnPage: number = parseInt(req.query.maxUsers as string);

const user = await userExists(session, res, userId);
if ("json" in user) {
Expand All @@ -50,8 +52,42 @@ friendshipRouter.get(
);
await session.close();

const friends = friendQuery.records.map((f) => f.get("f").properties);
return res.json({ status: "ok", friends });
const allFriends = friendQuery.records.map((f) => f.get("f").properties);

if (!page && !maxUsersOnPage) {
if (allFriends.length === 0) {
return res.status(404).json({
status: "error",
errors: { friends: "No friends found" },
});
}
return res.status(200).json({
status: "ok",
friends: allFriends,
});
} else if (!page || !maxUsersOnPage) {
return res.status(400).json({
status: "error",
errors: { params: "Missing or incorrect query params" },
});
}

const friends = allFriends.slice(
(page - 1) * maxUsersOnPage,
page * maxUsersOnPage,
);

if (friends.length === 0) {
return res.status(404).json({
status: "error",
errors: { friends: "No friends found with given queries" },
});
}

return res.status(200).json({
status: "ok",
friends,
});
} catch (err) {
console.log("Error:", err);
return res.status(404).json({ status: "error", errors: err as object });
Expand Down
30 changes: 0 additions & 30 deletions backend/src/routes/usersRoute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,36 +202,6 @@ usersRouter.get("/:userId", async (req: Request, res: UserErrorResponse) => {
}
});

usersRouter.get(
"/:userId/friends",
async (req: Request, res: FriendsErrorResponse) => {
try {
const userId = req.params.userId;

const session = driver.session();
const user = await userExists(session, { id: userId });

if (!user) {
return userNotFoundRes(res);
}

const friendRequest = await session.run(
`MATCH (u:User {id: $userId})-[:IS_FRIENDS_WITH]-(f:User) RETURN f`,
{ userId },
);
await session.close();

const friends = friendRequest.records.map((f) =>
filterUser(f.get("f").properties),
);
return res.json({ status: "ok", friends });
} catch (err) {
console.log("Error:", err);
return res.status(404).json({ status: "error", errors: err as object });
}
},
);

usersRouter.get("/meetings/:userId", async (req: Request, res) => {
try {
const session = driver.session();
Expand Down
79 changes: 79 additions & 0 deletions backend/test/userFriends.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { expect, test } from "vitest";

let userId: number;
let page: number = 3;
let maxUsers: number = 5;

test("Search user", async () => {
const response = await fetch("http://localhost:5000/users/search?q=a");

const responseData = await response.json();
const users = responseData.users;
const status = responseData.status;

expect(status).toBe("ok");

userId = users[0][0].id;
});

test("Get friends", async () => {
const response = await fetch(`http://localhost:5000/users/${userId}/friends`);

const responseData = await response.json();
const friends = responseData.friends;
const status = responseData.status;

expect(status).toBe("ok");
expect(friends.length).toBe(6);
});

test("Missing page", async () => {
const response = await fetch(
`http://localhost:5000/users/${userId}/friends?maxUsers=${maxUsers}`,
);

const responseData = await response.json();
const status = responseData.status;

expect(status).toBe("error");
});

test("Missing maxUsers", async () => {
const response = await fetch(
`http://localhost:5000/users/${userId}/friends?page=${page}`,
);

const responseData = await response.json();
const status = responseData.status;

expect(status).toBe("error");
});

test("First user", async () => {
page = 1;
maxUsers = 1;
const response = await fetch(
`http://localhost:5000/users/${userId}/friends?page=${page}&maxUsers=${maxUsers}`,
);

const responseData = await response.json();
const status = responseData.status;
const users = responseData.friends;

expect(status).toBe("ok");
expect(users.length).toBe(1);
});

test("Not found users", async () => {
page = 3;
maxUsers = 3;
const response = await fetch(
`http://localhost:5000/users/${userId}/friends?page=${page}&maxUsers=${maxUsers}`,
);
const responseData = await response.json();
const status = responseData.status;
const message = responseData.errors.friends;

expect(status).toBe("error");
expect(message).toBe("No friends found with given queries");
});

0 comments on commit d21f343

Please sign in to comment.