Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor methods and add requirenonnull #216

Merged
merged 8 commits into from
Apr 5, 2020
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
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,7 @@ public CommandResult execute(Model model) throws CommandException {
throw new CommandException(MESSAGE_DUPLICATE_EXERCISE);
}

// mutates the list belonging to the client by adding the exercise
clientToEditExerciseList.addToSorted(toAdd);

Client editedClient = new Client(clientToEdit.getName(), clientToEdit.getGender(), clientToEdit.getPhone(),
clientToEdit.getEmail(), clientToEdit.getAddress(), clientToEdit.getTags(), clientToEdit.getBirthday(),
clientToEdit.getCurrentWeight(), clientToEdit.getTargetWeight(), clientToEdit.getHeight(),
clientToEdit.getRemark(), clientToEdit.getSports(), clientToEditExerciseList,
clientToEdit.getPersonalBest(), clientToEdit.getScheduleList());

model.setClient(clientToEdit, editedClient);
Client editedClient = model.addExerciseToClient(toAdd);

PersonalBestFinder.generateAndSetPersonalBest(editedClient);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class DeleteExerciseCommand extends Command {
private final Index targetIndex;

public DeleteExerciseCommand(Index targetIndex) {
requireNonNull(targetIndex);
this.targetIndex = targetIndex;
}

Expand Down
6 changes: 6 additions & 0 deletions src/main/java/seedu/address/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ public interface Model {
*/
ObservableList<ScheduleDay> getScheduleDayList();

/**
* Adds the given exercise to the clientInView exercise list. There must be
* client in clientInView.
*/
Client addExerciseToClient(Exercise exercise);

/**
* Deletes the given exercise in clientInView exercise list.
* There must be client in clientInView.
Expand Down
38 changes: 33 additions & 5 deletions src/main/java/seedu/address/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ public boolean hasClientInView() {

@Override
public void updateClientViewIfApplicable(Client clientToEdit, Client editedClient) {
requireAllNonNull(clientToEdit, editedClient);
if (!clientInView.hasClientInView()) {
return;
}
Expand All @@ -188,19 +189,46 @@ public ObservableList<ScheduleDay> getScheduleDayList() {

//=========== Exercise ================================================================================

/**
* Creates a new {@code Client} with the new exercise list. Other attributes remain the
* same.
*/
private Client buildClientWithNewExerciseList(Client clientToEdit,
UniqueExerciseList clientToEditExerciseList) {

Client editedClient = new Client(clientToEdit.getName(), clientToEdit.getGender(), clientToEdit.getPhone(),
clientToEdit.getEmail(), clientToEdit.getAddress(), clientToEdit.getTags(), clientToEdit.getBirthday(),
clientToEdit.getCurrentWeight(), clientToEdit.getTargetWeight(), clientToEdit.getHeight(),
clientToEdit.getRemark(), clientToEdit.getSports(), clientToEditExerciseList,
clientToEdit.getPersonalBest(), clientToEdit.getScheduleList());

return editedClient;
}

@Override
public Client addExerciseToClient(Exercise exercise) {
requireNonNull(exercise);

Client clientToEdit = getClientInView();
UniqueExerciseList clientToEditExerciseList = clientToEdit.getExerciseList();
clientToEditExerciseList.addToSorted(exercise);

Client editedClient = buildClientWithNewExerciseList(clientToEdit, clientToEditExerciseList);

setClient(clientToEdit, editedClient);
return editedClient;
}

@Override
public void deleteExercise (Exercise exercise) {
requireNonNull(exercise);
Client clientToEdit = getClientInView();
UniqueExerciseList clientToEditExerciseList = clientToEdit.getExerciseList();

// mutates the list belonging to the client by removing the exercise
clientToEditExerciseList.remove(exercise);

Client editedClient = new Client(clientToEdit.getName(), clientToEdit.getGender(), clientToEdit.getPhone(),
clientToEdit.getEmail(), clientToEdit.getAddress(), clientToEdit.getTags(), clientToEdit.getBirthday(),
clientToEdit.getCurrentWeight(), clientToEdit.getTargetWeight(), clientToEdit.getHeight(),
clientToEdit.getRemark(), clientToEdit.getSports(), clientToEditExerciseList,
clientToEdit.getPersonalBest(), clientToEdit.getScheduleList());
Client editedClient = buildClientWithNewExerciseList(clientToEdit, clientToEditExerciseList);

setClient(clientToEdit, editedClient);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,11 @@ public void updateClientViewIfApplicable(Client clientToEdit, Client editedClien
throw new AssertionError("This method should not be called.");
}

@Override
public Client addExerciseToClient(Exercise exercise) {
throw new AssertionError("This method should not be called.");
}

@Override
public void deleteExercise(Exercise exercise) {
throw new AssertionError("This method should not be called.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@
public class AddExerciseCommandTest {

private Model model;
private Client clientInView;

@BeforeEach
public void setUp() {
model = new ModelManager(getTypicalAddressBook(), new UserPrefs(), new ClientInView());
clientInView = model.getFilteredClientList().get(INDEX_FIRST_CLIENT.getZeroBased());
}

@Test
Expand All @@ -40,22 +42,19 @@ public void constructor_nullClient_throwsNullPointerException() {

@Test
public void execute_exerciseAcceptedByModel_addSuccessful() throws Exception {
Client client = model.getFilteredClientList().get(INDEX_FIRST_CLIENT.getZeroBased());
model.setClientInView(client);

model.setClientInView(clientInView);
Exercise newExercise = new ExerciseBuilder().withExerciseName("Changed").build();

CommandResult commandResult = new AddExerciseCommand(newExercise).execute(model);

assertEquals(String.format(AddExerciseCommand.MESSAGE_SUCCESS, client.getExerciseList().toString()),
commandResult.getFeedbackToUser());
assertEquals(String.format(AddExerciseCommand.MESSAGE_SUCCESS,
clientInView.getExerciseList().toString()),
commandResult.getFeedbackToUser());
}

@Test
public void execute_noClientInView_throwsCommandException() {
Client client = model.getFilteredClientList().get(INDEX_FIRST_CLIENT.getZeroBased());

Exercise exerciseToAdd = client.getExerciseList().getExercise(INDEX_FIRST_EXERCISE);
Exercise exerciseToAdd = clientInView.getExerciseList().getExercise(INDEX_FIRST_EXERCISE);

AddExerciseCommand addExerciseCommand = new AddExerciseCommand(exerciseToAdd);

Expand All @@ -64,7 +63,6 @@ public void execute_noClientInView_throwsCommandException() {

@Test
public void execute_duplicateExercise_throwsCommandException() {
Client clientInView = model.getFilteredClientList().get(INDEX_FIRST_EXERCISE.getZeroBased());
model.setClientInView(clientInView);

Exercise exerciseToAdd = clientInView.getExerciseList().getExercise(INDEX_FIRST_EXERCISE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure;
import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess;
import static seedu.address.testutil.TypicalClients.ALICE_DELETED_EXERCISE;
import static seedu.address.testutil.TypicalClients.getTypicalAddressBook;
import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_CLIENT;
import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_EXERCISE;
import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_EXERCISE;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import seedu.address.commons.core.Messages;
Expand All @@ -22,10 +24,19 @@

/**
* Contains integration tests (interaction with the Model) and unit tests for {@code DeleteExerciseCommand}.
*
* @author @yonggiee
*/
public class DeleteExerciseCommandTest {

private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs(), new ClientInView());
private Model model;
private Client clientInView;

@BeforeEach
public void setUp() {
model = new ModelManager(getTypicalAddressBook(), new UserPrefs(), new ClientInView());
clientInView = model.getFilteredClientList().get(INDEX_FIRST_CLIENT.getZeroBased());
}

@Test
public void execute_noClientInView_throwsCommandException() {
Expand All @@ -36,25 +47,25 @@ public void execute_noClientInView_throwsCommandException() {

@Test
public void execute_validIndexUnfilteredList_success() {
Client clientInView = model.getFilteredClientList().get(INDEX_FIRST_CLIENT.getZeroBased());
model.setClientInView(clientInView);
System.out.println(clientInView.getExerciseList());

Exercise exerciseToDelete = clientInView.getExerciseList().getExercise(INDEX_FIRST_EXERCISE);
DeleteExerciseCommand deleteExerciseCommand = new DeleteExerciseCommand(INDEX_FIRST_EXERCISE);

String expectedMessage = String.format(DeleteExerciseCommand.MESSAGE_SUCCESS, exerciseToDelete);

ModelManager expectedModel = new ModelManager(getTypicalAddressBook(), new UserPrefs(), new ClientInView());
Client expectedClientInView = expectedModel.getFilteredClientList().get(INDEX_FIRST_CLIENT.getZeroBased());
expectedModel.setClientInView(expectedClientInView);
// ALICE is static so deleting in model will also stimulate delete in expectedModel
Client alice = expectedModel.getFilteredClientList().get(INDEX_FIRST_CLIENT.getZeroBased());
expectedModel.setClient(alice, ALICE_DELETED_EXERCISE);

expectedModel.setClientInView(ALICE_DELETED_EXERCISE);
// ALICE_DELETED_EXERCISE have UniqueExerciseList with the exercise deleted

assertCommandSuccess(deleteExerciseCommand, model, expectedMessage, expectedModel);
}

@Test
public void execute_invalidIndexUnfilteredList_throwsCommandException() {
Client clientInView = model.getFilteredClientList().get(INDEX_FIRST_EXERCISE.getZeroBased());
model.setClientInView(clientInView);

Index outOfBoundIndex = Index.fromOneBased(clientInView.getExerciseList().size() + 1);
Expand Down
2 changes: 2 additions & 0 deletions src/test/java/seedu/address/testutil/ExerciseBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

/**
* A utility class to help with building Exercise objects.
*
* @author @yonggiee
*/
public class ExerciseBuilder {

Expand Down
6 changes: 6 additions & 0 deletions src/test/java/seedu/address/testutil/TypicalClients.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ public class TypicalClients {
.withExercisesInExerciseList(new ExerciseBuilder().build())
.withExercisesInExerciseList(new ExerciseBuilder().withExerciseName("ANOTHER").build())
.build();
public static final Client ALICE_DELETED_EXERCISE = new ClientBuilder().withName("Alice Pauline")
.withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com")
.withPhone("94351253")
.withTags("friends")
.withExercisesInExerciseList(new ExerciseBuilder().withExerciseName("ANOTHER").build())
.build();
public static final Client BENSON = new ClientBuilder().withName("Benson Meier")
.withAddress("311, Clementi Ave 2, #02-25")
.withEmail("johnd@example.com").withPhone("98765432")
Expand Down