Skip to content

Commit

Permalink
Add test cases and extract fixtures
Browse files Browse the repository at this point in the history
  • Loading branch information
irvinlim committed Nov 5, 2016
1 parent 86da74b commit d774b13
Showing 1 changed file with 97 additions and 67 deletions.
164 changes: 97 additions & 67 deletions src/test/java/seedu/todo/guitests/UpdateCommandTest.java
Original file line number Diff line number Diff line change
@@ -1,147 +1,177 @@
package seedu.todo.guitests;

import static org.junit.Assert.*;
import static seedu.todo.testutil.AssertUtil.*;

import java.time.LocalDateTime;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import seedu.todo.commons.util.DateUtil;
import seedu.todo.controllers.UpdateController;
import seedu.todo.models.Event;
import seedu.todo.models.Task;

public class UpdateCommandTest extends GuiTest {

// Fixtures
private LocalDateTime twoDaysFromNow = LocalDateTime.now().plusDays(2);
private String twoDaysFromNowString = DateUtil.formatDate(twoDaysFromNow);
private String twoDaysFromNowIsoString = DateUtil.formatIsoDate(twoDaysFromNow);
private Event testEvent = new Event();
private Task testTask = new Task();

@Before
public void initTestCase() {
testEvent = new Event();
testTask = new Task();
console.runCommand("clear");
}

@Test
public void updateCommand_updateTaskName_success() {
// Clear first
console.runCommand("clear");

// Add a task
console.runCommand("add Buy milk by 2016-10-15 2pm");

// Update the task
String command = "update 1 name Buy bread";
Task task = new Task();
task.setName("Buy bread");
task.setDueDate(DateUtil.parseDateTime("2016-10-15 14:00:00"));
assertTaskVisibleAfterCmd(command, task);
testTask.setName("Buy bread");
testTask.setDueDate(DateUtil.parseDateTime("2016-10-15 14:00:00"));
assertTaskVisibleAfterCmd(command, testTask);
}

@Test
public void updateCommand_updateTaskWithDeadlineToNewDeadline_success() {
// Clear first
console.runCommand("clear");

// Add a task
console.runCommand("add Buy milk by 2016-10-15 2pm");

// Update the task
String command = "update 1 by today 5pm";
Task task = new Task();
task.setName("Buy milk");
task.setDueDate(LocalDateTime.now().toLocalDate().atTime(17, 0));
assertTaskVisibleAfterCmd(command, task);
testTask.setName("Buy milk");
testTask.setDueDate(LocalDateTime.now().toLocalDate().atTime(17, 0));
assertTaskVisibleAfterCmd(command, testTask);
}

@Test
public void updateCommand_updateFloatingTaskToNewDeadline_success() {
// Clear first
console.runCommand("clear");

// Add a task
console.runCommand("add Buy milk");

// Update the task
String command = "update 1 by today 5pm";
Task task = new Task();
task.setName("Buy milk");
task.setDueDate(LocalDateTime.now().toLocalDate().atTime(17, 0));
assertTaskVisibleAfterCmd(command, task);
testTask.setName("Buy milk");
testTask.setDueDate(LocalDateTime.now().toLocalDate().atTime(17, 0));
assertTaskVisibleAfterCmd(command, testTask);
}

@Ignore
@Test
public void updateCommand_updateTaskWithDeadlineToFloatingTask() {
// TODO: Make this pass

// Clear first
console.runCommand("clear");

// Add a task
console.runCommand("add Buy milk by today");

// Update the task
String command = "update 1 nodeadline";
Task task = new Task();
task.setName("Buy milk");
task.setDueDate(DateUtil.NO_DATETIME_VALUE);
assertTaskVisibleAfterCmd(command, task);
testTask.setName("Buy milk");
testTask.setDueDate(DateUtil.NO_DATETIME_VALUE);
assertTaskVisibleAfterCmd(command, testTask);
}

@Test
public void updateCommand_updateEventName_success() {
// Clear first
console.runCommand("clear");

// Get formatted string for two days from now, e.g. 17 Oct 2016
LocalDateTime twoDaysFromNow = LocalDateTime.now().plusDays(2);
String twoDaysFromNowString = DateUtil.formatDate(twoDaysFromNow);
String twoDaysFromNowIsoString = DateUtil.formatIsoDate(twoDaysFromNow);

// Add a task
console.runCommand(String.format("add event Presentation from %s 2pm to %s 9pm", twoDaysFromNowString, twoDaysFromNowString));

// Update the task
String command = "update 1 name Updated presentation";
Event event = new Event();
event.setName("Updated presentation");
event.setStartDate(DateUtil.parseDateTime(String.format("%s 14:00:00", twoDaysFromNowIsoString)));
event.setEndDate(DateUtil.parseDateTime(String.format("%s 21:00:00", twoDaysFromNowIsoString)));
assertEventVisibleAfterCmd(command, event);
testEvent.setName("Updated presentation");
testEvent.setStartDate(DateUtil.parseDateTime(String.format("%s 14:00:00", twoDaysFromNowIsoString)));
testEvent.setEndDate(DateUtil.parseDateTime(String.format("%s 21:00:00", twoDaysFromNowIsoString)));
assertEventVisibleAfterCmd(command, testEvent);
}

@Test
public void updateCommand_updateEventStartDate_success() {
// Clear first
console.runCommand("clear");

// Get formatted string for two days from now, e.g. 17 Oct 2016
LocalDateTime twoDaysFromNow = LocalDateTime.now().plusDays(2);
String twoDaysFromNowString = DateUtil.formatDate(twoDaysFromNow);
String twoDaysFromNowIsoString = DateUtil.formatIsoDate(twoDaysFromNow);

// Add a task
console.runCommand(String.format("add event Presentation from %s 2pm to %s 9pm", twoDaysFromNowString, twoDaysFromNowString));

// Update the task
String command = String.format("update 1 from %s 5pm", twoDaysFromNowString);
Event event = new Event();
event.setName("Presentation");
event.setStartDate(DateUtil.parseDateTime(String.format("%s 17:00:00", twoDaysFromNowIsoString)));
event.setEndDate(DateUtil.parseDateTime(String.format("%s 21:00:00", twoDaysFromNowIsoString)));
assertEventVisibleAfterCmd(command, event);

testEvent.setName("Presentation");
testEvent.setStartDate(DateUtil.parseDateTime(String.format("%s 17:00:00", twoDaysFromNowIsoString)));
testEvent.setEndDate(DateUtil.parseDateTime(String.format("%s 21:00:00", twoDaysFromNowIsoString)));
assertEventVisibleAfterCmd(command, testEvent);
}

@Test
public void updateCommand_updateEventEndDate_success() {
// Clear first
console.runCommand("clear");

// Get formatted string for two days from now, e.g. 17 Oct 2016
LocalDateTime twoDaysFromNow = LocalDateTime.now().plusDays(2);
String twoDaysFromNowString = DateUtil.formatDate(twoDaysFromNow);
String twoDaysFromNowIsoString = DateUtil.formatIsoDate(twoDaysFromNow);

// Add a task
console.runCommand(String.format("add event Presentation from %s 2pm to %s 9pm", twoDaysFromNowString, twoDaysFromNowString));

// Update the task
String command = String.format("update 1 to %s 5pm", twoDaysFromNowString);
Event event = new Event();
event.setName("Presentation");
event.setStartDate(DateUtil.parseDateTime(String.format("%s 14:00:00", twoDaysFromNowIsoString)));
event.setEndDate(DateUtil.parseDateTime(String.format("%s 17:00:00", twoDaysFromNowIsoString)));
assertEventVisibleAfterCmd(command, event);
testEvent.setName("Presentation");
testEvent.setStartDate(DateUtil.parseDateTime(String.format("%s 14:00:00", twoDaysFromNowIsoString)));
testEvent.setEndDate(DateUtil.parseDateTime(String.format("%s 17:00:00", twoDaysFromNowIsoString)));
assertEventVisibleAfterCmd(command, testEvent);
}

@Test
public void updateCommand_missingIndex_disambiguate() {
console.runCommand("add Buy milk");
console.runCommand("update");
assertEquals("update <index> [name \"<name>\"] [by \"<deadline>\"]", console.getConsoleInputText());
assertSameDisambiguationMessage(UpdateController.MESSAGE_INVALID_ITEM_OR_PARAM, console);
}

@Test
public void updateCommand_missingUpdateParams_disambiguate() {
console.runCommand("add Buy milk");
console.runCommand("update 1");
assertEquals("update 1 [name \"<name>\"] [by \"<deadline>\"]", console.getConsoleInputText());
assertSameDisambiguationMessage(null, console);
}

@Test
public void updateCommand_missingParamType_disambiguate() {
console.runCommand("add Buy milk");
console.runCommand("update 1 Buy bread");
assertEquals("update <index> [name \"<name>\"] [by \"<deadline>\"]", console.getConsoleInputText());
assertSameDisambiguationMessage(UpdateController.MESSAGE_INVALID_ITEM_OR_PARAM, console);
}

@Test
public void updateCommand_missingParamValue_disambiguate() {
console.runCommand("add Buy milk");
console.runCommand("update "
+ ""
+ ""
+ ""
+ ""
+ "1 name");
assertEquals("update 1 [name \"<name>\"] [by \"<deadline>\"]", console.getConsoleInputText());
assertSameDisambiguationMessage(null, console);
}

@Test
public void updateCommand_invalidIndex_disambiguate() {
console.runCommand("add Buy milk");
console.runCommand("update 2 name Buy bread");
assertEquals("update 2 [name \"Buy bread\"] [by \"<deadline>\"]", console.getConsoleInputText());
assertSameDisambiguationMessage(UpdateController.MESSAGE_INVALID_ITEM_OR_PARAM, console);
}

@Test
public void updateCommand_invalidDate_disambiguate() {
console.runCommand(String.format("add Buy milk by %s", twoDaysFromNowIsoString));
console.runCommand("update 1 by invaliddate");
assertEquals("update 1 [name \"<name>\"] [by \"invaliddate\"]", console.getConsoleInputText());
assertSameDisambiguationMessage(UpdateController.MESSAGE_CANNOT_PARSE_DATE, console);
}

}

0 comments on commit d774b13

Please sign in to comment.