Skip to content

Commit db06ee5

Browse files
committed
merged with main after changing study session use case and adding quiz test cases
2 parents a7465f6 + 000b748 commit db06ee5

14 files changed

+165
-86
lines changed

src/main/java/quizUseCase/QuizSettingsResponseModel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
* @author Anthony
99
*/
1010
public class QuizSettingsResponseModel {
11-
// information
11+
// information 1
1212
private int numFlashcards;
13+
14+
// information 2
1315
private ArrayList<String> types;
1416
private ArrayList<ArrayList<String>> outputText;
1517

src/main/java/studyMode/StudySessionInteractor.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,14 @@ public StudySessionResponseModel study(StudySessionRequestModel request) {
5757
}
5858

5959
@Override
60-
public StudySettingsResponseModel getSetToStudy(StudySettingsRequestModel request) throws IndexOutOfBoundsException {
60+
public StudySettingsResponseModel getSetToStudy(StudySettingsRequestModel request) {
6161
this.studier = builder.buildStudier(request.getFlashcardSetId(), request.isTermDefault());
6262

63-
try {
63+
if (this.studier.getNumFlashcards() == 0) {
64+
String error = "<html>This flashcard set is empty. Please add some flashcard to begin studying!</html>";
65+
return presenter.prepareFailedStudyView(error);
66+
}
67+
else {
6468
String sortingOrder = request.getSortingOrder();
6569
if (sortingOrder.equals(StudySessionInteractor.shuffleSort)) {
6670
studier.shuffle();
@@ -81,8 +85,5 @@ public StudySettingsResponseModel getSetToStudy(StudySettingsRequestModel reques
8185
return presenter.prepareSuccessStudyView(studier.getOutputText(), studier.getTitle(),
8286
studier.getNumFlashcards(), studier.getFlashcardSetId());
8387
}
84-
catch (IndexOutOfBoundsException exception) {
85-
return presenter.prepareFailedStudyView();
86-
}
8788
}
8889
}

src/main/java/studyMode/StudySessionOutputBoundary.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ StudySettingsResponseModel prepareSuccessStudyView(String outputText, String tit
2929
int numFlashcards, int flashcardSetId);
3030

3131
/**
32-
* @return a response model which specifies that creating the study view has failed
32+
* @return alert the system that preparing the study view has failed
3333
*/
34-
StudySettingsResponseModel prepareFailedStudyView();
34+
StudySettingsResponseModel prepareFailedStudyView(String error);
3535

3636
}

src/main/java/studyMode/StudySessionPresenter.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package studyMode;
22

3+
import studyMode.screens.StudySettingsFailed;
4+
35
/**
46
* The study session presenter.
57
* <p>
@@ -20,7 +22,7 @@ public StudySettingsResponseModel prepareSuccessStudyView(String outputText, Str
2022
}
2123

2224
@Override
23-
public StudySettingsResponseModel prepareFailedStudyView() {
24-
return new StudySettingsResponseModel();
25+
public StudySettingsResponseModel prepareFailedStudyView(String error) {
26+
throw new StudySettingsFailed(error);
2527
}
2628
}

src/main/java/studyMode/StudySessionResponseModel.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
* @author Lucas Prates
99
*/
1010
public class StudySessionResponseModel {
11-
private String outputText;
12-
private int cardNumber;
11+
private final String outputText;
12+
private final int cardNumber;
1313

1414
/**
1515
* Creates a StudySessionResponseModel
@@ -22,13 +22,6 @@ public StudySessionResponseModel(String outputText, int cardNumber){
2222
this.cardNumber = cardNumber;
2323
}
2424

25-
/**
26-
* Creates a StudySessionResponseModel with null values.
27-
*/
28-
public StudySessionResponseModel() {
29-
30-
}
31-
3225
/**
3326
* @return the output text
3427
*/

src/main/java/studyMode/StudySettingsResponseModel.java

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99
*/
1010
public class StudySettingsResponseModel extends StudySessionResponseModel {
1111

12-
private int numFlashcards;
13-
private String title;
14-
private boolean failed = false;
15-
private int flashcardSetId;
12+
private final int numFlashcards;
13+
private final String title;
14+
private final int flashcardSetId;
1615

1716
/**
1817
* Creates a StudySettingsResponseModel
@@ -29,15 +28,6 @@ public StudySettingsResponseModel(String outputText, String title,
2928
this.flashcardSetId = flashcardSetId;
3029
}
3130

32-
/**
33-
* Creates a StudySettingsResponseModel with null values, and sets
34-
* hasFailed to true
35-
*/
36-
public StudySettingsResponseModel(){
37-
super();
38-
this.failed = true;
39-
}
40-
4131
/**
4232
* @return the total number of flashcards in the current flashcard set
4333
*/
@@ -48,13 +38,6 @@ public StudySettingsResponseModel(){
4838
*/
4939
public String getTitle(){return title;}
5040

51-
/**
52-
* @return returns true if the output data was successfully created
53-
*/
54-
public boolean hasFailed (){
55-
return failed;
56-
}
57-
5841
/**
5942
* @return the ID of the current flashcard set
6043
*/
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package studyMode.screens;
2+
3+
public class StudySettingsFailed extends RuntimeException {
4+
public StudySettingsFailed(String error) {
5+
super(error);
6+
}
7+
}
8+

src/main/java/studyMode/screens/StudySettingsFailureScreen.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/main/java/studyMode/screens/StudySettingsScreen.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,19 @@ public void actionPerformed(ActionEvent e) {
149149
termIsDefault, isReverse);
150150
}
151151

152-
// get the response model
153-
StudySettingsResponseModel response = this.controller.getSetToStudy(request);
154152

155153
// close this screen
156154
setVisible(false);
157155
dispose();
158156

159-
// open the appropriate screen
160-
if (response.hasFailed()){
161-
new StudySettingsFailureScreen();
162-
}
163-
else {
157+
// get the response model
158+
try {
159+
StudySettingsResponseModel response = this.controller.getSetToStudy(request);
164160
new StudySessionScreen(this.controller, response);
165161
}
162+
catch (StudySettingsFailed err) {
163+
JOptionPane.showMessageDialog(this, err.getMessage());
164+
}
165+
166166
}
167167
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package quizUseCase;
2+
3+
import dataAccess.*;
4+
import static org.junit.jupiter.api.Assertions.*;
5+
import org.junit.jupiter.api.Test;
6+
7+
import java.io.IOException;
8+
import java.util.ArrayList;
9+
10+
public class QuizUseCaseTest {
11+
QuizController controller;
12+
13+
QuizSettingsRequestModel setup(int numQuestions, boolean timerOn, int timerDuration,
14+
boolean multipleChoiceOn, boolean textEntryOn, boolean trueFalseOn,
15+
int flashcardSetID) throws IOException {
16+
IFlashcardDataAccess flashcardGateway = new FlashcardDataAccess(
17+
"src/test/java/quizUseCase/testData/Flashcards.csv");
18+
IFlashcardSetDataAccess flashcardSetGateway = new FlashcardSetDataAccess(
19+
"src/test/java/quizUseCase/testData/FlashcardSets.csv");
20+
IUserDataAccess userGateway = new CommonUserDataAccess(
21+
"src/test/java/quizUseCase/testData/Users.csv");
22+
23+
DBGateway gateway = new DBGateway(flashcardGateway, flashcardSetGateway, userGateway);
24+
25+
QuizOutputBoundary presenter = new QuizPresenter();
26+
QuizInputBoundary interactor = new QuizInteractor(gateway, presenter);
27+
this.controller = new QuizController(interactor);
28+
29+
return new QuizSettingsRequestModel(numQuestions, timerOn,
30+
timerDuration, multipleChoiceOn, textEntryOn, trueFalseOn, flashcardSetID);
31+
}
32+
33+
@Test
34+
void testOnlyMultipleChoice() throws IOException {
35+
QuizSettingsRequestModel quizSettingsRequestModel = this.setup(10, false, 0,
36+
true, false, false, 0);
37+
38+
QuizSettingsResponseModel quizSettingsResponseModel = controller.startQuiz(quizSettingsRequestModel);
39+
assertFalse(quizSettingsResponseModel.isFailed());
40+
41+
ArrayList<String> types = quizSettingsResponseModel.getTypes();
42+
ArrayList<ArrayList<String>> outputText = quizSettingsResponseModel.getOutputText();
43+
44+
assertEquals(10, types.size());
45+
assertEquals(10, outputText.size());
46+
assertTrue(types.contains("MC"));
47+
assertFalse(types.contains("TE"));
48+
assertFalse(types.contains("TF"));
49+
50+
ArrayList<String> userAnswers = new ArrayList<>();
51+
for (int i = 0; i < 10; i++) {
52+
userAnswers.add("incorrect answer");
53+
}
54+
QuizRequestModel quizRequestModel = new QuizRequestModel(userAnswers);
55+
QuizResponseModel quizResponseModel = controller.getResults(quizRequestModel);
56+
57+
assertFalse(quizResponseModel.isFailed());
58+
59+
assertEquals(0, quizResponseModel.getScore());
60+
assertEquals(10, quizResponseModel.getNumQuestions());
61+
}
62+
63+
@Test
64+
void testAllOptionsEnabled() throws IOException {
65+
QuizSettingsRequestModel quizSettingsRequestModel = this.setup(12, false, 0,
66+
true, true, true, 0);
67+
68+
QuizSettingsResponseModel quizSettingsResponseModel = controller.startQuiz(quizSettingsRequestModel);
69+
assertFalse(quizSettingsResponseModel.isFailed());
70+
71+
ArrayList<String> types = quizSettingsResponseModel.getTypes();
72+
ArrayList<ArrayList<String>> outputText = quizSettingsResponseModel.getOutputText();
73+
74+
assertEquals(12, types.size());
75+
assertEquals(12, outputText.size());
76+
assertTrue(types.contains("MC"));
77+
assertTrue(types.contains("TE"));
78+
assertTrue(types.contains("TF"));
79+
80+
ArrayList<String> userAnswers = new ArrayList<>();
81+
for (int i = 0; i < 12; i++) {
82+
userAnswers.add("incorrect answer");
83+
}
84+
QuizRequestModel quizRequestModel = new QuizRequestModel(userAnswers);
85+
QuizResponseModel quizResponseModel = controller.getResults(quizRequestModel);
86+
87+
assertFalse(quizResponseModel.isFailed());
88+
89+
assertEquals(0, quizResponseModel.getScore());
90+
assertEquals(12, quizResponseModel.getNumQuestions());
91+
}
92+
93+
@Test
94+
void testNoOptionsEnabled() throws IOException {
95+
QuizSettingsRequestModel quizSettingsRequestModel = this.setup(12, false, 0,
96+
false, false, false, 0);
97+
98+
QuizSettingsResponseModel quizSettingsResponseModel = controller.startQuiz(quizSettingsRequestModel);
99+
assertTrue(quizSettingsResponseModel.isFailed());
100+
}
101+
102+
@Test
103+
void testRidiculousTimer() throws IOException {
104+
QuizSettingsRequestModel quizSettingsRequestModel = this.setup(12, true, 0,
105+
true, true, false, 0);
106+
107+
QuizSettingsResponseModel quizSettingsResponseModel = controller.startQuiz(quizSettingsRequestModel);
108+
assertTrue(quizSettingsResponseModel.isFailed());
109+
}
110+
}

0 commit comments

Comments
 (0)