From 2a7cf086277c33ae18b3c9432ada008220bb9399 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Sun, 16 Nov 2025 23:14:15 -0800 Subject: [PATCH 01/41] added a Nav link to /recommendationrequest/create (don't know if thats the actual url tho) --- frontend/src/main/components/Nav/AppNavbar.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 17824854..61f0c463 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -61,6 +61,15 @@ export default function AppNavbar({ )} + {currentUser && currentUser.loggedIn ? ( + <> + + Recommendation Request + + + ) : ( + <> + )} {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> @@ -97,3 +106,4 @@ export default function AppNavbar({ ); } + From d9e89b194522214afab845f9eb696e8edd6802da Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Sun, 16 Nov 2025 23:23:31 -0800 Subject: [PATCH 02/41] AppNavbar.jsx now links to proper url --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 61f0c463..741db9aa 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -63,7 +63,7 @@ export default function AppNavbar({ )} {currentUser && currentUser.loggedIn ? ( <> - + Recommendation Request From 32614f1424b05b1a30c5f44a374e3824ba2e00f9 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Sun, 16 Nov 2025 23:25:37 -0800 Subject: [PATCH 03/41] AppNavbar.jsx now links to proper url(added an s to the end of request/fixed typo) --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 741db9aa..416662fa 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -63,7 +63,7 @@ export default function AppNavbar({ )} {currentUser && currentUser.loggedIn ? ( <> - + Recommendation Request From ffdfc3bcc420fc3cfd7f622d473c39aea21092a7 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Mon, 17 Nov 2025 00:59:45 -0800 Subject: [PATCH 04/41] added test and swapped placement of the nav link, to the bottom section (where it already checks wether the current user is logged in) --- .../src/main/components/Nav/AppNavbar.jsx | 13 ++---- .../tests/components/Nav/AppNavbar.test.jsx | 43 +++++++++++++++++++ 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 416662fa..eb75871e 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -61,15 +61,6 @@ export default function AppNavbar({ )} - {currentUser && currentUser.loggedIn ? ( - <> - - Recommendation Request - - - ) : ( - <> - )} {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> @@ -95,6 +86,9 @@ export default function AppNavbar({ Welcome, {currentUser.root.user.email} + + Recommendation Request + ) : ( @@ -106,4 +100,3 @@ export default function AppNavbar({ ); } - diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 8b4efff0..3254a73e 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -42,6 +42,49 @@ describe("AppNavbar tests", () => { expect(adminMenu).toBeInTheDocument(); }); +test("renders the recommendation requests for logged in users", async () => { + const currentUser = currentUserFixtures.studentUser; + const systemInfo = systemInfoFixtures.showingBoth; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + await screen.findByText("Recommendation Request"); + const pendingLink = screen.getByText("Recommendation Request"); + expect(pendingLink).toBeInTheDocument(); + }); + + test("does not render the recommendation requests for unlogged users", async () => { + const currentUser = null; + const systemInfo = systemInfoFixtures.showingBoth; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + expect(screen.queryByText("Recommendation Request")).not.toBeInTheDocument(); + }); + + test("renders H2Console and Swagger links correctly", async () => { const currentUser = currentUserFixtures.adminUser; const systemInfo = systemInfoFixtures.showingBoth; From 8c21024e5cbf0828b5150775d0803b7d6149549d Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Mon, 17 Nov 2025 01:15:15 -0800 Subject: [PATCH 05/41] reverted placement of nav link and swapped currentUser form student to userOnly --- frontend/src/main/components/Nav/AppNavbar.jsx | 13 ++++++++++--- .../src/tests/components/Nav/AppNavbar.test.jsx | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index eb75871e..416662fa 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -61,6 +61,15 @@ export default function AppNavbar({ )} + {currentUser && currentUser.loggedIn ? ( + <> + + Recommendation Request + + + ) : ( + <> + )} {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> @@ -86,9 +95,6 @@ export default function AppNavbar({ Welcome, {currentUser.root.user.email} - - Recommendation Request - ) : ( @@ -100,3 +106,4 @@ export default function AppNavbar({ ); } + diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 3254a73e..fccca159 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -43,7 +43,7 @@ describe("AppNavbar tests", () => { }); test("renders the recommendation requests for logged in users", async () => { - const currentUser = currentUserFixtures.studentUser; + const currentUser = currentUserFixtures.userOnly; const systemInfo = systemInfoFixtures.showingBoth; const doLogin = vi.fn(); From d3e2b41eb3b1a29d4a319e731ae4cf2d58e505b8 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Mon, 17 Nov 2025 22:22:25 -0800 Subject: [PATCH 06/41] run npm format --- frontend/src/main/components/Nav/AppNavbar.jsx | 1 - frontend/src/tests/components/Nav/AppNavbar.test.jsx | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 416662fa..8f255543 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -106,4 +106,3 @@ export default function AppNavbar({ ); } - diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index fccca159..182d3f31 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -42,7 +42,7 @@ describe("AppNavbar tests", () => { expect(adminMenu).toBeInTheDocument(); }); -test("renders the recommendation requests for logged in users", async () => { + test("renders the recommendation requests for logged in users", async () => { const currentUser = currentUserFixtures.userOnly; const systemInfo = systemInfoFixtures.showingBoth; const doLogin = vi.fn(); @@ -81,10 +81,11 @@ test("renders the recommendation requests for logged in users", async () => { , ); - expect(screen.queryByText("Recommendation Request")).not.toBeInTheDocument(); + expect( + screen.queryByText("Recommendation Request"), + ).not.toBeInTheDocument(); }); - test("renders H2Console and Swagger links correctly", async () => { const currentUser = currentUserFixtures.adminUser; const systemInfo = systemInfoFixtures.showingBoth; From c18f38847fcf00d3f0c1506caedde1a3e16a7f50 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Tue, 18 Nov 2025 01:26:21 -0800 Subject: [PATCH 07/41] swapped the Navbar Example Brand with UCSB Rec and made it so the browser tap now says UCSB Rec --- frontend/index.html | 4 +-- .../src/main/components/Nav/AppNavbar.jsx | 2 +- .../tests/components/Nav/AppNavbar.test.jsx | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index d518aeec..a69db5dc 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,10 +4,10 @@ - Vite + React + UCSB Rec
- \ No newline at end of file + diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 8f255543..8b27c5e8 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -25,7 +25,7 @@ export default function AppNavbar({ > - Example + UCSB Rec diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 182d3f31..3954ffd0 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -42,6 +42,40 @@ describe("AppNavbar tests", () => { expect(adminMenu).toBeInTheDocument(); }); + test("UCSB Rec renders correctly for regular logged in user", async () => { + const currentUser = currentUserFixtures.userOnly; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + await screen.findByText("UCSB Rec"); + const pendingLink = screen.getByText("UCSB Rec"); + expect(pendingLink).toBeInTheDocument(); + }); + + test("UCSB Rec renders correctly for admin user", async () => { + const currentUser = currentUserFixtures.adminUser; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + await screen.findByText("UCSB Rec"); + const pendingLink = screen.getByText("UCSB Rec"); + expect(pendingLink).toBeInTheDocument(); + }); + test("renders the recommendation requests for logged in users", async () => { const currentUser = currentUserFixtures.userOnly; const systemInfo = systemInfoFixtures.showingBoth; From a88877a9dcbe3994a629acdfb6012ce82b2f1f3e Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Tue, 18 Nov 2025 02:34:32 -0800 Subject: [PATCH 08/41] enabled reques types on Nav for Admins --- .../src/main/components/Nav/AppNavbar.jsx | 8 ++++ .../tests/components/Nav/AppNavbar.test.jsx | 45 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 8b27c5e8..458e29dd 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -61,6 +61,14 @@ export default function AppNavbar({ )} + {hasRole(currentUser, "ROLE_ADMIN") && ( + <> + + Request Types + + + )} + {currentUser && currentUser.loggedIn ? ( <> diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 3954ffd0..70ced3e8 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -59,6 +59,51 @@ describe("AppNavbar tests", () => { expect(pendingLink).toBeInTheDocument(); }); + + + + test("request types renders correctly for admin user", async () => { + const currentUser = currentUserFixtures.adminUser; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + await screen.findByText("Request Types"); + const pendingLink = screen.getByText("Request Types"); + expect(pendingLink).toBeInTheDocument(); + }); + + test("request types does Not render for normal users", async () => { + const currentUser = currentUserFixtures.userOnly; + const systemInfo = systemInfoFixtures.showingBoth; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + expect( + screen.queryByText("Request Types"), + ).not.toBeInTheDocument(); + }); + + + + test("UCSB Rec renders correctly for admin user", async () => { const currentUser = currentUserFixtures.adminUser; const doLogin = vi.fn(); From 520c7af4f6e2ce8f24e5047e5846c996b185d866 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Tue, 18 Nov 2025 12:01:52 -0800 Subject: [PATCH 09/41] ran npm run format --- frontend/src/tests/components/Nav/AppNavbar.test.jsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 70ced3e8..b95dad9c 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -59,9 +59,6 @@ describe("AppNavbar tests", () => { expect(pendingLink).toBeInTheDocument(); }); - - - test("request types renders correctly for admin user", async () => { const currentUser = currentUserFixtures.adminUser; const doLogin = vi.fn(); @@ -96,14 +93,9 @@ describe("AppNavbar tests", () => { , ); - expect( - screen.queryByText("Request Types"), - ).not.toBeInTheDocument(); + expect(screen.queryByText("Request Types")).not.toBeInTheDocument(); }); - - - test("UCSB Rec renders correctly for admin user", async () => { const currentUser = currentUserFixtures.adminUser; const doLogin = vi.fn(); From b06c7c89cd7fbf2b3283066fd17d20f6f952b8eb Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Tue, 18 Nov 2025 17:17:23 -0800 Subject: [PATCH 10/41] Update AppNavbar.test.jsx literally did nothing to it From 2dee6ddab6a86da3ce986974eb03f61f692174b6 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Tue, 18 Nov 2025 17:34:01 -0800 Subject: [PATCH 11/41] allowing multiple h2 connections --- src/main/resources/application-development.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-development.properties b/src/main/resources/application-development.properties index 3e3da24c..43073a74 100644 --- a/src/main/resources/application-development.properties +++ b/src/main/resources/application-development.properties @@ -1,6 +1,6 @@ logging.level.sql=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE -spring.datasource.url=jdbc:h2:file:./target/db-development +spring.datasource.url=jdbc:h2:file:./target/db-development;AUTO_SERVER=TRUE spring.datasource.username=sa spring.datasource.password=password spring.h2.console.settings.web-allow-others=true @@ -8,4 +8,4 @@ spring.h2.console.enabled=true app.showSwaggerUILink=true spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.datasource.initialization-mode=always \ No newline at end of file +spring.datasource.initialization-mode=always From 765896ceddd70cbd458dde2ee81365d189784a8a Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Tue, 18 Nov 2025 17:40:20 -0800 Subject: [PATCH 12/41] Updated AppNavbar.jsx made the file go back to its original state (for better pull request code analysis) --- frontend/src/main/components/Nav/AppNavbar.jsx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 61f0c463..17824854 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -61,15 +61,6 @@ export default function AppNavbar({ )} - {currentUser && currentUser.loggedIn ? ( - <> - - Recommendation Request - - - ) : ( - <> - )} {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> @@ -106,4 +97,3 @@ export default function AppNavbar({ ); } - From 61d41b77ea179a21bba219e5176b5c99d08bab37 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Wed, 19 Nov 2025 23:56:06 -0800 Subject: [PATCH 13/41] Update index.html --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index a69db5dc..1a9caf18 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - UCSB Rec + Vite + React
From 357dd4df4172e2d66482ea932ba6188ec63d38b6 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Wed, 19 Nov 2025 23:56:42 -0800 Subject: [PATCH 14/41] Update index.html From 16ec623598de2fe2204efc9323f038276346909d Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Wed, 19 Nov 2025 23:57:49 -0800 Subject: [PATCH 15/41] Update index.html From b678a40ee76421400f3254561c5dd3301777e625 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Wed, 19 Nov 2025 23:58:58 -0800 Subject: [PATCH 16/41] Update index.html From 39823e29e8ba23ee1a42d87f73a7ee55ed5a8aef Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 20 Nov 2025 00:00:49 -0800 Subject: [PATCH 17/41] Update AppNavbar.jsx --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 458e29dd..e74ba524 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -25,7 +25,7 @@ export default function AppNavbar({ > - UCSB Rec + Vite + React From 455eb13073d82523b2885b539780c3a8aa4896a8 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 20 Nov 2025 00:01:10 -0800 Subject: [PATCH 18/41] Update AppNavbar.jsx --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index e74ba524..3c2716dc 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -25,7 +25,7 @@ export default function AppNavbar({ > - Vite + React + Example From 6822b48ac1e73002cd7314ccadd8bbc3f8b8e34a Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 20 Nov 2025 00:01:30 -0800 Subject: [PATCH 19/41] Update AppNavbar.jsx --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 3c2716dc..2dd85bb5 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -25,7 +25,7 @@ export default function AppNavbar({ > - Example + Example From 396c75082e97cee56d616b9f0913a381af50e668 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 20 Nov 2025 00:03:51 -0800 Subject: [PATCH 20/41] Update AppNavbar.test.jsx --- .../tests/components/Nav/AppNavbar.test.jsx | 78 ------------------- 1 file changed, 78 deletions(-) diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index b95dad9c..454521fa 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -42,23 +42,6 @@ describe("AppNavbar tests", () => { expect(adminMenu).toBeInTheDocument(); }); - test("UCSB Rec renders correctly for regular logged in user", async () => { - const currentUser = currentUserFixtures.userOnly; - const doLogin = vi.fn(); - - render( - - - - - , - ); - - await screen.findByText("UCSB Rec"); - const pendingLink = screen.getByText("UCSB Rec"); - expect(pendingLink).toBeInTheDocument(); - }); - test("request types renders correctly for admin user", async () => { const currentUser = currentUserFixtures.adminUser; const doLogin = vi.fn(); @@ -96,67 +79,6 @@ describe("AppNavbar tests", () => { expect(screen.queryByText("Request Types")).not.toBeInTheDocument(); }); - test("UCSB Rec renders correctly for admin user", async () => { - const currentUser = currentUserFixtures.adminUser; - const doLogin = vi.fn(); - - render( - - - - - , - ); - - await screen.findByText("UCSB Rec"); - const pendingLink = screen.getByText("UCSB Rec"); - expect(pendingLink).toBeInTheDocument(); - }); - - test("renders the recommendation requests for logged in users", async () => { - const currentUser = currentUserFixtures.userOnly; - const systemInfo = systemInfoFixtures.showingBoth; - const doLogin = vi.fn(); - - render( - - - - - , - ); - - await screen.findByText("Recommendation Request"); - const pendingLink = screen.getByText("Recommendation Request"); - expect(pendingLink).toBeInTheDocument(); - }); - - test("does not render the recommendation requests for unlogged users", async () => { - const currentUser = null; - const systemInfo = systemInfoFixtures.showingBoth; - const doLogin = vi.fn(); - - render( - - - - - , - ); - - expect( - screen.queryByText("Recommendation Request"), - ).not.toBeInTheDocument(); - }); - test("renders H2Console and Swagger links correctly", async () => { const currentUser = currentUserFixtures.adminUser; const systemInfo = systemInfoFixtures.showingBoth; From c3a9defca4f5ee50e4150a23a67f91ea52609eda Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 20 Nov 2025 00:08:36 -0800 Subject: [PATCH 21/41] Update AppNavbar.jsx --- frontend/src/main/components/Nav/AppNavbar.jsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 2dd85bb5..44619290 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -69,15 +69,6 @@ export default function AppNavbar({ )} - {currentUser && currentUser.loggedIn ? ( - <> - - Recommendation Request - - - ) : ( - <> - )} {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> From 0c1ff3876d121c6aded68aa7fe710e259136a90e Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 20 Nov 2025 00:15:27 -0800 Subject: [PATCH 22/41] Update AppNavbar.test.jsx --- .../tests/components/Nav/AppNavbar.test.jsx | 44 ------------------- 1 file changed, 44 deletions(-) diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 3954ffd0..fd3f3cd7 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -76,50 +76,6 @@ describe("AppNavbar tests", () => { expect(pendingLink).toBeInTheDocument(); }); - test("renders the recommendation requests for logged in users", async () => { - const currentUser = currentUserFixtures.userOnly; - const systemInfo = systemInfoFixtures.showingBoth; - const doLogin = vi.fn(); - - render( - - - - - , - ); - - await screen.findByText("Recommendation Request"); - const pendingLink = screen.getByText("Recommendation Request"); - expect(pendingLink).toBeInTheDocument(); - }); - - test("does not render the recommendation requests for unlogged users", async () => { - const currentUser = null; - const systemInfo = systemInfoFixtures.showingBoth; - const doLogin = vi.fn(); - - render( - - - - - , - ); - - expect( - screen.queryByText("Recommendation Request"), - ).not.toBeInTheDocument(); - }); - test("renders H2Console and Swagger links correctly", async () => { const currentUser = currentUserFixtures.adminUser; const systemInfo = systemInfoFixtures.showingBoth; From b8cc4ceacd918c0be2612025a285b19e2f020103 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 20 Nov 2025 00:19:18 -0800 Subject: [PATCH 23/41] Update AppNavbar.jsx --- frontend/src/main/components/Nav/AppNavbar.jsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 8b27c5e8..3e078474 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -61,15 +61,7 @@ export default function AppNavbar({ )} - {currentUser && currentUser.loggedIn ? ( - <> - - Recommendation Request - - - ) : ( - <> - )} + {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> From 2c5c46dd3a88410ba4c63ed0dfc706ba67f48add Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Thu, 20 Nov 2025 00:26:35 -0800 Subject: [PATCH 24/41] ran npm run format --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 3e078474..72de9f35 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -61,7 +61,7 @@ export default function AppNavbar({ )} - + {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> From 9075cfba0f5539a0788ed86075772818b83d4a79 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Fri, 21 Nov 2025 19:42:32 -0800 Subject: [PATCH 25/41] added the hardcoded request types via a seeder file --- .../cs156/rec/seeders/RequestTypeSeeder.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java diff --git a/src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java b/src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java new file mode 100644 index 00000000..2613b400 --- /dev/null +++ b/src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java @@ -0,0 +1,43 @@ +package edu.ucsb.cs156.rec.seed; + +import edu.ucsb.cs156.rec.entities.RequestType; +import edu.ucsb.cs156.rec.repositories.RequestTypeRepository; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +@Component +public class RequestTypeSeeder implements CommandLineRunner { + + private final RequestTypeRepository repo; + + public RequestTypeSeeder(RequestTypeRepository repo) { + this.repo = repo; + } + + @Override + public void run(String... args) { + if (repo.findByRequestType("CS Department BS/MS program").isEmpty()) { + RequestType rt = new RequestType(); + rt.setRequestType("CS Department BS/MS program"); + repo.save(rt); + } + + if (repo.findByRequestType("Scholarship or Fellowship").isEmpty()) { + RequestType rt = new RequestType(); + rt.setRequestType("Scholarship or Fellowship"); + repo.save(rt); + } + + if (repo.findByRequestType("MS program (other than CS Dept BS/MS)").isEmpty()) { + RequestType rt = new RequestType(); + rt.setRequestType("MS program (other than CS Dept BS/MS)"); + repo.save(rt); + } + + if (repo.findByRequestType("PhD program").isEmpty()) { + RequestType rt = new RequestType(); + rt.setRequestType("PhD program"); + repo.save(rt); + } + } +} From e1f9590100d170dda5a11e60d5e41af89f4a1009 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Fri, 21 Nov 2025 20:52:18 -0800 Subject: [PATCH 26/41] made integration test to pass converage --- .../cs156/rec/integration/RequestTypeIT.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeIT.java diff --git a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeIT.java b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeIT.java new file mode 100644 index 00000000..b20db2c9 --- /dev/null +++ b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeIT.java @@ -0,0 +1,56 @@ +package edu.ucsb.cs156.rec.seed; + +import static org.junit.jupiter.api.Assertions.*; + +import edu.ucsb.cs156.rec.repositories.RequestTypeRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +public class RequestTypeSeederTests { + + @Autowired private RequestTypeRepository requestTypeRepository; + + @Autowired private RequestTypeSeeder requestTypeSeeder; + + @Test + public void testSeederInsertsTypeOneRequestType() { + var result = requestTypeRepository.findByRequestType("CS Department BS/MS program"); + assertTrue(result.isPresent(), "CS Department BS/MS program RequestType should be seeded"); + } + + @Test + public void testSeederInsertsTypeTwoRequestType() { + var result = requestTypeRepository.findByRequestType("Scholarship or Fellowship"); + assertTrue(result.isPresent(), "Scholarship or Fellowship RequestType should be seeded"); + } + + @Test + public void testSeederInsertsTypeThreeRequestType() { + var result = requestTypeRepository.findByRequestType("MS program (other than CS Dept BS/MS)"); + assertTrue( + result.isPresent(), "MS program (other than CS Dept BS/MS) RequestType should be seeded"); + } + + @Test + public void testSeederInsertsTypeFourRequestType() { + var result = requestTypeRepository.findByRequestType("PhD program"); + assertTrue(result.isPresent(), "PhD program"); + } + + @Test + public void testSeederDoesNotInsertDuplicates() { + + long initialCount = requestTypeRepository.count(); + + requestTypeSeeder.run(); + + long afterSecondRun = requestTypeRepository.count(); + + assertEquals( + initialCount, + afterSecondRun, + "Seeder should not insert duplicates when run multiple times"); + } +} From e5a3f5fe37e7c4c485872259c42c63b22246fa3b Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Fri, 21 Nov 2025 20:58:25 -0800 Subject: [PATCH 27/41] renamed RequestTypeIT.java to RequestTypeSeederIT.java renamed RequestTypeIT.java to RequestTypeSeederIT.java, so to make file's name match with public function. --- .../{RequestTypeIT.java => RequestTypeSeederIT.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/java/edu/ucsb/cs156/rec/integration/{RequestTypeIT.java => RequestTypeSeederIT.java} (97%) diff --git a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeIT.java b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java similarity index 97% rename from src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeIT.java rename to src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java index b20db2c9..bd5178b1 100644 --- a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeIT.java +++ b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java @@ -8,7 +8,7 @@ import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -public class RequestTypeSeederTests { +public class RequestTypeSeederIT { @Autowired private RequestTypeRepository requestTypeRepository; From bcf8aba6f599aec9ff4234ceed522d2e08e3561e Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Fri, 21 Nov 2025 21:33:00 -0800 Subject: [PATCH 28/41] Update RequestTypeSeederIT.java cleaned repo before each test to ensure test work as intended --- .../rec/integration/RequestTypeSeederIT.java | 74 +++++++++++-------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java index bd5178b1..aa132c1f 100644 --- a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java +++ b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java @@ -9,48 +9,58 @@ @SpringBootTest public class RequestTypeSeederIT { + + @Autowired + private RequestTypeRepository requestTypeRepository; - @Autowired private RequestTypeRepository requestTypeRepository; + @Autowired + private RequestTypeSeeder requestTypeSeeder; - @Autowired private RequestTypeSeeder requestTypeSeeder; + @Test + public void testSeederInsertsTypeOneRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); - @Test - public void testSeederInsertsTypeOneRequestType() { - var result = requestTypeRepository.findByRequestType("CS Department BS/MS program"); - assertTrue(result.isPresent(), "CS Department BS/MS program RequestType should be seeded"); - } + var result = requestTypeRepository.findByRequestType("CS Department BS/MS program"); + assertTrue(result.isPresent(), "CS Department BS/MS program RequestType should be seeded"); + } - @Test - public void testSeederInsertsTypeTwoRequestType() { - var result = requestTypeRepository.findByRequestType("Scholarship or Fellowship"); - assertTrue(result.isPresent(), "Scholarship or Fellowship RequestType should be seeded"); - } + @Test + public void testSeederInsertsTypeTwoRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); - @Test - public void testSeederInsertsTypeThreeRequestType() { - var result = requestTypeRepository.findByRequestType("MS program (other than CS Dept BS/MS)"); - assertTrue( - result.isPresent(), "MS program (other than CS Dept BS/MS) RequestType should be seeded"); - } + var result = requestTypeRepository.findByRequestType("Scholarship or Fellowship"); + assertTrue(result.isPresent(), "Scholarship or Fellowship RequestType should be seeded"); + } - @Test - public void testSeederInsertsTypeFourRequestType() { - var result = requestTypeRepository.findByRequestType("PhD program"); - assertTrue(result.isPresent(), "PhD program"); - } + @Test + public void testSeederInsertsTypeThreeRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); - @Test - public void testSeederDoesNotInsertDuplicates() { + var result = requestTypeRepository.findByRequestType("MS program (other than CS Dept BS/MS)"); + assertTrue(result.isPresent(), "MS program (other than CS Dept BS/MS) RequestType should be seeded"); + } + @Test + public void testSeederInsertsTypeFourRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); - long initialCount = requestTypeRepository.count(); + var result = requestTypeRepository.findByRequestType("PhD program"); + assertTrue(result.isPresent(), "PhD program"); + } + + @Test + public void testSeederDoesNotInsertDuplicates(){ - requestTypeSeeder.run(); + long initialCount = requestTypeRepository.count(); - long afterSecondRun = requestTypeRepository.count(); + requestTypeSeeder.run(); - assertEquals( - initialCount, - afterSecondRun, + long afterSecondRun = requestTypeRepository.count(); + + assertEquals(initialCount, afterSecondRun, "Seeder should not insert duplicates when run multiple times"); - } + } } From 13305f004f0ca3c17ba5c826f965230e01bfec0f Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Sun, 23 Nov 2025 13:36:35 -0800 Subject: [PATCH 29/41] ran mvn git-code-format:format-code --- .../rec/integration/RequestTypeSeederIT.java | 108 +++++++++--------- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java index aa132c1f..c858defc 100644 --- a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java +++ b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java @@ -9,58 +9,60 @@ @SpringBootTest public class RequestTypeSeederIT { - - @Autowired - private RequestTypeRepository requestTypeRepository; - - @Autowired - private RequestTypeSeeder requestTypeSeeder; - - @Test - public void testSeederInsertsTypeOneRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("CS Department BS/MS program"); - assertTrue(result.isPresent(), "CS Department BS/MS program RequestType should be seeded"); - } - - @Test - public void testSeederInsertsTypeTwoRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("Scholarship or Fellowship"); - assertTrue(result.isPresent(), "Scholarship or Fellowship RequestType should be seeded"); - } - - @Test - public void testSeederInsertsTypeThreeRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("MS program (other than CS Dept BS/MS)"); - assertTrue(result.isPresent(), "MS program (other than CS Dept BS/MS) RequestType should be seeded"); - } - @Test - public void testSeederInsertsTypeFourRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("PhD program"); - assertTrue(result.isPresent(), "PhD program"); - } - - @Test - public void testSeederDoesNotInsertDuplicates(){ - - long initialCount = requestTypeRepository.count(); - - requestTypeSeeder.run(); - - long afterSecondRun = requestTypeRepository.count(); - - assertEquals(initialCount, afterSecondRun, + + @Autowired private RequestTypeRepository requestTypeRepository; + + @Autowired private RequestTypeSeeder requestTypeSeeder; + + @Test + public void testSeederInsertsTypeOneRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); + + var result = requestTypeRepository.findByRequestType("CS Department BS/MS program"); + assertTrue(result.isPresent(), "CS Department BS/MS program RequestType should be seeded"); + } + + @Test + public void testSeederInsertsTypeTwoRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); + + var result = requestTypeRepository.findByRequestType("Scholarship or Fellowship"); + assertTrue(result.isPresent(), "Scholarship or Fellowship RequestType should be seeded"); + } + + @Test + public void testSeederInsertsTypeThreeRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); + + var result = requestTypeRepository.findByRequestType("MS program (other than CS Dept BS/MS)"); + assertTrue( + result.isPresent(), "MS program (other than CS Dept BS/MS) RequestType should be seeded"); + } + + @Test + public void testSeederInsertsTypeFourRequestType() { + requestTypeRepository.deleteAll(); + requestTypeSeeder.run(); + + var result = requestTypeRepository.findByRequestType("PhD program"); + assertTrue(result.isPresent(), "PhD program"); + } + + @Test + public void testSeederDoesNotInsertDuplicates() { + + long initialCount = requestTypeRepository.count(); + + requestTypeSeeder.run(); + + long afterSecondRun = requestTypeRepository.count(); + + assertEquals( + initialCount, + afterSecondRun, "Seeder should not insert duplicates when run multiple times"); - } + } } From c44122f4c2512bf4d69a79796f936e8b996c7739 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Sun, 23 Nov 2025 14:08:37 -0800 Subject: [PATCH 30/41] trying to fix the locked file issue --- .../edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java index c858defc..cf4d854e 100644 --- a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java +++ b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java @@ -5,9 +5,10 @@ import edu.ucsb.cs156.rec.repositories.RequestTypeRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -@SpringBootTest +@DataJpaTest +@Import(RequestTypeSeeder.class) +@TestPropertySource(properties = "spring.liquibase.enabled=false") public class RequestTypeSeederIT { @Autowired private RequestTypeRepository requestTypeRepository; From 9c41f75f2a831bd4b72fe9455ec726b3741928f4 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Sun, 23 Nov 2025 14:13:00 -0800 Subject: [PATCH 31/41] added the needed imports --- .../edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java index cf4d854e..a3a5e731 100644 --- a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java +++ b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java @@ -5,6 +5,9 @@ import edu.ucsb.cs156.rec.repositories.RequestTypeRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.TestPropertySource; @DataJpaTest @Import(RequestTypeSeeder.class) From 93f536a2245f8c1dea12549f8236709b69493b1d Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Thu, 4 Dec 2025 03:16:06 -0800 Subject: [PATCH 32/41] added back test for Recommendation Request --- .../tests/components/Nav/AppNavbar.test.jsx | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 454521fa..bca4d09f 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -42,6 +42,50 @@ describe("AppNavbar tests", () => { expect(adminMenu).toBeInTheDocument(); }); + test("renders the recommendation requests for logged in users", async () => { + const currentUser = currentUserFixtures.userOnly; + const systemInfo = systemInfoFixtures.showingBoth; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + await screen.findByText("Recommendation Request"); + const pendingLink = screen.getByText("Recommendation Request"); + expect(pendingLink).toBeInTheDocument(); + }); + + test("does not render the recommendation requests for unlogged users", async () => { + const currentUser = null; + const systemInfo = systemInfoFixtures.showingBoth; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + expect( + screen.queryByText("Recommendation Request"), + ).not.toBeInTheDocument(); + }); + test("request types renders correctly for admin user", async () => { const currentUser = currentUserFixtures.adminUser; const doLogin = vi.fn(); From 398601a01c2559c8913701b863a429148be6ef01 Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Thu, 4 Dec 2025 03:20:35 -0800 Subject: [PATCH 33/41] added back Nav bar link to /requests/create for logged in users --- frontend/src/main/components/Nav/AppNavbar.jsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 44619290..87a93448 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -68,7 +68,15 @@ export default function AppNavbar({ )} - + {currentUser && currentUser.loggedIn ? ( + <> + + Recommendation Request + + + ) : ( + <> + )} {hasRole(currentUser, "ROLE_PROFESSOR") && ( <> From 703d09ec7ee1c2b2d279b04b75d0964789d3e6fb Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Thu, 4 Dec 2025 03:35:42 -0800 Subject: [PATCH 34/41] deleted unfished seeder and its test files --- .../cs156/rec/seeders/RequestTypeSeeder.java | 43 ----------- .../rec/integration/RequestTypeSeederIT.java | 72 ------------------- 2 files changed, 115 deletions(-) delete mode 100644 src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java delete mode 100644 src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java diff --git a/src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java b/src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java deleted file mode 100644 index 2613b400..00000000 --- a/src/main/java/edu/ucsb/cs156/rec/seeders/RequestTypeSeeder.java +++ /dev/null @@ -1,43 +0,0 @@ -package edu.ucsb.cs156.rec.seed; - -import edu.ucsb.cs156.rec.entities.RequestType; -import edu.ucsb.cs156.rec.repositories.RequestTypeRepository; -import org.springframework.boot.CommandLineRunner; -import org.springframework.stereotype.Component; - -@Component -public class RequestTypeSeeder implements CommandLineRunner { - - private final RequestTypeRepository repo; - - public RequestTypeSeeder(RequestTypeRepository repo) { - this.repo = repo; - } - - @Override - public void run(String... args) { - if (repo.findByRequestType("CS Department BS/MS program").isEmpty()) { - RequestType rt = new RequestType(); - rt.setRequestType("CS Department BS/MS program"); - repo.save(rt); - } - - if (repo.findByRequestType("Scholarship or Fellowship").isEmpty()) { - RequestType rt = new RequestType(); - rt.setRequestType("Scholarship or Fellowship"); - repo.save(rt); - } - - if (repo.findByRequestType("MS program (other than CS Dept BS/MS)").isEmpty()) { - RequestType rt = new RequestType(); - rt.setRequestType("MS program (other than CS Dept BS/MS)"); - repo.save(rt); - } - - if (repo.findByRequestType("PhD program").isEmpty()) { - RequestType rt = new RequestType(); - rt.setRequestType("PhD program"); - repo.save(rt); - } - } -} diff --git a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java b/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java deleted file mode 100644 index a3a5e731..00000000 --- a/src/test/java/edu/ucsb/cs156/rec/integration/RequestTypeSeederIT.java +++ /dev/null @@ -1,72 +0,0 @@ -package edu.ucsb.cs156.rec.seed; - -import static org.junit.jupiter.api.Assertions.*; - -import edu.ucsb.cs156.rec.repositories.RequestTypeRepository; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.TestPropertySource; - -@DataJpaTest -@Import(RequestTypeSeeder.class) -@TestPropertySource(properties = "spring.liquibase.enabled=false") -public class RequestTypeSeederIT { - - @Autowired private RequestTypeRepository requestTypeRepository; - - @Autowired private RequestTypeSeeder requestTypeSeeder; - - @Test - public void testSeederInsertsTypeOneRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("CS Department BS/MS program"); - assertTrue(result.isPresent(), "CS Department BS/MS program RequestType should be seeded"); - } - - @Test - public void testSeederInsertsTypeTwoRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("Scholarship or Fellowship"); - assertTrue(result.isPresent(), "Scholarship or Fellowship RequestType should be seeded"); - } - - @Test - public void testSeederInsertsTypeThreeRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("MS program (other than CS Dept BS/MS)"); - assertTrue( - result.isPresent(), "MS program (other than CS Dept BS/MS) RequestType should be seeded"); - } - - @Test - public void testSeederInsertsTypeFourRequestType() { - requestTypeRepository.deleteAll(); - requestTypeSeeder.run(); - - var result = requestTypeRepository.findByRequestType("PhD program"); - assertTrue(result.isPresent(), "PhD program"); - } - - @Test - public void testSeederDoesNotInsertDuplicates() { - - long initialCount = requestTypeRepository.count(); - - requestTypeSeeder.run(); - - long afterSecondRun = requestTypeRepository.count(); - - assertEquals( - initialCount, - afterSecondRun, - "Seeder should not insert duplicates when run multiple times"); - } -} From 4566b0705b084165e2c4d5712bd65552e705516e Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Thu, 4 Dec 2025 03:43:28 -0800 Subject: [PATCH 35/41] ran run format --- frontend/src/tests/components/Nav/AppNavbar.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index bca4d09f..597723eb 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -42,7 +42,7 @@ describe("AppNavbar tests", () => { expect(adminMenu).toBeInTheDocument(); }); - test("renders the recommendation requests for logged in users", async () => { + test("renders the recommendation requests for logged in users", async () => { const currentUser = currentUserFixtures.userOnly; const systemInfo = systemInfoFixtures.showingBoth; const doLogin = vi.fn(); From 90478656a11f7113de334b109e8e0ef81dff537f Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Thu, 4 Dec 2025 04:15:53 -0800 Subject: [PATCH 36/41] added back the changed to the NAV bar to say UCSB instead of Example and made the tab in the browser say UCSB Rec again, while also adding back the test needed for coverage --- frontend/index.html | 2 +- .../src/main/components/Nav/AppNavbar.jsx | 2 +- .../tests/components/Nav/AppNavbar.test.jsx | 33 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index 1a9caf18..a69db5dc 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - Vite + React + UCSB Rec
diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 87a93448..9ca3e785 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -25,7 +25,7 @@ export default function AppNavbar({ > - Example + UCSB Rec diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index 597723eb..bce5460d 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -122,6 +122,39 @@ describe("AppNavbar tests", () => { expect(screen.queryByText("Request Types")).not.toBeInTheDocument(); }); + test("UCSB Rec renders correctly for regular logged in user", async () => { + const currentUser = currentUserFixtures.userOnly; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + await screen.findByText("UCSB Rec"); + const pendingLink = screen.getByText("UCSB Rec"); + expect(pendingLink).toBeInTheDocument(); + }); + + test("UCSB Rec renders correctly for admin user", async () => { + const currentUser = currentUserFixtures.adminUser; + const doLogin = vi.fn(); + + render( + + + + + , + ); + + await screen.findByText("UCSB Rec"); + const pendingLink = screen.getByText("UCSB Rec"); + expect(pendingLink).toBeInTheDocument(); + }); test("renders H2Console and Swagger links correctly", async () => { const currentUser = currentUserFixtures.adminUser; From 63ba3ad073f5fbd51bcaee59a20ae4b96e1cb82c Mon Sep 17 00:00:00 2001 From: Charlie Nava Date: Thu, 4 Dec 2025 04:24:20 -0800 Subject: [PATCH 37/41] ran run format --- frontend/src/tests/components/Nav/AppNavbar.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/tests/components/Nav/AppNavbar.test.jsx b/frontend/src/tests/components/Nav/AppNavbar.test.jsx index bce5460d..b642b050 100644 --- a/frontend/src/tests/components/Nav/AppNavbar.test.jsx +++ b/frontend/src/tests/components/Nav/AppNavbar.test.jsx @@ -122,7 +122,7 @@ describe("AppNavbar tests", () => { expect(screen.queryByText("Request Types")).not.toBeInTheDocument(); }); - test("UCSB Rec renders correctly for regular logged in user", async () => { + test("UCSB Rec renders correctly for regular logged in user", async () => { const currentUser = currentUserFixtures.userOnly; const doLogin = vi.fn(); From b93863166504439c92979aeb0c94be0bdd6499dd Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 4 Dec 2025 04:35:10 -0800 Subject: [PATCH 38/41] Update index.html --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index a69db5dc..2e5631b4 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - UCSB Rec + UCSB
From fd69e71aee17ca0bcdd7ae40c2f67b8485bc3e6d Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 4 Dec 2025 04:35:33 -0800 Subject: [PATCH 39/41] Update index.html --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index 2e5631b4..a69db5dc 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - UCSB + UCSB Rec
From 5b96d7b9503e6dde3b46b2a1c79a9b942f5a3f03 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 4 Dec 2025 04:35:51 -0800 Subject: [PATCH 40/41] Update AppNavbar.jsx --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index 9ca3e785..eef92cc9 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -25,7 +25,7 @@ export default function AppNavbar({ > - UCSB Rec + UCSB From a5e4e1224f2899d23797ae257ed42b1a054e8864 Mon Sep 17 00:00:00 2001 From: Gupperfisher Date: Thu, 4 Dec 2025 04:40:13 -0800 Subject: [PATCH 41/41] Update AppNavbar.jsx --- frontend/src/main/components/Nav/AppNavbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/main/components/Nav/AppNavbar.jsx b/frontend/src/main/components/Nav/AppNavbar.jsx index eef92cc9..9ca3e785 100644 --- a/frontend/src/main/components/Nav/AppNavbar.jsx +++ b/frontend/src/main/components/Nav/AppNavbar.jsx @@ -25,7 +25,7 @@ export default function AppNavbar({ > - UCSB + UCSB Rec