Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions src/main/java/data_access/InMemoryGroupDataAccessObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -23,6 +24,9 @@ public class InMemoryGroupDataAccessObject implements

private final Map<String, Group> 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.
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Group> getGroupsForUser(String username) {
return null;
}
List<Group> getGroupsForUser(String username);
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ public void execute(CreateGroupInputData createGroupInputData) {
group.getGroupID(), UserRole.MODERATOR, true);

membershipDataAccessObject.save(membership);
groupCreator.addMembership(membership);
group.addMembership(membership);
List<Group> newGroups = groupDataAccessObject.getGroupsForUser(groupCreator.getName());
Map<String, String> newGroupHashMap = new HashMap<>();
for (Group newGroup : newGroups) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -61,6 +63,7 @@ public void openCreateGroupModal() {
membershipFactory
);

interactor.openCreateGroupModal();
interactor.execute(inputData);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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);
Expand Down