Skip to content

Commit

Permalink
Merge branch 'main' into NoWay
Browse files Browse the repository at this point in the history
  • Loading branch information
Just-a-Pirate authored Apr 24, 2024
2 parents 9f859c4 + 709a4d2 commit bb9da5e
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 36 deletions.
9 changes: 3 additions & 6 deletions backend/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ model Post {
authorId String @db.ObjectId
// Request details
requests Request[]
// Report details
reports Report[]
}

// User stores n number of posts and requests
Expand Down Expand Up @@ -70,9 +68,8 @@ model Report {
reason String
status String @default("open")
// Reporter details
reporter User @relation(fields: [reporterEmail], references: [email])
reporterEmail String
// Post details
post Post @relation(fields: [postId], references: [id])
postId String @db.ObjectId
// User details
userReported User @relation(fields: [userReportedEmail], references: [email])
userReportedEmail String
}
2 changes: 1 addition & 1 deletion backend/src/routes/gauth.route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ gauthRouter.get("/", async (req, res) => {
if (appUser.data) {
if (typeof appUser.data !== 'string' && appUser.data.role === "admin") {
logger.info("Admin login");
res.redirect(FRONTEND_URL + '/admin/home');
res.redirect(FRONTEND_URL + '/admin/');
return;
}
} else {
Expand Down
4 changes: 2 additions & 2 deletions backend/src/service/posts.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ export const completePost = async (postId: string, authorEmail: string): Promise
error: true,
data: "Post has already been completed."
};

else if (post.status == "open") return {
error: true,
data: "Post has not been closed yet."
Expand All @@ -336,7 +336,7 @@ export const completePost = async (postId: string, authorEmail: string): Promise
data: "Some error occurred while finding accepted requests."
}

if (post.costInPoints>user.karmaPoints) return {
if (post.costInPoints > user.karmaPoints) return {
error: true,
data: "Not enough karma to complete this post."
}
Expand Down
42 changes: 22 additions & 20 deletions backend/tests/admin.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const user: User = {
isPublic: true
}

const a: User = {
const admin: User = {
id: "2",
name: "ben",
email: "ben@hen.com",
Expand All @@ -23,7 +23,7 @@ const a: User = {
isPublic: true
}

const na: User = {
const notadmin: User = {
id: "2",
name: "ben",
email: "ben@hen.com",
Expand Down Expand Up @@ -85,20 +85,20 @@ describe("Get all users", () => {

describe("promote user to admin", () => {
it("should promote user to admin role", () => {
prismaMock.user.findUnique.mockResolvedValue(na);
prismaMock.user.update.mockResolvedValue(a);
prismaMock.user.findUnique.mockResolvedValue(notadmin);
prismaMock.user.update.mockResolvedValue(admin);

expect(promoteUser(na.email)).resolves.toEqual({
expect(promoteUser(notadmin.email)).resolves.toEqual({
error: false,
data: a
data: admin
})
})

it("should return error if any error occured", () => {
prismaMock.user.findUnique.mockResolvedValue(na);
prismaMock.user.findUnique.mockResolvedValue(notadmin);
prismaMock.user.update.mockRejectedValue(new Error("Some error occurred"));

expect(promoteUser(na.email)).resolves.toEqual({
expect(promoteUser(notadmin.email)).resolves.toEqual({
error: true,
data: "Some error occurred while promoting user to admin role"
})
Expand All @@ -107,20 +107,22 @@ describe("promote user to admin", () => {

describe("demote admin to user", () => {
it("should demote admin to user", () => {
prismaMock.user.findUnique.mockResolvedValue(a);
prismaMock.user.update.mockResolvedValue(na);
prismaMock.user.findUnique.mockResolvedValue(admin);
prismaMock.user.update.mockResolvedValue(notadmin);


expect(demoteUser(a.email,na2.email)).resolves.toEqual({
expect(demoteUser(user.email, admin.email)).resolves.toEqual({
error: false,
data: na
data: notadmin
})
})

it("should return error if any error occured", () => {
prismaMock.user.findUnique.mockResolvedValue(a);
prismaMock.user.findUnique.mockResolvedValue(admin);
prismaMock.user.update.mockRejectedValue(new Error("Some error occurred"));

expect(demoteUser(a.email,na2.email)).resolves.toEqual({

expect(demoteUser(user.email, admin.email)).resolves.toEqual({
error: true,
data: "Some error occurred while demoting admin to user role"
})
Expand All @@ -129,10 +131,10 @@ describe("demote admin to user", () => {

describe("ban user", () => {
it("should ban user", () => {
prismaMock.user.findUnique.mockResolvedValue(na);
prismaMock.user.findUnique.mockResolvedValue(notadmin);
prismaMock.user.update.mockResolvedValue(bu);

expect(banUser(na.email)).resolves.toEqual({
expect(banUser(notadmin.email)).resolves.toEqual({
error: false,
data: bu
})
Expand All @@ -147,20 +149,20 @@ describe("ban user", () => {
})

it("should return error if user to be banned is an admin", () => {
prismaMock.user.findUnique.mockResolvedValue(a);
prismaMock.user.findUnique.mockResolvedValue(admin);
prismaMock.user.update.mockResolvedValue(bu);

expect(banUser(a.email)).resolves.toEqual({
expect(banUser(admin.email)).resolves.toEqual({
error: true,
data: "An admin cannot be banned."
})
})

it("should return error if any error occured", () => {
prismaMock.user.findUnique.mockResolvedValue(na);
prismaMock.user.findUnique.mockResolvedValue(notadmin);
prismaMock.user.update.mockRejectedValue(new Error("Some error occurred"));

expect(banUser(na.email)).resolves.toEqual({
expect(banUser(notadmin.email)).resolves.toEqual({
error: true,
data: "Some error occurred while banning user."
})
Expand Down
27 changes: 26 additions & 1 deletion backend/tests/posts.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { describe, expect } from "@jest/globals";
import { prismaMock } from "./_mockdb";
import { createPost, getAllPosts, getMyPosts, getPostDetails, editPost, deletePost} from "../src/service/posts.service";
import { createPost, getAllPosts, getMyPosts, getPostDetails, editPost, deletePost, completePost } from "../src/service/posts.service";
import { Post, User, Request } from ".prisma/client";

const userWith10KarmaPoints: User = {
Expand Down Expand Up @@ -46,6 +46,19 @@ const post: Post & {
status: "open",
}

// const completedPost: Post & {
// authorEmail: string
// } = {
// id: "1",
// authorId: "1",
// authorEmail: "ben@ben.com",
// source: "source",
// destination: "destination",
// costInPoints: 10,
// service: "service",
// status: "completed",
// }

const request: Request = {
id: "1",
postId: "1",
Expand Down Expand Up @@ -288,6 +301,18 @@ describe("Update post", () => {
});
})

describe("Complete post", () => {
it("should throw error if post already completed", () => {
prismaMock.user.findUnique.mockResolvedValue(userWith0KarmaPoints);
prismaMock.post.findUnique.mockRejectedValue(new Error("some error occurred"));

expect(completePost(post.id, userWith0KarmaPoints.email)).resolves.toEqual({
error: true,
data: "Some error occurred while completing the post"
});
});
})

describe("Delete post", () => {
it("should throw an error if user does not exist", () => {
prismaMock.post.findUnique.mockResolvedValue(post);
Expand Down
7 changes: 4 additions & 3 deletions backend/tests/user.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ describe("Fetch user data using id", () => {

prismaMock.user.findUnique.mockResolvedValue(user);

expect(getUserById(user.id,user.id)).resolves.toEqual({
expect(getUserById(user.id, user.email)).resolves.toEqual({
error: false,
data: user
});
Expand All @@ -271,7 +271,8 @@ describe("Fetch user data using id", () => {

prismaMock.user.findUnique.mockResolvedValue(user);

expect(getUserById(user.id,user.id)).resolves.toEqual({

expect(getUserById(user.id, user.email)).resolves.toEqual({
error: true,
data: "User is not public."
});
Expand All @@ -289,7 +290,7 @@ describe("Fetch user data using id", () => {

prismaMock.user.findUnique.mockRejectedValue(new Error("Some error"));

expect(getUserById(user.id,user.id)).resolves.toEqual({
expect(getUserById(user.id, user.email)).resolves.toEqual({
error: true,
data: null
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ const AdminHomepage = () => {
await axios.put(siteConfig.server_url + `/admin/promote/${usermail}`);
setMessage("User promoted to admin role")
// Refresh users list after promoting
const response = await axios.get(siteConfig.server_url + '/admin/home');
const response = await axios.get(siteConfig.server_url + '/admin/');
if (response.status == HttpCodes.UNAUTHORIZED) {
window.location.href = "/";
return;
Expand All @@ -98,7 +98,7 @@ const AdminHomepage = () => {
await axios.put(siteConfig.server_url + `/admin/demote/${usermail}`);
setMessage("User demoted to default role")
// Refresh users list after promoting
const response = await axios.get(siteConfig.server_url + '/admin/home');
const response = await axios.get(siteConfig.server_url + '/admin/');
if (response.status == HttpCodes.UNAUTHORIZED) {
window.location.href = "/";
return;
Expand Down
4 changes: 3 additions & 1 deletion frontend/app/tabs/MyPosts.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ export default function MyPosts() {
<TableRow key={index}>
<TableCell>{post.source} to {post.destination}</TableCell>
<TableCell>{post.service}</TableCell>
<TableCell><Chip color="success">{post.status.toUpperCase()}</Chip></TableCell>
<TableCell><Chip color={
post.status.toUpperCase() == "OPEN" ? "danger" : post.status.toUpperCase() == "COMPLETED" ? "success" : "warning"
}>{post.status.toUpperCase()}</Chip></TableCell>
<TableCell>{post.costInPoints}</TableCell>
<TableCell><a href={`/post/details/${post.id}`}><EyeIcon className="h-5 w-5" /></a></TableCell>
</TableRow>
Expand Down

0 comments on commit bb9da5e

Please sign in to comment.