diff --git a/src/main/java/data_access/InMemoryGroupDataAccessObject.java b/src/main/java/data_access/InMemoryGroupDataAccessObject.java index 63821fd..c8cc49c 100644 --- a/src/main/java/data_access/InMemoryGroupDataAccessObject.java +++ b/src/main/java/data_access/InMemoryGroupDataAccessObject.java @@ -8,6 +8,7 @@ import use_case.login.LoginGroupsDataAccessInterface; import use_case.viewgrouptasks.ViewGroupTasksGroupDataAccessInterface; +import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -23,6 +24,9 @@ public class InMemoryGroupDataAccessObject implements private final Map groups = new HashMap<>(); private String currentGroupID; + private static final String JOIN_CODE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + private static final int JOIN_CODE_LENGTH = 6; + private final SecureRandom random = new SecureRandom(); /** * Checks if the given groupCode exists. @@ -53,6 +57,9 @@ public Group getGroup(String groupId) { */ @Override public void save(Group group) { + if (group.getGroupID().isBlank()) { + group.setGroupId(generateUniqueJoinCode()); + } groups.put(group.getGroupID(), group); } @@ -89,4 +96,21 @@ public String getCurrentGroupID() { public void saveMasterSchedule(Group group) { groups.put(group.getGroupID(), group); } + + private String generateUniqueJoinCode() { + String code; + do { + code = generateRandomJoinCode(); + } while (groupCodeExists(code)); + return code; + } + + private String generateRandomJoinCode() { + StringBuilder sb = new StringBuilder(JOIN_CODE_LENGTH); + for (int i = 0; i < JOIN_CODE_LENGTH; i++) { + int idx = random.nextInt(JOIN_CODE_CHARS.length()); + sb.append(JOIN_CODE_CHARS.charAt(idx)); + } + return sb.toString(); + } } diff --git a/src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java b/src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java index 91adfa8..907030b 100644 --- a/src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java +++ b/src/main/java/use_case/create_group/CreateGroupDataAccessInterface.java @@ -23,7 +23,5 @@ public interface CreateGroupDataAccessInterface { * @param username the username whose group memberships are requested * @return a list of Group entities the user is a member of **/ - default List getGroupsForUser(String username) { - return null; - } + List getGroupsForUser(String username); } diff --git a/src/main/java/use_case/create_group/CreateGroupInteractor.java b/src/main/java/use_case/create_group/CreateGroupInteractor.java index fa758bb..c953c18 100644 --- a/src/main/java/use_case/create_group/CreateGroupInteractor.java +++ b/src/main/java/use_case/create_group/CreateGroupInteractor.java @@ -57,6 +57,8 @@ public void execute(CreateGroupInputData createGroupInputData) { group.getGroupID(), UserRole.MODERATOR, true); membershipDataAccessObject.save(membership); + groupCreator.addMembership(membership); + group.addMembership(membership); List newGroups = groupDataAccessObject.getGroupsForUser(groupCreator.getName()); Map newGroupHashMap = new HashMap<>(); for (Group newGroup : newGroups) { diff --git a/src/test/java/use_case/create_group/CreateGroupInteractorTest.java b/src/test/java/use_case/create_group/CreateGroupInteractorTest.java index bc3f346..5711c7a 100644 --- a/src/test/java/use_case/create_group/CreateGroupInteractorTest.java +++ b/src/test/java/use_case/create_group/CreateGroupInteractorTest.java @@ -33,6 +33,8 @@ void successTest() { public void prepareSuccessView(CreateGroupOutputData outputData) { assertEquals("Andrew's Group", outputData.getGroupName()); assertEquals(GroupType.PROJECT, outputData.getGroupType()); + assertFalse(outputData.getGroupID().isBlank()); + assertTrue(outputData.getGroups().containsKey(outputData.getGroupID())); } @Override @@ -61,6 +63,7 @@ public void openCreateGroupModal() { membershipFactory ); + interactor.openCreateGroupModal(); interactor.execute(inputData); } diff --git a/src/test/java/use_case/join_group/JoinGroupInteractorTest.java b/src/test/java/use_case/join_group/JoinGroupInteractorTest.java index b8c5bd5..292cb91 100644 --- a/src/test/java/use_case/join_group/JoinGroupInteractorTest.java +++ b/src/test/java/use_case/join_group/JoinGroupInteractorTest.java @@ -45,6 +45,7 @@ void successValidGroupCodeTest() throws IOException { userDataAccess.save(myUser); userDataAccess.setCurrentUsername(myUser.getName()); + JoinGroupOutputBoundary successPresenter = new JoinGroupOutputBoundary() { @Override public void prepareSuccessView(JoinGroupOutputData outputData) { @@ -75,6 +76,7 @@ void failureEmptyGroupCodeTest() throws IOException { User moderator = new User("moderator", "moderator@gmail.com", "pass"); Group group = new Group("existing group to join", validCode, GroupType.STUDY); + group.setGroupId(validCode); Membership moderatorMembership = new Membership(moderator.getName(), group.getGroupID(), UserRole.MODERATOR, true); moderator.addMembership(moderatorMembership);