Skip to content

Commit 952856e

Browse files
authored
Merge pull request #121 from nopenotj/1.2-meeting-tests
Add simple tests for meeting
2 parents 7251c25 + 04ded50 commit 952856e

File tree

3 files changed

+378
-1
lines changed

3 files changed

+378
-1
lines changed

src/main/java/seedu/address/logic/commands/AddMeetingCommand.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class AddMeetingCommand extends Command {
5252
private final Set<Name> nameList;
5353

5454
/**
55-
* Creates an AddMeetingCommand to add the specified {@code Meeting}
55+
* Creates an AddMeetingCommand to add a meeting with specified params
5656
*/
5757
public AddMeetingCommand(MeetingName meetingName, Date date, Time time, Set<Name> nameList) {
5858
requireAllNonNull(meetingName, date, time, nameList);
@@ -62,6 +62,18 @@ public AddMeetingCommand(MeetingName meetingName, Date date, Time time, Set<Name
6262
this.nameList = nameList;
6363
}
6464

65+
/**
66+
* Creates an AddMeetingCommand to add the specified {@code Meeting}
67+
* For Testing.
68+
*/
69+
public AddMeetingCommand(Meeting toAdd) {
70+
requireAllNonNull(toAdd);
71+
this.meetingName = toAdd.getMeetingName();
72+
this.date = toAdd.getDate();
73+
this.time = toAdd.getTime();
74+
this.nameList = toAdd.getMembers().stream().map(person -> person.getName()).collect(Collectors.toSet());
75+
}
76+
6577
@Override
6678
public CommandResult execute(Model model) throws CommandException {
6779
requireNonNull(model);
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package seedu.address.logic.commands;
2+
3+
import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure;
4+
import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess;
5+
import static seedu.address.testutil.TypicalMeetings.getTypicalMeetingBook;
6+
import static seedu.address.testutil.TypicalModules.getTypicalModuleBook;
7+
import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook;
8+
9+
import org.junit.jupiter.api.BeforeEach;
10+
import org.junit.jupiter.api.Test;
11+
12+
import seedu.address.model.Model;
13+
import seedu.address.model.ModelManager;
14+
import seedu.address.model.UserPrefs;
15+
import seedu.address.model.meeting.Meeting;
16+
import seedu.address.testutil.MeetingBuilder;
17+
18+
19+
/**
20+
* Contains integration tests (interaction with the Model) for {@code AddMeetingCommand}.
21+
*/
22+
public class AddMeetingCommandIntegrationTest {
23+
24+
private Model model;
25+
26+
@BeforeEach
27+
public void setUp() {
28+
model = new ModelManager(getTypicalAddressBook(), getTypicalMeetingBook(),
29+
getTypicalModuleBook(), new UserPrefs());
30+
}
31+
32+
@Test
33+
public void execute_newMeeting_success() {
34+
Meeting validMeeting = new MeetingBuilder().build();
35+
36+
Model expectedModel = new ModelManager(model.getAddressBook(), model.getMeetingBook(), model.getModuleBook(),
37+
new UserPrefs());
38+
expectedModel.addMeeting(validMeeting);
39+
40+
assertCommandSuccess(new AddMeetingCommand(validMeeting), model,
41+
String.format(AddMeetingCommand.MESSAGE_SUCCESS, validMeeting), expectedModel);
42+
}
43+
44+
@Test
45+
public void execute_duplicateMeeting_throwsCommandException() {
46+
Meeting meetingInList = model.getMeetingBook().getMeetingList().get(0);
47+
assertCommandFailure(new AddMeetingCommand(meetingInList), model, AddMeetingCommand.MESSAGE_DUPLICATE_MEETING);
48+
}
49+
50+
}
Lines changed: 315 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,315 @@
1+
package seedu.address.logic.commands;
2+
3+
import static java.util.Objects.requireNonNull;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertFalse;
6+
import static org.junit.jupiter.api.Assertions.assertTrue;
7+
import static seedu.address.testutil.Assert.assertThrows;
8+
9+
import java.nio.file.Path;
10+
import java.util.ArrayList;
11+
import java.util.Arrays;
12+
import java.util.function.Predicate;
13+
14+
import org.junit.jupiter.api.Test;
15+
16+
import javafx.collections.ObservableList;
17+
import seedu.address.commons.core.GuiSettings;
18+
import seedu.address.logic.commands.exceptions.CommandException;
19+
import seedu.address.model.MeetingBook;
20+
import seedu.address.model.Model;
21+
import seedu.address.model.ReadOnlyAddressBook;
22+
import seedu.address.model.ReadOnlyMeetingBook;
23+
import seedu.address.model.ReadOnlyModuleBook;
24+
import seedu.address.model.ReadOnlyUserPrefs;
25+
import seedu.address.model.meeting.Meeting;
26+
import seedu.address.model.meeting.MeetingName;
27+
import seedu.address.model.module.Module;
28+
import seedu.address.model.module.ModuleName;
29+
import seedu.address.model.person.Name;
30+
import seedu.address.model.person.Person;
31+
import seedu.address.testutil.MeetingBuilder;
32+
33+
34+
35+
public class AddMeetingCommandTest {
36+
37+
@Test
38+
public void constructor_nullParams_throwsNullPointerException() {
39+
assertThrows(NullPointerException.class, () ->
40+
new AddMeetingCommand(null, null, null, null));
41+
}
42+
43+
@Test
44+
public void execute_meetingAcceptedByModel_addSuccessful() throws Exception {
45+
ModelStubAcceptingMeetingAdded modelStub = new ModelStubAcceptingMeetingAdded();
46+
Meeting validMeeting = new MeetingBuilder().build();
47+
48+
CommandResult commandResult = new AddMeetingCommand(validMeeting).execute(modelStub);
49+
50+
assertEquals(String.format(AddMeetingCommand.MESSAGE_SUCCESS, validMeeting), commandResult.getFeedbackToUser());
51+
assertEquals(Arrays.asList(validMeeting), modelStub.meetingsAdded);
52+
}
53+
54+
@Test
55+
public void execute_duplicateMeeting_throwsCommandException() {
56+
Meeting validMeeting = new MeetingBuilder().build();
57+
AddMeetingCommand addMeetingCommand = new AddMeetingCommand(validMeeting);
58+
ModelStub modelStub = new ModelStubWithMeeting(validMeeting);
59+
60+
assertThrows(CommandException.class, AddMeetingCommand.MESSAGE_DUPLICATE_MEETING, () ->
61+
addMeetingCommand.execute(modelStub));
62+
}
63+
64+
@Test
65+
public void equals() {
66+
Meeting cs2103 = new MeetingBuilder().withName("CS2103").build();
67+
Meeting cs3234 = new MeetingBuilder().withName("CS3234").build();
68+
AddMeetingCommand meetingCommand1 = new AddMeetingCommand(cs2103);
69+
AddMeetingCommand meetingCommand2 = new AddMeetingCommand(cs3234);
70+
71+
// same object -> returns true
72+
assertTrue(meetingCommand2.equals(meetingCommand2));
73+
74+
// same values -> returns true
75+
AddMeetingCommand meetingCommand1Copy = new AddMeetingCommand(cs2103);
76+
assertTrue(meetingCommand1.equals(meetingCommand1Copy));
77+
78+
// different types -> returns false
79+
assertFalse(meetingCommand2.equals(1));
80+
81+
// null -> returns false
82+
assertFalse(meetingCommand2.equals(null));
83+
84+
// different meeting -> returns false
85+
assertFalse(meetingCommand2.equals(meetingCommand1));
86+
}
87+
88+
/**
89+
* A default model stub that have all of the methods failing.
90+
*/
91+
private class ModelStub implements Model {
92+
@Override
93+
public void setUserPrefs(ReadOnlyUserPrefs userPrefs) {
94+
throw new AssertionError("This method should not be called.");
95+
}
96+
97+
@Override
98+
public ReadOnlyUserPrefs getUserPrefs() {
99+
throw new AssertionError("This method should not be called.");
100+
}
101+
102+
@Override
103+
public GuiSettings getGuiSettings() {
104+
throw new AssertionError("This method should not be called.");
105+
}
106+
107+
@Override
108+
public void setGuiSettings(GuiSettings guiSettings) {
109+
throw new AssertionError("This method should not be called.");
110+
}
111+
112+
@Override
113+
public Path getAddressBookFilePath() {
114+
throw new AssertionError("This method should not be called.");
115+
}
116+
117+
@Override
118+
public void setAddressBookFilePath(Path addressBookFilePath) {
119+
throw new AssertionError("This method should not be called.");
120+
}
121+
122+
@Override
123+
public void addPerson(Person person) {
124+
throw new AssertionError("This method should not be called.");
125+
}
126+
127+
@Override
128+
public void setAddressBook(ReadOnlyAddressBook newData) {
129+
throw new AssertionError("This method should not be called.");
130+
}
131+
132+
@Override
133+
public ReadOnlyAddressBook getAddressBook() {
134+
throw new AssertionError("This method should not be called.");
135+
}
136+
137+
@Override
138+
public boolean hasPerson(Person person) {
139+
throw new AssertionError("This method should not be called.");
140+
}
141+
142+
@Override
143+
public boolean hasPersonName(Name name) {
144+
throw new AssertionError("This method should not be called.");
145+
}
146+
147+
@Override
148+
public void deletePerson(Person target) {
149+
throw new AssertionError("This method should not be called.");
150+
}
151+
152+
@Override
153+
public void setPerson(Person target, Person editedPerson) {
154+
throw new AssertionError("This method should not be called.");
155+
}
156+
157+
@Override
158+
public ObservableList<Person> getFilteredPersonList() {
159+
throw new AssertionError("This method should not be called.");
160+
}
161+
162+
@Override
163+
public void updateFilteredPersonList(Predicate<Person> predicate) {
164+
throw new AssertionError("This method should not be called.");
165+
}
166+
167+
@Override
168+
public void setMeetingBook(ReadOnlyMeetingBook newData) {
169+
throw new AssertionError("This method should not be called.");
170+
}
171+
172+
@Override
173+
public ReadOnlyMeetingBook getMeetingBook() {
174+
throw new AssertionError("This method should not be called.");
175+
}
176+
177+
@Override
178+
public void addMeeting(Meeting meeting) {
179+
throw new AssertionError("This method should not be called.");
180+
}
181+
182+
@Override
183+
public boolean hasMeeting(Meeting meeting) {
184+
throw new AssertionError("This method should not be called.");
185+
}
186+
187+
@Override
188+
public void setMeeting(Meeting target, Meeting editedMeeting) {
189+
throw new AssertionError("This method should not be called.");
190+
}
191+
192+
@Override
193+
public boolean hasMeetingName(MeetingName meetingName) {
194+
throw new AssertionError("This method should not be called.");
195+
}
196+
197+
@Override
198+
public void deleteMeeting(Meeting targetMeeting) {
199+
throw new AssertionError("This method should not be called.");
200+
}
201+
202+
203+
@Override
204+
public Path getMeetingBookFilePath() {
205+
throw new AssertionError("This method should not be called.");
206+
}
207+
208+
@Override
209+
public void setMeetingBookFilePath(Path meetingBookFilePath) {
210+
throw new AssertionError("This method should not be called.");
211+
}
212+
213+
@Override
214+
public ObservableList<Meeting> getFilteredMeetingList() {
215+
throw new AssertionError("This method should not be called.");
216+
}
217+
218+
@Override
219+
public void updateFilteredMeetingList(Predicate<Meeting> predicate) {
220+
throw new AssertionError("This method should not be called.");
221+
}
222+
223+
@Override
224+
public void addModule(Module module) {
225+
throw new AssertionError("This method should not be called.");
226+
}
227+
228+
@Override
229+
public boolean hasModuleName(ModuleName moduleName) {
230+
throw new AssertionError("This method should not be called.");
231+
}
232+
233+
@Override
234+
public ReadOnlyModuleBook getModuleBook() {
235+
throw new AssertionError("This method should not be called.");
236+
}
237+
238+
@Override
239+
public void setModuleBook(ReadOnlyModuleBook moduleBook) {
240+
throw new AssertionError("This method should not be called.");
241+
}
242+
243+
@Override
244+
public Path getModuleBookFilePath() {
245+
throw new AssertionError("This method should not be called.");
246+
}
247+
248+
@Override
249+
public void setModuleBookFilePath(Path moduleBookFilePath) {
250+
throw new AssertionError("This method should not be called.");
251+
}
252+
253+
@Override
254+
public ObservableList<Module> getFilteredModuleList() {
255+
throw new AssertionError("This method should not be called.");
256+
}
257+
258+
@Override
259+
public void getPersonsInModule(ModuleName moduleName) throws CommandException {
260+
throw new AssertionError("This method should not be called.");
261+
}
262+
}
263+
264+
/**
265+
* A Model stub that contains a single meeting.
266+
*/
267+
private class ModelStubWithMeeting extends ModelStub {
268+
private final Meeting meeting;
269+
270+
ModelStubWithMeeting(Meeting meeting) {
271+
requireNonNull(meeting);
272+
this.meeting = meeting;
273+
}
274+
275+
@Override
276+
public boolean hasMeeting(Meeting meeting) {
277+
requireNonNull(meeting);
278+
return this.meeting.isSameMeeting(meeting);
279+
}
280+
281+
@Override
282+
public boolean hasMeetingName(MeetingName meetingName) {
283+
return this.meeting.isSameMeetingName(meetingName);
284+
}
285+
}
286+
287+
/**
288+
* A Model stub that always accept the meeting being added.
289+
*/
290+
private class ModelStubAcceptingMeetingAdded extends ModelStub {
291+
final ArrayList<Meeting> meetingsAdded = new ArrayList<>();
292+
293+
@Override
294+
public boolean hasMeeting(Meeting meeting) {
295+
return meetingsAdded.stream().anyMatch(meeting::isSameMeeting);
296+
}
297+
298+
@Override
299+
public void addMeeting(Meeting meeting) {
300+
requireNonNull(meeting);
301+
meetingsAdded.add(meeting);
302+
}
303+
304+
@Override
305+
public boolean hasMeetingName(MeetingName meetingName) {
306+
return meetingsAdded.stream().anyMatch(meeting -> meeting.isSameMeetingName(meetingName));
307+
}
308+
309+
@Override
310+
public ReadOnlyMeetingBook getMeetingBook() {
311+
return new MeetingBook();
312+
}
313+
}
314+
315+
}

0 commit comments

Comments
 (0)