From f447661e38cdc336c543b7e248732fd6ae1bfa20 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 14 Apr 2026 17:21:41 +0200 Subject: [PATCH] Fix: CharitySelect settings user stuff --- .../team6/database/Readers/CharitySelect.java | 18 ++-- .../database/Readers/CharitySelectTest.java | 85 ++++++++++++++----- 2 files changed, 74 insertions(+), 29 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java index 395e828..a3b5d32 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java @@ -9,6 +9,8 @@ import ntnu.systemutvikling.team6.models.Charity; import ntnu.systemutvikling.team6.models.Feedback; import ntnu.systemutvikling.team6.models.registry.CharityRegistry; +import ntnu.systemutvikling.team6.models.user.Language; +import ntnu.systemutvikling.team6.models.user.Settings; import ntnu.systemutvikling.team6.models.user.User; /** @@ -58,12 +60,12 @@ public CharityRegistry getCharitiesFromDB() { c.UUID_charities, c.org_number, c.pre_approved, c.status, f.UUID_feedback, f.feedback_comment, f.feedback_date, f.isAnonymous, f.charity_id, f.user_id, cv.charity_name, cv.charity_link, cv.description, cv.logoURL, cv.key_values, cv.logoBLOB, - u.UUID_user, u.user_name, u.user_email, u.user_password, u.role + u.UUID_user, u.user_name, u.user_email, u.user_password, u.role, cat.category FROM Charities c LEFT JOIN Feedback f ON f.charity_id = c.UUID_charities LEFT JOIN User u ON f.user_id = u.UUID_user - LEFT JOIN Charity_Categories cc ON cc.Charities_UUID_charities = c.UUID.charities + LEFT JOIN Charity_Categories cc ON cc.Charities_UUID_charities = c.UUID_charities LEFT JOIN Cateegories cat ON cat.category_id = cc.Categories_category_id INNER JOIN CharityVanity cv ON cv.UUID_charity = c.UUID_charities; """; @@ -90,7 +92,7 @@ public CharityRegistry getCharitiesFromDB() { rs.getBoolean("pre_approved"), rs.getString("description"), rs.getString("logoURL"), - rs.getString("keyValues"), + rs.getString("key_values"), rs.getBytes("logoBLOB")); registry.addCharity(currentCharity); lastCharity = currentId; @@ -105,18 +107,19 @@ public CharityRegistry getCharitiesFromDB() { String feedbackId = rs.getString("UUID_feedback"); if (feedbackId != null && !seenFeedbackIds.contains(feedbackId)) { seenFeedbackIds.add(feedbackId); - User userWithNoSettingsAndInbox = + User userWithMinimalSettingsAndInbox = new User( rs.getString("UUID_User"), rs.getString("user_name"), rs.getString("user_email"), rs.getString("user_password"), rs.getString("role")); + userWithMinimalSettingsAndInbox.setSettings(new Settings(false, Language.ENGLISH, false)); Feedback feedback = new Feedback( rs.getString("UUID_feedback"), - userWithNoSettingsAndInbox, + userWithMinimalSettingsAndInbox, rs.getString("feedback_comment"), LocalDate.parse(rs.getString("feedback_date"))); @@ -165,17 +168,18 @@ public ArrayList getFeedbackforCharityUUID(String charity_uuid) { ResultSet rs = stmt.executeQuery(); while (rs.next()) { - User userWithNoSettingsAndInbox = + User userWithSettingsAndNoInbox = new User( rs.getString("UUID_User"), rs.getString("user_name"), rs.getString("user_email"), rs.getString("user_password"), rs.getString("role")); + userWithSettingsAndNoInbox.setSettings(new Settings(false, Language.NORWEGIAN, false)); Feedback feedback = new Feedback( rs.getString("UUID_feedback"), - userWithNoSettingsAndInbox, + userWithSettingsAndNoInbox, rs.getString("feedback_comment"), LocalDate.parse(rs.getString("feedback_date"))); Feedbacks.add(feedback); diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/Readers/CharitySelectTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/Readers/CharitySelectTest.java index ba071c3..426bf25 100644 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/Readers/CharitySelectTest.java +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/Readers/CharitySelectTest.java @@ -6,6 +6,8 @@ import java.sql.*; import java.util.ArrayList; +import java.util.UUID; + import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.models.Charity; import ntnu.systemutvikling.team6.models.Feedback; @@ -68,12 +70,19 @@ void getCharitiesFromDB_singleCharityNoFeedback_addedOnce() throws Exception { // One row, no feedback when(mockResultSet.next()).thenReturn(true, false); - when(mockResultSet.getString("UUID_charities")).thenReturn("charity-uuid-1"); + String charityId = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_charities")).thenReturn(charityId); when(mockResultSet.getString("org_number")).thenReturn("123456789"); when(mockResultSet.getString("charity_link")).thenReturn("https://example.org"); when(mockResultSet.getString("charity_name")).thenReturn("Test Charity"); when(mockResultSet.getBoolean("pre_approved")).thenReturn(true); when(mockResultSet.getString("status")).thenReturn("ACTIVE"); + when(mockResultSet.getString("description")).thenReturn("Some description"); + when(mockResultSet.getString("logoURL")).thenReturn("https://logo.png"); + when(mockResultSet.getString("key_values")).thenReturn("80:10:90"); + when(mockResultSet.getBytes("logoBLOB")).thenReturn(null); + when(mockResultSet.getString("category")).thenReturn(null); + when(mockResultSet.getString("UUID_feedback")).thenReturn(null); CharityRegistry registry = charitySelect.getCharitiesFromDB(); @@ -94,19 +103,27 @@ void getCharitiesFromDB_singleCharityWithFeedback_feedbackAdded() throws Excepti // One row with feedback when(mockResultSet.next()).thenReturn(true, false); - when(mockResultSet.getString("UUID_charities")).thenReturn("charity-uuid-1"); + String charityId = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_charities")).thenReturn(charityId); when(mockResultSet.getString("org_number")).thenReturn("123456789"); when(mockResultSet.getString("charity_link")).thenReturn("https://example.org"); when(mockResultSet.getString("charity_name")).thenReturn("Test Charity"); when(mockResultSet.getBoolean("pre_approved")).thenReturn(false); when(mockResultSet.getString("status")).thenReturn("PENDING"); - - when(mockResultSet.getString("UUID_feedback")).thenReturn("feedback-uuid-1"); - when(mockResultSet.getString("UUID_User")).thenReturn("user-uuid-1"); + when(mockResultSet.getString("description")).thenReturn("Some description"); + when(mockResultSet.getString("logoURL")).thenReturn("https://logo.png"); + when(mockResultSet.getString("key_values")).thenReturn("80:10:90"); + when(mockResultSet.getBytes("logoBLOB")).thenReturn(null); + when(mockResultSet.getString("category")).thenReturn(null); + + String feedback1Id = UUID.randomUUID().toString(); + String userId = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_feedback")).thenReturn(feedback1Id); + when(mockResultSet.getString("UUID_User")).thenReturn(userId); when(mockResultSet.getString("user_name")).thenReturn("Alice"); when(mockResultSet.getString("user_email")).thenReturn("alice@example.com"); when(mockResultSet.getString("user_password")).thenReturn("hashedpw"); - when(mockResultSet.getString("role")).thenReturn("USER"); + when(mockResultSet.getString("role")).thenReturn("NORMAL_USER"); when(mockResultSet.getString("feedback_comment")).thenReturn("Great work!"); when(mockResultSet.getString("feedback_date")).thenReturn("2024-03-15"); @@ -118,7 +135,7 @@ void getCharitiesFromDB_singleCharityWithFeedback_feedbackAdded() throws Excepti 1, charity.getFeedbacks().size(), "Charity should have exactly one feedback entry"); Feedback feedback = charity.getFeedbacks().get(0); - assertEquals("feedback-uuid-1", feedback.getFeedbackId()); + assertEquals(feedback1Id, feedback.getFeedbackId().toString()); assertEquals("Great work!", feedback.getComment()); } @@ -132,12 +149,21 @@ void getCharitiesFromDB_twoCharities_bothAdded() throws Exception { // First row: charity A, no feedback // Second row: charity B, no feedback when(mockResultSet.next()).thenReturn(true, true, false); - when(mockResultSet.getString("UUID_charities")).thenReturn("charity-uuid-A", "charity-uuid-B"); + String charityId = UUID.randomUUID().toString(); + String charityId2 = UUID.randomUUID().toString(); + + when(mockResultSet.getString("UUID_charities")).thenReturn(charityId, charityId2); when(mockResultSet.getString("org_number")).thenReturn("111111111", "222222222"); when(mockResultSet.getString("charity_link")).thenReturn("https://a.org", "https://b.org"); when(mockResultSet.getString("charity_name")).thenReturn("Charity A", "Charity B"); when(mockResultSet.getBoolean("pre_approved")).thenReturn(true, false); when(mockResultSet.getString("status")).thenReturn("ACTIVE", "INACTIVE"); + when(mockResultSet.getString("description")).thenReturn("Some description"); + when(mockResultSet.getString("logoURL")).thenReturn("https://logo.png"); + when(mockResultSet.getString("key_values")).thenReturn("80:10:90"); + when(mockResultSet.getBytes("logoBLOB")).thenReturn(null); + when(mockResultSet.getString("category")).thenReturn(null); + when(mockResultSet.getString("UUID_feedback")).thenReturn(null, null); CharityRegistry registry = charitySelect.getCharitiesFromDB(); @@ -155,19 +181,28 @@ void getCharitiesFromDB_sameCharityTwoRows_onlyOneCharityWithTwoFeedbacks() thro when(mockResultSet.next()).thenReturn(true, true, false); // Both rows share the same charity UUID - when(mockResultSet.getString("UUID_charities")).thenReturn("charity-uuid-1"); + String charityId = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_charities")).thenReturn(charityId); when(mockResultSet.getString("org_number")).thenReturn("123456789"); when(mockResultSet.getString("charity_link")).thenReturn("https://example.org"); when(mockResultSet.getString("charity_name")).thenReturn("Test Charity"); when(mockResultSet.getBoolean("pre_approved")).thenReturn(true); when(mockResultSet.getString("status")).thenReturn("ACTIVE"); - - when(mockResultSet.getString("UUID_feedback")).thenReturn("feedback-uuid-1", "feedback-uuid-2"); - when(mockResultSet.getString("UUID_User")).thenReturn("user-uuid-1"); + when(mockResultSet.getString("description")).thenReturn("Some description"); + when(mockResultSet.getString("logoURL")).thenReturn("https://logo.png"); + when(mockResultSet.getString("key_values")).thenReturn("80:10:90"); + when(mockResultSet.getBytes("logoBLOB")).thenReturn(null); + when(mockResultSet.getString("category")).thenReturn(null); + + String feedback1Id = UUID.randomUUID().toString(); + String feedback2Id = UUID.randomUUID().toString(); + String userId = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_feedback")).thenReturn(feedback1Id, feedback2Id); + when(mockResultSet.getString("UUID_User")).thenReturn(userId); when(mockResultSet.getString("user_name")).thenReturn("Alice"); when(mockResultSet.getString("user_email")).thenReturn("alice@example.com"); when(mockResultSet.getString("user_password")).thenReturn("hashedpw"); - when(mockResultSet.getString("role")).thenReturn("USER"); + when(mockResultSet.getString("role")).thenReturn("NORMAL_USER"); when(mockResultSet.getString("feedback_comment")).thenReturn("First comment", "Second comment"); when(mockResultSet.getString("feedback_date")).thenReturn("2024-03-15"); @@ -219,20 +254,22 @@ void getFeedbackforCharityUUID_oneRow_returnsSingleFeedback() throws Exception { when(mockPreparedStatement.executeQuery()).thenReturn(mockResultSet); when(mockResultSet.next()).thenReturn(true, false); - when(mockResultSet.getString("UUID_feedback")).thenReturn("feedback-uuid-1"); - when(mockResultSet.getString("UUID_User")).thenReturn("user-uuid-1"); + String feedback1Id = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_feedback")).thenReturn(feedback1Id); + String userId = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_User")).thenReturn(userId); when(mockResultSet.getString("user_name")).thenReturn("Bob"); when(mockResultSet.getString("user_email")).thenReturn("bob@example.com"); when(mockResultSet.getString("user_password")).thenReturn("secret"); - when(mockResultSet.getString("role")).thenReturn("ADMIN"); + when(mockResultSet.getString("role")).thenReturn("CHARITY_USER"); when(mockResultSet.getString("feedback_comment")).thenReturn("Very helpful!"); when(mockResultSet.getString("feedback_date")).thenReturn("2024-06-01"); - - ArrayList result = charitySelect.getFeedbackforCharityUUID("charity-uuid-1"); + String charityId = UUID.randomUUID().toString(); + ArrayList result = charitySelect.getFeedbackforCharityUUID(charityId); assertEquals(1, result.size()); Feedback feedback = result.get(0); - assertEquals("feedback-uuid-1", feedback.getFeedbackId()); + assertEquals(feedback1Id, feedback.getFeedbackId().toString()); assertEquals("Very helpful!", feedback.getComment()); assertEquals("Bob", feedback.getUser().getName()); } @@ -245,12 +282,16 @@ void getFeedbackforCharityUUID_twoRows_returnsTwoFeedbacks() throws Exception { when(mockPreparedStatement.executeQuery()).thenReturn(mockResultSet); when(mockResultSet.next()).thenReturn(true, true, false); - when(mockResultSet.getString("UUID_feedback")).thenReturn("fb-uuid-1", "fb-uuid-2"); - when(mockResultSet.getString("UUID_User")).thenReturn("user-uuid-1"); + String feedback1Id = UUID.randomUUID().toString(); + String feedback2Id = UUID.randomUUID().toString(); + when(mockResultSet.getString("UUID_feedback")).thenReturn(feedback1Id, feedback2Id); + String userid = UUID.randomUUID().toString(); + + when(mockResultSet.getString("UUID_User")).thenReturn(userid); when(mockResultSet.getString("user_name")).thenReturn("Carol"); when(mockResultSet.getString("user_email")).thenReturn("carol@example.com"); when(mockResultSet.getString("user_password")).thenReturn("pw"); - when(mockResultSet.getString("role")).thenReturn("USER"); + when(mockResultSet.getString("role")).thenReturn("NORMAL_USER"); when(mockResultSet.getString("feedback_comment")).thenReturn("Comment one", "Comment two"); when(mockResultSet.getString("feedback_date")).thenReturn("2024-07-10");