Commit 2b3d8d5509886f139b1adb8eb4a785b7e95fd714

Authored by mjeng
1 parent 17a3102cde
Exists in master

First draft of TestCases, test underline

Showing 1 changed file with 47 additions and 27 deletions Inline Diff

TestCases.tex View file @ 2b3d8d5
\documentclass[letterpaper]{scrartcl} % or whatever 1 1 \documentclass[letterpaper]{scrartcl} % or whatever
\usepackage{tgpagella} 2 2 \usepackage{tgpagella}
\setkomafont{disposition}{\normalfont\bfseries} 3 3 \setkomafont{disposition}{\normalfont\bfseries}
%\usepackage[markuppercase]{scrpage2} 4 4 %\usepackage[markuppercase]{scrpage2}
\title{\huge System Test Plan} 5 5 \title{\huge System Test Plan}
\date{\today} 6 6 \date{\today}
\author{\Large Students With A Goal (S.W.A.G.)} 7 7 \author{\Large Students With A Goal (S.W.A.G.)}
\usepackage[pass]{geometry} 8 8 \usepackage[pass]{geometry}
\usepackage{hyperref} 9 9 \usepackage{hyperref}
\usepackage{graphicx} 10 10 \usepackage{graphicx}
\usepackage{enumitem} 11 11 \usepackage{enumitem}
\setlist[description]{style=multiline,leftmargin=3cm,font=\normalfont\textbf} 12 12 \setlist[description]{style=multiline,leftmargin=3cm,font=\normalfont\textbf}
\setlistdepth{9} 13 13 \setlistdepth{9}
14 14
\setlist[itemize,1]{label=$\bullet$} 15 15 \setlist[itemize,1]{label=$\bullet$}
\setlist[itemize,2]{label=$\bullet$} 16 16 \setlist[itemize,2]{label=$\bullet$}
\setlist[itemize,3]{label=$\bullet$} 17 17 \setlist[itemize,3]{label=$\bullet$}
\setlist[itemize,4]{label=$\bullet$} 18 18 \setlist[itemize,4]{label=$\bullet$}
\setlist[itemize,5]{label=$\bullet$} 19 19 \setlist[itemize,5]{label=$\bullet$}
\setlist[itemize,6]{label=$\bullet$} 20 20 \setlist[itemize,6]{label=$\bullet$}
\setlist[itemize,7]{label=$\bullet$} 21 21 \setlist[itemize,7]{label=$\bullet$}
\setlist[itemize,8]{label=$\bullet$} 22 22 \setlist[itemize,8]{label=$\bullet$}
\setlist[itemize,9]{label=$\bullet$} 23 23 \setlist[itemize,9]{label=$\bullet$}
\renewlist{itemize}{itemize}{9} 24 24 \renewlist{itemize}{itemize}{9}
\begin{document} 25 25 \begin{document}
\maketitle 26 26 \maketitle
\begin{center} 27 27 \begin{center}
\includegraphics[width=12cm]{../swag_logo.png}\\ 28 28 \includegraphics[width=12cm]{../swag_logo.png}\\
29 29
\begin{tabular}{l r} 30 30 \begin{tabular}{l r}
Melody Jeng & System Architect \\ 31 31 Melody Jeng & System Architect \\
Arno Gau & Senior System Analyst \\ 32 32 Arno Gau & Senior System Analyst \\
Rachel Lee & Software Development Lead \\ 33 33 Rachel Lee & Software Development Lead \\
Laura Hawkins & Project Manager \\ 34 34 Laura Hawkins & Project Manager \\
Rohan Rangray & Algorithms Specialist\\ 35 35 Rohan Rangray & Algorithms Specialist\\
Andrew Buss & Database Specialist \\ 36 36 Andrew Buss & Database Specialist \\
Nam Phuong Tran & Quality Assurance Lead \\ 37 37 Nam Phuong Tran & Quality Assurance Lead \\
Chung Kang Wang & Business Analyst\\ 38 38 Chung Kang Wang & Business Analyst\\
Masud Rahman & User Interface Specialist\\ 39 39 Masud Rahman & User Interface Specialist\\
Kevin Mach & User Interface Specialist\\ 40 40 Kevin Mach & User Interface Specialist\\
\end{tabular} 41 41 \end{tabular}
\end{center} 42 42 \end{center}
\newpage 43 43 \newpage
\tableofcontents 44 44 \tableofcontents
\newpage 45 45 \newpage
46 46
\section{Testing Notes} 47 47 \section{Testing Notes}
\subsection{Testing Accounts} 48 48 \subsection{Testing Accounts}
UserX\\ 49 49 UserX\\
- email: userx@flashy.cards\\ 50 50 - email: userx@flashy.cards\\
- password: mynameisuserx 51 51 - password: mynameisuserx
\\ 52 52 \\
UserY\\ 53 53 UserY\\
- email: usery@flashy.cards\\ 54 54 - email: usery@flashy.cards\\
- password: mynameisusery 55 55 - password: mynameisusery
56 56
\subsection{Fixtures} 57 57 \subsection{Fixtures}
Fixtures are provided to reset the database to a known state before running each test case. This isolates the effects of each test case and simplifies resolution of preconditions. Each test case specifies a test fixture which may be applied by running the command \texttt{scripts/apply-test-fixture.sh <fixture name>} in the root of the backend directory. Once a fixture has been applied, reload the page, log back in (if required by the test case) and continue running the test case. 58 58 Fixtures are provided to reset the database to a known state before running each test case. This isolates the effects of each test case and simplifies resolution of preconditions. Each test case specifies a test fixture which may be applied by running the command \texttt{scripts/apply-test-fixture.sh <fixture name>} in the root of the backend directory. Once a fixture has been applied, reload the page, log back in (if required by the test case) and continue running the test case.
\subsection{Testing Multiple Users} 59 59 \subsection{Testing Multiple Users}
Some test cases relating to real-time functionality require two users simultaneously logged into the the application. This requires two separate browser sessions. Refer to browser documentation for this. 60 60 Some test cases relating to real-time functionality require two users simultaneously logged into the the application. This requires two separate browser sessions. Refer to browser documentation for this.
\subsection{Supported Browser} 61 61 \subsection{Supported Browser}
Flashy officially supports Chrome version 42 on Windows and Linux. Frontend functionality may be degraded on other browsers. 62 62 Flashy officially supports Chrome version 42 on Windows and Linux. Frontend functionality may be degraded on other browsers.
63 63
\subsection{Sent Emails in Development} 64 64 \subsection{Sent Emails in Development}
As noted in the backend README, when run as a local development server for testing, Flashy does not actually send email except in a production environment. Sending email requires an AWS SES key that we do not want to bundle with our application's source. Instead they are printed out to the server console. When any reference is made to an email being sent, check the console. Example: 65 65 As noted in the backend README, when run as a local development server for testing, Flashy does not actually send email except in a production environment. Sending email requires an AWS SES key that we do not want to bundle with our application's source. Instead they are printed out to the server console. When any reference is made to an email being sent, check the console. Example:
66 66
\includegraphics[width=4in]{../doc_screenshots/console_backend.png} 67 67 \includegraphics[width=4in]{../doc_screenshots/console_backend.png}
68 68
\newpage 69 69 \newpage
70 70
71 71
\section{Accounts} 72 72 \section{Accounts}
73 73
\subsection{[A1] User Registration} 74 74 \subsection{[A1] User Registration}
\begin{description}[style=multiline,leftmargin=3cm] 75 75 \begin{description}[style=multiline,leftmargin=3cm]
76 76
\item[Description:]{This test case outlines the presentation layer step 77 77 \item[Description:]{This test case outlines the presentation layer step
process of a user registering for an account with our application.} 78 78 process of a user registering for an account with our application.}
79 79
\item[Desired Outcome:]{An account will be created for the User from the 80 80 \item[Desired Outcome:]{An account will be created for the User from the
specified username, password, email. The User will be able to log into 81 81 specified username, password, email. The User will be able to log into
the aforementioned account.} 82 82 the aforementioned account.}
83 83
\item[User Goals:]{The User shall have an account to participate in the 84 84 \item[User Goals:]{The User shall have an account to participate in the
website's activities.} 85 85 website's activities.}
86 86
\item[Dependency Use Cases:]{None} 87 87 \item[Dependency Use Cases:]{None}
\\ 88 88 \\
89 89
\item[Priority Level:]{``Must''} 90 90 \item[Priority Level:]{``Must''}
91 91
\item[Status:]{Implemented} 92 92 \item[Status:]{Implemented}
93 93
\item[Preconditions:] 94 94 \item[Preconditions:]
\begin{itemize} 95 95 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 96 96 \itemsep1pt\parskip0pt\parsep0pt
\item 97 97 \item
{None} 98 98 {None}
\end{itemize} 99 99 \end{itemize}
100 100
\item[Postconditions:] 101 101 \item[Postconditions:]
\begin{itemize} 102 102 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 103 103 \itemsep1pt\parskip0pt\parsep0pt
\item 104 104 \item
{The User has an account registered with the system.} 105 105 {The User has an account registered with the system.}
\end{itemize} 106 106 \end{itemize}
107 107
\item[Trigger:]{UserX wants to start creating flashcards for a class.} 108 108 \item[Trigger:]{UserX wants to start creating flashcards for a class.}
109 109
\item[Workflow:] 110 110 \item[Workflow:]
111 111
\begin{enumerate} 112 112 \begin{enumerate}
\item 113 113 \item
{UserX shall click the ``Sign Up'' button.} 114 114 {UserX shall click the ``Sign Up'' button.}
\item 115 115 \item
{The System shall display a registration form.} 116 116 {The System shall display a registration form.}
\item 117 117 \item
{UserX shall fill in the form with email testuser@flashy.cards and password ``test''.} 118 118 {UserX shall fill in the form with email testuser@flashy.cards and password ``test''.}
\item 119 119 \item
{The System shall successfully receive the correct credentials and send an email to the User's address with a link to validate the User's email address and displays the Add Class page to the User.} 120 120 {The System shall successfully receive the correct credentials and send an email to the User's address with a link to validate the User's email address and displays the Add Class page to the User.}
\item 121 121 \item
{UserX receives an email with a link to verify their email. The 122 122 {UserX receives an email with a link to verify their email. The
User clicks the link.} 123 123 User clicks the link.}
\item 124 124 \item
{The Server marks the user's email as valid and saves the User object 125 125 {The Server marks the user's email as valid and saves the User object
again.} 126 126 again.}
\end{enumerate} 127 127 \end{enumerate}
128 128
\item [Expected Results:]{UserX's account is now active (registered with the system).} 129 129 \item [Expected Results:]{UserX's account is now active (registered with the system).}
130 130
\end{description} 131 131 \end{description}
\newpage 132 132 \newpage
133 133
{} 134 134 {}
135 135
\subsection{[A2] User Login} 136 136 \subsection{[A2] User Login}
137 137
\begin{description} 138 138 \begin{description}
\item[Description:]{This test case outlines the presentation layering step 139 139 \item[Description:]{This test case outlines the presentation layering step
process of a user logging into the application.} 140 140 process of a user logging into the application.}
141 141
\item[Desired Outcome:]{The User shall be able to provide their email address and 142 142 \item[Desired Outcome:]{The User shall be able to provide their email address and
password to access their courses and flash cards. The User shall gain 143 143 password to access their courses and flash cards. The User shall gain
access to the list of the courses they have added, and be able to review 144 144 access to the list of the courses they have added, and be able to review
the flash cards they have added to their decks.} 145 145 the flash cards they have added to their decks.}
146 146
\item[User Goals:]{The User wants to resume use of the site on another 147 147 \item[User Goals:]{The User wants to resume use of the site on another
device, or use the site after logging out.} 148 148 device, or use the site after logging out.}
149 149
\item[Dependency Use Cases:]{[A1] User Registration} 150 150 \item[Dependency Use Cases:]{[A1] User Registration}
\\ 151 151 \\
152 152
\item[Priority Level:]{``Must''} 153 153 \item[Priority Level:]{``Must''}
154 154
\item[Status:]{Implemented} 155 155 \item[Status:]{Implemented}
156 156
\item[Preconditions:] 157 157 \item[Preconditions:]
\begin{itemize} 158 158 \begin{itemize}
\item 159 159 \item
{The User has created an account before with email ``testuser@flashy.cards'' with password ``test''.} 160 160 {The User has created an account before with email ``testuser@flashy.cards'' with password ``test''.}
\end{itemize} 161 161 \end{itemize}
162 162
\item[Postconditions:] 163 163 \item[Postconditions:]
\begin{itemize} 164 164 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 165 165 \itemsep1pt\parskip0pt\parsep0pt
\item 166 166 \item
{The user can navigate the site and see their data.} 167 167 {The user can navigate the site and see their data.}
\end{itemize} 168 168 \end{itemize}
169 169
\item[Trigger:]{UserX wants to view, add, or create cards for a class or classes.} 170 170 \item[Trigger:]{UserX wants to view, add, or create cards for a class or classes.}
171 171
\item[Workflow:] 172 172 \item[Workflow:]
\begin{enumerate} 173 173 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 174 174 \itemsep1pt\parskip0pt\parsep0pt
\item 175 175 \item
{UserX shall enter their email ``testuser@flashy.cards'' and password ``test''.} 176 176 {UserX shall enter their email ``testuser@flashy.cards'' and password ``test''.}
\item 177 177 \item
{The System shall authenticate UserX's email and password and checks if UserX is active.} 178 178 {The System shall authenticate UserX's email and password and checks if UserX is active.}
\item 179 179 \item
{The System shall receive the credentials and display the ``Add Class'' page to the User.} 180 180 {The System shall receive the credentials and display the ``Add Class'' page to the User.}
\end{enumerate} 181 181 \end{enumerate}
\item [Expected Result:] 182 182 \item [Expected Result:]
{The User is brought to the page ``Add Class''.}\\ 183 183 {The User is brought to the page ``Add Class''.}\\
184 184
\item [Alternate Workflow:] 185 185 \item [Alternate Workflow:]
\begin{enumerate} 186 186 \begin{enumerate}
\item 187 187 \item
{UserX accidentally puts in the wrong credentials and clicks the ``Login'' button.} 188 188 {UserX accidentally puts in the wrong credentials and clicks the ``Login'' button.}
\item 189 189 \item
{The System shows UserX the site login page with a text message reading ``Invalid username or password!!'' displayed in the log in text box.} 190 190 {The System shows UserX the site login page with a text message reading ``Invalid username or password!!'' displayed in the log in text box.}
\end {enumerate} 191 191 \end {enumerate}
192 192
\item [Expected Result:] 193 193 \item [Expected Result:]
{The User is not able to login.} \\ 194 194 {The User is not able to login.} \\
195 195
\end{description} 196 196 \end{description}
\newpage 197 197 \newpage
198 198
{} 199 199 {}
200 200
\subsection{[A3] Add a Class} 201 201 \subsection{[A3] Add a Class}
\begin{description} 202 202 \begin{description}
\item[Description:]{This test case outlines the presentation layer step 203 203 \item[Description:]{This test case outlines the presentation layer step
process of a user adding a class.} 204 204 process of a user adding a class.}
205 205
\item[Desired Outcome:]{The class shall be linked with the student's account 206 206 \item[Desired Outcome:]{The class shall be linked with the student's account
and the student shall have the ability to read and publish flashcards 207 207 and the student shall have the ability to read and publish flashcards
for this class.} 208 208 for this class.}
209 209
\item[User Goals:]{The User wants to publish flashcards for this class and 210 210 \item[User Goals:]{The User wants to publish flashcards for this class and
read the flashcards for this class that are published by other users.} 211 211 read the flashcards for this class that are published by other users.}
212 212
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 213 213 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\\ 214 214 \\
215 215
\item[Priority Level:]{``Must''} 216 216 \item[Priority Level:]{``Must''}
217 217
\item[Status:]{Implemented} 218 218 \item[Status:]{Implemented}
219 219
\item[Preconditions:] 220 220 \item[Preconditions:]
\begin{itemize} 221 221 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 222 222 \itemsep1pt\parskip0pt\parsep0pt
\item 223 223 \item
{The User is logged in as UserX.} 224 224 {The User is logged in as UserX.}
\item 225 225 \item
{The User is whitelisted for class TEST 101.} 226 226 {The User is whitelisted for class TEST 101.}
\item 227 227 \item
{The User is not whitelisted for class TEST 102.} 228 228 {The User is not whitelisted for class TEST 102.}
\item 229 229 \item
{The class TEST 103 has no whitelist.} 230 230 {The class TEST 103 has no whitelist.}
\end{itemize} 231 231 \end{itemize}
232 232
\item[Postconditions:] 233 233 \item[Postconditions:]
\begin{itemize} 234 234 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 235 235 \itemsep1pt\parskip0pt\parsep0pt
\item 236 236 \item
{The User can read the flashcards being published for the class and 237 237 {The User can read the flashcards being published for the class and
add them to their deck.} 238 238 add them to their deck.}
\item 239 239 \item
{The User can publish flashcards to be viewed and added by other users 240 240 {The User can publish flashcards to be viewed and added by other users
in the same class.} 241 241 in the same class.}
\end{itemize} 242 242 \end{itemize}
243 243
\item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.} 244 244 \item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.}
245 245
\item[Workflow:] 246 246 \item[Workflow:]
\begin{enumerate} 247 247 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 248 248 \itemsep1pt\parskip0pt\parsep0pt
\item 249 249 \item
{UserX shall click ``Add Class'' on the classes dropdown from the navigation bar.} 250 250 {UserX shall click ``Add Class'' on the classes dropdown from the navigation bar.}
\item 251 251 \item
{The System shall show the user ``Add Class'' page.} 252 252 {The System shall show the user ``Add Class'' page.}
\item 253 253 \item
{UserX shall begin to type ``TEST 101''.} 254 254 {UserX shall begin to type ``TEST 101''.}
\item 255 255 \item
{The System shall show suggestions as a user types.} 256 256 {The System shall show suggestions as a user types.}
\item 257 257 \item
{The System shall check if there is a whitelist for each class in the suggestions.} 258 258 {The System shall check if there is a whitelist for each class in the suggestions.}
\item 259 259 \item
{The System shall ensure that UserX is on the whitelist for each section.} 260 260 {The System shall ensure that UserX is on the whitelist for each section.}
\item 261 261 \item
{UserX shall click on ``TEST 101'', which should not have a lock icon.} 262 262 {UserX shall click on ``TEST 101'', which should not have a lock icon.}
\item 263 263 \item
{UserX shall click on the ``Add'' button.} 264 264 {UserX shall click on the ``Add'' button.}
\item 265 265 \item
{The System shall add UserX to the specified class TEST 101.} 266 266 {The System shall add UserX to the specified class TEST 101.}
\end{enumerate} 267 267 \end{enumerate}
268 268
\item[Expected Result:] {UserX has added the section and sees the Live Feed 269 269 \item[Expected Result:] {UserX has added the section and sees the Live Feed
for TEST 101.} 270 270 for TEST 101.}
271 271
\item[Alternate Workflow A:] 272 272 \item[Alternate Workflow A:]
\begin{enumerate} 273 273 \begin{enumerate}
\setcounter{enumi}{3} 274 274 \setcounter{enumi}{3}
\itemsep1pt\parskip0pt\parsep0pt 275 275 \itemsep1pt\parskip0pt\parsep0pt
\item 276 276 \item
{UserX shall begin to type ``TEST 102''.} 277 277 {UserX shall begin to type ``TEST 102''.}
\item 278 278 \item
{The System shall show suggestions as a user types.} 279 279 {The System shall show suggestions as a user types.}
\item 280 280 \item
{The System shall check if there is a whitelist for each class in the suggestions.} 281 281 {The System shall check if there is a whitelist for each class in the suggestions.}
\item 282 282 \item
{The System shall see that UserX is not on the whitelist.} 283 283 {The System shall see that UserX is not on the whitelist.}
\item 284 284 \item
{UserX shall see a lock icon in the suggestions for TEST 102.} 285 285 {UserX shall see a lock icon in the suggestions for TEST 102.}
\item 286 286 \item
{UserX shall click on ``TEST 102'', which has a lock icon.} 287 287 {UserX shall click on ``TEST 102'', which has a lock icon.}
\item 288 288 \item
{The System shall disable the ``Add'' button.} 289 289 {The System shall disable the ``Add'' button.}
\end{enumerate} 290 290 \end{enumerate}
291 291
\item[Expected Result:] {UserX cannot add the specified TEST 102 and cannot 292 292 \item[Expected Result:] {UserX cannot add the specified TEST 102 and cannot
view contents related to this class.} 293 293 view contents related to this class.}
294 294
\item[Alternate Workflow B:] 295 295 \item[Alternate Workflow B:]
\begin{enumerate} 296 296 \begin{enumerate}
\setcounter{enumi}{3} 297 297 \setcounter{enumi}{3}
\itemsep1pt\parskip0pt\parsep0pt 298 298 \itemsep1pt\parskip0pt\parsep0pt
\item 299 299 \item
{UserX shall begin to type ``TEST 103''.} 300 300 {UserX shall begin to type ``TEST 103''.}
\item 301 301 \item
{The System shall show suggestions as a user types.} 302 302 {The System shall show suggestions as a user types.}
\item 303 303 \item
{The System shall check if there is a whitelist for each class in the suggestions.} 304 304 {The System shall check if there is a whitelist for each class in the suggestions.}
\item 305 305 \item
{The System shall see there is no whitelist for TEST 103.} 306 306 {The System shall see there is no whitelist for TEST 103.}
\item 307 307 \item
{UserX shall click on ``TEST 103'', which should not have a lock icon.} 308 308 {UserX shall click on ``TEST 103'', which should not have a lock icon.}
\item 309 309 \item
{UserX shall click on the ``Add'' button.} 310 310 {UserX shall click on the ``Add'' button.}
\item 311 311 \item
{The System shall add UserX to TEST 103.} 312 312 {The System shall add UserX to TEST 103.}
\end{enumerate} 313 313 \end{enumerate}
314 314
\item[Expected Result:] {UserX has added the section and sees the Live Feed 315 315 \item[Expected Result:] {UserX has added the section and sees the Live Feed
for TEST 103.} 316 316 for TEST 103.}
\end{description} 317 317 \end{description}
\newpage 318 318 \newpage
319 319
{} 320 320 {}
321 321
\subsection{[A4] Drop a Class} 322 322 \subsection{[A4] Drop a Class}
323 323
\begin{description} 324 324 \begin{description}
\item[Description:]{This test case outlines the presentation layer step process of a user dropping a class.} 325 325 \item[Description:]{This test case outlines the presentation layer step process of a user dropping a class.}
326 326
\item[Desired Outcome:]{The User has dropped the class and no longer needs 327 327 \item[Desired Outcome:]{The User has dropped the class and no longer needs
access to the flashcards for the dropped class. They can no longer 328 328 access to the flashcards for the dropped class. They can no longer
see the flashcards associated to the class that they dropped.} 329 329 see the flashcards associated to the class that they dropped.}
330 330
\item[User Goals:]{The User shall not have access to a class and the 331 331 \item[User Goals:]{The User shall not have access to a class and the
flashcards associated with that class. They will no longer see the class 332 332 flashcards associated with that class. They will no longer see the class
listed in their list of ``Enrolled Classes''.} 333 333 listed in their list of ``Enrolled Classes''.}
334 334
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 335 335 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\\ 336 336 \\
337 337
\item[Priority Level:]{``Should''} 338 338 \item[Priority Level:]{``Should''}
339 339
\item[Status:]{Implemented} 340 340 \item[Status:]{Implemented}
341 341
\item[Preconditions:] 342 342 \item[Preconditions:]
\begin{itemize} 343 343 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 344 344 \itemsep1pt\parskip0pt\parsep0pt
\item 345 345 \item
{User is logged in as UserX.} 346 346 {User is logged in as UserX.}
\item 347 347 \item
{User has enrolled in TEST 101.} 348 348 {User has enrolled in TEST 101.}
\item 349 349 \item
{User is at Settings page.} 350 350 {User is at Settings page.}
\end{itemize} 351 351 \end{itemize}
352 352
\item[Postconditions:] 353 353 \item[Postconditions:]
\begin{itemize} 354 354 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 355 355 \itemsep1pt\parskip0pt\parsep0pt
\item 356 356 \item
{User shall no longer have access to TEST 101, or associated flashcards.} 357 357 {User shall no longer have access to TEST 101, or associated flashcards.}
\end{itemize} 358 358 \end{itemize}
359 359
\item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove 360 360 \item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove
all of their flashcards.} 361 361 all of their flashcards.}
362 362
\item[Workflow:] 363 363 \item[Workflow:]
\begin{enumerate} 364 364 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 365 365 \itemsep1pt\parskip0pt\parsep0pt
\item 366 366 \item
{UserX shall click ``X'' icon next to TEST 101 in ``Enrolled Classes'' table.} 367 367 {UserX shall click ``X'' icon next to TEST 101 in ``Enrolled Classes'' table.}
\item 368 368 \item
{The System shall remove UserX from TEST 101.} 369 369 {The System shall remove UserX from TEST 101.}
\item 370 370 \item
{The System shall display a toast indicating that a class has been dropped.} 371 371 {The System shall display a toast indicating that a class has been dropped.}
\end{enumerate} 372 372 \end{enumerate}
373 373
\item[Expected Result:] {UserX no longer has access to any content related to TEST 101.} 374 374 \item[Expected Result:] {UserX no longer has access to any content related to TEST 101.}
\end{description} 375 375 \end{description}
\newpage 376 376 \newpage
377 377
{} 378 378 {}
379 379
\subsection{[A5] Password Change} 380 380 \subsection{[A5] Password Change}
381 381
\begin{description} 382 382 \begin{description}
\item[Description:]{The User shall be able to change the password for their 383 383 \item[Description:]{The User shall be able to change the password for their
account in the account settings. This requires that they are logged in.} 384 384 account in the account settings. This requires that they are logged in.}
385 385
\item[Desired Outcome:]{The User's password shall be changed and the user 386 386 \item[Desired Outcome:]{The User's password shall be changed and the user
shall be able to log in with the new password in the future.} 387 387 shall be able to log in with the new password in the future.}
388 388
\item[User Goals:]{The User wants to use a different password in the future.} 389 389 \item[User Goals:]{The User wants to use a different password in the future.}
390 390
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 391 391 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\\ 392 392 \\
393 393
\item[Details:]{The user provides their current password and a new password 394 394 \item[Details:]{The user provides their current password and a new password
in a form. If the current password is correct, the system updates their 395 395 in a form. If the current password is correct, the system updates their
password to the requested new password.} 396 396 password to the requested new password.}
397 397
\item[Priority Level:]{``Must''} 398 398 \item[Priority Level:]{``Must''}
399 399
\item[Status:]{Implemented} 400 400 \item[Status:]{Implemented}
401 401
\item[Preconditions:] 402 402 \item[Preconditions:]
\begin{itemize} 403 403 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 404 404 \itemsep1pt\parskip0pt\parsep0pt
\item 405 405 \item
{The User is logged in as UserX.} 406 406 {The User is logged in as UserX.}
\item 407 407 \item
{The User knows the current password (``oldPassword'').} 408 408 {The User knows the current password (``oldPassword'').}
\item 409 409 \item
{The User is at the Settings page.} 410 410 {The User is at the Settings page.}
\end{itemize} 411 411 \end{itemize}
412 412
\item[Postconditions:] 413 413 \item[Postconditions:]
\begin{itemize} 414 414 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 415 415 \itemsep1pt\parskip0pt\parsep0pt
\item 416 416 \item
{The User's password is changed} 417 417 {The User's password is changed}
\item 418 418 \item
{The User can log in with the new password} 419 419 {The User can log in with the new password}
\end{itemize} 420 420 \end{itemize}
421 421
\item[Trigger:]{UserX is dissatisfied with their current password and wishes 422 422 \item[Trigger:]{UserX is dissatisfied with their current password and wishes
to change it.} 423 423 to change it.}
424 424
\item[Workflow:] 425 425 \item[Workflow:]
\begin{enumerate} 426 426 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 427 427 \itemsep1pt\parskip0pt\parsep0pt
\item 428 428 \item
{UserX shall enter their current password ``oldPassword'' and the desired 429 429 {UserX shall enter their current password ``oldPassword'' and the desired
new password ``newPassword'' (twice) in the ``Change Password'' form.} 430 430 new password ``newPassword'' (twice) in the ``Change Password'' form.}
\item 431 431 \item
{UserX shall click the ``Submit'' button.} 432 432 {UserX shall click the ``Submit'' button.}
\item 433 433 \item
{The System shall check UserX's current password.} 434 434 {The System shall check UserX's current password.}
\item 435 435 \item
{The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.} 436 436 {The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.}
\end{enumerate} 437 437 \end{enumerate}
438 438
\item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.} 439 439 \item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.}
\end{description} 440 440 \end{description}
\newpage 441 441 \newpage
442 442
{} 443 443 {}
444 444
\subsection{[A6] Password Reset} 445 445 \subsection{[A6] Password Reset}
446 446
\begin{description} 447 447 \begin{description}
\item[Description:]{The User shall be able to reset their password without 448 448 \item[Description:]{The User shall be able to reset their password without
being logged in } 449 449 being logged in }
450 450
\item[Desired Outcome:]{The User's password shall be changed to one that 451 451 \item[Desired Outcome:]{The User's password shall be changed to one that
they remember} 452 452 they remember}
\\ 453 453 \\
454 454
\item[User Goals:]{The User does not know their current password but wants 455 455 \item[User Goals:]{The User does not know their current password but wants
to log into the site} 456 456 to log into the site}
457 457
\item[Dependency Use Cases:]{[A1] User Registration} 458 458 \item[Dependency Use Cases:]{[A1] User Registration}
\\ 459 459 \\
460 460
\item[Details:]{The User provides their email in a password reset form. If 461 461 \item[Details:]{The User provides their email in a password reset form. If
the address is valid, the site sends a password reset link with a random 462 462 the address is valid, the site sends a password reset link with a random
token to that address. If the address is invalid, the site does not send 463 463 token to that address. If the address is invalid, the site does not send
a link. For security reasons, we do not reveal to the user whether the 464 464 a link. For security reasons, we do not reveal to the user whether the
email address was valid, and we expire the link after 24 hours. When a 465 465 email address was valid, and we expire the link after 24 hours. When a
user visits the link emailed to them, they are able to specify a new 466 466 user visits the link emailed to them, they are able to specify a new
password in a form. When they submit the form, their password is updated 467 467 password in a form. When they submit the form, their password is updated
if the token is correct. } 468 468 if the token is correct. }
469 469
\item[Priority Level:]{``Must''} 470 470 \item[Priority Level:]{``Must''}
471 471
\item[Status]{Implemented} 472 472 \item[Status]{Implemented}
473 473
\item[Preconditions:] 474 474 \item[Preconditions:]
\begin{itemize} 475 475 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 476 476 \itemsep1pt\parskip0pt\parsep0pt
\item 477 477 \item
{Account for UserX has been created.} 478 478 {Account for UserX has been created.}
\end{itemize} 479 479 \end{itemize}
480 480
\item[Postconditions:] 481 481 \item[Postconditions:]
\begin{itemize} 482 482 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 483 483 \itemsep1pt\parskip0pt\parsep0pt
\item 484 484 \item
{UserX's password is changed.} 485 485 {UserX's password is changed.}
\item 486 486 \item
{UserX can log in with the new password.} 487 487 {UserX can log in with the new password.}
\end{itemize} 488 488 \end{itemize}
489 489
\item[Trigger]{UserX forgot their password and wants to access the site.} 490 490 \item[Trigger]{UserX forgot their password and wants to access the site.}
491 491
\item[Workflow:] 492 492 \item[Workflow:]
493 493
\begin{enumerate} 494 494 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 495 495 \itemsep1pt\parskip0pt\parsep0pt
\item 496 496 \item
{UserX shall click the ``Forgot Password'' hyperlink.} 497 497 {UserX shall click the ``Forgot Password'' hyperlink.}
\item 498 498 \item
{The System shall prompt the user for their current email.} 499 499 {The System shall prompt the user for their current email.}
\item 500 500 \item
{UserX shall submit their email ``UserX@flashy.cards''.} 501 501 {UserX shall submit their email ``UserX@flashy.cards''.}
\item 502 502 \item
{The System shall check if an account exists with the email entered by UserX.} 503 503 {The System shall check if an account exists with the email entered by UserX.}
\item 504 504 \item
{The System shall create a new password reset token for UserX.} 505 505 {The System shall create a new password reset token for UserX.}
\item 506 506 \item
{The System shall send an email to UserX with a link containing the token and the 507 507 {The System shall send an email to UserX with a link containing the token and the
user's ID.} 508 508 user's ID.}
\item 509 509 \item
{UserX shall click the link in the email to visit /app/password\_reset.} 510 510 {UserX shall click the link in the email to visit /app/password\_reset.}
\item 511 511 \item
{The System shall render a form that will prompt the user for a new password.} 512 512 {The System shall render a form that will prompt the user for a new password.}
\item 513 513 \item
{UserX shall provide a new password, ``newPassword'', in the form.} 514 514 {UserX shall provide a new password, ``newPassword'', in the form.}
\item 515 515 \item
{The System shall change the password associated with the user's email.} 516 516 {The System shall change the password associated with the user's email.}
\item 517 517 \item
{UserX shall navigate back to the login page and enter ``UserX@flashy.cards'' 518 518 {UserX shall navigate back to the login page and enter ``UserX@flashy.cards''
with the old password ``mynameisuserx''.} 519 519 with the old password ``mynameisuserx''.}
\item 520 520 \item
{The System shall display ``Invalid username or password!''} 521 521 {The System shall display ``Invalid username or password!''}
\item 522 522 \item
{UserX shall login as ``UserX@flashy.cards'' with the password ``newPassword''.} 523 523 {UserX shall login as ``UserX@flashy.cards'' with the password ``newPassword''.}
\end{enumerate} 524 524 \end{enumerate}
525 525
\item[Expected Result:] {The login shall succeed.} 526 526 \item[Expected Result:] {The login shall succeed.}
527 527
\item[Alternate Workflow:] 528 528 \item[Alternate Workflow:]
\begin{enumerate} 529 529 \begin{enumerate}
\setcounter{enumi}{4} 530 530 \setcounter{enumi}{4}
\itemsep1pt\parskip0pt\parsep0pt 531 531 \itemsep1pt\parskip0pt\parsep0pt
\item 532 532 \item
{If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.} 533 533 {If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.}
\end{enumerate} 534 534 \end{enumerate}
535 535
\item[Expected Result:] {UserX's password will not be reset.} 536 536 \item[Expected Result:] {UserX's password will not be reset.}
\end{description} 537 537 \end{description}
\newpage 538 538 \newpage
539 539
{} 540 540 {}
541 541
\subsection{[A7] Student Prevented From Accessing A Restricted Course} 542 542 \subsection{[A7] Student Prevented From Accessing A Restricted Course}
543 543
\begin{description} 544 544 \begin{description}
\item[Description:]{The User shall not be able to access a restricted course.} 545 545 \item[Description:]{The User shall not be able to access a restricted course.}
546 546
\item[Desired Outcome:]{The class will have limited access and only those 547 547 \item[Desired Outcome:]{The class will have limited access and only those
users who are whitelisted may enroll in the class.} 548 548 users who are whitelisted may enroll in the class.}
549 549
\item[User Goals:]{The instructor wants to limit access to his class so only 550 550 \item[User Goals:]{The instructor wants to limit access to his class so only
the students who are actually in his class participate, and nobody 551 551 the students who are actually in his class participate, and nobody
else.} 552 552 else.}
553 553
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 554 554 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\\ 555 555 \\
556 556
\item[Priority Level:]{``Should''} 557 557 \item[Priority Level:]{``Should''}
558 558
\item[Status:]{Implemented} 559 559 \item[Status:]{Implemented}
560 560
\item[Preconditions:] 561 561 \item[Preconditions:]
\begin{itemize} 562 562 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 563 563 \itemsep1pt\parskip0pt\parsep0pt
\item 564 564 \item
{UserX has valid instructor's account} 565 565 {UserX has valid instructor's account}
\end{itemize} 566 566 \end{itemize}
567 567
\item[Postconditions:] 568 568 \item[Postconditions:]
\begin{itemize} 569 569 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 570 570 \itemsep1pt\parskip0pt\parsep0pt
\item 571 571 \item
{Only those users who were whitelisted may add the class.} 572 572 {Only those users who were whitelisted may add the class.}
\end{itemize} 573 573 \end{itemize}
574 574
\item[Trigger:]{The instructor emails the administrator and requests to 575 575 \item[Trigger:]{The instructor emails the administrator and requests to
limit access to his class.} 576 576 limit access to his class.}
577 577
\item[Workflow:] 578 578 \item[Workflow:]
\begin{enumerate} 579 579 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 580 580 \itemsep1pt\parskip0pt\parsep0pt
\item 581 581 \item
{The instructor, ``INSTR1'', shall email the administrators from his UCSD email address 582 582 {The instructor, ``INSTR1'', shall email the administrators from his UCSD email address
and requests to limit access to his course.} 583 583 and requests to limit access to his course.}
\item 584 584 \item
{ INSTR1 shall provide a list of 585 585 { INSTR1 shall provide a list of
emails of the students that are to be whitelisted.} 586 586 emails of the students that are to be whitelisted.}
\item 587 587 \item
{The administrators shall visit a custom admin page, select the course, and 588 588 {The administrators shall visit a custom admin page, select the course, and
paste the list of emails.} 589 589 paste the list of emails.}
\item 590 590 \item
{The administrators shall submit the page directly to the System.} 591 591 {The administrators shall submit the page directly to the System.}
\item 592 592 \item
{The System shall create a WhitelistedAddress for each provided email, 593 593 {The System shall create a WhitelistedAddress for each provided email,
attaching it to the section taught by INST1.} 594 594 attaching it to the section taught by INST1.}
\item 595 595 \item
{The System shall add any existing users whose email addresses appear 596 596 {The System shall add any existing users whose email addresses appear
in the whitelist to the class. } 597 597 in the whitelist to the class. }
\end{enumerate} 598 598 \end{enumerate}
599 599
\item[Expected Result:] {A whitelist is added to a section.} 600 600 \item[Expected Result:] {A whitelist is added to a section.}
\end{description} 601 601 \end{description}
\newpage 602 602 \newpage
603 603
{} 604 604 {}
605 605
\subsection{[A8] User Logout} 606 606 \subsection{[A8] User Logout}
607 607
\begin{description} 608 608 \begin{description}
\item[Description:]{The User shall be able to log out of his/her account on 609 609 \item[Description:]{The User shall be able to log out of his/her account on
the site.} 610 610 the site.}
611 611
\item[Desired Outcome:]{The User's information and data will no longer be 612 612 \item[Desired Outcome:]{The User's information and data will no longer be
accessible after logging out. } 613 613 accessible after logging out. }
614 614
\item[User Goals:]{The User is done with his/her session of using the 615 615 \item[User Goals:]{The User is done with his/her session of using the
website, and wants to make sure others cannot access the data in his/her 616 616 website, and wants to make sure others cannot access the data in his/her
account.} 617 617 account.}
618 618
\item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login} 619 619 \item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login}
\\ 620 620 \\
621 621
\item[Priority Level:]{``Must''} 622 622 \item[Priority Level:]{``Must''}
623 623
\item[Status:]{Implemented} 624 624 \item[Status:]{Implemented}
625 625
\item[Preconditions:]{The user is logged into their account.} 626 626 \item[Preconditions:]{The user is logged into their account.}
627 627
\item[Postconditions:]{The user's data can no longer be accessed.} 628 628 \item[Postconditions:]{The user's data can no longer be accessed.}
629 629
\item[Trigger:] 630 630 \item[Trigger:]
631 631
\item[Workflow:] 632 632 \item[Workflow:]
633 633
\begin{enumerate} 634 634 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 635 635 \itemsep1pt\parskip0pt\parsep0pt
\item 636 636 \item
{UserX shall click the ``Logout'' button.} 637 637 {UserX shall click the ``Logout'' button.}
\item 638 638 \item
{The System shall logs out UserX.} 639 639 {The System shall logs out UserX.}
\item 640 640 \item
{The System shall redirect UserX to the login page.} 641 641 {The System shall redirect UserX to the login page.}
\end{enumerate} 642 642 \end{enumerate}
643 643
\item[Expected Result:] {User is logged out and is redirected to the login page.} 644 644 \item[Expected Result:] {User is logged out and is redirected to the login page.}
\end{description} 645 645 \end{description}
\newpage 646 646 \newpage
647 647
{} 648 648 {}
649 649
\subsection{[A9] Contact Admin} 650 650 \subsection{[A9] Contact Admin}
651 651
\begin{description} 652 652 \begin{description}
\item[Description]{The User shall be able to contact the admin.} 653 653 \item[Description]{The User shall be able to contact the admin.}
654 654
\item[Desired Outcome]{The User shall send a message to the admin; the 655 655 \item[Desired Outcome]{The User shall send a message to the admin; the
admin shall receive the message.} 656 656 admin shall receive the message.}
657 657
\item[User Goals:]{The User sends a message to the admin.} 658 658 \item[User Goals:]{The User sends a message to the admin.}
659 659
\item[Dependency Use Cases]{None} 660 660 \item[Dependency Use Cases]{None}
\\ 661 661 \\
662 662
\item[Priority Level]{``Must''} 663 663 \item[Priority Level]{``Must''}
664 664
\item[Status]{Not Implemented and Deferred} 665 665 \item[Status]{Not Implemented and Deferred}
666 666
\item[Pre-conditions]{None.} 667 667 \item[Pre-conditions]{None.}
668 668
\item[Post-conditions]{The admin receives the user's message.} 669 669 \item[Post-conditions]{The admin receives the user's message.}
670 670
\item[Trigger]{UserX wants to contact the administrators of our application.} 671 671 \item[Trigger]{UserX wants to contact the administrators of our application.}
672 672
\item[Workflow] 673 673 \item[Workflow]
\begin{enumerate} 674 674 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 675 675 \itemsep1pt\parskip0pt\parsep0pt
\item 676 676 \item
{The System shall display the admin email address on every page in the 677 677 {The System shall display the admin email address on every page in the
application.} 678 678 application.}
\end{enumerate} 679 679 \end{enumerate}
680 680
\item[Expected Result:] {The admin's email address can be seen by UserX on every page.} 681 681 \item[Expected Result:] {The admin's email address can be seen by UserX on every page.}
\end{description} 682 682 \end{description}
\newpage 683 683 \newpage
684 684
{} 685 685 {}
686 686
\subsection{[A10] Configure Account Notifications} 687 687 \subsection{[A10] Configure Account Notifications}
\begin{description} 688 688 \begin{description}
\item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.} 689 689 \item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.}
690 690
\item[Desired Outcome]{The User shall only receive notifications at the 691 691 \item[Desired Outcome]{The User shall only receive notifications at the
times that were specified.} 692 692 times that were specified.}
\\ 693 693 \\
694 694
\item[User Goals]{The User shall not be bothered needlessly or at 695 695 \item[User Goals]{The User shall not be bothered needlessly or at
inconvenient times.} 696 696 inconvenient times.}
697 697
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 698 698 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\\ 699 699 \\
700 700
\item[Priority Level]{``Must''} 701 701 \item[Priority Level]{``Must''}
702 702
\item[Status]{Deferred} 703 703 \item[Status]{Deferred}
704 704
\item[Preconditions:] 705 705 \item[Preconditions:]
\begin{itemize} 706 706 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 707 707 \itemsep1pt\parskip0pt\parsep0pt
\item 708 708 \item
{The User is logged in as UserX.} 709 709 {The User is logged in as UserX.}
\end{itemize} 710 710 \end{itemize}
711 711
\item[Postconditions:] 712 712 \item[Postconditions:]
\begin{itemize} 713 713 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 714 714 \itemsep1pt\parskip0pt\parsep0pt
\item 715 715 \item
{User only receive notifications at specified times} 716 716 {User only receive notifications at specified times}
\end{itemize} 717 717 \end{itemize}
718 718
\item[Trigger]{UserX wants to change their notification settings} 719 719 \item[Trigger]{UserX wants to change their notification settings}
720 720
\item[Workflow] 721 721 \item[Workflow]
\begin{enumerate} 722 722 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 723 723 \itemsep1pt\parskip0pt\parsep0pt
\item 724 724 \item
{UserX shall select ``Settings'' button from the top header.} 725 725 {UserX shall select ``Settings'' button from the top header.}
\item 726 726 \item
{The System shall display a settings screen.} 727 727 {The System shall display a settings screen.}
\item 728 728 \item
{UserX shall change the notification timing to 1 min.} 729 729 {UserX shall change the notification timing to 1 min.}
\item 730 730 \item
{UserX shall click ``Save Settings'' button.} 731 731 {UserX shall click ``Save Settings'' button.}
\item 732 732 \item
{The System shall display a message confirming the settings are saved.} 733 733 {The System shall display a message confirming the settings are saved.}
\item 734 734 \item
{The System shall save notification settings to the user's attributes.} 735 735 {The System shall save notification settings to the user's attributes.}
\end{enumerate} 736 736 \end{enumerate}
737 737
\item[Expected Result:]{UserX shall be notified at least as slow as 1 min.} 738 738 \item[Expected Result:]{UserX shall be notified at least as slow as 1 min.}
\end{description} 739 739 \end{description}
\newpage 740 740 \newpage
741 741
{} 742 742 {}
743 743
\section{Flashcards} 744 744 \section{Flashcards}
\subsection{[F1] Push Flashcard} 745 745 \subsection{[F1] Push Flashcard}
746 746
\begin{description} 747 747 \begin{description}
\item[Description:]{This test case outlines the presentation layer step 748 748 \item[Description:]{This test case outlines the presentation layer step
process of a User contributing a flashcard to the live feed and to their deck.} 749 749 process of a User contributing a flashcard to the live feed and to their deck.}
750 750
\item[Desired Outcome:]{The User shall have the flashcard added to their own deck 751 751 \item[Desired Outcome:]{The User shall have the flashcard added to their own deck
and the live feed.} 752 752 and the live feed.}
\\ 753 753 \\
754 754
\item[User Goals:]{The User will see their flashcard in their deck and the 755 755 \item[User Goals:]{The User will see their flashcard in their deck and the
flashcard will be shared with others.} 756 756 flashcard will be shared with others.}
757 757
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 758 758 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\\ 759 759 \\
760 760
\item[Priority Level:]{``Must''} 761 761 \item[Priority Level:]{``Must''}
762 762
\item[Status:]{Implemented} 763 763 \item[Status:]{Implemented}
764 764
\item[Preconditions:] 765 765 \item[Preconditions:]
\begin{itemize} 766 766 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 767 767 \itemsep1pt\parskip0pt\parsep0pt
\item 768 768 \item
{The User is logged as UserX.} 769 769 {The User is logged as UserX.}
\item 770 770 \item
{The User is logged in a different browser session as UserY.} 771 771 {The User is logged in a different browser session as UserY.}
\item 772 772 \item
{UserX and UserY have added the class TEST 101.} 773 773 {UserX and UserY have added the class TEST 101.}
\item 774 774 \item
{UserX and UserY are on the live feed for TEST 101.} 775 775 {UserX and UserY are on the live feed for TEST 101.}
\end{itemize} 776 776 \end{itemize}
777 777
\item[Postconditions:] 778 778 \item[Postconditions:]
\begin{itemize} 779 779 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 780 780 \itemsep1pt\parskip0pt\parsep0pt
\item 781 781 \item
{UserX has flashcard added to their deck.} 782 782 {UserX has flashcard added to their deck.}
\item 783 783 \item
{The Flashcard is shown in the live feed.} 784 784 {The Flashcard is shown in the live feed.}
\item 785 785 \item
{UserY and other users can add this flashcard to their decks.} 786 786 {UserY and other users can add this flashcard to their decks.}
\end{itemize} 787 787 \end{itemize}
788 788
\item[Trigger:]{UserX wants to contribute a flashcard to the class TEST 101.} 789 789 \item[Trigger:]{UserX wants to contribute a flashcard to the class TEST 101.}
790 790
\item[Workflow:] 791 791 \item[Workflow:]
\begin{enumerate} 792 792 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 793 793 \itemsep1pt\parskip0pt\parsep0pt
\item {UserX has clicked the circular plus button (``Compose'' button) in 794 794 \item {UserX has clicked the circular plus button (``Compose'' button) in
the lower right corner of the live feed.} 795 795 the lower right corner of the live feed.}
\item 796 796 \item
{The System shall present a modal with a text box.} 797 797 {The System shall present a modal with a text box.}
\item 798 798 \item
{UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.} 799 799 {UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.}
\item 800 800 \item
{UserX shall select the ``Contribute'' button in the modal.} 801 801 {UserX shall select the ``Contribute'' button in the modal.}
\item 802 802 \item
{The System shall add the new card containing the text ``The rain in Spain stays mainly in 803 803 {The System shall add the new card containing the text ``The rain in Spain stays mainly in
the plain'' to the feed of each user enrolled in ``TEST 101''.} 804 804 the plain'' to the feed of each user enrolled in ``TEST 101''.}
\item 805 805 \item
{UserY shall see the card appear in their feed within a minute (See Notes).} 806 806 {UserY shall see the card appear in their feed within a minute (See Notes).}
\item 807 807 \item
{The System shall hide the modal from UserX.} 808 808 {The System shall hide the modal from UserX.}
\item 809 809 \item
{The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).} 810 810 {The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).}
\end{enumerate} 811 811 \end{enumerate}
812 812
\item[Expected Result:] {UserX will have the new flashcard in their deck. 813 813 \item[Expected Result:] {UserX will have the new flashcard in their deck.
For UserX, the new flashcard will have a checkmark, indicating that the card 814 814 For UserX, the new flashcard will have a checkmark, indicating that the card
is in their deck and a pencil icon on top right to indicate UserX as 815 815 is in their deck and a pencil icon on top right to indicate UserX as
the author of the flashcard. The new flashcard will show up on UserY's 816 816 the author of the flashcard. The new flashcard will show up on UserY's
live feed on class TEST 101 without checkmark and pencil icon.} 817 817 live feed on class TEST 101 without checkmark and pencil icon.}
818 818
\item[Alternative Workflow:] 819 819 \item[Alternative Workflow:]
\begin{enumerate} 820 820 \begin{enumerate}
\setcounter{enumi}{3} 821 821 \setcounter{enumi}{3}
\itemsep1pt\parskip0pt\parsep0pt 822 822 \itemsep1pt\parskip0pt\parsep0pt
\item 823 823 \item
{UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.} 824 824 {UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.}
\item 825 825 \item
{The System shall bold the word Spain.} 826 826 {The System shall bold the word Spain.}
\item 827 827 \item
{UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.} 828 828 {UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.}
\item 829 829 \item
{The System shall bold the word plain.} 830 830 {The System shall bold the word plain.}
\item 831 831 \item
{UserX shall click the ``Contribute'' button in the modal.} 832 832 {UserX shall click the ``Contribute'' button in the modal.}
\item 833 833 \item
{The System shall add the new flashcard containing the text ``The rain in \textbf{Spain} stays mainly in the \textbf{plain}'' to the feed of each user enrolled in TEST.} 834 834 {The System shall add the new flashcard containing the text ``The rain in \textbf{Spain} stays mainly in the \textbf{plain}'' to the feed of each user enrolled in TEST.}
\item 835 835 \item
{UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.} 836 836 {UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.}
\end{enumerate} 837 837 \end{enumerate}
838 838
\item[Expected Result:] { 839 839 \item[Expected Result:] {
UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded in their deck. 840 840 UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded in their deck.
For UserX, the new flashcard will have a checkmark, 841 841 For UserX, the new flashcard will have a checkmark,
indicating that the card is in their deck and a pencil icon on 842 842 indicating that the card is in their deck and a pencil icon on
top right to indicate UserX as the author of the flashcard. 843 843 top right to indicate UserX as the author of the flashcard.
The new flashcard will show up on UserY's live feed on class TEST 101 844 844 The new flashcard will show up on UserY's live feed on class TEST 101
without checkmark and pencil icon.} 845 845 without checkmark and pencil icon.}
846 846
\item[Alternative Workflow:] 847 847 \item[Alternative Workflow:]
\begin{enumerate} 848 848 \begin{enumerate}
\setcounter{enumi}{2} 849 849 \setcounter{enumi}{2}
\itemsep1pt\parskip0pt\parsep0pt 850 850 \itemsep1pt\parskip0pt\parsep0pt
\item 851 851 \item
{UserX shall select the input field of the modal and type five blank spaces.} 852 852 {UserX shall select the input field of the modal and type five blank spaces.}
\item 853 853 \item
{UserX shall click the ``Contribute'' button in the dialog.} 854 854 {UserX shall click the ``Contribute'' button in the dialog.}
\end{enumerate} 855 855 \end{enumerate}
856 856
\item[Expected Result:] {Blank flashcard will not be added to UserX's deck or to the live feed of TEST 101.} 857 857 \item[Expected Result:] {Blank flashcard will not be added to UserX's deck or to the live feed of TEST 101.}
858 858
\item[Alternative Workflow:] 859 859 \item[Alternative Workflow:]
\begin{enumerate} 860 860 \begin{enumerate}
\setcounter{enumi}{2} 861 861 \setcounter{enumi}{2}
\itemsep1pt\parskip0pt\parsep0pt 862 862 \itemsep1pt\parskip0pt\parsep0pt
\item 863 863 \item
{UserX shall select the input field and type ``Test''.} 864 864 {UserX shall select the input field and type ``Test''.}
\item 865 865 \item
{UserX shall click the ``Contribute'' button in the dialog.} 866 866 {UserX shall click the ``Contribute'' button in the dialog.}
\end{enumerate} 867 867 \end{enumerate}
868 868
\item[Expected Result:] 869 869 \item[Expected Result:]
{ Flashcard with input not meeting the length restriction will not be added to 870 870 { Flashcard with input not meeting the length restriction will not be added to
UserX's deck or to the live feed of TEST 101.} 871 871 UserX's deck or to the live feed of TEST 101.}
872 872
\end{description} 873 873 \end{description}
\newpage 874 874 \newpage
875 875
{} 876 876 {}
877 877
\subsection{[F2] Edit Flashcard} 878 878 \subsection{[F2] Edit Flashcard}
879 879
\begin{description} 880 880 \begin{description}
\item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.} 881 881 \item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.}
882 882
\item[Desired Outcome:]{Flashcard is edited and saved appropriately} 883 883 \item[Desired Outcome:]{Flashcard is edited and saved appropriately}
\\ 884 884 \\
885 885
\item[User Goals:]{The User shall be able to change the text and the blanked words on a flashcard.} 886 886 \item[User Goals:]{The User shall be able to change the text and the blanked words on a flashcard.}
887 887
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 888 888 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard} 889 889 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard}
890 890
\item[Priority Level:]{``Should''} 891 891 \item[Priority Level:]{``Should''}
892 892
\item[Status:]{Implemented} 893 893 \item[Status:]{Implemented}
894 894
\item[Preconditions:] 895 895 \item[Preconditions:]
\begin{itemize} 896 896 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 897 897 \itemsep1pt\parskip0pt\parsep0pt
\item 898 898 \item
{The User is logged in as UserX.} 899 899 {The User is logged in as UserX.}
\item 900 900 \item
{The User is logged in a different browser session as UserY.} 901 901 {The User is logged in a different browser session as UserY.}
\item 902 902 \item
{User has added the class TEST 101.} 903 903 {User has added the class TEST 101.}
\item 904 904 \item
{TEST 101 contains the flashcard ``This is made for \textbf{edit}'' 905 905 {TEST 101 contains the flashcard ``This is made for \textbf{edit}''
, which was made by other user and is not in UserX's deck.} 906 906 , which was made by other user and is not in UserX's deck.}
\item 907 907 \item
{UserX has the flashcard ``I have made an error'', which was created by UserX, in their deck.} 908 908 {UserX has the flashcard ``I have made an error'', which was created by UserX, in their deck.}
\end{itemize} 909 909 \end{itemize}
910 910
\item[Postconditions:] 911 911 \item[Postconditions:]
\begin{itemize} 912 912 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 913 913 \itemsep1pt\parskip0pt\parsep0pt
\item 914 914 \item
{The selected flashcard is edited} 915 915 {The selected flashcard is edited}
\end{itemize} 916 916 \end{itemize}
917 917
\item[Trigger:]{The User wants to edit a card.} 918 918 \item[Trigger:]{The User wants to edit a card.}
919 919
\item[Workflow:] 920 920 \item[Workflow:]
\begin{enumerate} 921 921 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 922 922 \itemsep1pt\parskip0pt\parsep0pt
\item 923 923 \item
{UserX shall hover the cursor over the flashcard ``this is made for \textbf{edit}''.} 924 924 {UserX shall hover the cursor over the flashcard ``this is made for \textbf{edit}''.}
\item 925 925 \item
{UserX shall click the edit button on bottom left of the hovered flashcard. The blue edit button looks like a pencil slanted writing on a paper.} 926 926 {UserX shall click the edit button on bottom left of the hovered flashcard. The blue edit button looks like a pencil slanted writing on a paper.}
\item 927 927 \item
{The System shall present a modal that contains the text of the selected flashcard.} 928 928 {The System shall present a modal that contains the text of the selected flashcard.}
\item 929 929 \item
{UserX shall be able to change the text to ``Edit has been made''.} 930 930 {UserX shall be able to change the text to ``Edit has been made''.}
\item 931 931 \item
{UserX shall click 'Save'} 932 932 {UserX shall click 'Save'}
\item 933 933 \item
{The System shall hide the modal from UserX.} 934 934 {The System shall hide the modal from UserX.}
\end{enumerate} 935 935 \end{enumerate}
936 936
\item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.} 937 937 \item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.}
938 938
\item[Alternative Workflow A:] 939 939 \item[Alternative Workflow A:]
940 940
\begin{enumerate} 941 941 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 942 942 \itemsep1pt\parskip0pt\parsep0pt
\item 943 943 \item
{UserX shall move the cursor over the flash card ``this is made for edit2''.} 944 944 {UserX shall move the cursor over the flash card ``this is made for edit2''.}
\item 945 945 \item
{UserX shall click the edit button on bottom left of the selected flashcard.} 946 946 {UserX shall click the edit button on bottom left of the selected flashcard.}
\item 947 947 \item
{The System shall present a modal that contains the text of the selected flashcard.} 948 948 {The System shall present a modal that contains the text of the selected flashcard.}
\item 949 949 \item
{UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.} 950 950 {UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.}
\item 951 951 \item
{UserX shall click 'Save'} 952 952 {UserX shall click 'Save'}
\item 953 953 \item
{The System shall hide the modal from UserX.} 954 954 {The System shall hide the modal from UserX.}
\item 955 955 \item
{The selected flashcard's blanked words shall be changed to ``fun''.} 956 956 {The selected flashcard's blanked words shall be changed to ``fun''.}
\end{enumerate} 957 957 \end{enumerate}
958 958
\item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.} 959 959 \item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.}
960 960
\item[Alternative Workflow B:] 961 961 \item[Alternative Workflow B:]
962 962
\begin{enumerate} 963 963 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 964 964 \itemsep1pt\parskip0pt\parsep0pt
\item 965 965 \item
{UserX shall move the cursor over the flash card ``this is made for edit3''.} 966 966 {UserX shall move the cursor over the flash card ``this is made for edit3''.}
\item 967 967 \item
{UserX shall click the edit button on bottom left of the selected flashcard.} 968 968 {UserX shall click the edit button on bottom left of the selected flashcard.}
\item 969 969 \item
{The System shall present a modal that contains the text of the selected flashcard.} 970 970 {The System shall present a modal that contains the text of the selected flashcard.}
\item 971 971 \item
{UserX shall be able the study date to 6/12.} 972 972 {UserX shall be able the study date to 6/12.}
\item 973 973 \item
{UserX shall click 'Save'} 974 974 {UserX shall click 'Save'}
\item 975 975 \item
{The System shall hide the modal from UserX.} 976 976 {The System shall hide the modal from UserX.}
\end{enumerate} 977 977 \end{enumerate}
978 978
\item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.} 979 979 \item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.}
\end{description} 980 980 \end{description}
\newpage 981 981 \newpage
982 982
{} 983 983 {}
984 984
\subsection{[F3] Pull Flashcard} 985 985 \subsection{[F3] Pull Flashcard}
\begin{description} 986 986 \begin{description}
\item[Description:]{This test case outlines the presentation layering step 987 987 \item[Description:]{This test case outlines the presentation layering step
process of a user pulling a flashcard.} 988 988 process of a user pulling a flashcard.}
989 989
\item[Desired Outcome:]{The User shall have the flashcard added to their deck.} 990 990 \item[Desired Outcome:]{The User shall have the flashcard added to their deck.}
\\ 991 991 \\
992 992
\item[User Goals:]{The User will be able to review that flashcard.} 993 993 \item[User Goals:]{The User will be able to review that flashcard.}
994 994
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 995 995 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashard} 996 996 Login, [A3] Add a Class, [F1] Push Flashard}
997 997
\item[Priority Level:]{``Must'' } 998 998 \item[Priority Level:]{``Must'' }
999 999
\item[Status:]{Implemented} 1000 1000 \item[Status:]{Implemented}
1001 1001
\item[Preconditions:] 1002 1002 \item[Preconditions:]
\begin{itemize} 1003 1003 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1004 1004 \itemsep1pt\parskip0pt\parsep0pt
\item 1005 1005 \item
{The User is logged in as UserX.} 1006 1006 {The User is logged in as UserX.}
\item 1007 1007 \item
{User has registered for class TEST 101.} 1008 1008 {User has registered for class TEST 101.}
\item 1009 1009 \item
{User is at live feed for TEST 101.} 1010 1010 {User is at live feed for TEST 101.}
\item 1011 1011 \item
{That flashcard with the text ``Pull me'' is in the Live Feed of class TEST 101.} 1012 1012 {That flashcard with the text ``Pull me'' is in the Live Feed of class TEST 101.}
\end{itemize} 1013 1013 \end{itemize}
1014 1014
\item[Postconditions:] 1015 1015 \item[Postconditions:]
\begin{itemize} 1016 1016 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1017 1017 \itemsep1pt\parskip0pt\parsep0pt
\item 1018 1018 \item
{UserX shall have that flashcard with the text ``Pull me'' added to their deck} 1019 1019 {UserX shall have that flashcard with the text ``Pull me'' added to their deck}
\item 1020 1020 \item
{UserX shall be able to review this flashcard later} 1021 1021 {UserX shall be able to review this flashcard later}
\end{itemize} 1022 1022 \end{itemize}
1023 1023
\item[Trigger:]{UserX wants to add a flashcard to their deck to study it.} 1024 1024 \item[Trigger:]{UserX wants to add a flashcard to their deck to study it.}
1025 1025
\item[Workflow:] 1026 1026 \item[Workflow:]
1027 1027
\begin{enumerate} 1028 1028 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1029 1029 \itemsep1pt\parskip0pt\parsep0pt
\item 1030 1030 \item
{UserX shall choose the flashcard with the text ``Pull me'' from the 1031 1031 {UserX shall choose the flashcard with the text ``Pull me'' from the
class TEST 101 feed and hover their cursor over it.} 1032 1032 class TEST 101 feed and hover their cursor over it.}
\item 1033 1033 \item
{The System shall present buttons on mouseover.} 1034 1034 {The System shall present buttons on mouseover.}
\item 1035 1035 \item
{UserX shall click on the large plus that appears over the flashcard with the text ``Pull me''.} 1036 1036 {UserX shall click on the large plus that appears over the flashcard with the text ``Pull me''.}
\item 1037 1037 \item
{The System shall add the flashcard into UserX's deck. 1038 1038 {The System shall add the flashcard into UserX's deck.
A checkmark shall appear on top right corner of the flashcard.} 1039 1039 A checkmark shall appear on top right corner of the flashcard.}
\item 1040 1040 \item
{UserX shall click the ``Deck'' icon on the top left to enter their 1041 1041 {UserX shall click the ``Deck'' icon on the top left to enter their
deck.} 1042 1042 deck.}
\item 1043 1043 \item
{UserX shall check that the card with the text ``Pull me'' has been added to their class 1044 1044 {UserX shall check that the card with the text ``Pull me'' has been added to their class
TEST 101 deck.} 1045 1045 TEST 101 deck.}
\end{enumerate} 1046 1046 \end{enumerate}
1047 1047
\item[Expected Result:] {The flashcard with the text ``Pull me'' is in the class 1048 1048 \item[Expected Result:] {The flashcard with the text ``Pull me'' is in the class
TEST 101 deck. If UserX hovers the cursor over the flashcard at the live feed of 1049 1049 TEST 101 deck. If UserX hovers the cursor over the flashcard at the live feed of
TEST 101, the original placement of the large plus button has been changed to large minus button.} 1050 1050 TEST 101, the original placement of the large plus button has been changed to large minus button.}
\end{description} 1051 1051 \end{description}
\newpage 1052 1052 \newpage
1053 1053
{} 1054 1054 {}
1055 1055
\subsection{[F4] Flag Inappropriate Cards} 1056 1056 \subsection{[F4] Flag Inappropriate Cards}
1057 1057
\begin{description} 1058 1058 \begin{description}
\item[Description:]{This test case outlines the presentation layering step 1059 1059 \item[Description:]{This test case outlines the presentation layering step
process of a user flagging a card they have deemed inappropriate.} 1060 1060 process of a user flagging a card they have deemed inappropriate.}
1061 1061
\item[Desired Outcome:]{The flashcard's inappropriateness variable is 1062 1062 \item[Desired Outcome:]{The flashcard's inappropriateness variable is
adjusted.} 1063 1063 adjusted.}
\\ 1064 1064 \\
1065 1065
\item[User Goals:]{To note if a card should not belong in the class and 1066 1066 \item[User Goals:]{To note if a card should not belong in the class and
should not be displayed in the feed.} 1067 1067 should not be displayed in the feed.}
1068 1068
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1069 1069 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1070 1070 Login, [A3] Add a Class, [F1] Push Flashcard}
1071 1071
\item[Priority Level:]{``Should''} 1072 1072 \item[Priority Level:]{``Should''}
1073 1073
\item[Status:]{Implemented} 1074 1074 \item[Status:]{Implemented}
1075 1075
\item[Preconditions:] 1076 1076 \item[Preconditions:]
\begin{itemize} 1077 1077 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1078 1078 \itemsep1pt\parskip0pt\parsep0pt
\item 1079 1079 \item
{UserX has registered for a class TEST 101.} 1080 1080 {UserX has registered for a class TEST 101.}
\item 1081 1081 \item
{UserX is in the live feed for class TEST 101.} 1082 1082 {UserX is in the live feed for class TEST 101.}
\item 1083 1083 \item
{Flashcard with text ``TESTY FLASHY'' has been created for TEST 101.} 1084 1084 {Flashcard with text ``TESTY FLASHY'' has been created for TEST 101.}
\item 1085 1085 \item
{That flashcard ``TESTY FLASHY'' is in the Live Feed for TEST 101.} 1086 1086 {That flashcard ``TESTY FLASHY'' is in the Live Feed for TEST 101.}
\end{itemize} 1087 1087 \end{itemize}
1088 1088
\item[Postconditions:] 1089 1089 \item[Postconditions:]
\begin{itemize} 1090 1090 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1091 1091 \itemsep1pt\parskip0pt\parsep0pt
\item 1092 1092 \item
{User shall have that flashcard added to their deck} 1093 1093 {User shall have that flashcard added to their deck}
\item 1094 1094 \item
{User can review this flashcard later} 1095 1095 {User can review this flashcard later}
\end{itemize} 1096 1096 \end{itemize}
1097 1097
\item[Trigger:]{UserX wants to mark a card innapropriate.} 1098 1098 \item[Trigger:]{UserX wants to mark a card innapropriate.}
1099 1099
\item[Workflow:] 1100 1100 \item[Workflow:]
\begin{enumerate} 1101 1101 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1102 1102 \itemsep1pt\parskip0pt\parsep0pt
\item 1103 1103 \item
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the 1104 1104 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the
feed and hover their cursor over it.} 1105 1105 feed and hover their cursor over it.}
\item 1106 1106 \item
{The System shall present buttons on mouseover.} 1107 1107 {The System shall present buttons on mouseover.}
\item 1108 1108 \item
{UserX shall click on the crossed out eye icon (Hide) that appears on the card.} 1109 1109 {UserX shall click on the crossed out eye icon (Hide) that appears on the card.}
\item 1110 1110 \item
{The System shall hide the card from UserX and display a toast, ``Card hidden! If the card was spammy or abusive you may also REPORT''.} 1111 1111 {The System shall hide the card from UserX and display a toast, ``Card hidden! If the card was spammy or abusive you may also REPORT''.}
\item 1112 1112 \item
{UserX shall click the REPORT.} 1113 1113 {UserX shall click the REPORT.}
\end{enumerate} 1114 1114 \end{enumerate}
1115 1115
\item[Expected Result:] {The System shall display a toast, ``Report successful: thanks for letting us know!''} 1116 1116 \item[Expected Result:] {The System shall display a toast, ``Report successful: thanks for letting us know!''}
\end{description} 1117 1117 \end{description}
\newpage 1118 1118 \newpage
1119 1119
{} 1120 1120 {}
1121 1121
\subsection{[F5] Filter Flashcards} 1122 1122 \subsection{[F5] Filter Flashcards}
1123 1123
\begin{description} 1124 1124 \begin{description}
\item[Description:]{This test case outlines the presentation layer process 1125 1125 \item[Description:]{This test case outlines the presentation layer process
of a user filtering existing flashcards to view only a specified subset.} 1126 1126 of a user filtering existing flashcards to view only a specified subset.}
1127 1127
\item[Desired Outcome:]{The User shall see flashcards based on the filter 1128 1128 \item[Desired Outcome:]{The User shall see flashcards based on the filter
options.} 1129 1129 options.}
1130 1130
\item[User Goals:]{The User can find what they are specifically looking 1131 1131 \item[User Goals:]{The User can find what they are specifically looking
for} 1132 1132 for}
1133 1133
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1134 1134 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull 1135 1135 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull
Flashcard} 1136 1136 Flashcard}
1137 1137
\item[Priority Level:]{``Should''} 1138 1138 \item[Priority Level:]{``Should''}
1139 1139
\item[Status:]{Implemented} 1140 1140 \item[Status:]{Implemented}
1141 1141
\item[Preconditions:] 1142 1142 \item[Preconditions:]
\begin{itemize} 1143 1143 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1144 1144 \itemsep1pt\parskip0pt\parsep0pt
\item 1145 1145 \item
{User is logged in as UserX.} 1146 1146 {User is logged in as UserX.}
\item 1147 1147 \item
{UserX has registered for the class TEST 101.} 1148 1148 {UserX has registered for the class TEST 101.}
\item 1149 1149 \item
{There exist flashcards in TEST 101 with the text ``apple'' and ``banana'' 1150 1150 {There exist flashcards in TEST 101 with the text ``apple'' and ``banana''
for each week in the quarter.} 1151 1151 for each week in the quarter.}
\item 1152 1152 \item
{There exist flashcards in TEST 101 with the text ``orange'' that are hidden 1153 1153 {There exist flashcards in TEST 101 with the text ``orange'' that are hidden
for each week in the quarter.} 1154 1154 for each week in the quarter.}
\item 1155 1155 \item
{UserX is at Card List View for the class.} 1156 1156 {UserX is at Card List View for the class.}
\end{itemize} 1157 1157 \end{itemize}
1158 1158
\item[Postconditions:] 1159 1159 \item[Postconditions:]
\begin{itemize} 1160 1160 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1161 1161 \itemsep1pt\parskip0pt\parsep0pt
\item 1162 1162 \item
{User only sees flashcards pertaining to selected dates.} 1163 1163 {User only sees flashcards pertaining to selected dates.}
\end{itemize} 1164 1164 \end{itemize}
1165 1165
\item[Trigger:]{User is looking for specific flashcards.} 1166 1166 \item[Trigger:]{User is looking for specific flashcards.}
1167 1167
\item[Workflow:] 1168 1168 \item[Workflow:]
\begin{enumerate} 1169 1169 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1170 1170 \itemsep1pt\parskip0pt\parsep0pt
\item 1171 1171 \item
{UserX shall deselect ``Week Nine'' from top.} 1172 1172 {UserX shall deselect ``Week Nine'' from top.}
\item 1173 1173 \item
{The System shall hide all cards from Week 9.} 1174 1174 {The System shall hide all cards from Week 9.}
\item 1175 1175 \item
{UserX shall search for ``app'' in the search bar in the top right.} 1176 1176 {UserX shall search for ``app'' in the search bar in the top right.}
\item 1177 1177 \item
{The System shall display only cards including text ``app''.} 1178 1178 {The System shall display only cards including text ``app''.}
\item 1179 1179 \item
{UserX shall click ``Show Hidden'' button in the top left and clear 1180 1180 {UserX shall click ``Show Hidden'' button in the top left and clear
the text in the search box.} 1181 1181 the text in the search box.}
\item 1182 1182 \item
{The System shall display all cards, excluding those from Week 9.} 1183 1183 {The System shall display all cards, excluding those from Week 9.}
\end{enumerate} 1184 1184 \end{enumerate}
1185 1185
\item[Expected Result:] {UserX shall see 9 cards with text ``apple'', 9 cards with text ``banana'', and 9 cards with text ``orange'', distributed evenly among weeks.} 1186 1186 \item[Expected Result:] {UserX shall see 9 cards with text ``apple'', 9 cards with text ``banana'', and 9 cards with text ``orange'', distributed evenly among weeks.}
\end{description} 1187 1187 \end{description}
\newpage 1188 1188 \newpage
1189 1189
{} 1190 1190 {}
1191 1191
\subsection{[F6] Blank Out Words in Flashcard} 1192 1192 \subsection{[F6] Blank Out Words in Flashcard}
1193 1193
\begin{description} 1194 1194 \begin{description}
\item[Description:]{This test case outlines the presentation layer process 1195 1195 \item[Description:]{This test case outlines the presentation layer process
of the User to create keywords in a card they are pushing.} 1196 1196 of the User to create keywords in a card they are pushing.}
1197 1197
\item[Desired Outcome:]{The blanked out words (visually bolded) in the 1198 1198 \item[Desired Outcome:]{The blanked out words (visually bolded) in the
flashcard notify the System that they are keywords.} 1199 1199 flashcard notify the System that they are keywords.}
1200 1200
\item[User Goals:]{The User shall mark some words as keywords so the System 1201 1201 \item[User Goals:]{The User shall mark some words as keywords so the System
may later quiz the User by blanking out one keyword at a time and having the 1202 1202 may later quiz the User by blanking out one keyword at a time and having the
User enter what they think the keyword is.} 1203 1203 User enter what they think the keyword is.}
1204 1204
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1205 1205 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1206 1206 Login, [A3] Add a Class, [F1] Push Flashcard}
1207 1207
\item[Priority Level:]{``Must''} 1208 1208 \item[Priority Level:]{``Must''}
1209 1209
\item[Status:]{Implemented} 1210 1210 \item[Status:]{Implemented}
1211 1211
\item[Preconditions:] 1212 1212 \item[Preconditions:]
\begin{itemize} 1213 1213 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1214 1214 \itemsep1pt\parskip0pt\parsep0pt
\item 1215 1215 \item
\item 1216 1216 \item
{The User is logged in as UserX.} 1217 1217 {The User is logged in as UserX.}
\item 1218 1218 \item
{The User has added the class TEST 101.} 1219 1219 {The User has added the class TEST 101.}
\item 1220 1220 \item
{The User is at the Feed View for the class TEST 101.} 1221 1221 {The User is at the Feed View for the class TEST 101.}
\end{itemize} 1222 1222 \end{itemize}
1223 1223
\item[Postconditions:] 1224 1224 \item[Postconditions:]
\begin{itemize} 1225 1225 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1226 1226 \itemsep1pt\parskip0pt\parsep0pt
\item 1227 1227 \item
{The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline.} 1228 1228 {The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline.}
\end{itemize} 1229 1229 \end{itemize}
1230 1230
\item[Trigger:] {The User wants their newly pushed card to have the keyword ``Spain''.} 1231 1231 \item[Trigger:] {The User wants their newly pushed card to have the keyword ``Spain''.}
1232 1232
\item[Workflow:] 1233 1233 \item[Workflow:]
\begin{enumerate} 1234 1234 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1235 1235 \itemsep1pt\parskip0pt\parsep0pt
\item 1236 1236 \item
{UserX shall click the Compose button (+ circle on bottom right) of Feed.} 1237 1237 {UserX shall click the Compose button (+ circle on bottom right) of Feed.}
\item 1238 1238 \item
{The System shall bring up the composition flashcard modal.} 1239 1239 {The System shall bring up the composition flashcard modal.}
\item 1240 1240 \item
{UserX shall type text ``The rain in Spain stays mainly in the plain'' 1241 1241 {UserX shall type text ``The rain in Spain stays mainly in the plain''
into the composition modal, replacing ``Write a flashcard''.} 1242 1242 into the composition modal, replacing ``Write a flashcard''.}
\item 1243 1243 \item
{UserX shall highlight the word ``Spain''.} 1244 1244 {UserX shall highlight the word ``Spain''.}
\item {UserX shall press Blank Selected Text button.} 1245 1245 \item {UserX shall press Blank Selected Text button.}
\item {UserX shall press Contribute button to push the flashcard.} 1246 1246 \item {UserX shall press Contribute button to push the flashcard.}
\item 1247 1247 \item
{The System will save the blanked out word in the Flashcard Mask of the 1248 1248 {The System will save the blanked out word in the Flashcard Mask of the
newly pushed flashcard.} 1249 1249 newly pushed flashcard.}
\item {The Feed shall display the new card with the keyword underlined.} 1250 1250 \item {The Feed shall display the new card with the keyword underlined.}
\end{enumerate} 1251 1251 \end{enumerate}
1252 1252
\item[Expected Result:] {The System shall show ``Spain'' underlined and bolded 1253 1253 \item[Expected Result:] {The System shall show ``Spain'' underlined and bolded
in the flashcard. The flashcard is visible in the Feed and Deck of class TEST 101.} 1254 1254 in the flashcard. The flashcard is visible in the Feed and Deck of class TEST 101.}
\end{description} 1255 1255 \end{description}
\newpage 1256 1256 \newpage
1257 1257
{} 1258 1258 {}
1259 1259
\subsection{[F7] Fix Flashcard} 1260 1260 \subsection{[F7] Fix Flashcard}
1261 1261
\begin{description} 1262 1262 \begin{description}
\item[Description:]{This Test Case outlines the presentation layer process 1263 1263 \item[Description:]{This Test Case outlines the presentation layer process
for the User to alter (``fix'') a flashcard they made originally and not have 1264 1264 for the User to alter (``fix'') a flashcard they made originally and not have
to make a new copy of it. It is only a ``fix'' if no other users have the 1265 1265 to make a new copy of it. It is only a ``fix'' if no other users have the
flashcard in their Decks AND the User is the author.} 1266 1266 flashcard in their Decks AND the User is the author.}
1267 1267
\item[Desired Outcome:]{The User shall change one of their flashcard's text 1268 1268 \item[Desired Outcome:]{The User shall change one of their flashcard's text
and that alteration will be visible to all users in the Feed.} 1269 1269 and that alteration will be visible to all users in the Feed.}
1270 1270
\item[User Goals:]{The User shall make their own authored flashcard say 1271 1271 \item[User Goals:]{The User shall make their own authored flashcard say
something different than it did originally.} 1272 1272 something different than it did originally.}
1273 1273
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1274 1274 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1275 1275 Login, [A3] Add a Class, [F1] Push Flashcard}
1276 1276
\item[Priority Level:]{``Must''} 1277 1277 \item[Priority Level:]{``Must''}
1278 1278
\item[Status:]{Implemented} 1279 1279 \item[Status:]{Implemented}
1280 1280
\item[Preconditions:] 1281 1281 \item[Preconditions:]
\begin{itemize} 1282 1282 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1283 1283 \itemsep1pt\parskip0pt\parsep0pt
\item 1284 1284 \item
{The User is logged in as UserX.} 1285 1285 {The User is logged in as UserX.}
\item {The User is logged in a separate browser as UserY.} 1286 1286 \item {The User is logged in a separate browser as UserY.}
\item 1287 1287 \item
{UserX and UserY has enrolled in the class TEST 101.} 1288 1288 {UserX and UserY has enrolled in the class TEST 101.}
\item 1289 1289 \item
{UserX is at the Deck View for the class TEST 101.} 1290 1290 {UserX is at the Deck View for the class TEST 101.}
\item {UserY is at the Feed View for the class TEST 101.} 1291 1291 \item {UserY is at the Feed View for the class TEST 101.}
\item 1292 1292 \item
{The User has contributed and pushed a flashcard to the TEST 101 Feed, which is 1293 1293 {The User has contributed and pushed a flashcard to the TEST 101 Feed, which is
also in their Deck with text 1294 1294 also in their Deck with text
``My card is currently broken''; this flashcard is for fixing.} 1295 1295 ``My card is currently broken''; this flashcard is for fixing.}
\end{itemize} 1296 1296 \end{itemize}
1297 1297
\item[Postconditions:] 1298 1298 \item[Postconditions:]
\begin{itemize} 1299 1299 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1300 1300 \itemsep1pt\parskip0pt\parsep0pt
\item 1301 1301 \item
{The authoring User shall see their alteration for that flashcard in their 1302 1302 {The authoring User shall see their alteration for that flashcard in their
Feed and Deck for TEST 101.} 1303 1303 Feed and Deck for TEST 101.}
\item {Other users shall see the fixed flashcard in the Feed for TEST 101 if they 1304 1304 \item {Other users shall see the fixed flashcard in the Feed for TEST 101 if they
refresh the app.} 1305 1305 refresh the app.}
\end{itemize} 1306 1306 \end{itemize}
1307 1307
\item[Trigger:] {UserX realizes that a card they created previously does 1308 1308 \item[Trigger:] {UserX realizes that a card they created previously does
not say what they currently desire and wishes to change it.} 1309 1309 not say what they currently desire and wishes to change it.}
1310 1310
\item[Workflow:] 1311 1311 \item[Workflow:]
\begin{enumerate} 1312 1312 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1313 1313 \itemsep1pt\parskip0pt\parsep0pt
\item 1314 1314 \item
{UserX shall hover the Flashcard they created with text ``My card is currently 1315 1315 {UserX shall hover the Flashcard they created with text ``My card is currently
broken''.} 1316 1316 broken''.}
\item 1317 1317 \item
{UserX shall select the bottom-left blue Edit Card pencil button on the flashcard.} 1318 1318 {UserX shall select the bottom-left blue Edit Card pencil button on the flashcard.}
\item 1319 1319 \item
{The System shall bring up the flashcard Edit modal.} 1320 1320 {The System shall bring up the flashcard Edit modal.}
\item 1321 1321 \item
{UserX shall highlight the text ``broken''.} 1322 1322 {UserX shall highlight the text ``broken''.}
\item {UserX shall change the highlighted word into ``fixed'' so that the text 1323 1323 \item {UserX shall change the highlighted word into ``fixed'' so that the text
reads ``My card is currently fixed''.} 1324 1324 reads ``My card is currently fixed''.}
\item 1325 1325 \item
{UserX shall press the Save Changes button.} 1326 1326 {UserX shall press the Save Changes button.}
\item 1327 1327 \item
{The System shall update the flashcard's text content.} 1328 1328 {The System shall update the flashcard's text content.}
\item 1329 1329 \item
{The System shall close the edit flashcard modal.} 1330 1330 {The System shall close the edit flashcard modal.}
\item {The Client shall show the flashcard in the UserX's TEST 101 Deck with the 1331 1331 \item {The Client shall show the flashcard in the UserX's TEST 101 Deck with the
fixed text.} 1332 1332 fixed text.}
1333 1333
\item {UserY refreshes the TEST 101 Feed view and sees the flashcard ``My card is 1334 1334 \item {UserY refreshes the TEST 101 Feed view and sees the flashcard ``My card is
currently fixed''.} 1335 1335 currently fixed''.}
\end{enumerate} 1336 1336 \end{enumerate}
1337 1337
\item[Expected Results:]{The Client shall show the fixed flashcard 1338 1338 \item[Expected Results:]{The Client shall show the fixed flashcard
in UserX's TEST 101 class Deck with the new text:``My card is currently fixed''. 1339 1339 in UserX's TEST 101 class Deck with the new text:``My card is currently fixed''.
The Client shall show the fixed flashcard in UserY's TEST 101 Feed view as well, 1340 1340 The Client shall show the fixed flashcard in UserY's TEST 101 Feed view as well,
after page refresh.} 1341 1341 after page refresh.}
\end{description} 1342 1342 \end{description}
\newpage 1343 1343 \newpage
1344 1344
{} 1345 1345 {}
1346 1346
\subsection{[F8] Hide cards from feed} 1347 1347 \subsection{[F8] Hide cards from feed}
1348 1348
\begin{description} 1349 1349 \begin{description}
\item[Description:]{This test case outlines the presentation layer process 1350 1350 \item[Description:]{This test case outlines the presentation layer process
for the User shall be able to hide cards from their own view, on 1351 1351 for the User shall be able to hide cards from their own view, on
the Feed and Deck.} 1352 1352 the Feed and Deck.}
1353 1353
\item[Desired Outcome:]{The System marks the flashcard as hidden from the 1354 1354 \item[Desired Outcome:]{The System marks the flashcard as hidden from the
User so that the User cannot see the flashcard in the Feed or Deck.} 1355 1355 User so that the User cannot see the flashcard in the Feed or Deck.}
1356 1356
\item[User Goals:]{The flashcard is no longer visible to the User in the Feed or 1357 1357 \item[User Goals:]{The flashcard is no longer visible to the User in the Feed or
Deck views.} 1358 1358 Deck views.}
1359 1359
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1360 1360 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1361 1361 Login, [A3] Add a Class, [F1] Push Flashcard}
1362 1362
\item[Priority Level:]{``Should''} 1363 1363 \item[Priority Level:]{``Should''}
1364 1364
\item[Status:]{Implemented} 1365 1365 \item[Status:]{Implemented}
1366 1366
\item[Preconditions:] 1367 1367 \item[Preconditions:]
\begin{itemize} 1368 1368 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1369 1369 \itemsep1pt\parskip0pt\parsep0pt
\item 1370 1370 \item
{The User is logged in as UserX.} 1371 1371 {The User is logged in as UserX.}
\item 1372 1372 \item
{The User has enrolled in the class TEST 101.} 1373 1373 {The User has enrolled in the class TEST 101.}
\item 1374 1374 \item
{The User is at the Feed View or Deck View (alternate workflow) 1375 1375 {The User is at the Feed View or Deck View (alternate workflow)
for the class TEST 101.} 1376 1376 for the class TEST 101.}
\item 1377 1377 \item
{The User has composed and contributed a flashcard to the Feed with text 1378 1378 {The User has composed and contributed a flashcard to the Feed with text
``The rain in Spain stays mainly in the plain''.} 1379 1379 ``The rain in Spain stays mainly in the plain''.}
\end{itemize} 1380 1380 \end{itemize}
1381 1381
\item[Postconditions:] 1382 1382 \item[Postconditions:]
\begin{itemize} 1383 1383 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1384 1384 \itemsep1pt\parskip0pt\parsep0pt
\item{Flashcard is not viewable by user in the Feed or Deck views in TEST 101.} 1385 1385 \item{Flashcard is not viewable by user in the Feed or Deck views in TEST 101.}
\end{itemize} 1386 1386 \end{itemize}
1387 1387
\item[Workflow:] 1388 1388 \item[Workflow:]
\begin{enumerate} 1389 1389 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1390 1390 \itemsep1pt\parskip0pt\parsep0pt
\item {UserX has navigated to the Feed View of TEST 101.} 1391 1391 \item {UserX has navigated to the Feed View of TEST 101.}
\item 1392 1392 \item
{UserX hovers the flashcard they added with the text ``The rain in Spain stays 1393 1393 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
mainly in the plain''.} 1394 1394 mainly in the plain''.}
1395 1395
\item {UserX presses Hide button, which is the red crossed-out eye.} 1396 1396 \item {UserX presses Hide button, which is the red crossed-out eye.}
1397 1397
\item {The System shall hide the card.} 1398 1398 \item {The System shall hide the card.}
\item {The Client shall remove the card from view for UserX.} 1399 1399 \item {The Client shall remove the card from view for UserX.}
\item {A toast is shown on the client that allows the User to report the card.} 1400 1400 \item {A toast is shown on the client that allows the User to report the card.}
\item {The card is not shown on the Feed or Deck.} 1401 1401 \item {The card is not shown on the Feed or Deck.}
\end{enumerate} 1402 1402 \end{enumerate}
1403 1403
\item[Expected Result:]{The Client shows the Feed without the flashcard of text 1404 1404 \item[Expected Result:]{The Client shows the Feed without the flashcard of text
``The rain in Spain stays mainly in the plain''. A toast that allows UserX to 1405 1405 ``The rain in Spain stays mainly in the plain''. A toast that allows UserX to
report the card shows up temporarily.} 1406 1406 report the card shows up temporarily.}
1407 1407
\item[Alternate Workflow:] 1408 1408 \item[Alternate Workflow:]
1409 1409
\begin{enumerate} 1410 1410 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1411 1411 \itemsep1pt\parskip0pt\parsep0pt
\item {UserX has navigated to the Deck View of TEST 101.} 1412 1412 \item {UserX has navigated to the Deck View of TEST 101.}
\item 1413 1413 \item
{UserX hovers the flashcard they added with the text ``The rain in Spain stays 1414 1414 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
mainly in the plain''.} 1415 1415 mainly in the plain''.}
1416 1416
\item {UserX presses hide button, which is the red crossed-out eye.} 1417 1417 \item {UserX presses hide button, which is the red crossed-out eye.}
1418 1418
\item {The System shall hide the card.} 1419 1419 \item {The System shall hide the card.}
\item {A toast is shown on the client that allows the User to report the card.} 1420 1420 \item {A toast is shown on the client that allows the User to report the card.}
\item {The card is not shown on the Feed or Deck.} 1421 1421 \item {The card is not shown on the Feed or Deck.}
\end{enumerate} 1422 1422 \end{enumerate}
1423 1423
1424 1424
\item[Expected Result:]{The Client shows the Deck without the flashcard of text 1425 1425 \item[Expected Result:]{The Client shows the Deck without the flashcard of text
``The rain in Spain stays mainly in the plain''. A toast that allows UserX to 1426 1426 ``The rain in Spain stays mainly in the plain''. A toast that allows UserX to
report the card shows up temporarily.} 1427 1427 report the card shows up temporarily.}
\end{description} 1428 1428 \end{description}
\newpage 1429 1429 \newpage
1430 1430
{} 1431 1431 {}
1432 1432
\subsection{[F9] View a Feed} 1433 1433 \subsection{[F9] View a Feed}
1434 1434
\begin{description} 1435 1435 \begin{description}
\item[Description:]{This Test Case outlines the presentation layer process 1436 1436 \item[Description:]{This Test Case outlines the presentation layer process
process of a user viewing a class feed of flashcards.} 1437 1437 process of a user viewing a class feed of flashcards.}
1438 1438