From ad87010f2150c58c02c546125193e30db33ebc3b Mon Sep 17 00:00:00 2001 From: Hiroki Terashima Date: Wed, 16 Sep 2026 17:19:23 -0700 Subject: [PATCH 1/5] Upgrade Spring Boot 3.3.13 -> 3.4.14 --- pom.xml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 936be2b74..47dbb39c5 100644 --- a/pom.xml +++ b/pom.xml @@ -183,6 +183,12 @@ ${java.version} + + + org.projectlombok + lombok + + @@ -284,7 +290,7 @@ 6.46.1 - org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_3 + org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_4 @@ -348,7 +354,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.13 + 3.4.13 From 8fa765e345694dfc014160e5af51106f9312e771 Mon Sep 17 00:00:00 2001 From: Hiroki Terashima Date: Wed, 16 Sep 2026 17:23:43 -0700 Subject: [PATCH 2/5] Change GenerationType to IDENTITY, for consistency --- src/main/java/org/wise/vle/domain/chatbot/Chat.java | 2 +- src/main/java/org/wise/vle/domain/chatbot/ChatMessage.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/wise/vle/domain/chatbot/Chat.java b/src/main/java/org/wise/vle/domain/chatbot/Chat.java index 23a4cf745..671f0e41b 100644 --- a/src/main/java/org/wise/vle/domain/chatbot/Chat.java +++ b/src/main/java/org/wise/vle/domain/chatbot/Chat.java @@ -51,7 +51,7 @@ public class Chat extends PersistableDomain { @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id = null; @ManyToOne(targetEntity = RunImpl.class, cascade = { diff --git a/src/main/java/org/wise/vle/domain/chatbot/ChatMessage.java b/src/main/java/org/wise/vle/domain/chatbot/ChatMessage.java index c9e9a3991..cc6fb25d2 100644 --- a/src/main/java/org/wise/vle/domain/chatbot/ChatMessage.java +++ b/src/main/java/org/wise/vle/domain/chatbot/ChatMessage.java @@ -44,7 +44,7 @@ public class ChatMessage extends PersistableDomain { @Id - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id = null; @ManyToOne(targetEntity = Chat.class, cascade = { CascadeType.PERSIST }, fetch = FetchType.LAZY) From 8811dfda6b22a324755a7775bdc9a28ef8362551 Mon Sep 17 00:00:00 2001 From: Hiroki Terashima Date: Wed, 16 Sep 2026 17:24:28 -0700 Subject: [PATCH 3/5] Remove deprecated and unused hibernate id generation setting. --- .../java/org/wise/portal/spring/impl/HibernateConfig.java | 4 ---- src/main/resources/application-dockerdev-sample.properties | 1 - src/main/resources/application_sample.properties | 1 - 3 files changed, 6 deletions(-) diff --git a/src/main/java/org/wise/portal/spring/impl/HibernateConfig.java b/src/main/java/org/wise/portal/spring/impl/HibernateConfig.java index 164d415b2..5e8723d33 100644 --- a/src/main/java/org/wise/portal/spring/impl/HibernateConfig.java +++ b/src/main/java/org/wise/portal/spring/impl/HibernateConfig.java @@ -54,9 +54,6 @@ public class HibernateConfig { @Value("${spring.jpa.properties.hibernate.storage_engine:innodb}") private String hibernateStorageEngine; - @Value("${spring.jpa.hibernate.use-new-id-generator-mappings:false}") - private String hibernateGeneratorMappings; - @Value("${spring.jpa.hibernate.ddl-auto:none}") private String hibernateDDLAuto; @@ -82,7 +79,6 @@ private final Properties hibernateProperties() { Properties properties = new Properties(); properties.setProperty("hibernate.dialect", hibernateDialect); properties.setProperty("hibernate.storage_engine", hibernateStorageEngine); - properties.setProperty("hibernate.id.new_generator_mappings", hibernateGeneratorMappings); properties.setProperty("hibernate.hbm2ddl.auto", hibernateDDLAuto); return properties; } diff --git a/src/main/resources/application-dockerdev-sample.properties b/src/main/resources/application-dockerdev-sample.properties index 8e192082c..61b18cc74 100644 --- a/src/main/resources/application-dockerdev-sample.properties +++ b/src/main/resources/application-dockerdev-sample.properties @@ -89,7 +89,6 @@ spring.datasource.password=wisepass spring.jpa.properties.hibernate.storage_engine=innodb spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.bytecode.use_reflection_optimizer=true -spring.jpa.hibernate.use-new-id-generator-mappings=false spring.session.store-type=redis spring.data.redis.host=wise-redis diff --git a/src/main/resources/application_sample.properties b/src/main/resources/application_sample.properties index 7f123a0e5..82ba99567 100644 --- a/src/main/resources/application_sample.properties +++ b/src/main/resources/application_sample.properties @@ -87,7 +87,6 @@ spring.datasource.password=wisepass spring.jpa.properties.hibernate.storage_engine=innodb spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.bytecode.use_reflection_optimizer=true -spring.jpa.hibernate.use-new-id-generator-mappings=false spring.session.store-type=redis spring.data.redis.host=localhost From a084a8796c250eed445821977bc9e95adf52e83a Mon Sep 17 00:00:00 2001 From: Hiroki Terashima Date: Wed, 16 Sep 2026 17:25:05 -0700 Subject: [PATCH 4/5] Add @Serial annotation to serialVersionUID fields, introduced in Java 14 --- .../portal/dao/ObjectNotFoundException.java | 2 + .../domain/PeriodNotFoundException.java | 3 ++ .../portal/domain/RunHasEndedException.java | 2 + ...UserAlreadyAssociatedWithRunException.java | 5 ++- .../impl/StudentAttendanceImpl.java | 2 + .../BatchStudentChangePasswordParameters.java | 2 + .../impl/ChangePasswordParameters.java | 3 +- .../impl/ChangeStudentPasswordParameters.java | 3 ++ .../impl/PersistentAclEntry.java | 2 + .../authentication/impl/PersistentAclSid.java | 2 + .../impl/PersistentAclTargetObject.java | 2 + .../PersistentAclTargetObjectIdentity.java | 2 + .../impl/PersistentGrantedAuthority.java | 2 + .../impl/PersistentUserDetails.java | 2 + .../impl/StudentUserDetails.java | 2 + .../impl/TeacherUserDetails.java | 2 + .../domain/group/impl/GroupParameters.java | 2 + .../domain/group/impl/PersistentGroup.java | 2 + .../impl/AddSharedTeacherParameters.java | 2 + .../impl/ChangeWorkgroupParameters.java | 2 + .../impl/PasswordReminderParameters.java | 2 + .../org/wise/portal/domain/impl/TagImpl.java | 2 + .../domain/newsitem/impl/NewsItemImpl.java | 2 + .../peergrouping/impl/PeerGroupingImpl.java | 2 + .../portal/domain/portal/impl/PortalImpl.java | 2 + .../portal/impl/PortalStatisticsImpl.java | 2 + .../portal/domain/project/ProjectUpload.java | 2 + .../project/impl/AddProjectParameters.java | 2 + .../domain/project/impl/ProjectImpl.java | 2 + .../domain/project/impl/ProjectInfoImpl.java | 2 + .../project/impl/ProjectMetadataImpl.java | 2 + .../project/impl/ProjectParameters.java | 2 + .../domain/project/impl/Projectcode.java | 2 + .../portal/domain/run/impl/RunParameters.java | 2 + .../user/BatchCreateUserAccountsUpload.java | 2 + .../portal/domain/user/impl/UserImpl.java | 2 + .../domain/workgroup/impl/WorkgroupImpl.java | 2 + .../web/exception/InvalidNameException.java | 4 ++ .../exception/InvalidPasswordException.java | 3 ++ .../web/exception/MessageCodeException.java | 4 ++ .../MicrosoftUserNotFoundException.java | 3 ++ .../web/exception/NotAuthorizedException.java | 3 ++ .../RecaptchaVerificationException.java | 3 ++ .../exception/TagAlreadyExistsException.java | 4 ++ ...cherAlreadySharedWithProjectException.java | 8 +++- .../TeacherAlreadySharedWithRunException.java | 3 ++ .../annotation/AnnotationJsonModule.java | 2 + .../AuthorityNotFoundException.java | 3 ++ .../DuplicateAuthorityException.java | 3 ++ .../DuplicateUsernameException.java | 3 ++ .../service/group/CyclicalGroupException.java | 3 ++ .../notebook/NotebookItemJsonModule.java | 2 + .../notification/NotificationJsonModule.java | 2 + .../peergroup/PeerGroupCreationException.java | 2 + .../peergrouping/PeerGroupingJsonModule.java | 5 ++- .../PeerGroupingNotFoundException.java | 3 ++ .../project/impl/ProjectServiceImpl.java | 45 ++++++++++++++++--- .../run/DuplicateRunCodeException.java | 3 ++ .../service/work/AchievementJsonModule.java | 5 ++- .../portal/service/work/EventJsonModule.java | 2 + .../service/work/StudentAssetJsonModule.java | 5 ++- .../service/work/StudentWorkJsonModule.java | 8 +++- .../workgroup/WorkgroupJsonModule.java | 2 + .../spring/impl/CustomDispatcherServlet.java | 2 + .../NotebookItemAlreadyInGroupException.java | 3 ++ .../HibernateStudentUserDetailsDaoTest.java | 2 +- .../RemoveStudentRunControllerTest.java | 2 +- 67 files changed, 204 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/wise/portal/dao/ObjectNotFoundException.java b/src/main/java/org/wise/portal/dao/ObjectNotFoundException.java index 49814e03e..6929f0f26 100644 --- a/src/main/java/org/wise/portal/dao/ObjectNotFoundException.java +++ b/src/main/java/org/wise/portal/dao/ObjectNotFoundException.java @@ -20,6 +20,7 @@ */ package org.wise.portal.dao; +import java.io.Serial; import java.io.Serializable; /** @@ -27,6 +28,7 @@ */ public class ObjectNotFoundException extends Exception { + @Serial private static final long serialVersionUID = 1L; private String message; diff --git a/src/main/java/org/wise/portal/domain/PeriodNotFoundException.java b/src/main/java/org/wise/portal/domain/PeriodNotFoundException.java index 2f95b0ebb..19e3621c0 100644 --- a/src/main/java/org/wise/portal/domain/PeriodNotFoundException.java +++ b/src/main/java/org/wise/portal/domain/PeriodNotFoundException.java @@ -23,6 +23,8 @@ */ package org.wise.portal.domain; +import java.io.Serial; + /** * A checked exception that gets thrown when the period does not exist in * the data store. @@ -31,6 +33,7 @@ */ public class PeriodNotFoundException extends Exception { + @Serial private static final long serialVersionUID = 1L; public PeriodNotFoundException(String message) { diff --git a/src/main/java/org/wise/portal/domain/RunHasEndedException.java b/src/main/java/org/wise/portal/domain/RunHasEndedException.java index 2f7181786..8baa719c6 100644 --- a/src/main/java/org/wise/portal/domain/RunHasEndedException.java +++ b/src/main/java/org/wise/portal/domain/RunHasEndedException.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain; +import java.io.Serial; import org.wise.portal.domain.run.Run; /** @@ -33,6 +34,7 @@ */ public class RunHasEndedException extends Exception { + @Serial private static final long serialVersionUID = 1L; public RunHasEndedException(String message) { diff --git a/src/main/java/org/wise/portal/domain/StudentUserAlreadyAssociatedWithRunException.java b/src/main/java/org/wise/portal/domain/StudentUserAlreadyAssociatedWithRunException.java index a5dfef379..f3b70dad0 100644 --- a/src/main/java/org/wise/portal/domain/StudentUserAlreadyAssociatedWithRunException.java +++ b/src/main/java/org/wise/portal/domain/StudentUserAlreadyAssociatedWithRunException.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain; +import java.io.Serial; import org.wise.portal.domain.run.Run; import org.wise.portal.domain.user.User; @@ -34,6 +35,7 @@ */ public class StudentUserAlreadyAssociatedWithRunException extends Exception { + @Serial private static final long serialVersionUID = 1L; public StudentUserAlreadyAssociatedWithRunException(String message) { @@ -49,7 +51,6 @@ public StudentUserAlreadyAssociatedWithRunException(String message, Throwable ca } public StudentUserAlreadyAssociatedWithRunException(User studentUser, Run run) { - super("studentuser: " + studentUser + - " is already associated with run: " + run); + super("studentuser: " + studentUser + " is already associated with run: " + run); } } diff --git a/src/main/java/org/wise/portal/domain/attendance/impl/StudentAttendanceImpl.java b/src/main/java/org/wise/portal/domain/attendance/impl/StudentAttendanceImpl.java index a16b3ecef..989d4e1d4 100644 --- a/src/main/java/org/wise/portal/domain/attendance/impl/StudentAttendanceImpl.java +++ b/src/main/java/org/wise/portal/domain/attendance/impl/StudentAttendanceImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.attendance.impl; +import java.io.Serial; import java.util.Date; import jakarta.persistence.Column; @@ -46,6 +47,7 @@ @Setter public class StudentAttendanceImpl implements StudentAttendance { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/BatchStudentChangePasswordParameters.java b/src/main/java/org/wise/portal/domain/authentication/impl/BatchStudentChangePasswordParameters.java index f6c99c06d..a73159f43 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/BatchStudentChangePasswordParameters.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/BatchStudentChangePasswordParameters.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import lombok.Getter; import lombok.Setter; @@ -31,6 +32,7 @@ */ public class BatchStudentChangePasswordParameters extends ChangePasswordParameters { + @Serial private static final long serialVersionUID = 1L; @Getter diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/ChangePasswordParameters.java b/src/main/java/org/wise/portal/domain/authentication/impl/ChangePasswordParameters.java index 141db5ec9..8a7ad99dd 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/ChangePasswordParameters.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/ChangePasswordParameters.java @@ -23,8 +23,8 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import java.io.Serializable; - import lombok.Getter; import lombok.Setter; import org.wise.portal.domain.user.User; @@ -38,6 +38,7 @@ @Setter public class ChangePasswordParameters implements Serializable { + @Serial private static final long serialVersionUID = 1L; private String passwd0, passwd1, passwd2; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/ChangeStudentPasswordParameters.java b/src/main/java/org/wise/portal/domain/authentication/impl/ChangeStudentPasswordParameters.java index f625a8dd1..06ce85d12 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/ChangeStudentPasswordParameters.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/ChangeStudentPasswordParameters.java @@ -23,12 +23,15 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; + /** * TODO HT: do we need this anymore? Can we merge with ChangePasswordParameters? * @author Patrick Lawler */ public class ChangeStudentPasswordParameters extends ChangePasswordParameters { + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclEntry.java b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclEntry.java index cc76d2dad..9964e33fc 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclEntry.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclEntry.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import java.io.Serializable; import jakarta.persistence.CascadeType; @@ -57,6 +58,7 @@ PersistentAclEntry.COLUMN_NAME_ACE_ORDER }) }) public class PersistentAclEntry implements ImmutableAclEntry, Serializable { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclSid.java b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclSid.java index 33e9b5c7f..27ceaf9de 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclSid.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclSid.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -50,6 +51,7 @@ PersistentAclSid.COLUMN_NAME_IS_PRINCIPAL }) }) public class PersistentAclSid implements MutableAclSid { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObject.java b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObject.java index f92102a81..fd0645b75 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObject.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObject.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -43,6 +44,7 @@ @Table(name = PersistentAclTargetObject.DATA_STORE_NAME) public class PersistentAclTargetObject implements MutableAclTargetObject { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObjectIdentity.java b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObjectIdentity.java index 85df9d6b5..26559e727 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObjectIdentity.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentAclTargetObjectIdentity.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import java.io.Serializable; import java.util.HashSet; import java.util.Set; @@ -62,6 +63,7 @@ PersistentAclTargetObjectIdentity.COLUMN_NAME_TARGET_OBJECT_ID }) }) public class PersistentAclTargetObjectIdentity implements MutableAclTargetObjectIdentity { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentGrantedAuthority.java b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentGrantedAuthority.java index e69e06c19..9139ed0ad 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentGrantedAuthority.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentGrantedAuthority.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -49,6 +50,7 @@ public class PersistentGrantedAuthority implements MutableGrantedAuthority { @Transient public static final String COLUMN_NAME_ROLE = "authority"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentUserDetails.java b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentUserDetails.java index f38991761..026290d48 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/PersistentUserDetails.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/PersistentUserDetails.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import java.util.Arrays; import java.util.Collection; import java.util.Date; @@ -108,6 +109,7 @@ public class PersistentUserDetails implements MutableUserDetails { @Transient public static final String COLUMN_NAME_RECENT_NUMBER_FAILED_VERIFICATION_ATTEMPTS = "recent_number_of_failed_verification_code_attempts"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/StudentUserDetails.java b/src/main/java/org/wise/portal/domain/authentication/impl/StudentUserDetails.java index 43677ed53..f7cc9a53f 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/StudentUserDetails.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/StudentUserDetails.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -79,6 +80,7 @@ public class StudentUserDetails extends PersistentUserDetails implements Mutable @Transient public static final String COLUMN_NAME_ACCOUNTANSWER = "accountanswer"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/authentication/impl/TeacherUserDetails.java b/src/main/java/org/wise/portal/domain/authentication/impl/TeacherUserDetails.java index 3b1d229a2..a03bc24ba 100644 --- a/src/main/java/org/wise/portal/domain/authentication/impl/TeacherUserDetails.java +++ b/src/main/java/org/wise/portal/domain/authentication/impl/TeacherUserDetails.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.authentication.impl; +import java.io.Serial; import java.util.Date; import java.util.HashMap; @@ -93,6 +94,7 @@ public class TeacherUserDetails extends PersistentUserDetails implements Mutable @Transient private static final String COLUMN_NAME_HOW_HEAR = "howDidYouHearAboutUs"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/group/impl/GroupParameters.java b/src/main/java/org/wise/portal/domain/group/impl/GroupParameters.java index 1769b0866..68bad3c78 100644 --- a/src/main/java/org/wise/portal/domain/group/impl/GroupParameters.java +++ b/src/main/java/org/wise/portal/domain/group/impl/GroupParameters.java @@ -23,6 +23,7 @@ import lombok.Getter; import lombok.Setter; +import java.io.Serial; import java.io.Serializable; /** @@ -33,6 +34,7 @@ @Setter public class GroupParameters implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Long groupId; diff --git a/src/main/java/org/wise/portal/domain/group/impl/PersistentGroup.java b/src/main/java/org/wise/portal/domain/group/impl/PersistentGroup.java index 33223f3e4..b6c89faf8 100644 --- a/src/main/java/org/wise/portal/domain/group/impl/PersistentGroup.java +++ b/src/main/java/org/wise/portal/domain/group/impl/PersistentGroup.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.group.impl; +import java.io.Serial; import java.util.HashSet; import java.util.Set; @@ -72,6 +73,7 @@ public class PersistentGroup implements Group { @Transient public static final String GROUPS_JOIN_COLUMN_NAME = "group_fk"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/impl/AddSharedTeacherParameters.java b/src/main/java/org/wise/portal/domain/impl/AddSharedTeacherParameters.java index b1101b64e..5f3e615cb 100644 --- a/src/main/java/org/wise/portal/domain/impl/AddSharedTeacherParameters.java +++ b/src/main/java/org/wise/portal/domain/impl/AddSharedTeacherParameters.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.impl; +import java.io.Serial; import java.io.Serializable; import lombok.Getter; @@ -39,6 +40,7 @@ @Setter public class AddSharedTeacherParameters implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Run run; diff --git a/src/main/java/org/wise/portal/domain/impl/ChangeWorkgroupParameters.java b/src/main/java/org/wise/portal/domain/impl/ChangeWorkgroupParameters.java index d63c60d42..ce9ffd080 100644 --- a/src/main/java/org/wise/portal/domain/impl/ChangeWorkgroupParameters.java +++ b/src/main/java/org/wise/portal/domain/impl/ChangeWorkgroupParameters.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.impl; +import java.io.Serial; import java.io.Serializable; import lombok.Getter; @@ -39,6 +40,7 @@ @Setter public class ChangeWorkgroupParameters implements Serializable { + @Serial private static final long serialVersionUID = 1L; private User student; diff --git a/src/main/java/org/wise/portal/domain/impl/PasswordReminderParameters.java b/src/main/java/org/wise/portal/domain/impl/PasswordReminderParameters.java index 3368ce49a..d4ed72f94 100644 --- a/src/main/java/org/wise/portal/domain/impl/PasswordReminderParameters.java +++ b/src/main/java/org/wise/portal/domain/impl/PasswordReminderParameters.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.impl; +import java.io.Serial; import java.util.HashMap; /** @@ -36,6 +37,7 @@ public class PasswordReminderParameters extends HashMap { public static final String ACCOUNT_QUESTION = "accountQuestion"; + @Serial private static final long serialVersionUID = 1L; public static final String USERNAME = "username"; diff --git a/src/main/java/org/wise/portal/domain/impl/TagImpl.java b/src/main/java/org/wise/portal/domain/impl/TagImpl.java index 8efe1118d..66fdf0fb0 100644 --- a/src/main/java/org/wise/portal/domain/impl/TagImpl.java +++ b/src/main/java/org/wise/portal/domain/impl/TagImpl.java @@ -36,6 +36,7 @@ import jakarta.persistence.Transient; import com.fasterxml.jackson.annotation.JsonIgnore; +import java.io.Serial; import org.wise.portal.domain.Tag; import org.wise.portal.domain.run.Run; @@ -53,6 +54,7 @@ @Setter public class TagImpl implements Tag { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/newsitem/impl/NewsItemImpl.java b/src/main/java/org/wise/portal/domain/newsitem/impl/NewsItemImpl.java index b3ae84a4a..617523a7e 100644 --- a/src/main/java/org/wise/portal/domain/newsitem/impl/NewsItemImpl.java +++ b/src/main/java/org/wise/portal/domain/newsitem/impl/NewsItemImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.newsitem.impl; +import java.io.Serial; import java.io.Serializable; import java.util.Date; @@ -73,6 +74,7 @@ public class NewsItemImpl implements NewsItem, Comparable, Serializabl @Transient public static final String COLUMN_NAME_TYPE = "type"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/peergrouping/impl/PeerGroupingImpl.java b/src/main/java/org/wise/portal/domain/peergrouping/impl/PeerGroupingImpl.java index 8f9af1e52..e932bcac9 100644 --- a/src/main/java/org/wise/portal/domain/peergrouping/impl/PeerGroupingImpl.java +++ b/src/main/java/org/wise/portal/domain/peergrouping/impl/PeerGroupingImpl.java @@ -37,6 +37,7 @@ import jakarta.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; +import java.io.Serial; import org.json.JSONArray; import org.json.JSONException; @@ -59,6 +60,7 @@ @Setter public class PeerGroupingImpl implements PeerGrouping { + @Serial private static final long serialVersionUID = 1L; @Id diff --git a/src/main/java/org/wise/portal/domain/portal/impl/PortalImpl.java b/src/main/java/org/wise/portal/domain/portal/impl/PortalImpl.java index 3126cef06..a4d3df98c 100644 --- a/src/main/java/org/wise/portal/domain/portal/impl/PortalImpl.java +++ b/src/main/java/org/wise/portal/domain/portal/impl/PortalImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.portal.impl; +import java.io.Serial; import java.util.Properties; import jakarta.persistence.Column; @@ -51,6 +52,7 @@ @Setter public class PortalImpl implements Portal { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/portal/impl/PortalStatisticsImpl.java b/src/main/java/org/wise/portal/domain/portal/impl/PortalStatisticsImpl.java index c5231b703..44e9b1b2a 100644 --- a/src/main/java/org/wise/portal/domain/portal/impl/PortalStatisticsImpl.java +++ b/src/main/java/org/wise/portal/domain/portal/impl/PortalStatisticsImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.portal.impl; +import java.io.Serial; import java.io.Serializable; import java.util.Date; @@ -42,6 +43,7 @@ @Table(name = "portal_statistics") public class PortalStatisticsImpl implements PortalStatistics { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/project/ProjectUpload.java b/src/main/java/org/wise/portal/domain/project/ProjectUpload.java index 91fef0f37..586f98f90 100644 --- a/src/main/java/org/wise/portal/domain/project/ProjectUpload.java +++ b/src/main/java/org/wise/portal/domain/project/ProjectUpload.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.project; +import java.io.Serial; import java.io.Serializable; import org.springframework.web.multipart.MultipartFile; @@ -33,6 +34,7 @@ */ public class ProjectUpload implements Serializable { + @Serial private static final long serialVersionUID = 1L; private MultipartFile file; diff --git a/src/main/java/org/wise/portal/domain/project/impl/AddProjectParameters.java b/src/main/java/org/wise/portal/domain/project/impl/AddProjectParameters.java index b144acdb7..a42753200 100644 --- a/src/main/java/org/wise/portal/domain/project/impl/AddProjectParameters.java +++ b/src/main/java/org/wise/portal/domain/project/impl/AddProjectParameters.java @@ -26,6 +26,7 @@ import lombok.Getter; import lombok.Setter; +import java.io.Serial; import java.io.Serializable; /** @@ -37,6 +38,7 @@ @Setter public class AddProjectParameters implements Serializable { + @Serial private static final long serialVersionUID = 1L; private String projectcode; diff --git a/src/main/java/org/wise/portal/domain/project/impl/ProjectImpl.java b/src/main/java/org/wise/portal/domain/project/impl/ProjectImpl.java index 749f3e592..b88264f25 100644 --- a/src/main/java/org/wise/portal/domain/project/impl/ProjectImpl.java +++ b/src/main/java/org/wise/portal/domain/project/impl/ProjectImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.project.impl; +import java.io.Serial; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -57,6 +58,7 @@ @Inheritance(strategy = InheritanceType.JOINED) public class ProjectImpl implements Project { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/project/impl/ProjectInfoImpl.java b/src/main/java/org/wise/portal/domain/project/impl/ProjectInfoImpl.java index a83e3d871..786f3ce8a 100644 --- a/src/main/java/org/wise/portal/domain/project/impl/ProjectInfoImpl.java +++ b/src/main/java/org/wise/portal/domain/project/impl/ProjectInfoImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.project.impl; +import java.io.Serial; import lombok.Getter; import lombok.Setter; import org.wise.portal.domain.project.FamilyTag; @@ -36,6 +37,7 @@ @Setter public class ProjectInfoImpl implements ProjectInfo { + @Serial private static final long serialVersionUID = 1L; private String name; private String author; diff --git a/src/main/java/org/wise/portal/domain/project/impl/ProjectMetadataImpl.java b/src/main/java/org/wise/portal/domain/project/impl/ProjectMetadataImpl.java index 9a49eb05f..8559b5b4b 100644 --- a/src/main/java/org/wise/portal/domain/project/impl/ProjectMetadataImpl.java +++ b/src/main/java/org/wise/portal/domain/project/impl/ProjectMetadataImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.project.impl; +import java.io.Serial; import java.io.Serializable; import java.util.Date; @@ -48,6 +49,7 @@ @Table(name = "project_metadata") public class ProjectMetadataImpl implements ProjectMetadata, Serializable { + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/project/impl/ProjectParameters.java b/src/main/java/org/wise/portal/domain/project/impl/ProjectParameters.java index 050fa2afb..2ef70be40 100644 --- a/src/main/java/org/wise/portal/domain/project/impl/ProjectParameters.java +++ b/src/main/java/org/wise/portal/domain/project/impl/ProjectParameters.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.project.impl; +import java.io.Serial; import java.io.Serializable; import lombok.Getter; @@ -39,6 +40,7 @@ @Setter public class ProjectParameters implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Long projectId; diff --git a/src/main/java/org/wise/portal/domain/project/impl/Projectcode.java b/src/main/java/org/wise/portal/domain/project/impl/Projectcode.java index 81df4c6db..dc19361f7 100644 --- a/src/main/java/org/wise/portal/domain/project/impl/Projectcode.java +++ b/src/main/java/org/wise/portal/domain/project/impl/Projectcode.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.project.impl; +import java.io.Serial; import java.io.Serializable; import lombok.Getter; @@ -39,6 +40,7 @@ */ public class Projectcode implements Serializable { + @Serial private static final long serialVersionUID = 1L; @Getter diff --git a/src/main/java/org/wise/portal/domain/run/impl/RunParameters.java b/src/main/java/org/wise/portal/domain/run/impl/RunParameters.java index dec931f3e..157ac51d3 100644 --- a/src/main/java/org/wise/portal/domain/run/impl/RunParameters.java +++ b/src/main/java/org/wise/portal/domain/run/impl/RunParameters.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.run.impl; +import java.io.Serial; import java.io.Serializable; import java.util.Locale; import java.util.Set; @@ -39,6 +40,7 @@ @Setter public class RunParameters implements Serializable { + @Serial private static final long serialVersionUID = 1L; private String name; diff --git a/src/main/java/org/wise/portal/domain/user/BatchCreateUserAccountsUpload.java b/src/main/java/org/wise/portal/domain/user/BatchCreateUserAccountsUpload.java index a78cc6393..0521d1abc 100644 --- a/src/main/java/org/wise/portal/domain/user/BatchCreateUserAccountsUpload.java +++ b/src/main/java/org/wise/portal/domain/user/BatchCreateUserAccountsUpload.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.user; +import java.io.Serial; import java.io.Serializable; import org.springframework.web.multipart.MultipartFile; @@ -33,6 +34,7 @@ */ public class BatchCreateUserAccountsUpload implements Serializable { + @Serial private static final long serialVersionUID = 1L; private MultipartFile file; diff --git a/src/main/java/org/wise/portal/domain/user/impl/UserImpl.java b/src/main/java/org/wise/portal/domain/user/impl/UserImpl.java index 64632aa43..b86e08a08 100644 --- a/src/main/java/org/wise/portal/domain/user/impl/UserImpl.java +++ b/src/main/java/org/wise/portal/domain/user/impl/UserImpl.java @@ -20,6 +20,7 @@ */ package org.wise.portal.domain.user.impl; +import java.io.Serial; import java.util.ArrayList; import java.util.List; @@ -59,6 +60,7 @@ public class UserImpl implements User { @Transient public static final String COLUMN_NAME_USER_DETAILS_FK = "user_details_fk"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/domain/workgroup/impl/WorkgroupImpl.java b/src/main/java/org/wise/portal/domain/workgroup/impl/WorkgroupImpl.java index 7142f0c9e..b4ec26419 100644 --- a/src/main/java/org/wise/portal/domain/workgroup/impl/WorkgroupImpl.java +++ b/src/main/java/org/wise/portal/domain/workgroup/impl/WorkgroupImpl.java @@ -23,6 +23,7 @@ */ package org.wise.portal.domain.workgroup.impl; +import java.io.Serial; import java.util.HashSet; import java.util.Set; @@ -65,6 +66,7 @@ public class WorkgroupImpl implements Workgroup, Comparable { @Transient public static final String DATA_STORE_NAME = "workgroups"; + @Serial @Transient private static final long serialVersionUID = 1L; diff --git a/src/main/java/org/wise/portal/presentation/web/exception/InvalidNameException.java b/src/main/java/org/wise/portal/presentation/web/exception/InvalidNameException.java index bcf560c40..8fef4f207 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/InvalidNameException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/InvalidNameException.java @@ -1,6 +1,10 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; + public class InvalidNameException extends MessageCodeException { + + @Serial private static final long serialVersionUID = 1L; public InvalidNameException(String messageCode) { diff --git a/src/main/java/org/wise/portal/presentation/web/exception/InvalidPasswordException.java b/src/main/java/org/wise/portal/presentation/web/exception/InvalidPasswordException.java index 56993c1e7..00974cbbe 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/InvalidPasswordException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/InvalidPasswordException.java @@ -1,6 +1,9 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; + public class InvalidPasswordException extends Exception { + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/org/wise/portal/presentation/web/exception/MessageCodeException.java b/src/main/java/org/wise/portal/presentation/web/exception/MessageCodeException.java index a8642a2b6..2a032e215 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/MessageCodeException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/MessageCodeException.java @@ -1,6 +1,10 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; + public class MessageCodeException extends Exception { + + @Serial private static final long serialVersionUID = 1L; protected String messageCode; diff --git a/src/main/java/org/wise/portal/presentation/web/exception/MicrosoftUserNotFoundException.java b/src/main/java/org/wise/portal/presentation/web/exception/MicrosoftUserNotFoundException.java index ab1fb8b59..5aa919898 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/MicrosoftUserNotFoundException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/MicrosoftUserNotFoundException.java @@ -1,10 +1,13 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; import java.util.Map; import org.springframework.security.core.AuthenticationException; public class MicrosoftUserNotFoundException extends AuthenticationException { + + @Serial private static final long serialVersionUID = 1L; private Map authInfo; diff --git a/src/main/java/org/wise/portal/presentation/web/exception/NotAuthorizedException.java b/src/main/java/org/wise/portal/presentation/web/exception/NotAuthorizedException.java index 5a0b8acac..30425d784 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/NotAuthorizedException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/NotAuthorizedException.java @@ -23,11 +23,14 @@ */ package org.wise.portal.presentation.web.exception; +import java.io.Serial; + /** * @author Patrick Lawler */ public class NotAuthorizedException extends Exception { + @Serial private static final long serialVersionUID = 1L; private String message; diff --git a/src/main/java/org/wise/portal/presentation/web/exception/RecaptchaVerificationException.java b/src/main/java/org/wise/portal/presentation/web/exception/RecaptchaVerificationException.java index e0266a312..e8ab4cef5 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/RecaptchaVerificationException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/RecaptchaVerificationException.java @@ -1,8 +1,11 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; import org.springframework.security.core.AuthenticationException; public class RecaptchaVerificationException extends AuthenticationException { + + @Serial private static final long serialVersionUID = 1L; public RecaptchaVerificationException(String msg) { diff --git a/src/main/java/org/wise/portal/presentation/web/exception/TagAlreadyExistsException.java b/src/main/java/org/wise/portal/presentation/web/exception/TagAlreadyExistsException.java index 3e46244a7..b384c6460 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/TagAlreadyExistsException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/TagAlreadyExistsException.java @@ -1,6 +1,10 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; + public class TagAlreadyExistsException extends MessageCodeException { + + @Serial private static final long serialVersionUID = 1L; public TagAlreadyExistsException() { diff --git a/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithProjectException.java b/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithProjectException.java index bee43c5e1..24abd4b30 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithProjectException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithProjectException.java @@ -1,16 +1,20 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; + public class TeacherAlreadySharedWithProjectException extends Exception { + + @Serial private static final long serialVersionUID = 1L; private String message; - public TeacherAlreadySharedWithProjectException(String message){ + public TeacherAlreadySharedWithProjectException(String message) { this.message = message; } @Override - public String getMessage(){ + public String getMessage() { return this.message; } } diff --git a/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithRunException.java b/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithRunException.java index 99fe6fc50..7c1bf169c 100644 --- a/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithRunException.java +++ b/src/main/java/org/wise/portal/presentation/web/exception/TeacherAlreadySharedWithRunException.java @@ -1,7 +1,10 @@ package org.wise.portal.presentation.web.exception; +import java.io.Serial; + public class TeacherAlreadySharedWithRunException extends Exception { + @Serial private static final long serialVersionUID = 1L; private String message; diff --git a/src/main/java/org/wise/portal/service/annotation/AnnotationJsonModule.java b/src/main/java/org/wise/portal/service/annotation/AnnotationJsonModule.java index a2aa45537..6aa9adbf6 100644 --- a/src/main/java/org/wise/portal/service/annotation/AnnotationJsonModule.java +++ b/src/main/java/org/wise/portal/service/annotation/AnnotationJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.annotation; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.stereotype.Service; @@ -9,6 +10,7 @@ @Service public class AnnotationJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; public AnnotationJsonModule() { diff --git a/src/main/java/org/wise/portal/service/authentication/AuthorityNotFoundException.java b/src/main/java/org/wise/portal/service/authentication/AuthorityNotFoundException.java index 676da1276..c4567e8a4 100644 --- a/src/main/java/org/wise/portal/service/authentication/AuthorityNotFoundException.java +++ b/src/main/java/org/wise/portal/service/authentication/AuthorityNotFoundException.java @@ -20,6 +20,8 @@ */ package org.wise.portal.service.authentication; +import java.io.Serial; + /** * A checked exception thrown when an authority is requested from the data * store, but an authority of that name does not exist. @@ -28,6 +30,7 @@ */ public class AuthorityNotFoundException extends Exception { + @Serial private static final long serialVersionUID = 1L; private String message; diff --git a/src/main/java/org/wise/portal/service/authentication/DuplicateAuthorityException.java b/src/main/java/org/wise/portal/service/authentication/DuplicateAuthorityException.java index 579531aee..9ce8458b7 100644 --- a/src/main/java/org/wise/portal/service/authentication/DuplicateAuthorityException.java +++ b/src/main/java/org/wise/portal/service/authentication/DuplicateAuthorityException.java @@ -20,6 +20,8 @@ */ package org.wise.portal.service.authentication; +import java.io.Serial; + /** * A checked exception thrown when the data store already contains an Authority * object with the same username. @@ -28,6 +30,7 @@ */ public class DuplicateAuthorityException extends Exception { + @Serial private static final long serialVersionUID = 1L; private String message; diff --git a/src/main/java/org/wise/portal/service/authentication/DuplicateUsernameException.java b/src/main/java/org/wise/portal/service/authentication/DuplicateUsernameException.java index 5c85a60e6..a983ade48 100644 --- a/src/main/java/org/wise/portal/service/authentication/DuplicateUsernameException.java +++ b/src/main/java/org/wise/portal/service/authentication/DuplicateUsernameException.java @@ -20,6 +20,8 @@ */ package org.wise.portal.service.authentication; +import java.io.Serial; + /** * A checked exception thrown when the data store already contains a user * details object with the same username. @@ -28,6 +30,7 @@ */ public class DuplicateUsernameException extends Exception { + @Serial private static final long serialVersionUID = 1L; private String message; diff --git a/src/main/java/org/wise/portal/service/group/CyclicalGroupException.java b/src/main/java/org/wise/portal/service/group/CyclicalGroupException.java index 734ce8f36..8b66708d8 100644 --- a/src/main/java/org/wise/portal/service/group/CyclicalGroupException.java +++ b/src/main/java/org/wise/portal/service/group/CyclicalGroupException.java @@ -23,12 +23,15 @@ */ package org.wise.portal.service.group; +import java.io.Serial; + /** * A checked exception thrown when there exists a cycle of groups in the data store * @author Hiroki Terashima */ public class CyclicalGroupException extends Exception { + @Serial private static final long serialVersionUID = 1L; public CyclicalGroupException(String message) { diff --git a/src/main/java/org/wise/portal/service/notebook/NotebookItemJsonModule.java b/src/main/java/org/wise/portal/service/notebook/NotebookItemJsonModule.java index 031f726df..bc6b5a747 100644 --- a/src/main/java/org/wise/portal/service/notebook/NotebookItemJsonModule.java +++ b/src/main/java/org/wise/portal/service/notebook/NotebookItemJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.notebook; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.stereotype.Service; @@ -9,6 +10,7 @@ @Service public class NotebookItemJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; public NotebookItemJsonModule() { diff --git a/src/main/java/org/wise/portal/service/notification/NotificationJsonModule.java b/src/main/java/org/wise/portal/service/notification/NotificationJsonModule.java index 8f83ad63f..c9cc455dc 100644 --- a/src/main/java/org/wise/portal/service/notification/NotificationJsonModule.java +++ b/src/main/java/org/wise/portal/service/notification/NotificationJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.notification; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +12,7 @@ @Service public class NotificationJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; public NotificationJsonModule() { diff --git a/src/main/java/org/wise/portal/service/peergroup/PeerGroupCreationException.java b/src/main/java/org/wise/portal/service/peergroup/PeerGroupCreationException.java index 936e9b0d8..f98d51516 100644 --- a/src/main/java/org/wise/portal/service/peergroup/PeerGroupCreationException.java +++ b/src/main/java/org/wise/portal/service/peergroup/PeerGroupCreationException.java @@ -23,6 +23,7 @@ */ package org.wise.portal.service.peergroup; +import java.io.Serial; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -35,6 +36,7 @@ @ResponseStatus(HttpStatus.NOT_FOUND) public class PeerGroupCreationException extends Exception { + @Serial private static final long serialVersionUID = 1L; public PeerGroupCreationException() { diff --git a/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingJsonModule.java b/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingJsonModule.java index 8bc8d879d..8470aa945 100644 --- a/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingJsonModule.java +++ b/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.peergrouping; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.beans.factory.annotation.Autowired; @@ -9,9 +10,11 @@ @Service public class PeerGroupingJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; - public PeerGroupingJsonModule() {} + public PeerGroupingJsonModule() { + } @Autowired public PeerGroupingJsonModule(PeerGroupingSerializer serializer, diff --git a/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingNotFoundException.java b/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingNotFoundException.java index 501a5e8da..2e11bb262 100644 --- a/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingNotFoundException.java +++ b/src/main/java/org/wise/portal/service/peergrouping/PeerGroupingNotFoundException.java @@ -23,6 +23,8 @@ */ package org.wise.portal.service.peergrouping; +import java.io.Serial; + /** * A checked exception that is thrown when the PeerGrouping does not exist in * the data store and the curriculum content @@ -31,6 +33,7 @@ */ public class PeerGroupingNotFoundException extends Exception { + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java b/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java index 1c6703bcc..4c3823f4a 100644 --- a/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java +++ b/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java @@ -46,7 +46,6 @@ import jakarta.annotation.PostConstruct; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.text.WordUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -760,7 +759,7 @@ public void writeProjectLicenseFile(Project project) throws JSONException { } else { license += "."; } - license = WordUtils.wrap(license, 72) + "\n\n"; + license = wrapText(license, 72) + "\n\n"; JSONArray parentProjects = getParentProjects(metadata); for (int i = parentProjects.length() - 1; i >= 0; i--) { JSONObject parentProjectJSON = parentProjects.getJSONObject(i); @@ -771,16 +770,16 @@ public void writeProjectLicenseFile(Project project) throws JSONException { if (i == parentProjects.length() - 1) { parentLicense = "----\n\n"; } - parentLicense += WordUtils.wrap(titleAndUri, 72); + parentLicense += wrapText(titleAndUri, 72); if (authors.isEmpty()) { parentLicense += "\nis a copy of "; } else { parentLicense += "\nis a derivative of "; } titleAndUri = "\"" + parentTitle + "\" (" + parentURI + ")"; - parentLicense += "\n" + WordUtils.wrap(titleAndUri, 72); + parentLicense += "\n" + wrapText(titleAndUri, 72); if (!parentAuthors.isEmpty()) { - parentLicense += WordUtils.wrap("\nby " + parentAuthors, 72); + parentLicense += wrapText("\nby " + parentAuthors, 72); } parentLicense += "\n[used under CC BY-SA, copied " + parentProjectJSON.getString("dateCopied") + "].\n"; @@ -790,7 +789,7 @@ public void writeProjectLicenseFile(Project project) throws JSONException { } authors = parentAuthors; } - license += WordUtils.wrap( + license += wrapText( """ License pertains to original content created \ by the author(s). Authors are responsible for the usage and \ @@ -819,6 +818,40 @@ by the author(s). Authors are responsible for the usage and \ } } + private static String wrapText(String str, int wrapLength) { + if (str == null || str.length() <= wrapLength) { + return str; + } + StringBuilder result = new StringBuilder(); + String[] lines = str.split("\n", -1); + for (int i = 0; i < lines.length; i++) { + String line = lines[i]; + if (line.length() <= wrapLength) { + result.append(line); + } else { + int lineLen = 0; + String[] words = line.split(" "); + for (String word : words) { + if (lineLen + word.length() + (lineLen > 0 ? 1 : 0) > wrapLength) { + if (lineLen > 0) { + result.append("\n"); + lineLen = 0; + } + } else if (lineLen > 0) { + result.append(" "); + lineLen++; + } + result.append(word); + lineLen += word.length(); + } + } + if (i < lines.length - 1) { + result.append("\n"); + } + } + return result.toString(); + } + public void replaceMetadataInProjectJSONFile(String projectFilePath, ProjectMetadata metadata) throws IOException, JSONException { String projectStr = FileUtils.readFileToString(new File(projectFilePath)); diff --git a/src/main/java/org/wise/portal/service/run/DuplicateRunCodeException.java b/src/main/java/org/wise/portal/service/run/DuplicateRunCodeException.java index 64e827695..83830befd 100644 --- a/src/main/java/org/wise/portal/service/run/DuplicateRunCodeException.java +++ b/src/main/java/org/wise/portal/service/run/DuplicateRunCodeException.java @@ -23,6 +23,8 @@ */ package org.wise.portal.service.run; +import java.io.Serial; + /** * A checked exception thrown when trying to create a run with * with a runcode that already exists in the data store @@ -31,6 +33,7 @@ */ public class DuplicateRunCodeException extends Exception { + @Serial private static final long serialVersionUID = 1L; public DuplicateRunCodeException(String message) { diff --git a/src/main/java/org/wise/portal/service/work/AchievementJsonModule.java b/src/main/java/org/wise/portal/service/work/AchievementJsonModule.java index 846979266..44e0ce38f 100644 --- a/src/main/java/org/wise/portal/service/work/AchievementJsonModule.java +++ b/src/main/java/org/wise/portal/service/work/AchievementJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.work; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.beans.factory.annotation.Autowired; @@ -10,9 +11,11 @@ @Service public class AchievementJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; - public AchievementJsonModule() {} + public AchievementJsonModule() { + } @Autowired public AchievementJsonModule(AchievementSerializer serializer) { diff --git a/src/main/java/org/wise/portal/service/work/EventJsonModule.java b/src/main/java/org/wise/portal/service/work/EventJsonModule.java index dbdbc967a..15ed75180 100644 --- a/src/main/java/org/wise/portal/service/work/EventJsonModule.java +++ b/src/main/java/org/wise/portal/service/work/EventJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.work; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.stereotype.Service; @@ -9,6 +10,7 @@ @Service public class EventJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; public EventJsonModule() { diff --git a/src/main/java/org/wise/portal/service/work/StudentAssetJsonModule.java b/src/main/java/org/wise/portal/service/work/StudentAssetJsonModule.java index 44be8254b..97d9296eb 100644 --- a/src/main/java/org/wise/portal/service/work/StudentAssetJsonModule.java +++ b/src/main/java/org/wise/portal/service/work/StudentAssetJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.work; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.beans.factory.annotation.Autowired; @@ -10,9 +11,11 @@ @Service public class StudentAssetJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; - public StudentAssetJsonModule() {} + public StudentAssetJsonModule() { + } @Autowired public StudentAssetJsonModule(StudentAssetSerializer serializer) { diff --git a/src/main/java/org/wise/portal/service/work/StudentWorkJsonModule.java b/src/main/java/org/wise/portal/service/work/StudentWorkJsonModule.java index 2aeb13fa3..3a7f9a89e 100644 --- a/src/main/java/org/wise/portal/service/work/StudentWorkJsonModule.java +++ b/src/main/java/org/wise/portal/service/work/StudentWorkJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.work; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.beans.factory.annotation.Autowired; @@ -11,12 +12,15 @@ @Service public class StudentWorkJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; - public StudentWorkJsonModule() {} + public StudentWorkJsonModule() { + } @Autowired - public StudentWorkJsonModule(StudentWorkSerializer serializer, StudentWorkDeserializer deserializer) { + public StudentWorkJsonModule(StudentWorkSerializer serializer, + StudentWorkDeserializer deserializer) { this.addSerializer(StudentWork.class, serializer); this.addDeserializer(StudentWork.class, deserializer); } diff --git a/src/main/java/org/wise/portal/service/workgroup/WorkgroupJsonModule.java b/src/main/java/org/wise/portal/service/workgroup/WorkgroupJsonModule.java index 8539c1aa4..c3d792668 100644 --- a/src/main/java/org/wise/portal/service/workgroup/WorkgroupJsonModule.java +++ b/src/main/java/org/wise/portal/service/workgroup/WorkgroupJsonModule.java @@ -1,5 +1,6 @@ package org.wise.portal.service.workgroup; +import java.io.Serial; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.stereotype.Service; @@ -9,6 +10,7 @@ @Service public class WorkgroupJsonModule extends SimpleModule { + @Serial private static final long serialVersionUID = 1L; public WorkgroupJsonModule() { diff --git a/src/main/java/org/wise/portal/spring/impl/CustomDispatcherServlet.java b/src/main/java/org/wise/portal/spring/impl/CustomDispatcherServlet.java index 8f4f84141..19066d55b 100644 --- a/src/main/java/org/wise/portal/spring/impl/CustomDispatcherServlet.java +++ b/src/main/java/org/wise/portal/spring/impl/CustomDispatcherServlet.java @@ -20,6 +20,7 @@ */ package org.wise.portal.spring.impl; +import java.io.Serial; import java.security.InvalidParameterException; import org.springframework.beans.BeanUtils; @@ -35,6 +36,7 @@ */ public class CustomDispatcherServlet extends DispatcherServlet { + @Serial private static final long serialVersionUID = 1L; /** diff --git a/src/main/java/org/wise/vle/domain/work/NotebookItemAlreadyInGroupException.java b/src/main/java/org/wise/vle/domain/work/NotebookItemAlreadyInGroupException.java index d6ba826d3..d36b709a5 100644 --- a/src/main/java/org/wise/vle/domain/work/NotebookItemAlreadyInGroupException.java +++ b/src/main/java/org/wise/vle/domain/work/NotebookItemAlreadyInGroupException.java @@ -1,6 +1,9 @@ package org.wise.vle.domain.work; +import java.io.Serial; + public class NotebookItemAlreadyInGroupException extends Exception { + @Serial private static final long serialVersionUID = 1L; public NotebookItemAlreadyInGroupException(NotebookItem notebookItem, String group) { diff --git a/src/test/java/org/wise/portal/dao/authentication/impl/HibernateStudentUserDetailsDaoTest.java b/src/test/java/org/wise/portal/dao/authentication/impl/HibernateStudentUserDetailsDaoTest.java index a997f92f2..e23345b20 100644 --- a/src/test/java/org/wise/portal/dao/authentication/impl/HibernateStudentUserDetailsDaoTest.java +++ b/src/test/java/org/wise/portal/dao/authentication/impl/HibernateStudentUserDetailsDaoTest.java @@ -49,7 +49,7 @@ */ public class HibernateStudentUserDetailsDaoTest extends AbstractTransactionalDbTests { - private static final Integer DEFAULT_NUMBEROFLOGINS = new Integer(3); + private static final Integer DEFAULT_NUMBEROFLOGINS = Integer.valueOf(3); private static final String DEFAULT_ROLE_1 = "default_role_1"; diff --git a/src/test/java/org/wise/portal/presentation/web/controllers/teacher/management/RemoveStudentRunControllerTest.java b/src/test/java/org/wise/portal/presentation/web/controllers/teacher/management/RemoveStudentRunControllerTest.java index 95b9b7c43..b21babe3e 100644 --- a/src/test/java/org/wise/portal/presentation/web/controllers/teacher/management/RemoveStudentRunControllerTest.java +++ b/src/test/java/org/wise/portal/presentation/web/controllers/teacher/management/RemoveStudentRunControllerTest.java @@ -3,7 +3,7 @@ import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; import org.easymock.EasyMockExtension; import org.easymock.Mock; From 0fdc07367c56ebc4515c181fe1b9fa2fa1ce0fca Mon Sep 17 00:00:00 2001 From: Hiroki Terashima Date: Thu, 17 Sep 2026 09:27:12 -0700 Subject: [PATCH 5/5] Add unit tests for chat/chatbot domain, project text wrapping, and controller utilities --- .../project/impl/ProjectServiceImpl.java | 2 +- .../web/controllers/ControllerUtilTest.java | 75 +++++++++++++++ .../project/impl/ProjectServiceImplTest.java | 32 +++++++ .../vle/domain/chatbot/ChatMessageTest.java | 72 ++++++++++++++ .../org/wise/vle/domain/chatbot/ChatTest.java | 96 +++++++++++++++++++ .../webservice/crater/CRaterServiceTest.java | 18 +++- 6 files changed, 293 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/wise/portal/presentation/web/controllers/ControllerUtilTest.java create mode 100644 src/test/java/org/wise/vle/domain/chatbot/ChatMessageTest.java create mode 100644 src/test/java/org/wise/vle/domain/chatbot/ChatTest.java diff --git a/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java b/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java index 4c3823f4a..b995edaec 100644 --- a/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java +++ b/src/main/java/org/wise/portal/service/project/impl/ProjectServiceImpl.java @@ -818,7 +818,7 @@ by the author(s). Authors are responsible for the usage and \ } } - private static String wrapText(String str, int wrapLength) { + static String wrapText(String str, int wrapLength) { if (str == null || str.length() <= wrapLength) { return str; } diff --git a/src/test/java/org/wise/portal/presentation/web/controllers/ControllerUtilTest.java b/src/test/java/org/wise/portal/presentation/web/controllers/ControllerUtilTest.java new file mode 100644 index 000000000..a2d140f22 --- /dev/null +++ b/src/test/java/org/wise/portal/presentation/web/controllers/ControllerUtilTest.java @@ -0,0 +1,75 @@ +package org.wise.portal.presentation.web.controllers; + +import static org.easymock.EasyMock.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.junit.jupiter.api.Test; +import org.wise.portal.domain.group.Group; +import org.wise.portal.domain.run.Run; +import org.wise.portal.domain.user.User; + +public class ControllerUtilTest { + + @Test + public void getNumStudentsInRun_emptyPeriods_returnsZero() { + Run run = mock(Run.class); + expect(run.getPeriods()).andReturn(Collections.emptySet()); + replay(run); + + int count = ControllerUtil.getNumStudentsInRun(run); + + assertEquals(0, count); + verify(run); + } + + @Test + public void getNumStudentsInRun_periodWithNoMembers_returnsZero() { + Run run = mock(Run.class); + Group period = mock(Group.class); + expect(run.getPeriods()).andReturn(Collections.singleton(period)); + expect(period.getMembers()).andReturn(Collections.emptySet()); + replay(run, period); + + int count = ControllerUtil.getNumStudentsInRun(run); + + assertEquals(0, count); + verify(run, period); + } + + @Test + public void getNumStudentsInRun_multiplePeriodsWithStudents_returnsTotalCount() { + Run run = mock(Run.class); + Group period1 = mock(Group.class); + Group period2 = mock(Group.class); + + User user1 = mock(User.class); + User user2 = mock(User.class); + User user3 = mock(User.class); + + Set period1Students = new HashSet<>(); + period1Students.add(user1); + period1Students.add(user2); + + Set period2Students = new HashSet<>(); + period2Students.add(user3); + + Set periods = new HashSet<>(); + periods.add(period1); + periods.add(period2); + + expect(run.getPeriods()).andReturn(periods); + expect(period1.getMembers()).andReturn(period1Students); + expect(period2.getMembers()).andReturn(period2Students); + + replay(run, period1, period2); + + int count = ControllerUtil.getNumStudentsInRun(run); + + assertEquals(3, count); + verify(run, period1, period2); + } +} diff --git a/src/test/java/org/wise/portal/service/project/impl/ProjectServiceImplTest.java b/src/test/java/org/wise/portal/service/project/impl/ProjectServiceImplTest.java index 16d8090b7..3160fd183 100644 --- a/src/test/java/org/wise/portal/service/project/impl/ProjectServiceImplTest.java +++ b/src/test/java/org/wise/portal/service/project/impl/ProjectServiceImplTest.java @@ -284,4 +284,36 @@ public void updateProjectNameIfNecessary_whenMetadataHasName_shouldUpdateNameInP } verify(appProperties); } + + @Test + public void wrapText_nullOrEmptyString_returnsInput() { + assertNull(ProjectServiceImpl.wrapText(null, 20)); + assertEquals("", ProjectServiceImpl.wrapText("", 20)); + } + + @Test + public void wrapText_shorterThanWrapLength_returnsUnchanged() { + String input = "Hello World"; + assertEquals("Hello World", ProjectServiceImpl.wrapText(input, 20)); + } + + @Test + public void wrapText_longerThanWrapLength_wrapsAtWordBoundary() { + String input = "The quick brown fox jumps over the lazy dog"; + String expected = "The quick brown\nfox jumps over\nthe lazy dog"; + assertEquals(expected, ProjectServiceImpl.wrapText(input, 15)); + } + + @Test + public void wrapText_preservesExistingNewlines() { + String input = "Line one\nLine two is quite long and should wrap"; + String expected = "Line one\nLine two is\nquite long and\nshould wrap"; + assertEquals(expected, ProjectServiceImpl.wrapText(input, 15)); + } + + @Test + public void wrapText_singleWordLongerThanWrapLength_doesNotSplitWord() { + String input = "Supercalifragilisticexpialidocious"; + assertEquals("Supercalifragilisticexpialidocious", ProjectServiceImpl.wrapText(input, 10)); + } } diff --git a/src/test/java/org/wise/vle/domain/chatbot/ChatMessageTest.java b/src/test/java/org/wise/vle/domain/chatbot/ChatMessageTest.java new file mode 100644 index 000000000..609f05fae --- /dev/null +++ b/src/test/java/org/wise/vle/domain/chatbot/ChatMessageTest.java @@ -0,0 +1,72 @@ +package org.wise.vle.domain.chatbot; + +import static org.junit.jupiter.api.Assertions.*; + +import java.sql.Timestamp; +import java.time.Instant; + +import org.junit.jupiter.api.Test; + +public class ChatMessageTest { + + @Test + public void initialState_hasExpectedDefaults() { + ChatMessage message = new ChatMessage(); + assertNull(message.getId()); + assertNull(message.getChat()); + assertNull(message.getRole()); + assertNull(message.getContent()); + assertNull(message.getTimestamp()); + assertNull(message.getNodeId()); + assertNull(message.getChatId()); + assertEquals(ChatMessage.class, message.getObjectClass()); + } + + @Test + public void gettersAndSetters_workAsExpected() { + ChatMessage message = new ChatMessage(); + Long id = 99L; + Chat chat = new Chat(); + chat.setId(42L); + String role = "user"; + String content = "How does photosynthesis work?"; + Timestamp timestamp = Timestamp.from(Instant.now()); + String nodeId = "node_1"; + Long chatId = 42L; + + message.setId(id); + message.setChat(chat); + message.setRole(role); + message.setContent(content); + message.setTimestamp(timestamp); + message.setNodeId(nodeId); + message.setChatId(chatId); + + assertEquals(id, message.getId()); + assertSame(chat, message.getChat()); + assertEquals(role, message.getRole()); + assertEquals(content, message.getContent()); + assertEquals(timestamp, message.getTimestamp()); + assertEquals(nodeId, message.getNodeId()); + assertEquals(chatId, message.getChatId()); + } + + @Test + public void convertToClientChatMessage_withNonNullChat_setsChatId() { + ChatMessage message = new ChatMessage(); + Chat chat = new Chat(); + chat.setId(55L); + message.setChat(chat); + + message.convertToClientChatMessage(); + + assertEquals(55L, message.getChatId()); + } + + @Test + public void convertToClientChatMessage_withNullChat_doesNotThrow() { + ChatMessage message = new ChatMessage(); + assertDoesNotThrow(message::convertToClientChatMessage); + assertNull(message.getChatId()); + } +} diff --git a/src/test/java/org/wise/vle/domain/chatbot/ChatTest.java b/src/test/java/org/wise/vle/domain/chatbot/ChatTest.java new file mode 100644 index 000000000..3aac411ac --- /dev/null +++ b/src/test/java/org/wise/vle/domain/chatbot/ChatTest.java @@ -0,0 +1,96 @@ +package org.wise.vle.domain.chatbot; + +import static org.junit.jupiter.api.Assertions.*; + +import java.sql.Timestamp; +import java.time.Instant; + +import org.junit.jupiter.api.Test; +import org.wise.portal.domain.run.Run; +import org.wise.portal.domain.run.impl.RunImpl; +import org.wise.portal.domain.workgroup.Workgroup; +import org.wise.portal.domain.workgroup.impl.WorkgroupImpl; + +public class ChatTest { + + @Test + public void initialState_hasExpectedDefaults() { + Chat chat = new Chat(); + assertNull(chat.getId()); + assertFalse(chat.isDeleted()); + assertNotNull(chat.getMessages()); + assertTrue(chat.getMessages().isEmpty()); + assertEquals(Chat.class, chat.getObjectClass()); + } + + @Test + public void gettersAndSetters_workAsExpected() { + Chat chat = new Chat(); + Long id = 42L; + String title = "Sample Chat Conversation"; + Timestamp now = Timestamp.from(Instant.now()); + Run run = new RunImpl(); + Workgroup workgroup = new WorkgroupImpl(); + + chat.setId(id); + chat.setTitle(title); + chat.setCreatedAt(now); + chat.setLastUpdated(now); + chat.setDeleted(true); + chat.setRun(run); + chat.setWorkgroup(workgroup); + chat.setRunId(10L); + chat.setWorkgroupId(20L); + + assertEquals(id, chat.getId()); + assertEquals(title, chat.getTitle()); + assertEquals(now, chat.getCreatedAt()); + assertEquals(now, chat.getLastUpdated()); + assertTrue(chat.isDeleted()); + assertSame(run, chat.getRun()); + assertSame(workgroup, chat.getWorkgroup()); + assertEquals(10L, chat.getRunId()); + assertEquals(20L, chat.getWorkgroupId()); + } + + @Test + public void addMessage_associatesMessageBidirectionally() { + Chat chat = new Chat(); + ChatMessage message = new ChatMessage(); + + chat.addMessage(message); + + assertEquals(1, chat.getMessages().size()); + assertTrue(chat.getMessages().contains(message)); + assertSame(chat, message.getChat()); + } + + @Test + public void removeMessage_disassociatesMessageBidirectionally() { + Chat chat = new Chat(); + ChatMessage message = new ChatMessage(); + chat.addMessage(message); + + chat.removeMessage(message); + + assertTrue(chat.getMessages().isEmpty()); + assertNull(message.getChat()); + } + + @Test + public void convertToClientChat_setsRunIdAndWorkgroupId() { + Chat chat = new Chat(); + Run run = new RunImpl(); + run.setId(101L); + Workgroup workgroup = new WorkgroupImpl(); + workgroup.setId(202L); + + chat.setRun(run); + chat.setWorkgroup(workgroup); + + chat.convertToClientChat(); + + assertEquals(101L, chat.getRunId()); + assertEquals(202L, chat.getWorkgroupId()); + } +} diff --git a/src/test/java/org/wise/vle/domain/webservice/crater/CRaterServiceTest.java b/src/test/java/org/wise/vle/domain/webservice/crater/CRaterServiceTest.java index ec7bdcf81..f4168a641 100644 --- a/src/test/java/org/wise/vle/domain/webservice/crater/CRaterServiceTest.java +++ b/src/test/java/org/wise/vle/domain/webservice/crater/CRaterServiceTest.java @@ -6,7 +6,6 @@ import org.easymock.EasyMockExtension; import org.easymock.Mock; -import org.easymock.TestSubject; import org.json.JSONException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -112,4 +111,21 @@ public void getBerkeleyVerificationResponse_ShouldGetCRaterProperties() throws J verify(appProperties); mockServer.verify(); } + + @Test + public void getScoringResponse_WhenServerReturns500_ShouldHandleGracefully() + throws JSONException { + beforeETS(); + CRaterScoringRequest request = new CRaterScoringRequest(); + request.setItemId(itemId); + request.setResponseId("1234567890"); + request.setResponseText("hello"); + expect(appProperties.getProperty("cRater_scoring_url")).andReturn(scoringUrl); + replay(appProperties); + mockServer.expect(requestTo(scoringUrl)).andExpect(method(HttpMethod.POST)) + .andRespond(withServerError()); + cRaterService.getCRaterResponse(request); + verify(appProperties); + mockServer.verify(); + } }