Skip to content

Commit 0c89965

Browse files
authored
Merge pull request #56 from nicolelim02/feat/matching
Matching page
2 parents 120f051 + b0f8409 commit 0c89965

File tree

22 files changed

+260
-84
lines changed

22 files changed

+260
-84
lines changed

backend/question-service/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ COPY . .
1010

1111
EXPOSE 3000
1212

13-
CMD ["npm", "start"]
13+
CMD ["npm", "run", "dev"]

backend/user-service/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ COPY . .
1010

1111
EXPOSE 3001
1212

13-
CMD ["npm", "start"]
13+
CMD ["npm", "run", "dev"]

docker-compose.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,25 @@ services:
22
user-service:
33
image: peerprep/user-service
44
build: ./backend/user-service
5+
environment:
6+
- CHOKIDAR_USEPOLLING=true
57
env_file: ./backend/user-service/.env
68
ports:
79
- 3001:3001
810
depends_on:
911
- mongo
1012
networks:
1113
- peerprep-network
14+
volumes:
15+
- ./backend/user-service:/user-service
16+
- /user-service/node_modules
1217
restart: on-failure
1318

1419
question-service:
1520
image: peerprep/question-service
1621
build: ./backend/question-service
22+
environment:
23+
- CHOKIDAR_USEPOLLING=true
1724
env_file: ./backend/question-service/.env
1825
ports:
1926
- 3000:3000
@@ -22,18 +29,26 @@ services:
2229
- user-service
2330
networks:
2431
- peerprep-network
32+
volumes:
33+
- ./backend/question-service:/question-service
34+
- /question-service/node_modules
2535
restart: on-failure
2636

2737
frontend:
2838
image: peerprep/frontend
2939
build: ./frontend
40+
environment:
41+
- CHOKIDAR_USEPOLLING=true
3042
ports:
3143
- 5173:5173
3244
depends_on:
3345
- user-service
3446
- question-service
3547
networks:
3648
- peerprep-network
49+
volumes:
50+
- ./frontend:/frontend
51+
- /frontend/node_modules
3752
restart: on-failure
3853

3954
mongo:

frontend/jest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ const config: Config = {
142142
// setupFiles: [],
143143

144144
// A list of paths to modules that run some code to configure or set up the testing framework before each test
145-
// setupFilesAfterEnv: [],
145+
setupFilesAfterEnv: ["<rootDir>/setupTest.ts"],
146146

147147
// The number of seconds after which a test is considered as slow and reported as such in the results.
148148
// slowTestThreshold: 5,

frontend/setupTest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import "@testing-library/jest-dom";

frontend/src/App.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import Home from "./pages/Home";
1111
import SignUp from "./pages/SignUp";
1212
import LogIn from "./pages/LogIn";
1313
import ProtectedRoutes from "./components/ProtectedRoutes";
14+
import Matching from "./pages/Matching";
1415
import Layout from "./components/Layout";
1516
import AuthProvider from "./contexts/AuthContext";
1617
import ProfileContextProvider from "./contexts/ProfileContext";
@@ -40,10 +41,15 @@ function App() {
4041
</ProfileContextProvider>
4142
}
4243
/>
44+
<Route path="matching" element={<ProtectedRoutes />}>
45+
<Route index element={<Matching />} />
46+
<Route path="matched" element={<div>Matched</div>} />
47+
<Route path="timeout" element={<div>Timeout</div>} />
48+
</Route>
4349
<Route path="*" element={<PageNotFound />} />
4450
</Route>
45-
<Route path="/signup" element={<SignUp />}></Route>
46-
<Route path="/login" element={<LogIn />}></Route>
51+
<Route path="signup" element={<SignUp />} />
52+
<Route path="login" element={<LogIn />} />
4753
</Routes>
4854
</AuthProvider>
4955
);

frontend/src/assets/matching.svg

Lines changed: 9 additions & 0 deletions
Loading

