Commit 2539f5e72245772359f7cc0c98add8e661088dea

Authored by mjeng
1 parent 887368d7eb
Exists in master

TEST 101, Add Class, Flag Card, etc

Showing 1 changed file with 141 additions and 142 deletions Inline Diff

TestCases.tex View file @ 2539f5e
\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 1.} 226 226 {The User is whitelisted for class TEST 101.}
\item 227 227 \item
{The User is not whitelisted for class TEST 2.} 228 228 {The User is not whitelisted for class TEST 102.}
\item 229 229 \item
{The class TEST 3 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 1''.} 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 1'', 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 1.} 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 1.} 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 2''.} 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 2.} 285 285 {UserX shall see a lock icon in the suggestions for TEST 102.}
\item 286 286 \item
{UserX shall click on ``TEST 2'', 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 2 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 3''.} 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 3.} 306 306 {The System shall see there is no whitelist for TEST 103.}
\item 307 307 \item
{UserX shall click on ``TEST 3'', 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 3.} 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 3.} 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 TEST1.} 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 TEST1, 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 TEST1 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 TEST1.} 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 TEST1.} 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[Error Handling:] 425
\begin{description} 426
\item[\small Missing Fields] \begin{itemize} 427
\item The client shall enforce required fields 428
\item The server will return an HTTP Bad Request error to the client. 429
\end{itemize} 430
\item[\small Incorrect Old Password] \begin{itemize} 431
\item The server will return an HTTP Forbidden error to the client. 432
\end{itemize} 433
\item[\small Blank New Password] \begin{itemize} 434
\item The server will return an HTTP Bad Request error to the client. 435
\end{itemize} 436
\end{description} 437
438
\item[Workflow:] 439 425 \item[Workflow:]
\begin{enumerate} 440 426 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 441 427 \itemsep1pt\parskip0pt\parsep0pt
\item 442 428 \item
{UserX shall enter their current password ``oldPassword'' and the desired 443 429 {UserX shall enter their current password ``oldPassword'' and the desired
new password ``newPassword'' (twice) in the ``Change Password'' form.} 444 430 new password ``newPassword'' (twice) in the ``Change Password'' form.}
\item 445 431 \item
{UserX shall click the ``Submit'' button.} 446 432 {UserX shall click the ``Submit'' button.}
\item 447 433 \item
{The System shall check UserX's current password.} 448 434 {The System shall check UserX's current password.}
\item 449 435 \item
{The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.} 450 436 {The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.}
\end{enumerate} 451 437 \end{enumerate}
452 438
\item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.} 453 439 \item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.}
\end{description} 454 440 \end{description}
\newpage 455 441 \newpage
456 442
{} 457 443 {}
458 444
\subsection{[A6] Password Reset} 459 445 \subsection{[A6] Password Reset}
460 446
\begin{description} 461 447 \begin{description}
\item[Description:]{The User shall be able to reset their password without 462 448 \item[Description:]{The User shall be able to reset their password without
being logged in } 463 449 being logged in }
464 450
\item[Desired Outcome:]{The User's password shall be changed to one that 465 451 \item[Desired Outcome:]{The User's password shall be changed to one that
they remember} 466 452 they remember}
\\ 467 453 \\
468 454
\item[User Goals:]{The User does not know their current password but wants 469 455 \item[User Goals:]{The User does not know their current password but wants
to log into the site} 470 456 to log into the site}
471 457
\item[Dependency Use Cases:]{[A1] User Registration} 472 458 \item[Dependency Use Cases:]{[A1] User Registration}
\\ 473 459 \\
474 460
\item[Details:]{The User provides their email in a password reset form. If 475 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 476 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 477 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 478 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 479 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 480 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 481 467 password in a form. When they submit the form, their password is updated
if the token is correct. } 482 468 if the token is correct. }
483 469
\item[Priority Level:]{``Must''} 484 470 \item[Priority Level:]{``Must''}
485 471
472 \item[Status]{Implemented}
473
\item[Preconditions:] 486 474 \item[Preconditions:]
\begin{itemize} 487 475 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 488 476 \itemsep1pt\parskip0pt\parsep0pt
\item 489 477 \item
{UserX has created an account with testuserx@flashy.cards.} 490 478 {Account for UserX has been created.}
\end{itemize} 491 479 \end{itemize}
492 480
\item[Postconditions:] 493 481 \item[Postconditions:]
\begin{itemize} 494 482 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 495 483 \itemsep1pt\parskip0pt\parsep0pt
\item 496 484 \item
{UserX's password is changed.} 497 485 {UserX's password is changed.}
\item 498 486 \item
{UserX can log in with the new password.} 499 487 {UserX can log in with the new password.}
\end{itemize} 500 488 \end{itemize}
501 489
\item[Trigger]{UserX forgot their password and wants to access the site.} 502 490 \item[Trigger]{UserX forgot their password and wants to access the site.}
503 491
\item[Workflow:] 504 492 \item[Workflow:]
505 493
\begin{enumerate} 506 494 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 507 495 \itemsep1pt\parskip0pt\parsep0pt
\item 508 496 \item
{UserX shall click the ``Forgot Password'' hyperlink.} 509 497 {UserX shall click the ``Forgot Password'' hyperlink.}
\item 510 498 \item
{The System shall prompt the user for their current email.} 511 499 {The System shall prompt the user for their current email.}
\item 512 500 \item
{UserX shall submit their email ``testuserx@flashy.cards''.} 513 501 {UserX shall submit their email ``UserX@flashy.cards''.}
\item 514 502 \item
{The System shall check if an account exists with the email entered by UserX.} 515 503 {The System shall check if an account exists with the email entered by UserX.}
\item 516 504 \item
{The System shall create a new password reset token for UserX.} 517 505 {The System shall create a new password reset token for UserX.}
\item 518 506 \item
{The System shall send an email to UserX with a link containing the token and the 519 507 {The System shall send an email to UserX with a link containing the token and the
user's ID.} 520 508 user's ID.}
\item 521 509 \item
{UserX shall click the link in the email to visit /app/password\_reset.} 522 510 {UserX shall click the link in the email to visit /app/password\_reset.}
\item 523 511 \item
{The System shall render a form that will prompt the user for a new password.} 524 512 {The System shall render a form that will prompt the user for a new password.}
\item 525 513 \item
{UserX shall provide a new password in the form.} 526 514 {UserX shall provide a new password, ``newPassword'', in the form.}
\item 527 515 \item
{The System shall change the password associated with the user's email.} 528 516 {The System shall change the password associated with the user's email.}
517 \item
518 {UserX shall navigate back to the login page and enter ``UserX@flashy.cards''
519 with the old password ``mynameisuserx''.}
520 \item
521 {The System shall display ``Invalid username or password!''}
522 \item
523 {UserX shall login as ``UserX@flashy.cards'' with the password ``newPassword''.}
\end{enumerate} 529 524 \end{enumerate}
530 525
\item[Expected Result:] {UserX's password will change to ``newPasword''.} 531 526 \item[Expected Result:] {The login shall succeed.}
532 527
\item[Alternate Workflow:] 533 528 \item[Alternate Workflow:]
\begin{enumerate} 534 529 \begin{enumerate}
\setcounter{enumi}{4} 535 530 \setcounter{enumi}{4}
\itemsep1pt\parskip0pt\parsep0pt 536 531 \itemsep1pt\parskip0pt\parsep0pt
\item 537 532 \item
{If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.} 538 533 {If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.}
\end{enumerate} 539 534 \end{enumerate}
540 535
\item[Expected Result:] {UserX's password will not be reset.} 541 536 \item[Expected Result:] {UserX's password will not be reset.}
\end{description} 542 537 \end{description}
\newpage 543 538 \newpage
544 539
{} 545 540 {}
546 541
\subsection{[A7] Student Prevented From Accessing A Restricted Course} 547 542 \subsection{[A7] Student Prevented From Accessing A Restricted Course}
548 543
\begin{description} 549 544 \begin{description}
\item[Description:]{The User shall not be able to access a restricted course.} 550 545 \item[Description:]{The User shall not be able to access a restricted course.}
551 546
\item[Desired Outcome:]{The class will have limited access and only those 552 547 \item[Desired Outcome:]{The class will have limited access and only those
users who are whitelisted may enroll in the class.} 553 548 users who are whitelisted may enroll in the class.}
554 549
\item[User Goals:]{The instructor wants to limit access to his class so only 555 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 556 551 the students who are actually in his class participate, and nobody
else.} 557 552 else.}
558 553
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 559 554 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\\ 560 555 \\
561 556
\item[Priority Level:]{``Should''} 562 557 \item[Priority Level:]{``Should''}
563 558
\item[Status:]{Implemented} 564 559 \item[Status:]{Implemented}
565 560
\item[Preconditions:] 566 561 \item[Preconditions:]
\begin{itemize} 567 562 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 568 563 \itemsep1pt\parskip0pt\parsep0pt
\item 569 564 \item
{UserX has valid instructor's account} 570 565 {UserX has valid instructor's account}
\end{itemize} 571 566 \end{itemize}
572 567
\item[Postconditions:] 573 568 \item[Postconditions:]
\begin{itemize} 574 569 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 575 570 \itemsep1pt\parskip0pt\parsep0pt
\item 576 571 \item
{Only those users who were whitelisted may add the class.} 577 572 {Only those users who were whitelisted may add the class.}
\end{itemize} 578 573 \end{itemize}
579 574
\item[Trigger:]{The instructor emails the administrator and requests to 580 575 \item[Trigger:]{The instructor emails the administrator and requests to
limit access to his class.} 581 576 limit access to his class.}
582 577
\item[Workflow:] 583 578 \item[Workflow:]
\begin{enumerate} 584 579 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 585 580 \itemsep1pt\parskip0pt\parsep0pt
\item 586 581 \item
{The instructor, ``INSTR1'', shall email the administrators from his UCSD email address 587 582 {The instructor, ``INSTR1'', shall email the administrators from his UCSD email address
and requests to limit access to his course.} 588 583 and requests to limit access to his course.}
\item 589 584 \item
{ INSTR1 shall provide a list of 590 585 { INSTR1 shall provide a list of
emails of the students that are to be whitelisted.} 591 586 emails of the students that are to be whitelisted.}
\item 592 587 \item
{The administrators shall visit a custom admin page, select the course, and 593 588 {The administrators shall visit a custom admin page, select the course, and
paste the list of emails.} 594 589 paste the list of emails.}
\item 595 590 \item
{The administrators shall submit the page directly to the System.} 596 591 {The administrators shall submit the page directly to the System.}
\item 597 592 \item
{The System shall create a WhitelistedAddress for each provided email, 598 593 {The System shall create a WhitelistedAddress for each provided email,
attaching it to the section taught by INST1.} 599 594 attaching it to the section taught by INST1.}
\item 600 595 \item
{The System shall add any existing users whose email addresses appear 601 596 {The System shall add any existing users whose email addresses appear
in the whitelist to the class. } 602 597 in the whitelist to the class. }
\end{enumerate} 603 598 \end{enumerate}
604 599
\item[Expected Result:] {A whitelist is added to a section.} 605 600 \item[Expected Result:] {A whitelist is added to a section.}
\end{description} 606 601 \end{description}
\newpage 607 602 \newpage
608 603
{} 609 604 {}
610 605
\subsection{[A8] User Logout} 611 606 \subsection{[A8] User Logout}
612 607
\begin{description} 613 608 \begin{description}
\item[Description:]{The User shall be able to log out of his/her account on 614 609 \item[Description:]{The User shall be able to log out of his/her account on
the site.} 615 610 the site.}
616 611
\item[Desired Outcome:]{The User's information and data will no longer be 617 612 \item[Desired Outcome:]{The User's information and data will no longer be
accessible after logging out. } 618 613 accessible after logging out. }
619 614
\item[User Goals:]{The User is done with his/her session of using the 620 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 621 616 website, and wants to make sure others cannot access the data in his/her
account.} 622 617 account.}
623 618
\item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login} 624 619 \item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login}
\\ 625 620 \\
626 621
\item[Priority Level:]{``Must''} 627 622 \item[Priority Level:]{``Must''}
628 623
\item[Status:]{Implemented} 629 624 \item[Status:]{Implemented}
630 625
\item[Preconditions:]{The user is logged into their account.} 631 626 \item[Preconditions:]{The user is logged into their account.}
632 627
\item[Postconditions:]{The user's data can no longer be accessed.} 633 628 \item[Postconditions:]{The user's data can no longer be accessed.}
634 629
\item[Trigger:] 635 630 \item[Trigger:]
636 631
\item[Workflow:] 637 632 \item[Workflow:]
638 633
\begin{enumerate} 639 634 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 640 635 \itemsep1pt\parskip0pt\parsep0pt
\item 641 636 \item
{UserX shall click the ``Logout'' button.} 642 637 {UserX shall click the ``Logout'' button.}
\item 643 638 \item
{The System shall logs out UserX.} 644 639 {The System shall logs out UserX.}
\item 645 640 \item
{The System shall redirect UserX to the login page.} 646 641 {The System shall redirect UserX to the login page.}
\end{enumerate} 647 642 \end{enumerate}
648 643
\item[Expected Result:] {User is logged out and is redirected to the login page.} 649 644 \item[Expected Result:] {User is logged out and is redirected to the login page.}
\end{description} 650 645 \end{description}
\newpage 651 646 \newpage
652 647
{} 653 648 {}
654 649
\subsection{[A9] Contact Admin} 655 650 \subsection{[A9] Contact Admin}
656 651
\begin{description} 657 652 \begin{description}
\item[Description]{The User shall be able to contact the admin.} 658 653 \item[Description]{The User shall be able to contact the admin.}
659 654
\item[Desired Outcome]{The User shall send a message to the admin; the 660 655 \item[Desired Outcome]{The User shall send a message to the admin; the
admin shall receive the message.} 661 656 admin shall receive the message.}
662 657
\item[User Goals:]{The User sends a message to the admin.} 663 658 \item[User Goals:]{The User sends a message to the admin.}
664 659
\item[Dependency Use Cases]{None} 665 660 \item[Dependency Use Cases]{None}
\\ 666 661 \\
667 662
\item[Priority Level]{``Must''} 668 663 \item[Priority Level]{``Must''}
669 664
\item[Status]{Not Implemented and Deferred} 670 665 \item[Status]{Not Implemented and Deferred}
671 666
\item[Pre-conditions]{None.} 672 667 \item[Pre-conditions]{None.}
673 668
\item[Post-conditions]{The admin receives the user's message.} 674 669 \item[Post-conditions]{The admin receives the user's message.}
675 670
\item[Trigger]{UserX wants to contact the administrators of our application.} 676 671 \item[Trigger]{UserX wants to contact the administrators of our application.}
677 672
\item[Workflow] 678 673 \item[Workflow]
\begin{enumerate} 679 674 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 680 675 \itemsep1pt\parskip0pt\parsep0pt
\item 681 676 \item
{The System shall display the admin email address on every page in the 682 677 {The System shall display the admin email address on every page in the
application.} 683 678 application.}
\end{enumerate} 684 679 \end{enumerate}
685 680
\item[Expected Result:] {The admin's email address can be seen by UserX on every page.} 686 681 \item[Expected Result:] {The admin's email address can be seen by UserX on every page.}
\end{description} 687 682 \end{description}
\newpage 688 683 \newpage
689 684
{} 690 685 {}
691 686
\subsection{[A10] Configure Account Notifications} 692 687 \subsection{[A10] Configure Account Notifications}
\begin{description} 693 688 \begin{description}
\item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.} 694 689 \item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.}
695 690
\item[Desired Outcome]{The User shall only receive notifications at the 696 691 \item[Desired Outcome]{The User shall only receive notifications at the
times that were specified.} 697 692 times that were specified.}
\\ 698 693 \\
699 694
\item[User Goals]{The User shall not be bothered needlessly or at 700 695 \item[User Goals]{The User shall not be bothered needlessly or at
inconvenient times.} 701 696 inconvenient times.}
702 697
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 703 698 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\\ 704 699 \\
705 700
\item[Priority Level]{``Must''} 706 701 \item[Priority Level]{``Must''}
707 702
\item[Status]{Implemented} 708 703 \item[Status]{Deferred}
709 704
\item[Preconditions:] 710 705 \item[Preconditions:]
\begin{itemize} 711 706 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 712 707 \itemsep1pt\parskip0pt\parsep0pt
\item 713 708 \item
{The User has registered with the email testuser@flashy.cards.} 714 709 {The User is logged in as UserX.}
\item 715
{The user has verified their email address.} 716
\item {The User is logged in with the above email.} 717
\end{itemize} 718 710 \end{itemize}
719 711
\item[Postconditions:] 720 712 \item[Postconditions:]
\begin{itemize} 721 713 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 722 714 \itemsep1pt\parskip0pt\parsep0pt
\item 723 715 \item
{User only receive notifications at specified times} 724 716 {User only receive notifications at specified times}
\end{itemize} 725 717 \end{itemize}
726 718
\item[Trigger]{UserX wants to change their notification settings} 727 719 \item[Trigger]{UserX wants to change their notification settings}
728 720
\item[Workflow] 729 721 \item[Workflow]
\begin{enumerate} 730 722 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 731 723 \itemsep1pt\parskip0pt\parsep0pt
\item 732 724 \item
{UserX shall select ``Account Settings'' button from the top header.} 733 725 {UserX shall select ``Settings'' button from the top header.}
\item 734 726 \item
{The System shall display a settings screen.} 735 727 {The System shall display a settings screen.}
\item 736 728 \item
{UserX shall change the notification timing to 1 min.} 737 729 {UserX shall change the notification timing to 1 min.}
\item 738 730 \item
{UserX shall click ``Save Settings'' button.} 739 731 {UserX shall click ``Save Settings'' button.}
\item 740 732 \item
{The System shall display a message confirming the settings are saved.} 741 733 {The System shall display a message confirming the settings are saved.}
\item 742 734 \item
{The System shall save notification settings to the user's attributes.} 743 735 {The System shall save notification settings to the user's attributes.}
\end{enumerate} 744 736 \end{enumerate}
745 737
\item[Expected Result:]{UserX shall be notified at least as slow as 1 min.} 746 738 \item[Expected Result:]{UserX shall be notified at least as slow as 1 min.}
\end{description} 747 739 \end{description}
\newpage 748 740 \newpage
749 741
{} 750 742 {}
751 743
\section{Flashcards} 752 744 \section{Flashcards}
\subsection{[F1] Push Flashcard} 753 745 \subsection{[F1] Push Flashcard}
754 746
\begin{description} 755 747 \begin{description}
\item[Description:]{This test case outlines the presentation layer step 756 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.} 757 749 process of a User contributing a flashcard to the live feed and to their deck.}
758 750
\item[Desired Outcome:]{The User shall have the flashcard added to their own deck 759 751 \item[Desired Outcome:]{The User shall have the flashcard added to their own deck
and the live feed.} 760 752 and the live feed.}
\\ 761 753 \\
762 754
\item[User Goals:]{The User will see their flashcard in their deck and the 763 755 \item[User Goals:]{The User will see their flashcard in their deck and the
flashcard will be shared with others.} 764 756 flashcard will be shared with others.}
765 757
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 766 758 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\\ 767 759 \\
768 760
\item[Priority Level:]{``Must''} 769 761 \item[Priority Level:]{``Must''}
770 762
\item[Status:]{Implemented} 771 763 \item[Status:]{Implemented}
772 764
\item[Preconditions:] 773 765 \item[Preconditions:]
\begin{itemize} 774 766 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 775 767 \itemsep1pt\parskip0pt\parsep0pt
\item 776 768 \item
{The User is logged as UserX.} 777 769 {The User is logged as UserX.}
\item 778 770 \item
{The User is logged in a different browser session as UserY.} 779 771 {The User is logged in a different browser session as UserY.}
\item 780 772 \item
{UserX and UserY have added the class TEST 1.} 781 773 {UserX and UserY have added the class TEST 101.}
\item 782 774 \item
{UserX and UserY are on the live feed for TEST 1.} 783 775 {UserX and UserY are on the live feed for TEST 101.}
\end{itemize} 784 776 \end{itemize}
785 777
\item[Postconditions:] 786 778 \item[Postconditions:]
\begin{itemize} 787 779 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 788 780 \itemsep1pt\parskip0pt\parsep0pt
\item 789 781 \item
{UserX has flashcard added to their deck.} 790 782 {UserX has flashcard added to their deck.}
\item 791 783 \item
{The Flashcard is shown in the Live Feed.} 792 784 {The Flashcard is shown in the Live Feed.}
\item 793 785 \item
{UserY and other users can add this flashcard to their decks.} 794 786 {UserY and other users can add this flashcard to their decks.}
\end{itemize} 795 787 \end{itemize}
796 788
\item[Trigger:]{UserX wants to contribute a flashcard to the TEST 1.} 797 789 \item[Trigger:]{UserX wants to contribute a flashcard to the class TEST 101.}
798 790
\item[Workflow:] 799 791 \item[Workflow:]
\begin{enumerate} 800 792 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 801 793 \itemsep1pt\parskip0pt\parsep0pt
\item {UserX has clicked the circular plus button (``Compose'' button) in 802 794 \item {UserX has clicked the circular plus button (``Compose'' button) in
the lower right corner of the live feed.} 803 795 the lower right corner of the live feed.}
\item 804 796 \item
{The System shall present a modal with a text box.} 805 797 {The System shall present a modal with a text box.}
\item 806 798 \item
{UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.} 807 799 {UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.}
\item 808 800 \item
{UserX shall select the ``Contribute'' button in the modal.} 809 801 {UserX shall select the ``Contribute'' button in the modal.}
\item 810 802 \item
{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 1''.} 811 803 {The System shall add the new card containing the text ``The rain in Spain stays mainly in
804 the plain'' to the feed of each user enrolled in ``TEST 101''.}
\item 812 805 \item
{UserY shall see the card appear in their feed within a minute (See Notes).} 813 806 {UserY shall see the card appear in their feed within a minute (See Notes).}
\item 814 807 \item
{The System shall hide the modal from UserX.} 815 808 {The System shall hide the modal from UserX.}
\item 816 809 \item
{The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).} 817 810 {The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).}
\end{enumerate} 818 811 \end{enumerate}
819 812
\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 is in their deck and a pencil picture on 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 1 without checkmark and pencil mark.} 820 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 is in their deck and a pencil picture on 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 without checkmark and pencil mark.}
821 814
\item[Alternative Workflow:] 822 815 \item[Alternative Workflow:]
\begin{enumerate} 823 816 \begin{enumerate}
\setcounter{enumi}{3} 824 817 \setcounter{enumi}{3}
\itemsep1pt\parskip0pt\parsep0pt 825 818 \itemsep1pt\parskip0pt\parsep0pt
\item 826 819 \item
{UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.} 827 820 {UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.}
\item 828 821 \item
{The System shall bold the word Spain.} 829 822 {The System shall bold the word Spain.}
\item 830 823 \item
{UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.} 831 824 {UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.}
\item 832 825 \item
{The System shall bold the word plain.} 833 826 {The System shall bold the word plain.}
\item 834 827 \item
{UserX shall click the ``Contribute'' button in the modal.} 835 828 {UserX shall click the ``Contribute'' button in the modal.}
\item 836 829 \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 1.} 837 830 {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 1.}
\item 838 831 \item
{UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.} 839 832 {UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.}
\end{enumerate} 840 833 \end{enumerate}
841 834
\item[Expected Result:] { 842 835 \item[Expected Result:] {
UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded in their deck. 843 836 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, 844 837 For UserX, the new flashcard will have a checkmark,
indicating that the card is in their deck and a pencil picture on 845 838 indicating that the card is in their deck and a pencil icon on
top right to indicate UserX as the author of the flashcard. 846 839 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 1 847 840 The new flashcard will show up on UserY's live feed on class TEST 101
without checkmark and pencil mark. 848 841 without checkmark and pencil icon.
} 849 842 }
850 843
\item[Alternative Workflow:] 851 844 \item[Alternative Workflow:]
\begin{enumerate} 852 845 \begin{enumerate}
\setcounter{enumi}{2} 853 846 \setcounter{enumi}{2}
\itemsep1pt\parskip0pt\parsep0pt 854 847 \itemsep1pt\parskip0pt\parsep0pt
\item 855 848 \item
{UserX shall select the input field of the modal and type five blank spaces.} 856 849 {UserX shall select the input field of the modal and type five blank spaces.}
\item 857 850 \item
{UserX shall click the ``Contribute'' button in the dialog.} 858 851 {UserX shall click the ``Contribute'' button in the dialog.}
\end{enumerate} 859 852 \end{enumerate}
860 853
\item[Expected Result:] 861 854 \item[Expected Result:]
{ Blank flashcard will not be added to UserX's deck or to the live feed of TEST 1. } 862 855 { Blank flashcard will not be added to UserX's deck or to the live feed of TEST 101.}
863 856
\item[Alternative Workflow:] 864 857 \item[Alternative Workflow:]
\begin{enumerate} 865 858 \begin{enumerate}
\setcounter{enumi}{2} 866 859 \setcounter{enumi}{2}
\itemsep1pt\parskip0pt\parsep0pt 867 860 \itemsep1pt\parskip0pt\parsep0pt
\item 868 861 \item
{UserX shall select the input field and type ``Test''.} 869 862 {UserX shall select the input field and type ``Test''.}
\item 870 863 \item
{UserX shall click the ``Contribute'' button in the dialog.} 871 864 {UserX shall click the ``Contribute'' button in the dialog.}
\end{enumerate} 872 865 \end{enumerate}
873 866
\item[Expected Result:] 874 867 \item[Expected Result:]
{ Flashcard with input not meeting the length restriction will not be added to UserX's deck or to the live feed of TEST 1. } 875 868 { Flashcard with input not meeting the length restriction will not be added to
869 UserX's deck or to the live feed of TEST 101.}
876 870
\end{description} 877 871 \end{description}
\newpage 878 872 \newpage
879 873
{} 880 874 {}
881 875
\subsection{[F2] Edit Flashcard} 882 876 \subsection{[F2] Edit Flashcard}
883 877
\begin{description} 884 878 \begin{description}
\item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.} 885 879 \item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.}
886 880
\item[Desired Outcome:]{Flashcard is edited and saved appropriately} 887 881 \item[Desired Outcome:]{Flashcard is edited and saved appropriately}
\\ 888 882 \\
889 883
\item[User Goals:]{The User shall be able to change the text, the blanked 890 884 \item[User Goals:]{The User shall be able to change the text, the blanked
words, and the study date on a flashcard.} 891 885 words, and the study date on a flashcard.}
892 886
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 893 887 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard} 894 888 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard}
895 889
\item[Priority Level:]{``Should''} 896 890 \item[Priority Level:]{``Should''}
897 891
\item[Status:]{Implemented} 898 892 \item[Status:]{Implemented}
899 893
\item[Preconditions:] 900 894 \item[Preconditions:]
\begin{itemize} 901 895 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 902 896 \itemsep1pt\parskip0pt\parsep0pt
\item 903 897 \item
{UserX is logged in} 904 898 {UserX is logged in}
\item 905 899 \item
{User has added the class TEST EDIT.} 906 900 {User has added the class TEST 101.}
\item 907 901 \item
{UserX has the flashcard \textbf{Change} me in their flashcard.} 908 902 {UserX has the flashcard \textbf{Change} me in their flashcard.}
\end{itemize} 909 903 \end{itemize}
910 904
\item[Postconditions:] 911 905 \item[Postconditions:]
\begin{itemize} 912 906 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 913 907 \itemsep1pt\parskip0pt\parsep0pt
\item 914 908 \item
{Flashcard is edited} 915 909 {Flashcard is edited}
\end{itemize} 916 910 \end{itemize}
917 911
\item[Trigger:]{The User wants to edit their card.} 918 912 \item[Trigger:]{The User wants to edit their card.}
919 913
\item[Workflow:] 920 914 \item[Workflow:]
\begin{enumerate} 921 915 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 922 916 \itemsep1pt\parskip0pt\parsep0pt
\item 923 917 \item
{UserX shall move the cursor over the flashcard ``this is made for edit''.} 924 918 {UserX shall move the cursor over the flashcard ``this is made for edit''.}
\item 925 919 \item
{UserX shall click the edit button on bottom left of the selected flashcard.} 926 920 {UserX shall click the edit button on bottom left of the selected flashcard.}
\item 927 921 \item
{The System shall present a modal that contains the text of the selected flashcard.} 928 922 {The System shall present a modal that contains the text of the selected flashcard.}
\item 929 923 \item
{UserX shall be able to change the text to ``Edit has been made''.} 930 924 {UserX shall be able to change the text to ``Edit has been made''.}
\item 931 925 \item
{UserX shall click 'Save'} 932 926 {UserX shall click 'Save'}
\item 933 927 \item
{The System shall hide the model from UserX.} 934 928 {The System shall hide the model from UserX.}
\end{enumerate} 935 929 \end{enumerate}
936 930
\item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.} 937 931 \item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.}
938 932
\item[Alternative Workflow A:] 939 933 \item[Alternative Workflow A:]
940 934
\begin{enumerate} 941 935 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 942 936 \itemsep1pt\parskip0pt\parsep0pt
\item 943 937 \item
{UserX shall move the cursor over the flash card ``this is made for edit2''.} 944 938 {UserX shall move the cursor over the flash card ``this is made for edit2''.}
\item 945 939 \item
{UserX shall click the edit button on bottom left of the selected flashcard.} 946 940 {UserX shall click the edit button on bottom left of the selected flashcard.}
\item 947 941 \item
{The System shall present a modal that contains the text of the selected flashcard.} 948 942 {The System shall present a modal that contains the text of the selected flashcard.}
\item 949 943 \item
{UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.} 950 944 {UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.}
\item 951 945 \item
{UserX shall click 'Save'} 952 946 {UserX shall click 'Save'}
\item 953 947 \item
{The System shall hide the modal from UserX.} 954 948 {The System shall hide the modal from UserX.}
\item 955 949 \item
{The selected flashcard's blanked words shall be changed to ``fun''.} 956 950 {The selected flashcard's blanked words shall be changed to ``fun''.}
\end{enumerate} 957 951 \end{enumerate}
958 952
\item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.} 959 953 \item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.}
960 954
\item[Alternative Workflow B:] 961 955 \item[Alternative Workflow B:]
962 956
\begin{enumerate} 963 957 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 964 958 \itemsep1pt\parskip0pt\parsep0pt
\item 965 959 \item
{UserX shall move the cursor over the flash card ``this is made for edit3''.} 966 960 {UserX shall move the cursor over the flash card ``this is made for edit3''.}
\item 967 961 \item
{UserX shall click the edit button on bottom left of the selected flashcard.} 968 962 {UserX shall click the edit button on bottom left of the selected flashcard.}
\item 969 963 \item
{The System shall present a modal that contains the text of the selected flashcard.} 970 964 {The System shall present a modal that contains the text of the selected flashcard.}
\item 971 965 \item
{UserX shall be able the study date to 6/12.} 972 966 {UserX shall be able the study date to 6/12.}
\item 973 967 \item
{UserX shall click 'Save'} 974 968 {UserX shall click 'Save'}
\item 975 969 \item
{The System shall hide the modal from UserX.} 976 970 {The System shall hide the modal from UserX.}
\end{enumerate} 977 971 \end{enumerate}
978 972
\item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.} 979 973 \item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.}
\end{description} 980 974 \end{description}
\newpage 981 975 \newpage
982 976
{} 983 977 {}
984 978
\subsection{[F3] Pull Flashcard} 985 979 \subsection{[F3] Pull Flashcard}
\begin{description} 986 980 \begin{description}
\item[Description:]{This test case outlines the presentation layering step 987 981 \item[Description:]{This test case outlines the presentation layering step
process of a user pulling a flashcard.} 988 982 process of a user pulling a flashcard.}
989 983
\item[Desired Outcome:]{The User shall have the flashcard added to their own 990 984 \item[Desired Outcome:]{The User shall have the flashcard added to their own
deck.} 991 985 deck.}
\\ 992 986 \\
993 987
\item[User Goals:]{The User will be able to review that flashcard.} 994 988 \item[User Goals:]{The User will be able to review that flashcard.}
995 989
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 996 990 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashard} 997 991 Login, [A3] Add a Class, [F1] Push Flashard}
998 992
\item[Priority Level:]{``Must'' } 999 993 \item[Priority Level:]{``Must'' }
1000 994
\item[Status:]{Implemented} 1001 995 \item[Status:]{Implemented}
1002 996
\item[Preconditions:] 1003 997 \item[Preconditions:]
\begin{itemize} 1004 998 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1005 999 \itemsep1pt\parskip0pt\parsep0pt
\item 1006 1000 \item
{User has registered for a class.} 1007 1001 {User has registered for class TEST 101.}
\item 1008 1002 \item
{User is at live feed for said class.} 1009 1003 {User is at live feed for TEST 101.}
\item 1010 1004 \item
{Flashcard with text ``TESTY FLASHY'' has been created.} 1011 1005 {Flashcard with text ``TESTY FLASHY'' has been created.}
\item 1012 1006 \item
{That flashcard with the text ``TESTY FLASHY'' is in the Live Feed of class TEST 1.} 1013 1007 {That flashcard with the text ``TESTY FLASHY'' is in the Live Feed of class TEST 101.}
\end{itemize} 1014 1008 \end{itemize}
1015 1009
\item[Postconditions:] 1016 1010 \item[Postconditions:]
\begin{itemize} 1017 1011 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1018 1012 \itemsep1pt\parskip0pt\parsep0pt
\item 1019 1013 \item
{User shall have that flashcard with the text ``TESTY FLASHY'' added to their deck} 1020 1014 {User shall have that flashcard with the text ``TESTY FLASHY'' added to their deck}
\item 1021 1015 \item
{User can review this flashcard later} 1022 1016 {User can review this flashcard later}
\end{itemize} 1023 1017 \end{itemize}
1024 1018
\item[Trigger:]{UserX wants to add a flashcard to their deck to study it.} 1025 1019 \item[Trigger:]{UserX wants to add a flashcard to their deck to study it.}
1026 1020
\item[Workflow:] 1027 1021 \item[Workflow:]
1028 1022
\begin{enumerate} 1029 1023 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1030 1024 \itemsep1pt\parskip0pt\parsep0pt
\item 1031 1025 \item
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed and hover their cursor 1032 1026 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the
over it.} 1033 1027 class TEST 101 feed and hover their cursor over it.}
\item 1034 1028 \item
{The System shall present buttons on mouseover.} 1035 1029 {The System shall present buttons on mouseover.}
\item 1036 1030 \item
{UserX shall click on the large plus that appears over the flashcard with the text ``TESTY FLASHY''.} 1037 1031 {UserX shall click on the large plus that appears over the flashcard with the text ``TESTY FLASHY''.}
\item 1038 1032 \item
{The System shall hide the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed for UserX.} 1039 1033 {The System shall hide the flashcard with the text ``TESTY FLASHY'' from the class
1034 TEST 101 feed for UserX.}
\item 1040 1035 \item
{UserX shall check that card with the text ``TESTY FLASHY'' has been added to their class TEST 1 deck by checking API.} 1041 1036 {UserX shall check that card with the text ``TESTY FLASHY'' has been added to
1037 their class TEST 101 deck by checking API.}
\end{enumerate} 1042 1038 \end{enumerate}
1043 1039
\item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' is in the class TEST 1 deck.} 1044 1040 \item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' is in the class
1041 TEST 101 deck.}
\end{description} 1045 1042 \end{description}
\newpage 1046 1043 \newpage
1047 1044
{} 1048 1045 {}
1049 1046
\subsection{[F4] Flag Inappropriate Cards} 1050 1047 \subsection{[F4] Flag Inappropriate Cards}
1051 1048
\begin{description} 1052 1049 \begin{description}
\item[Description:]{This test case outlines the presentation layering step 1053 1050 \item[Description:]{This test case outlines the presentation layering step
process of a user flagging a card they have deemed inappropriate.} 1054 1051 process of a user flagging a card they have deemed inappropriate.}
1055 1052
\item[Desired Outcome:]{The flashcard's inappropriateness variable is 1056 1053 \item[Desired Outcome:]{The flashcard's inappropriateness variable is
adjusted.} 1057 1054 adjusted.}
\\ 1058 1055 \\
1059 1056
\item[User Goals:]{To note if a card should not belong in the class and 1060 1057 \item[User Goals:]{To note if a card should not belong in the class and
should not be displayed in the feed.} 1061 1058 should not be displayed in the feed.}
1062 1059
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1063 1060 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1064 1061 Login, [A3] Add a Class, [F1] Push Flashcard}
1065 1062
\item[Priority Level:]{``Should''} 1066 1063 \item[Priority Level:]{``Should''}
1067 1064
\item[Status:]{Implemented} 1068 1065 \item[Status:]{Implemented}
1069 1066
\item[Preconditions:] 1070 1067 \item[Preconditions:]
\begin{itemize} 1071 1068 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1072 1069 \itemsep1pt\parskip0pt\parsep0pt
\item 1073 1070 \item
{UserX has registered for a class TEST 1.} 1074 1071 {UserX has registered for a class TEST 101.}
\item 1075 1072 \item
{UserX is in the live feed for class TEST 1.} 1076 1073 {UserX is in the live feed for class TEST 101.}
\item 1077 1074 \item
{Flashcard has been created.} 1078 1075 {Flashcard with text ``TESTY FLASHY'' has been created for TEST 101.}
\item 1079 1076 \item
{That flashcard is in the Live Feed.} 1080 1077 {That flashcard ``TESTY FLASHY'' is in the Live Feed for TEST 101.}
\end{itemize} 1081 1078 \end{itemize}
1082 1079
\item[Postconditions:] 1083 1080 \item[Postconditions:]
\begin{itemize} 1084 1081 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1085 1082 \itemsep1pt\parskip0pt\parsep0pt
\item 1086 1083 \item
{User shall have that flashcard added to their deck} 1087 1084 {User shall have that flashcard added to their deck}
\item 1088 1085 \item
{User can review this flashcard later} 1089 1086 {User can review this flashcard later}
\end{itemize} 1090 1087 \end{itemize}
1091 1088
\item[Trigger:]{UserX wants to mark a card innapropriate.} 1092 1089 \item[Trigger:]{UserX wants to mark a card innapropriate.}
1093 1090
\item[Workflow:] 1094 1091 \item[Workflow:]
\begin{enumerate} 1095 1092 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1096 1093 \itemsep1pt\parskip0pt\parsep0pt
\item 1097 1094 \item
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the 1098 1095 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the
feed and hover their cursor over it.} 1099 1096 feed and hover their cursor over it.}
\item 1100 1097 \item
{The System shall present buttons on mouseover.} 1101 1098 {The System shall present buttons on mouseover.}
\item 1102 1099 \item
{UserX shall click on the flag icon that appears on the card.} 1103 1100 {UserX shall click on the crossed out eye icon (Hide) that appears on the card.}
\item 1104 1101 \item
{The System shall mark the card as flagged and hide the card from the 1105 1102 {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''.}
feed for the User.} 1106 1103 \item
1104 {UserX shall click the REPORT.}
\end{enumerate} 1107 1105 \end{enumerate}
1108 1106
\item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' will be flagged for inappropriateness.} 1109 1107 \item[Expected Result:] {The System shall display a toast, ``Report successful: thanks for letting us know!''}
\end{description} 1110 1108 \end{description}
\newpage 1111 1109 \newpage
1112 1110
{} 1113 1111 {}
1114 1112
\subsection{[F5] Filter Flashcards} 1115 1113 \subsection{[F5] Filter Flashcards}
1116 1114
\begin{description} 1117 1115 \begin{description}
\item[Description:]{This Test Case outlines the presentation layer process 1118 1116 \item[Description:]{This test case outlines the presentation layer process
of a user filtering existing flashcards to view only a specified subset.} 1119 1117 of a user filtering existing flashcards to view only a specified subset.}
1120 1118
\item[Desired Outcome:]{The User shall see flashcards based on the filter 1121 1119 \item[Desired Outcome:]{The User shall see flashcards based on the filter
options.} 1122 1120 options.}
1123 1121
\item[User Goals:]{The User can find what he/she is specifically looking 1124 1122 \item[User Goals:]{The User can find what they are specifically looking
for} 1125 1123 for}
1126 1124
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1127 1125 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull 1128 1126 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull
Flashcard} 1129 1127 Flashcard}
1130 1128
\item[Priority Level:]{``Should''} 1131 1129 \item[Priority Level:]{``Should''}
1132 1130
\item[Status:]{Not Implemented and Deferred} 1133 1131 \item[Status:]{Implemented}
1134 1132
\item[Preconditions:] 1135 1133 \item[Preconditions:]
\begin{itemize} 1136 1134 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1137 1135 \itemsep1pt\parskip0pt\parsep0pt
\item 1138 1136 \item
{UserX has registered for the class TEST 1.} 1139 1137 {User is logged in as UserX.}
\item 1140 1138 \item
{Flashcards exist in the course} 1141 1139 {UserX has registered for the class TEST 101.}
\item 1142 1140 \item
1141 {There exist flashcards in TEST 101 with the text ``apple'' and ``banana''
1142 for each week in the quarter.}
1143 \item
1144 {There exist flashcards in TEST 101 with the text ``orange'' that are hidden
1145 for each week in the quarter.}
1146 \item
{UserX is at Card List View for the class.} 1143 1147 {UserX is at Card List View for the class.}
\end{itemize} 1144 1148 \end{itemize}
1145 1149
\item[Postconditions:] 1146 1150 \item[Postconditions:]
\begin{itemize} 1147 1151 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1148 1152 \itemsep1pt\parskip0pt\parsep0pt
\item 1149 1153 \item
{User only sees specific flashcards} 1150 1154 {User only sees flashcards pertaining to selected dates.}
\end{itemize} 1151 1155 \end{itemize}
1152 1156
\item[Trigger:]{User is looking for specific flashcards.} 1153 1157 \item[Trigger:]{User is looking for specific flashcards.}
1154 1158
\item[Workflow:] 1155 1159 \item[Workflow:]
\begin{enumerate} 1156 1160 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1157 1161 \itemsep1pt\parskip0pt\parsep0pt
\item 1158 1162 \item
{UserX shall select certain tags (checkboxes) from top box.} 1159 1163 {UserX shall deselect ``Week Nine'' from top.}
\item 1160 1164 \item
{UserX shall click ``Filter'' button.} 1161 1165 {The System shall hide all cards from Week 9.}
\item 1162 1166 \item
{The System shall display only cards sorted under those tags in list.} 1163 1167 {UserX shall search for ``app'' in the search bar in the top right.}
1168 \item
1169 {The System shall display only cards including text ``app''.}
1170 \item
1171 {UserX shall click ``Show Hidden'' button in the top left and clear
1172 the text in the search box.}
1173 \item
1174 {The System shall display all cards, excluding those from Week 9.}
\end{enumerate} 1164 1175 \end{enumerate}
1165 1176
\item[Expected Result:] {Flashcards are filtered.} 1166 1177 \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} 1167 1178 \end{description}
\newpage 1168 1179 \newpage
1169 1180
{} 1170 1181 {}
1171 1182
\subsection{[F6] Blank Out Words in Flashcard} 1172 1183 \subsection{[F6] Blank Out Words in Flashcard}
1173 1184
\begin{description} 1174 1185 \begin{description}
\item[Description:]{This Test Case outlines the presentation layer process 1175 1186 \item[Description:]{This test case outlines the presentation layer process
of the User to create keywords in a card they are pushing.} 1176 1187 of the User to create keywords in a card they are pushing.}
1177 1188
\item[Desired Outcome:]{The blanked out words (visually bolded) in the 1178 1189 \item[Desired Outcome:]{The blanked out words (visually bolded) in the
flashcard notify the System that they are keywords.} 1179 1190 flashcard notify the System that they are keywords.}
\\ 1180
1181 1191
\item[User Goals:]{The User shall mark some words as keywords so the System 1182 1192 \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 1183 1193 may later quiz the User by blanking out one keyword at a time and having the
User enter what they think the keyword is.} 1184 1194 User enter what they think the keyword is.}
1185 1195
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1186 1196 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1187 1197 Login, [A3] Add a Class, [F1] Push Flashcard}
1188 1198
\item[Priority Level:]{``Must''} 1189 1199 \item[Priority Level:]{``Must''}
1190 1200
\item[Status:]{Implemented} 1191 1201 \item[Status:]{Implemented}
1192 1202
\item[Preconditions:] 1193 1203 \item[Preconditions:]
\begin{itemize} 1194 1204 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1195 1205 \itemsep1pt\parskip0pt\parsep0pt
\item 1196 1206 \item
\item 1197 1207 \item
{The User is logged in as UserX.} 1198 1208 {The User is logged in as UserX.}
\item 1199 1209 \item
{The User has added the class ``TEST 1''.} 1200 1210 {The User has added the class TEST 101.}
\item 1201 1211 \item
{The User is at the Feed View for the class ``TEST 1''.} 1202 1212 {The User is at the Feed View for the class TEST 101.}
\end{itemize} 1203 1213 \end{itemize}
1204 1214
\item[Postconditions:] 1205 1215 \item[Postconditions:]
\begin{itemize} 1206 1216 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1207 1217 \itemsep1pt\parskip0pt\parsep0pt
\item 1208 1218 \item
{The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline} 1209 1219 {The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline.}
\end{itemize} 1210 1220 \end{itemize}
1211 1221
1222 \item[Trigger:] {The User wants their newly pushed card to have the keyword ``Spain''.}
1212 1223
\item[Trigger:] 1213
1214
\begin{itemize} 1215
\itemsep1pt\parskip0pt\parsep0pt 1216
\item 1217
{The User wants their newly pushed card to have the keyword ``Spain''.} 1218
\end{itemize} 1219
1220
1221
\item[Workflow:] 1222 1224 \item[Workflow:]
1223
\begin{enumerate} 1224 1225 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1225 1226 \itemsep1pt\parskip0pt\parsep0pt
\item 1226 1227 \item
{UserX shall click the Compose button (+ circle on bottom right) of Feed.} 1227 1228 {UserX shall click the Compose button (+ circle on bottom right) of Feed.}
\item 1228 1229 \item
{The System shall bring up the composition flashcard modal.} 1229 1230 {The System shall bring up the composition flashcard modal.}
\item 1230 1231 \item
{UserX shall type text ``The rain in Spain stays mainly in the plain'' 1231 1232 {UserX shall type text ``The rain in Spain stays mainly in the plain''
into the composition modal, replacing ``Write a flashcard''.} 1232 1233 into the composition modal, replacing ``Write a flashcard''.}
\item 1233 1234 \item
{UserX shall highlight the word ``Spain''.} 1234 1235 {UserX shall highlight the word ``Spain''.}
\item {UserX shall press Blank Selected Text button.} 1235 1236 \item {UserX shall press Blank Selected Text button.}
\item {UserX shall press Contribute button to push the flashcard.} 1236 1237 \item {UserX shall press Contribute button to push the flashcard.}
\item 1237 1238 \item
{The System will save the blanked out word in the Flashcard Mask of the 1238 1239 {The System will save the blanked out word in the Flashcard Mask of the
newly pushed flashcard.} 1239 1240 newly pushed flashcard.}
\item {The Feed shall display the new card with the keyword underlined.} 1240 1241 \item {The Feed shall display the new card with the keyword underlined.}
\end{enumerate} 1241 1242 \end{enumerate}
1242 1243
\item[Expected Result:] {The System shall show ``Spain'' underlined and bolded 1243 1244 \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 1.} 1244 1245 in the flashcard. The flashcard is visible in the Feed and Deck of class TEST 101.}
\end{description} 1245 1246 \end{description}
\newpage 1246 1247 \newpage
1247 1248
{} 1248 1249 {}
1249 1250
\subsection{[F7] Fix Flashcard} 1250 1251 \subsection{[F7] Fix Flashcard}
1251 1252
\begin{description} 1252 1253 \begin{description}
\item[Description:]{This Test Case outlines the presentation layer process 1253 1254 \item[Description:]{This Test Case outlines the presentation layer process
for the User to alter (``fix'') a flashcard they made originally and not have 1254 1255 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 1255 1256 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.} 1256 1257 flashcard in their Decks AND the User is the author.}
1257 1258
\item[Desired Outcome:]{The User shall change one of their flashcard's text 1258 1259 \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.} 1259 1260 and that alteration will be visible to all users in the Feed.}
1260 1261
\item[User Goals:]{The User shall make their own authored flashcard say 1261 1262 \item[User Goals:]{The User shall make their own authored flashcard say
something different than it did originally.} 1262 1263 something different than it did originally.}
1263 1264
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1264 1265 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1265 1266 Login, [A3] Add a Class, [F1] Push Flashcard}
1266 1267
\item[Priority Level:]{``Must''} 1267 1268 \item[Priority Level:]{``Must''}
1268 1269
\item[Status:]{Implemented} 1269 1270 \item[Status:]{Implemented}
1270 1271
\item[Preconditions:] 1271 1272 \item[Preconditions:]
\begin{itemize} 1272 1273 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1273 1274 \itemsep1pt\parskip0pt\parsep0pt
\item 1274 1275 \item
{The User is logged in as UserX.} 1275 1276 {The User is logged in as UserX.}
\item {The User is logged in a separate browser as UserY.} 1276 1277 \item {The User is logged in a separate browser as UserY.}
\item 1277 1278 \item
{UserX and UserY has enrolled in the class ``TEST 1''.} 1278 1279 {UserX and UserY has enrolled in the class TEST 101.}
\item 1279 1280 \item
{UserX is at the Deck View for the class ``TEST 1''.} 1280 1281 {UserX is at the Deck View for the class TEST 101.}
\item {UserY is at the Feed View for the class ``TEST 1''.} 1281 1282 \item {UserY is at the Feed View for the class TEST 101.}
\item 1282 1283 \item
{The User has contributed and pushed a flashcard to the TEST 1 Feed, which is 1283 1284 {The User has contributed and pushed a flashcard to the TEST 101 Feed, which is
also in their Deck with text 1284 1285 also in their Deck with text
``My card is currently broken''; this flashcard is for fixing.} 1285 1286 ``My card is currently broken''; this flashcard is for fixing.}
\end{itemize} 1286 1287 \end{itemize}
1287 1288
\item[Postconditions:] 1288 1289 \item[Postconditions:]
\begin{itemize} 1289 1290 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1290 1291 \itemsep1pt\parskip0pt\parsep0pt
\item 1291 1292 \item
{The authoring User shall see their alteration for that flashcard in their 1292 1293 {The authoring User shall see their alteration for that flashcard in their
Feed and Deck for TEST 1.} 1293 1294 Feed and Deck for TEST 101.}
\item {Other users shall see the fixed flashcard in the Feed for TEST 1 if they 1294 1295 \item {Other users shall see the fixed flashcard in the Feed for TEST 101 if they
refresh the app.} 1295 1296 refresh the app.}
\end{itemize} 1296 1297 \end{itemize}
1297 1298
\item[Trigger:] 1298 1299 \item[Trigger:] {UserX realizes that a card they created previously does
1300 not say what they currently desire and wishes to change it.}
1299 1301
\item[Workflow:] 1300 1302 \item[Workflow:]
\begin{enumerate} 1301 1303 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1302 1304 \itemsep1pt\parskip0pt\parsep0pt
\item 1303 1305 \item
{UserX shall hover the Flashcard they created with text ``My card is currently 1304 1306 {UserX shall hover the Flashcard they created with text ``My card is currently
broken''.} 1305 1307 broken''.}
\item 1306 1308 \item
{UserX shall select the bottom-left blue Edit Card pencil button on the flashcard.} 1307 1309 {UserX shall select the bottom-left blue Edit Card pencil button on the flashcard.}
\item 1308 1310 \item
{The System shall bring up the flashcard Edit modal.} 1309 1311 {The System shall bring up the flashcard Edit modal.}
\item 1310 1312 \item
{UserX shall highlight the text ``broken''.} 1311 1313 {UserX shall highlight the text ``broken''.}
\item {UserX shall change the highlighted word into ``fixed'' so that the text 1312 1314 \item {UserX shall change the highlighted word into ``fixed'' so that the text
reads ``My card is currently fixed''.} 1313 1315 reads ``My card is currently fixed''.}
\item 1314 1316 \item
{UserX shall press the Save Changes button.} 1315 1317 {UserX shall press the Save Changes button.}
\item 1316 1318 \item
{The System shall update the flashcard's text content.} 1317 1319 {The System shall update the flashcard's text content.}
\item 1318 1320 \item
{The System shall close the edit flashcard modal.} 1319 1321 {The System shall close the edit flashcard modal.}
\item {The Client shall show the flashcard in the UserX's TEXT 1 Deck with the 1320 1322 \item {The Client shall show the flashcard in the UserX's TEST 101 Deck with the
fixed text.} 1321 1323 fixed text.}
1322 1324
\item {UserY refreshes the TEST 1 Feed view and sees the flashcard ``My card is 1323 1325 \item {UserY refreshes the TEST 101 Feed view and sees the flashcard ``My card is
currently fixed''.} 1324 1326 currently fixed''.}
\end{enumerate} 1325 1327 \end{enumerate}
1326 1328
\item[Expected Results:]{The Client shall show the fixed flashcard 1327 1329 \item[Expected Results:]{The Client shall show the fixed flashcard
in UserX's TEST 1 class Deck with the new text:``My card is currently fixed''. 1328 1330 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 1 Feed view as well, 1329 1331 The Client shall show the fixed flashcard in UserY's TEST 101 Feed view as well,
after page refresh.} 1330 1332 after page refresh.}
\end{description} 1331 1333 \end{description}
\newpage 1332 1334 \newpage
1333 1335
{} 1334 1336 {}
1335 1337
\subsection{[F8] Hide cards from feed} 1336 1338 \subsection{[F8] Hide cards from feed}
1337 1339
\begin{description} 1338 1340 \begin{description}
\item[Description:]{This Test Case outlines the presentation layer process 1339 1341 \item[Description:]{This test case outlines the presentation layer process
for the User shall be able to hide cards from their own view, on 1340 1342 for the User shall be able to hide cards from their own view, on
the Feed and Deck.} 1341 1343 the Feed and Deck.}
1342 1344
\item[Desired Outcome:]{The System marks the flashcard as hidden from the 1343 1345 \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.} 1344 1346 User so that the User cannot see the flashcard in the Feed or Deck.}
\\ 1345
1346 1347
\item[User Goals:]{The flashcard is no longer visible to the User in the Feed or 1347 1348 \item[User Goals:]{The flashcard is no longer visible to the User in the Feed or
Deck views.} 1348 1349 Deck views.}
1349 1350
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1350 1351 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
Login, [A3] Add a Class, [F1] Push Flashcard} 1351 1352 Login, [A3] Add a Class, [F1] Push Flashcard}
1352 1353
\item[Priority Level:]{``Should''} 1353 1354 \item[Priority Level:]{``Should''}
1354 1355
\item[Status:]{Implemented} 1355 1356 \item[Status:]{Implemented}
1356 1357
\item[Preconditions:] 1357 1358 \item[Preconditions:]
\begin{itemize} 1358 1359 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1359 1360 \itemsep1pt\parskip0pt\parsep0pt
\item 1360 1361 \item
{The User is logged in as UserX.} 1361 1362 {The User is logged in as UserX.}
\item 1362 1363 \item
{The User has enrolled in the class ``TEST 1''.} 1363 1364 {The User has enrolled in the class TEST 101.}
\item 1364 1365 \item
{The User is at the Feed View or Deck View (alternate workflow) 1365 1366 {The User is at the Feed View or Deck View (alternate workflow)
for the class ``TEST 1''.} 1366 1367 for the class TEST 101.}
\item 1367 1368 \item
{The User has composed and contributed a flashcard to the Feed with text 1368 1369 {The User has composed and contributed a flashcard to the Feed with text
``The rain in Spain stays mainly in the plain''.} 1369 1370 ``The rain in Spain stays mainly in the plain''.}
\end{itemize} 1370 1371 \end{itemize}
1371 1372
\item[Postconditions:] 1372 1373 \item[Postconditions:]
\begin{itemize} 1373 1374 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1374 1375 \itemsep1pt\parskip0pt\parsep0pt
\item{Flashcard is not viewable by user in the Feed or Deck views in TEST 1.} 1375 1376 \item{Flashcard is not viewable by user in the Feed or Deck views in TEST 101.}
\end{itemize} 1376 1377 \end{itemize}
1377 1378
\item[Workflow:] 1378 1379 \item[Workflow:]
\begin{enumerate} 1379 1380 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1380 1381 \itemsep1pt\parskip0pt\parsep0pt
\item {UserX has navigated to the Feed View of TEST 1.} 1381 1382 \item {UserX has navigated to the Feed View of TEST 101.}
\item 1382 1383 \item
{UserX hovers the flashcard they added with the text ``The rain in Spain stays 1383 1384 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
mainly in the plain''.} 1384 1385 mainly in the plain''.}
1385 1386
\item {UserX presses Hide button, which is the red crossed-out eye.} 1386 1387 \item {UserX presses Hide button, which is the red crossed-out eye.}
1387 1388
\item {The System shall hide the card.} 1388 1389 \item {The System shall hide the card.}
\item {The Client shall remove the card from view for UserX.} 1389 1390 \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.} 1390 1391 \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.} 1391 1392 \item {The card is not shown on the Feed or Deck.}
\end{enumerate} 1392 1393 \end{enumerate}
1393 1394
\item[Expected Result:]{The Client shows the Feed without the flashcard of text 1394 1395 \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 1395 1396 ``The rain in Spain stays mainly in the plain''. A toast that allows UserX to
report the card shows up temporarily.} 1396 1397 report the card shows up temporarily.}
1397 1398
\item[Alternate Workflow:] 1398 1399 \item[Alternate Workflow:]
1399 1400
\begin{enumerate} 1400 1401 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1401 1402 \itemsep1pt\parskip0pt\parsep0pt
\item {UserX has navigated to the Deck View of TEST 1.} 1402 1403 \item {UserX has navigated to the Deck View of TEST 101.}
\item 1403 1404 \item
{UserX hovers the flashcard they added with the text ``The rain in Spain stays 1404 1405 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
mainly in the plain''.} 1405 1406 mainly in the plain''.}
1406 1407
\item {UserX presses hide button, which is the red crossed-out eye.} 1407 1408 \item {UserX presses hide button, which is the red crossed-out eye.}
1408 1409
\item {The System shall hide the card.} 1409 1410 \item {The System shall hide the card.}
\item {A toast is shown on the client that allows the User to report the card.} 1410 1411 \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.} 1411 1412 \item {The card is not shown on the Feed or Deck.}
\end{enumerate} 1412 1413 \end{enumerate}
1413 1414
1414 1415
\item[Expected Result:]{The Client shows the Deck without the flashcard of text 1415 1416 \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 1416 1417 ``The rain in Spain stays mainly in the plain''. A toast that allows UserX to
report the card shows up temporarily.} 1417 1418 report the card shows up temporarily.}
\end{description} 1418 1419 \end{description}
\newpage 1419 1420 \newpage
1420 1421
{} 1421 1422 {}
1422 1423
\subsection{[F9] View a Feed} 1423 1424 \subsection{[F9] View a Feed}
1424 1425
\begin{description} 1425 1426 \begin{description}
\item[Description:]{This Test Case outlines the presentation layer process 1426 1427 \item[Description:]{This Test Case outlines the presentation layer process
process of a user viewing a class feed of flashcards.} 1427 1428 process of a user viewing a class feed of flashcards.}
1428 1429
\item[Desired Outcome:]{The System shall show the user the Feed for their 1429 1430 \item[Desired Outcome:]{The System shall show the user the Feed for their
class.} 1430 1431 class.}
\\ 1431 1432 \\
1432 1433
\item[User Goals:]{The User will see the Feed for the class User selected.} 1433 1434 \item[User Goals:]{The User will see the Feed for the class User selected.}
1434 1435
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, 1435 1436 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login,
[A3] Add a Class} 1436 1437 [A3] Add a Class}
\\ 1437 1438 \\
1438 1439
\item[Priority Level:]{``Must''} 1439 1440 \item[Priority Level:]{``Must''}
1440 1441
\item[Status:]{Implemented} 1441 1442 \item[Status:]{Implemented}
1442 1443
\item[Preconditions:] 1443 1444 \item[Preconditions:]
\begin{itemize} 1444 1445 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1445 1446 \itemsep1pt\parskip0pt\parsep0pt
{The User is logged in as UserX.} 1446 1447 {The User is logged in as UserX.}
\item 1447 1448 \item
{The User has added the class TEST 1.} 1448 1449 {The User has added the class TEST 101.}
\end{itemize} 1449 1450 \end{itemize}
1450 1451
\item[Postconditions:]\begin{itemize} 1451 1452 \item[Postconditions:]\begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1452 1453 \itemsep1pt\parskip0pt\parsep0pt
\item {User shall see the Feed for the class TEST 1.} 1453 1454 \item {User shall see the Feed for the class TEST 101.}
\end{itemize} 1454 1455 \end{itemize}
1455 1456
\item[Trigger:]{The User wants to view Feed of their class.} 1456 1457 \item[Trigger:]{The User wants to view Feed of their class.}
1457 1458
\item[Workflow:] 1458 1459 \item[Workflow:]
\begin{enumerate} 1459 1460 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1460 1461 \itemsep1pt\parskip0pt\parsep0pt
\item 1461 1462 \item
{UserX is at any view on the application.} 1462 1463 {UserX is at any view on the application.}
\item {UserX shall press the menu on the far left of the navigation bar.} 1463 1464 \item {UserX shall press the menu on the far left of the navigation bar.}
\item {UserX shall select the class TEST 1 from the menu.} 1464 1465 \item {UserX shall select the class TEST 101 from the menu.}
\item 1465 1466 \item
{The System shall display the Feed view of TEST 1 to UserX.} 1466 1467 {The System shall display the Feed view of TEST 101 to UserX.}
\end{enumerate} 1467 1468 \end{enumerate}
1468 1469
\item[Expected Result:]{UserX should be able to see the Feed view for the 1469 1470 \item[Expected Result:]{UserX should be able to see the Feed view for the
selected class TEST 1.} 1470 1471 selected class TEST 101.}
\end{description} 1471 1472 \end{description}
\newpage 1472 1473 \newpage
1473 1474
{} 1474 1475 {}
1475 1476
\section{Decks} 1476 1477 \section{Decks}
1477 1478
\subsection{[D1] Remove a card from a deck} 1478 1479 \subsection{[D1] Remove a card from a deck}
1479 1480
\begin{description} 1480 1481 \begin{description}
\item[Description:]{This Test Case outlines the presentation layering step process of a User removing a flashcard from their deck.} 1481 1482 \item[Description:]{This test case outlines the presentation layering step process
1483 of a user removing a flashcard from their deck.}
1482 1484
\item[Desired Outcome:]{The deck does not display the removed card.} 1483 1485 \item[Desired Outcome:]{The deck does not display the removed card.}
\\ 1484 1486 \\
1485 1487
\item[User Goals:]{The User wants to only review cards that the User wants to review.} 1486 1488 \item[User Goals:]{The User wants to only review cards that the User wants to review.}
1487 1489
\item[Dependency Use Cases:]{[A3] Add a class, [F1] Push Flashcard, [F3] Pull Flashcard} 1488 1490 \item[Dependency Use Cases:]{[A3] Add a class, [F1] Push Flashcard, [F3] Pull Flashcard}
\\ 1489 1491 \\