frontend/src/components/Navbar/Navbar.test.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { fireEvent, render, screen } from "@testing-library/react";
2-
import "@testing-library/jest-dom";
32
import axios from "axios";
43
import { faker } from "@faker-js/faker";
54
import * as hooks from "../../contexts/AuthContext";
@@ -46,6 +45,7 @@ describe("Navigation routes", () => {
4645
signup: jest.fn(),
4746
login: jest.fn(),
4847
logout: jest.fn(),
48+
setUser: jest.fn(),
4949
loading: false,
5050
user: {
5151
id: "1",
@@ -76,6 +76,7 @@ describe("Unauthenticated user", () => {
7676
login: jest.fn(),
7777
logout: jest.fn(),
7878
loading: false,
79+
setUser: jest.fn(),
7980
user: null,
8081
}));
8182
render(
@@ -92,6 +93,7 @@ describe("Unauthenticated user", () => {
9293
signup: jest.fn(),
9394
login: jest.fn(),
9495
logout: jest.fn(),
96+
setUser: jest.fn(),
9597
loading: false,
9698
user: null,
9799
}));
@@ -133,6 +135,7 @@ describe("Authenticated user", () => {
133135
signup: jest.fn(),
134136
login: jest.fn(),
135137
logout: jest.fn(),
138+
setUser: jest.fn(),
136139
loading: false,
137140
user: {
138141
id: "1",
@@ -182,6 +185,7 @@ describe("Authenticated user", () => {
182185
signup: jest.fn(),
183186
login: jest.fn(),
184187
logout: jest.fn(),
188+
setUser: jest.fn(),
185189
loading: false,
186190
user: {
187191
id: "1",
@@ -235,6 +239,7 @@ describe("Authenticated user", () => {
235239
signup: jest.fn(),
236240
login: jest.fn(),
237241
logout: jest.fn(),
242+
setUser: jest.fn(),
238243
loading: false,
239244
user: {
240245
id: "1",
@@ -287,6 +292,7 @@ describe("Authenticated user", () => {
287292
login: jest.fn(),
288293
logout: jest.fn(),
289294
loading: false,
295+
setUser: jest.fn(),
290296
user: {
291297
id: "1",
292298
username,

frontend/src/components/Navbar/index.tsx

Lines changed: 63 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { useNavigate, useLocation } from "react-router-dom";
1818
import { useAuth } from "../../contexts/AuthContext";
1919
import { useState } from "react";
2020
import { USE_AUTH_ERROR_MESSAGE } from "../../utils/constants";
21+
import { isMatchingPage } from "../../utils/url";
2122

2223
type NavbarItem = { label: string; link: string; needsLogin: boolean };
2324

@@ -62,63 +63,76 @@ const Navbar: React.FC<NavbarProps> = (props) => {
6263
}}
6364
>
6465
<AppMargin>
65-
<Toolbar sx={{ padding: 0 }}>
66+
<Toolbar sx={{ padding: 0, justifyContent: "space-between" }}>
6667
<Typography
6768
component={Box}
6869
variant="h5"
69-
sx={[{ flexGrow: 1, "&:hover": { cursor: "pointer" } }]}
70+
sx={{ "&:hover": { cursor: "pointer" } }}
7071
onClick={() => navigate("/")}
7172
>
7273
PeerPrep
7374
</Typography>
74-
<Stack direction={"row"} alignItems={"center"} spacing={2}>
75-
{navbarItems
76-
.filter((item) => !item.needsLogin || (item.needsLogin && user))
77-
.map((item) => (
78-
<Link
79-
key={item.label}
80-
href={item.link}
81-
underline="none"
82-
sx={{ color: "common.black" }}
83-
>
84-
{path == item.link ? <b>{item.label}</b> : item.label}
85-
</Link>
86-
))}
87-
{user ? (
88-
<>
89-
<Tooltip title={"Account settings"}>
90-
<IconButton onClick={handleClick} data-testid="profile">
91-
<Avatar src={user.profilePictureUrl}/>
92-
</IconButton>
93-
</Tooltip>
94-
<Menu
95-
anchorEl={anchorEl}
96-
open={!!anchorEl}
97-
onClose={handleClose}
98-
onClick={handleClose}
99-
>
100-
<MenuItem
101-
onClick={() => {
102-
handleClose();
103-
navigate(`/profile/${user.id}`);
104-
}}
75+
{!isMatchingPage(path) ? (
76+
<Stack direction={"row"} alignItems={"center"} spacing={2}>
77+
{navbarItems
78+
.filter((item) => !item.needsLogin || (item.needsLogin && user))
79+
.map((item) => (
80+
<Link
81+
key={item.label}
82+
href={item.link}
83+
underline="none"
84+
sx={{ color: "common.black" }}
10585
>
106-
Profile
107-
</MenuItem>
108-
<MenuItem onClick={logout}>Logout</MenuItem>
109-
</Menu>
110-
</>
111-
) : (
112-
<>
113-
<Button variant="contained" onClick={() => navigate("/signup")}>
114-
Sign up
115-
</Button>
116-
<Button variant="outlined" onClick={() => navigate("/login")}>
117-
Log in
118-
</Button>
119-
</>
120-
)}
121-
</Stack>
86+
{path == item.link ? <b>{item.label}</b> : item.label}
87+
</Link>
88+
))}
89+
{user ? (
90+
<>
91+
<Tooltip title={"Account settings"}>
92+
<IconButton onClick={handleClick} data-testid="profile">
93+
<Avatar src={user.profilePictureUrl} />
94+
</IconButton>
95+
</Tooltip>
96+
<Menu
97+
anchorEl={anchorEl}
98+
open={!!anchorEl}
99+
onClose={handleClose}
100+
onClick={handleClose}
101+
>
102+
<MenuItem
103+
onClick={() => {
104+
handleClose();
105+
navigate(`/profile/${user.id}`);
106+
}}
107+
>
108+
Profile
109+
</MenuItem>
110+
<MenuItem onClick={logout}>Logout</MenuItem>
111+
</Menu>
112+
</>
113+
) : (
114+
<>
115+
<Button
116+
variant="contained"
117+
onClick={() => navigate("/signup")}
118+
>
119+
Sign up
120+
</Button>
121+
<Button variant="outlined" onClick={() => navigate("/login")}>
122+
Log in
123+
</Button>
124+
</>
125+
)}
126+
</Stack>
127+
) : (
128+
<Button
129+
variant="outlined"
130+
color="error"
131+
onClick={() => navigate("/home")}
132+
>
133+
Stop matching
134+
</Button>
135+
)}
122136
</Toolbar>
123137
</AppMargin>
124138
</AppBar>

frontend/src/components/ProfileDetails/ProfileDetailstest.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { render, screen } from "@testing-library/react";
2-
import "@testing-library/jest-dom";
32
import { faker } from "@faker-js/faker";
43

54
import ProfileDetails from ".";

0 commit comments

Comments
 (0)