Compare View

switch
from
...
to
 
Commits (2)

Diff

Showing 1 changed file Inline Diff

TestCases.tex View file @ c5eea0d
\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
\section{Testing Notes} 46 46 \section{Testing Notes}
\subsection{Testing Multiple Users} 47 47 \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. 48 48 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.
49 49
\newpage 50
51
{} 52
\section{Accounts} 53
54
\subsection{[A1] User Registration} 55
\begin{description}[style=multiline,leftmargin=3cm] 56
57
\item[Description:]{This Test Case outlines the presentation layer step process of a user registering for an account with our application.} 58
59
\item[Desired Outcome:]{An account will be created for the user from the 60
specified username, password, email. The user will be able to log into 61
the aforementioned account.} 62
63
\item[User Goals:]{The user shall have an account to participate in the 64 50 \newpage
website's activities.} 65 51
66 52 {}
\item[Dependency Use Cases:]{None} 67 53 \section{Accounts}
\\ 68 54
\item[Priority Level:]{``Must''} 69 55 \subsection{[A1] User Registration}
70 56 \begin{description}[style=multiline,leftmargin=3cm]
\item[Status:]{Not Implemented} 71 57
72 58 \item[Description:]{This Test Case outlines the presentation layer step process of a user registering for an account with our application.}
\item[Preconditions:] 73 59
\begin{itemize} 74 60 \item[Desired Outcome:]{An account will be created for the user from the
\itemsep1pt\parskip0pt\parsep0pt 75 61 specified username, password, email. The user will be able to log into
\item 76 62 the aforementioned account.}
{None} 77 63
\end{itemize} 78 64 \item[User Goals:]{The user shall have an account to participate in the
79 65 website's activities.}
\item[Postconditions:] 80 66
\begin{itemize} 81 67 \item[Dependency Use Cases:]{None}
\itemsep1pt\parskip0pt\parsep0pt 82 68 \\
\item 83 69 \item[Priority Level:]{``Must''}
{The user has an account registered with the system.} 84 70
\end{itemize} 85 71 \item[Status:]{Not Implemented}
86 72
\item[Trigger:]{UserX wants to start creating flashcards for a class.} 87 73 \item[Preconditions:]
88 74 \begin{itemize}
\item[Workflow:] 89 75 \itemsep1pt\parskip0pt\parsep0pt
90 76 \item
\begin{enumerate} 91 77 {None}
\item 92 78 \end{itemize}
{UserX shall click the ``Sign Up'' button.} 93 79
\item 94 80 \item[Postconditions:]
{The System shall display a registration form.} 95 81 \begin{itemize}
\item 96 82 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall fill in the form with email testuser@flashy.cards and password ``test''.} 97 83 \item
\item 98 84 {The user has an account registered with the system.}
{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.} 99 85 \end{itemize}
\item 100 86
{UserX receives an email with a link to verify their email. The 101 87 \item[Trigger:]{UserX wants to start creating flashcards for a class.}
User clicks the link.} 102 88
\item 103 89 \item[Workflow:]
{The Server marks the user's email as valid and saves the User object 104 90
again.} 105 91 \begin{enumerate}
\end{enumerate} 106 92 \item
107 93 {UserX shall click the ``Sign Up'' button.}
\item [Expected Results:]{UserX's account is now active (registered with the system)} 108 94 \item
109 95 {The System shall display a registration form.}
\end{description} 110 96 \item
\newpage 111 97 {UserX shall fill in the form with email testuser@flashy.cards and password ``test''.}
112 98 \item
{} 113 99 {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.}
114 100 \item
\subsection{[A2] User Login} 115 101 {UserX receives an email with a link to verify their email. The
116 102 User clicks the link.}
\begin{description} 117 103 \item
\item[Description:]{This Test Case outlines the presentation layering step process of a user logging into the application} 118 104 {The Server marks the user's email as valid and saves the User object
119 105 again.}
\item[Desired Outcome:]{The user shall be able to provide their email address and 120 106 \end{enumerate}
password to access their courses and flash cards. The user shall gain 121 107
access to the list of the courses they have added, and be able to review 122 108 \item [Expected Results:]{UserX's account is now active (registered with the system)}
the flash cards they have added to their decks.} 123 109
\\ 124 110 \end{description}
\item[User Goals:]{The user wants to resume use of the site on another 125 111 \newpage
device, or use the site after logging out.} 126 112
127 113 {}
\item[Dependency Use Cases:]{[A1] User Registration} 128 114
\\ 129 115 \subsection{[A2] User Login}
\item[Priority Level:]{``Must''} 130 116
131 117 \begin{description}
\item[Status:]{Not Implemented} 132 118 \item[Description:]{This Test Case outlines the presentation layering step process of a user logging into the application}
133 119
\item[Preconditions:] 134 120 \item[Desired Outcome:]{The user shall be able to provide their email address and
135 121 password to access their courses and flash cards. The user shall gain
\begin{itemize} 136 122 access to the list of the courses they have added, and be able to review
\item 137 123 the flash cards they have added to their decks.}
{The User has created an account before with email ``testuser@flashy.cards'' with password ``test''.} 138 124
\end{itemize} 139 125 \item[User Goals:]{The user wants to resume use of the site on another
140 126 device, or use the site after logging out.}
\item[Postconditions:] 141 127
142 128 \item[Dependency Use Cases:]{[A1] User Registration}
\begin{itemize} 143 129 \\
\itemsep1pt\parskip0pt\parsep0pt 144 130 \item[Priority Level:]{``Must''}
\item 145 131
{The user can navigate the site and see their data.} 146 132 \item[Status:]{Not Implemented}
\end{itemize} 147 133
148 134 \item[Preconditions:]
\item[Trigger:]{ UserX wants to view, add, or create cards for a class or classes.} 149 135
150 136 \begin{itemize}
\item[Workflow:] 151 137 \item
152 138 {The User has created an account before with email ``testuser@flashy.cards'' with password ``test''.}
\begin{enumerate} 153 139 \end{itemize}
\itemsep1pt\parskip0pt\parsep0pt 154 140
\item 155 141 \item[Postconditions:]
{UserX shall enter his or her email ``testuser@flashy.cards'' and password ``test''. } 156 142
\item 157 143 \begin{itemize}
{The System shall authenticate UserX's email and password and checks if UserX is active.} 158 144 \itemsep1pt\parskip0pt\parsep0pt
\item 159 145 \item
{The System shall receive the credentials and display the ``Add Class'' page to the User. } 160 146 {The user can navigate the site and see their data.}
\end{enumerate} 161 147 \end{itemize}
\item [Expected Results:] 162 148
{The User is brought to the page ``Add Class''.} \\ 163 149 \item[Trigger:]{ UserX wants to view, add, or create cards for a class or classes.}
164 150
\item [Alternate Workflow:] 165 151 \item[Workflow:]
\begin{enumerate} 166 152
\item 167 153 \begin{enumerate}
{UserX accidentally puts in the wrong credentials and clicks the ``Login'' button.} 168 154 \itemsep1pt\parskip0pt\parsep0pt
\item 169 155 \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.} 170 156 {UserX shall enter his or her email ``testuser@flashy.cards'' and password ``test''. }
\end {enumerate} 171 157 \item
172 158 {The System shall authenticate UserX's email and password and checks if UserX is active.}
\item [Expected Results:] 173 159 \item
{The User is not able to login.} \\ 174 160 {The System shall receive the credentials and display the ``Add Class'' page to the User. }
175 161 \end{enumerate}
\end{description} 176 162 \item [Expected Results:]
\newpage 177 163 {The User is brought to the page ``Add Class''.} \\
178 164
{} 179 165 \item [Alternate Workflow:]
180 166 \begin{enumerate}
\subsection{[A3] Add a Class} 181 167 \item
\begin{description} 182 168 {UserX accidentally puts in the wrong credentials and clicks the ``Login'' button.}
\item[Description:]{This Test Case outlines the presentation layer step process of a User adding a class.} 183 169 \item
184 170 {The System shows UserX the site login page with a text message reading ``Invalid username or password!!'' displayed in the log in text box.}
\item[Desired Outcome:]{The class shall be linked with the student's account 185 171 \end {enumerate}
and the student shall have the ability to read and publish flashcards 186 172
for this class.} 187 173 \item [Expected Results:]
188 174 {The User is not able to login.} \\
\item[User Goals:]{The user wants to publish flashcards for this class and 189 175
read the flashcards for this class that are published by other users.} 190 176 \end{description}
191 177 \newpage
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 192 178
\\ 193 179 {}
194 180
\item[Priority Level:]{``Must''} 195 181 \subsection{[A3] Add a Class}
196 182 \begin{description}
\item[Status:]{Not implemented} 197 183 \item[Description:]{This Test Case outlines the presentation layer step process of a User adding a class.}
198 184
\item[Preconditions:] 199 185 \item[Desired Outcome:]{The class shall be linked with the student's account
\begin{itemize} 200 186 and the student shall have the ability to read and publish flashcards
\itemsep1pt\parskip0pt\parsep0pt 201 187 for this class.}
\item 202 188
{The user has created an account.} 203 189 \item[User Goals:]{The user wants to publish flashcards for this class and
\item 204 190 read the flashcards for this class that are published by other users.}
{The user is logged in to their account and is at root view.} 205 191
\end{itemize} 206 192 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
207 193 \\
\item[Postconditions:] 208 194
\begin{itemize} 209 195 \item[Priority Level:]{``Must''}
\itemsep1pt\parskip0pt\parsep0pt 210 196
\item 211 197 \item[Status:]{Not implemented}
{The user can read the flashcards being published for the class and 212 198
add them to his/her deck.} 213 199 \item[Preconditions:]
\item 214 200 \begin{itemize}
{The user can publish flashcards to be viewed and added by other users 215 201 \itemsep1pt\parskip0pt\parsep0pt
in the same class.} 216 202 \item
\end{itemize} 217 203 {The user has created an account.}
218 204 \item
\item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.} 219 205 {The user is logged in to their account and is at root view.}
220 206 \end{itemize}
\item[Workflow:] 221 207
222 208 \item[Postconditions:]
\begin{enumerate} 223 209 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 224 210 \itemsep1pt\parskip0pt\parsep0pt
\item 225 211 \item
{UserX shall click ``Add Class'' on the menu.} 226 212 {The user can read the flashcards being published for the class and
\item 227 213 add them to his/her deck.}
{The System shall show the user ``Add Class'' page.} 228 214 \item
\item 229 215 {The user can publish flashcards to be viewed and added by other users
{UserX shall begin to type ``CSE 110''.} 230 216 in the same class.}
\item 231 217 \end{itemize}
{The System shall show suggestions as a user types.} 232 218
\item 233 219 \item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.}
{UserX shall click on ``CSE 110: Software Engineering (Gillespie, Gary N)''.} 234 220
\item 235 221 \item[Workflow:]
{UserX shall click on the ``Add'' button.} 236 222
\item 237 223 \begin{enumerate}
{The System shall check if there is a whitelist for the CSE 110 section that 238 224 \itemsep1pt\parskip0pt\parsep0pt
UserX is trying to add.} 239 225 \item
\item 240 226 {UserX shall click ``Add Class'' on the menu.}
{The System shall ensure that UserX is on the whitelist for the specified CSE 110 section.} 241 227 \item
\item 242 228 {The System shall show the user ``Add Class'' page.}
{The System shall add UserX to the specified CSE 110 section.} 243 229 \item
\end{enumerate} 244 230 {UserX shall begin to type ``CSE 110''.}
245 231 \item
\item[Expected Result:] {UserX has added the section and sees the Live Feed for the specified CSE 110 section.} 246 232 {The System shall show suggestions as a user types.}
247 233 \item
\item[Alternate Workflow - Planned:] 248 234 {UserX shall click on ``CSE 110: Software Engineering (Gillespie, Gary N)''.}
\begin{enumerate} 249 235 \item
\setcounter{enumi}{6} 250 236 {UserX shall click on the ``Add'' button.}
\itemsep1pt\parskip0pt\parsep0pt 251 237 \item
\item 252 238 {The System shall check if there is a whitelist for the CSE 110 section that
{The System shall see that UserX is not on the whitelist. } 253 239 UserX is trying to add.}
\item 254 240 \item
{The System shall deny UserX access to the specified CSE 110 section.} 255 241 {The System shall ensure that UserX is on the whitelist for the specified CSE 110 section.}
\item 256 242 \item
{The System shall display failure message to UserX.} \\ 257 243 {The System shall add UserX to the specified CSE 110 section.}
\end{enumerate} 258 244 \end{enumerate}
259 245
\item[Expected Result:] {UserX cannot add the specified CSE 110 section and cannot view contents related to this class.} 260 246 \item[Expected Result:] {UserX has added the section and sees the Live Feed for the specified CSE 110 section.}
261 247
\item[Alternate Workflow - Planned:] 262 248 \item[Alternate Workflow - Planned:]
\begin{enumerate} 263 249 \begin{enumerate}
\setcounter{enumi}{6} 264 250 \setcounter{enumi}{6}
\itemsep1pt\parskip0pt\parsep0pt 265 251 \itemsep1pt\parskip0pt\parsep0pt
\item 266 252 \item
{The System shall see there is not whitelist for the specified CSE 110 section.} 267 253 {The System shall see that UserX is not on the whitelist. }
\item 268 254 \item
{The System shall link UserX to the specified CSE 110 section.} 269 255 {The System shall deny UserX access to the specified CSE 110 section.}
\item 270 256 \item
{UserX shall see the Live Feed for the specified CSE 110 section.} 271 257 {The System shall display failure message to UserX.} \\
\end{enumerate} 272 258 \end{enumerate}
273 259
\item[Expected Workflow:] {User has added the section and sees the Live Feed for the specified CSE 110 section.} 274 260 \item[Expected Result:] {UserX cannot add the specified CSE 110 section and cannot view contents related to this class.}
\end{description} 275 261
\newpage 276 262 \item[Alternate Workflow - Planned:]
277 263 \begin{enumerate}
{} 278 264 \setcounter{enumi}{6}
279 265 \itemsep1pt\parskip0pt\parsep0pt
\subsection{[A4] Drop a Class} 280 266 \item
281 267 {The System shall see there is not whitelist for the specified CSE 110 section.}
\begin{description} 282 268 \item
\item[Description:]{This Test Case outlines the presentation layer step process of a user dropping a class.} 283 269 {The System shall link UserX to the specified CSE 110 section.}
284 270 \item
\item[Desired Outcome:]{The user has dropped the class and no longer needs 285 271 {UserX shall see the Live Feed for the specified CSE 110 section.}
access to the flashcards for the dropped class. They can no longer 286 272 \end{enumerate}
see the flashcards associated to the class that they dropped.} 287 273
288 274 \item[Expected Workflow:] {User has added the section and sees the Live Feed for the specified CSE 110 section.}
\item[User Goals:]{The user shall not have access to a class and the 289 275 \end{description}
flashcards associated with that class. They will no longer see the class 290 276 \newpage
listed in their list of ``Enrolled Classes''} 291 277
292 278 {}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 293 279
\\ 294 280 \subsection{[A4] Drop a Class}
295 281
\item[Priority Level:]{``Should''} 296 282 \begin{description}
297 283 \item[Description:]{This Test Case outlines the presentation layer step process of a user dropping a class.}
\item[Status:]{Not Implemented} 298 284
299 285 \item[Desired Outcome:]{The user has dropped the class and no longer needs
\item[Preconditions:] 300 286 access to the flashcards for the dropped class. They can no longer
\begin{itemize} 301 287 see the flashcards associated to the class that they dropped.}
\itemsep1pt\parskip0pt\parsep0pt 302 288
\item 303 289 \item[User Goals:]{The user shall not have access to a class and the
{User has a valid account.} 304 290 flashcards associated with that class. They will no longer see the class
\item 305 291 listed in their list of ``Enrolled Classes''}
{User is logged in.} 306 292
\item 307 293 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
{User has enrolled in classes.} 308 294 \\
\end{itemize} 309 295
310 296 \item[Priority Level:]{``Should''}
\item[Postconditions:] 311 297
\begin{itemize} 312 298 \item[Status:]{Not Implemented}
\itemsep1pt\parskip0pt\parsep0pt 313 299
\item 314 300 \item[Preconditions:]
{User shall no longer have access to dropped class, or associated 315 301 \begin{itemize}
flashcards} 316 302 \itemsep1pt\parskip0pt\parsep0pt
\end{itemize} 317 303 \item
318 304 {User has a valid account.}
\item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove all of their flashcards.} 319 305 \item
320 306 {User is logged in.}
\item[Workflow:] 321 307 \item
\begin{enumerate} 322 308 {User has enrolled in classes.}
\itemsep1pt\parskip0pt\parsep0pt 323 309 \end{itemize}
\item 324 310
{UserX shall click ``Drop'' (or equivalent) button for CSE 110: Software Engineering (Gillespie, Gary N).} 325 311 \item[Postconditions:]
\item 326 312 \begin{itemize}
{The System shall display a dialogue box which will say ``Are you 327 313 \itemsep1pt\parskip0pt\parsep0pt
sure you want to drop this class?''.} 328 314 \item
\item 329 315 {User shall no longer have access to dropped class, or associated
{UserX shall click ``Yes'' to confirm that they want to drop the specified CSE 110 section.} 330 316 flashcards}
\item 331 317 \end{itemize}
{The System shall remove UserX from the specified CSE 110 section's roster.} 332 318
\item 333 319 \item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove all of their flashcards.}
{The System shall remove the specified CSE 110 section from the User's list of classes.} 334 320
\item {UserX shall have one less class to select on the menu.} 335 321 \item[Workflow:]
\end{enumerate} 336 322 \begin{enumerate}
337 323 \itemsep1pt\parskip0pt\parsep0pt
\item[Expected Result:] {UserX no longer has access to any content related to to the class that has been dropped.} 338 324 \item
\end{description} 339 325 {UserX shall click ``Drop'' (or equivalent) button for CSE 110: Software Engineering (Gillespie, Gary N).}
\newpage 340 326 \item
341 327 {The System shall display a dialogue box which will say ``Are you
{} 342 328 sure you want to drop this class?''.}
343 329 \item
\subsection{[A5] Password Change} 344 330 {UserX shall click ``Yes'' to confirm that they want to drop the specified CSE 110 section.}
345 331 \item
\begin{description} 346 332 {The System shall remove UserX from the specified CSE 110 section's roster.}
\item[Description:]{The user shall be able to change the password for their 347 333 \item
account in the account settings. This requires that they are logged in.} 348 334 {The System shall remove the specified CSE 110 section from the User's list of classes.}
349 335 \item {UserX shall have one less class to select on the menu.}
\item[Desired Outcome:]{The user's password shall be changed and the user 350 336 \end{enumerate}
shall be able to log in with the new password in the future} 351 337
352 338 \item[Expected Result:] {UserX no longer has access to any content related to to the class that has been dropped.}
\item[User Goals:]{The user wants to use a different password in the future} 353 339 \end{description}
354 340 \newpage
\item[Primary Actor:]{User (student)} 355 341
356 342 {}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 357 343
\\ 358 344 \subsection{[A5] Password Change}
359 345
\item[Details:]{The user provides their current password and a new password 360 346 \begin{description}
in a form. If the current password is correct, the system updates their 361 347 \item[Description:]{The user shall be able to change the password for their
password to the requested new password.} 362 348 account in the account settings. This requires that they are logged in.}
363 349
\item[Priority Level:]{``Must''} 364 350 \item[Desired Outcome:]{The user's password shall be changed and the user
365 351 shall be able to log in with the new password in the future}
\item[Status:]{Not Implemented} 366 352
367 353 \item[User Goals:]{The user wants to use a different password in the future}
\item[Preconditions:] 368 354
\begin{itemize} 369 355 \item[Primary Actor:]{User (student)}
\itemsep1pt\parskip0pt\parsep0pt 370 356
\item 371 357 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
{The user has created an account} 372 358 \\
\item 373 359
{The user has logged in } 374 360 \item[Details:]{The user provides their current password and a new password
\item 375 361 in a form. If the current password is correct, the system updates their
{The user knows their current password} 376 362 password to the requested new password.}
\end{itemize} 377 363
378 364 \item[Priority Level:]{``Must''}
\item[Postconditions:] 379 365
\begin{itemize} 380 366 \item[Status:]{Not Implemented}
\itemsep1pt\parskip0pt\parsep0pt 381 367
\item 382 368 \item[Preconditions:]
{The user's password is changed} 383 369 \begin{itemize}
\item 384 370 \itemsep1pt\parskip0pt\parsep0pt
{The user can log in with the new password} 385 371 \item
\end{itemize} 386 372 {The user has created an account}
387 373 \item
\item[Trigger:]{UserX wants to change their password.} 388 374 {The user has logged in }
389 375 \item
\item[Error Handling:] 390 376 {The user knows their current password}
\begin{description} 391 377 \end{itemize}
\item[\small Missing Fields] \begin{itemize} 392 378
\item The client shall enforce required fields 393 379 \item[Postconditions:]
\item The server will return an HTTP Bad Request error to the client. 394 380 \begin{itemize}
\end{itemize} 395 381 \itemsep1pt\parskip0pt\parsep0pt
\item[\small Incorrect Old Password] \begin{itemize} 396 382 \item
\item The server will return an HTTP Forbidden error to the client. 397 383 {The user's password is changed}
\end{itemize} 398 384 \item
\item[\small Blank New Password] \begin{itemize} 399 385 {The user can log in with the new password}
\item The server will return an HTTP Bad Request error to the client. 400 386 \end{itemize}
\end{itemize} 401 387
\end{description} 402 388 \item[Trigger:]{UserX wants to change their password.}
403 389
\item[Workflow:] 404 390 \item[Error Handling:]
\begin{enumerate} 405 391 \begin{description}
\itemsep1pt\parskip0pt\parsep0pt 406 392 \item[\small Missing Fields] \begin{itemize}
\item 407 393 \item The client shall enforce required fields
{UserX shall press the ``Change Password'' button.} 408 394 \item The server will return an HTTP Bad Request error to the client.
\item 409 395 \end{itemize}
{The System shall render a form that requires the user to enter their old password and new password.} 410 396 \item[\small Incorrect Old Password] \begin{itemize}
\item 411 397 \item The server will return an HTTP Forbidden error to the client.
{UserX shall enter their current password ``oldPassword'' and the desired new password ``newPassword''.} 412 398 \end{itemize}
\item 413 399 \item[\small Blank New Password] \begin{itemize}
{The System shall check UserX's current password.} 414 400 \item The server will return an HTTP Bad Request error to the client.
\item 415 401 \end{itemize}
{The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.} 416 402 \end{description}
\item 417 403
{The System shall display a modal displaying ``Success! You've changed your password!''} 418 404 \item[Workflow:]
\end{enumerate} 419 405 \begin{enumerate}
420 406 \itemsep1pt\parskip0pt\parsep0pt
\item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.} 421 407 \item
\end{description} 422 408 {UserX shall press the ``Change Password'' button.}
\newpage 423 409 \item
424 410 {The System shall render a form that requires the user to enter their old password and new password.}
{} 425 411 \item
426 412 {UserX shall enter their current password ``oldPassword'' and the desired new password ``newPassword''.}
\subsection{[A6] Password Reset} 427 413 \item
428 414 {The System shall check UserX's current password.}
\begin{description} 429 415 \item
\item[Description:]{The user shall be able to reset their password without 430 416 {The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.}
being logged in } 431 417 \item
432 418 {The System shall display a modal displaying ``Success! You've changed your password!''}
\item[Desired Outcome:]{The user's password shall be changed to one that 433 419 \end{enumerate}
they remember} 434 420
\\ 435 421 \item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.}
436 422 \end{description}
\item[User Goals:]{The user does not know their current password but wants 437 423 \newpage
to log into the site} 438 424
439 425 {}
\item[Dependency Use Cases:]{[A1] User Registration} 440 426
\\ 441 427 \subsection{[A6] Password Reset}
442 428
\item[Details:]{The user provides their email in a password reset form. If 443 429 \begin{description}
the address is valid, the site sends a password reset link with a random 444 430 \item[Description:]{The user shall be able to reset their password without
token to that address. If the address is invalid, the site does not send 445 431 being logged in }
a link. For security reasons, we do not reveal to the user whether the 446 432
email address was valid, and we expire the link after 24 hours. When a 447 433 \item[Desired Outcome:]{The user's password shall be changed to one that
user visits the link emailed to them, they are able to specify a new 448 434 they remember}
password in a form. When they submit the form, their password is updated 449 435 \\
if the token is correct. } 450 436
451 437 \item[User Goals:]{The user does not know their current password but wants
\item[Priority Level:]{``Must''} 452 438 to log into the site}
453 439
\item[Status:]{Not Implemented} 454 440 \item[Dependency Use Cases:]{[A1] User Registration}
455 441 \\
\item[Preconditions:] 456 442
\begin{itemize} 457 443 \item[Details:]{The user provides their email in a password reset form. If
\itemsep1pt\parskip0pt\parsep0pt 458 444 the address is valid, the site sends a password reset link with a random
\item 459 445 token to that address. If the address is invalid, the site does not send
{The user has created an account before} 460 446 a link. For security reasons, we do not reveal to the user whether the
\item 461 447 email address was valid, and we expire the link after 24 hours. When a
{The user knows the email address attached to their account} 462 448 user visits the link emailed to them, they are able to specify a new
\end{itemize} 463 449 password in a form. When they submit the form, their password is updated
464 450 if the token is correct. }
\item[Postconditions:] 465 451
\begin{itemize} 466 452 \item[Priority Level:]{``Must''}
\itemsep1pt\parskip0pt\parsep0pt 467 453
\item 468 454 \item[Status:]{Not Implemented}
{The user's password is changed} 469 455
\item 470 456 \item[Preconditions:]
{The user can log in with the new password} 471 457 \begin{itemize}
\end{itemize} 472 458 \itemsep1pt\parskip0pt\parsep0pt
473 459 \item
\item[Trigger]{UserX forgot their password and wants to access the site.} 474 460 {The user has created an account before}
475 461 \item
\item[Workflow:][Requesting password reset] 476 462 {The user knows the email address attached to their account}
477 463 \end{itemize}
\begin{enumerate} 478 464
\itemsep1pt\parskip0pt\parsep0pt 479 465 \item[Postconditions:]
\item 480 466 \begin{itemize}
{UserX shall click the ``Forgot Password'' button.} 481 467 \itemsep1pt\parskip0pt\parsep0pt
\item 482 468 \item
{The System shall prompt the user for their current email} 483 469 {The user's password is changed}
\item 484 470 \item
{UserX shall submit their email ``testuser@flahy.cards''.} 485 471 {The user can log in with the new password}
\item 486 472 \end{itemize}
{The System shall check if an account exists with the email entered by 487 473
UserX.} 488 474 \item[Trigger]{UserX forgot their password and wants to access the site.}
\end{enumerate} 489 475
490 476 \item[Workflow:][Requesting password reset]
\item[Workflow:] 491 477
\begin{enumerate} 492 478 \begin{enumerate}
\setcounter{enumi}{4} 493 479 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 494 480 \item
\item 495 481 {UserX shall click the ``Forgot Password'' button.}
{The System shall create a new password reset token for the user} 496 482 \item
\item 497 483 {The System shall prompt the user for their current email}
{The System shall send an email to the user with a link containing the token and the 498 484 \item
user's ID} 499 485 {UserX shall submit their email ``testuser@flahy.cards''.}
\item 500 486 \item
{UserX shall click the link in the email and visit 501 487 {The System shall check if an account exists with the email entered by
/app/password\_reset} 502 488 UserX.}
\item 503 489 \end{enumerate}
{The System shall render a form that will prompt the user for a new 504 490
password} 505 491 \item[Workflow:]
\item 506 492 \begin{enumerate}
{UserX shall provide a new password ``newPassword'' in the form} 507 493 \setcounter{enumi}{4}
\item 508 494 \itemsep1pt\parskip0pt\parsep0pt
{The System shall change the password associated with the user's email. } 509 495 \item
\end{enumerate} 510 496 {The System shall create a new password reset token for the user}
511 497 \item
\item[Expected Result:] {UserX's password will change to ``newPasword''.} 512 498 {The System shall send an email to the user with a link containing the token and the
\begin{enumerate} 513 499 user's ID}
\setcounter{enumi}{4} 514 500 \item
\itemsep1pt\parskip0pt\parsep0pt 515 501 {UserX shall click the link in the email and visit
\item 516 502 /app/password\_reset}
{If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.} 517 503 \item
\end{enumerate} 518 504 {The System shall render a form that will prompt the user for a new
519 505 password}
\item[Expected Result:] {UserX's password will not be reset.} 520 506 \item
\end{description} 521 507 {UserX shall provide a new password ``newPassword'' in the form}
\newpage 522 508 \item
523 509 {The System shall change the password associated with the user's email. }
{} 524 510 \end{enumerate}
525 511
\subsection{[A7] Limit Student Access to Courses - Planned} 526 512 \item[Expected Result:] {UserX's password will change to ``newPasword''.}
527 513 \begin{enumerate}
\begin{description} 528 514 \setcounter{enumi}{4}
\item[Description:]{The instructor shall be able to limit access to the 529 515 \itemsep1pt\parskip0pt\parsep0pt
courses that he is in charge of by whitelisting only those students that 530 516 \item
are actually in the class.} 531 517 {If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.}
532 518 \end{enumerate}
\item[Desired Outcome:]{The class will have limited access and only those 533 519
users who are whitelisted may enroll in the class.} 534 520 \item[Expected Result:] {UserX's password will not be reset.}
535 521 \end{description}
\item[User Goals:]{The instructor wants to limit access to his class so only 536 522 \newpage
the students who are actually in his class participate, and nobody 537 523
else.} 538 524 {}
539 525
\item[Primary Actor:] {User (instructor)} 540 526 \subsection{[A7] Limit Student Access to Courses - Planned}
541 527
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 542 528 \begin{description}
\\ 543 529 \item[Description:]{The instructor shall be able to limit access to the
544 530 courses that he is in charge of by whitelisting only those students that
\item[Priority Level:]{``Should''} 545 531 are actually in the class.}
546 532
\item[Status:]{Not Implemented} 547 533 \item[Desired Outcome:]{The class will have limited access and only those
548 534 users who are whitelisted may enroll in the class.}
\item[Preconditions:] 549 535
\begin{itemize} 550 536 \item[User Goals:]{The instructor wants to limit access to his class so only
\itemsep1pt\parskip0pt\parsep0pt 551 537 the students who are actually in his class participate, and nobody
\item 552 538 else.}
{User has valid instructor's account} 553 539
\end{itemize} 554 540 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
555 541 \\
\item[Postconditions:] 556 542
\begin{itemize} 557 543 \item[Priority Level:]{``Should''}
\itemsep1pt\parskip0pt\parsep0pt 558 544
\item 559 545 \item[Status:]{Not Implemented}
{Only those users who were whitelisted may add the class.} 560 546
\end{itemize} 561 547 \item[Preconditions:]
562 548 \begin{itemize}
\item[Trigger:]{The instructor emails the administrator and requests to 563 549 \itemsep1pt\parskip0pt\parsep0pt
limit access to his class.} 564 550 \item
565 551 {User has valid instructor's account}
\item[Workflow:] 566 552 \end{itemize}
\begin{enumerate} 567 553
\itemsep1pt\parskip0pt\parsep0pt 568 554 \item[Postconditions:]
\item 569 555 \begin{itemize}
{The instructor, ``INSTR1'', shall email the administrators from his UCSD email address 570 556 \itemsep1pt\parskip0pt\parsep0pt
and requests to limit access to his course.} 571 557 \item
\item 572 558 {Only those users who were whitelisted may add the class.}
{ INSTR1 shall provide a list of 573 559 \end{itemize}
emails of the students that are to be whitelisted.} 574 560
\item 575 561 \item[Trigger:]{The instructor emails the administrator and requests to
{The administrators shall visit a custom admin page, select the course, and 576 562 limit access to his class.}
paste the list of emails.} 577 563
\item 578 564 \item[Workflow:]
{The administrators shall submit the page directly to the System.} 579 565 \begin{enumerate}
\item 580 566 \itemsep1pt\parskip0pt\parsep0pt
{The System shall create a WhitelistedAddress for each provided email, 581 567 \item
attaching it to the section taught by INST1.} 582 568 {The instructor, ``INSTR1'', shall email the administrators from his UCSD email address
\item 583 569 and requests to limit access to his course.}
{The System shall add any existing users whose email addresses appear 584 570 \item
in the whitelist to the class. } 585 571 { INSTR1 shall provide a list of
\end{enumerate} 586 572 emails of the students that are to be whitelisted.}
587 573 \item
\item[Expected Result:] {A whitelist is added to a section.} 588 574 {The administrators shall visit a custom admin page, select the course, and
\end{description} 589 575 paste the list of emails.}
\newpage 590 576 \item
591 577 {The administrators shall submit the page directly to the System.}
{} 592 578 \item
593 579 {The System shall create a WhitelistedAddress for each provided email,
\subsection{[A8] User Logout} 594 580 attaching it to the section taught by INST1.}
595 581 \item
\begin{description} 596 582 {The System shall add any existing users whose email addresses appear
\item[Description:]{The user shall be able to log out of his/her account on 597 583 in the whitelist to the class. }
the site.} 598 584 \end{enumerate}
599 585
\item[Desired Outcome:]{The user's information and data will no longer be 600 586 \item[Expected Result:] {A whitelist is added to a section.}
accessible after logging out. } 601 587 \end{description}
602 588 \newpage
\item[User Goals:]{The user is done with his/her session of using the 603 589
website, and wants to make sure others cannot access the data in his/her 604 590 {}
account.} 605 591
606 592 \subsection{[A8] User Logout}
\item[Dependency Use Cases:] None 607 593
\\ 608 594 \begin{description}
609 595 \item[Description:]{The user shall be able to log out of his/her account on
\item[Priority Level:]{``Must''} 610 596 the site.}
611 597
\item[Status:]{Implemented} 612 598 \item[Desired Outcome:]{The user's information and data will no longer be
613 599 accessible after logging out. }
\item[Preconditions:]{The user is logged into their account} 614 600
615 601 \item[User Goals:]{The user is done with his/her session of using the
\item[Postconditions:]{The user's data can no longer be accessed.} 616 602 website, and wants to make sure others cannot access the data in his/her
617 603 account.}
\item[Trigger:] 618 604
619 605 \item[Dependency Use Cases:] None
\item[Workflow:] 620 606 \\
621 607
\begin{enumerate} 622 608 \item[Priority Level:]{``Must''}
\itemsep1pt\parskip0pt\parsep0pt 623 609
\item 624 610 \item[Status:]{Implemented}
{UserX shall click the ``Logout'' button.} 625 611
\item 626 612 \item[Preconditions:]{The user is logged into their account}
{The System shall logs out UserX.} 627 613
\item 628 614 \item[Postconditions:]{The user's data can no longer be accessed.}
{The System shall redirect UserX to the login page.} 629 615
\end{enumerate} 630 616 \item[Trigger:]
631 617
\item[Expected Result:] {User is logged out and is redirected to the login page.} 632 618 \item[Workflow:]
\end{description} 633 619
\newpage 634 620 \begin{enumerate}
635 621 \itemsep1pt\parskip0pt\parsep0pt
{} 636 622 \item
637 623 {UserX shall click the ``Logout'' button.}
\subsection{[A9] Contact Admin} 638 624 \item
639 625 {The System shall logs out UserX.}
\begin{description} 640 626 \item
\item[Description]{The user shall be able to contact the admin.} 641 627 {The System shall redirect UserX to the login page.}
642 628 \end{enumerate}
\item[Desired Outcome]{The user shall send a message to the admin; the 643 629
admin shall receive the message.} 644 630 \item[Expected Result:] {User is logged out and is redirected to the login page.}
\\ 645 631 \end{description}
646 632 \newpage
\item[User Goals:]{The user sends a message to the admin.} 647 633
648 634 {}
\item[Primary Actor]{User} 649 635
650 636 \subsection{[A9] Contact Admin}
\item[Dependency Use Cases]{None} 651 637
\\ 652 638 \begin{description}
653 639 \item[Description]{The user shall be able to contact the admin.}
\item[Priority Level]{``Must''} 654 640
655 641 \item[Desired Outcome]{The user shall send a message to the admin; the
\item[Status]{Not Implemented} 656 642 admin shall receive the message.}
657 643
\item[Pre-conditions]{None.} 658 644 \item[User Goals:]{The user sends a message to the admin.}
659 645
\item[Post-conditions]{The admin receives the user's message.} 660 646 \item[Dependency Use Cases]{None}
661 647 \\
\item[Trigger]{UserX wants to contact the administrators of our application.} 662 648
663 649 \item[Priority Level]{``Must''}
\item[Workflow] 664 650
\begin{enumerate} 665 651 \item[Status]{Not Implemented}
\itemsep1pt\parskip0pt\parsep0pt 666 652
\item 667 653 \item[Pre-conditions]{None.}
{The System shall display the admin email address on every page in the 668 654
application.} 669 655 \item[Post-conditions]{The admin receives the user's message.}
\end{enumerate} 670 656
671 657 \item[Trigger]{UserX wants to contact the administrators of our application.}
\item[Expected Result:] {The admin's email address can be seen by UserX on every page.} 672 658
\end{description} 673 659 \item[Workflow]
\newpage 674 660 \begin{enumerate}
675 661 \itemsep1pt\parskip0pt\parsep0pt
{} 676 662 \item
677 663 {The System shall display the admin email address on every page in the
\subsection{[A10] Configure Account Notifications} 678 664 application.}
\begin{description} 679 665 \end{enumerate}
\item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.} 680 666
681 667 \item[Expected Result:] {The admin's email address can be seen by UserX on every page.}
\item[Desired Outcome]{The User shall only receive notifications at the 682 668 \end{description}
times that were specified} 683 669 \newpage
\\ 684 670
685 671 {}
\item[User Goals]{The User shall not be bothered needlessly or at 686 672
inconvenient times} 687 673 \subsection{[A10] Configure Account Notifications}
688 674 \begin{description}
\item[Primary Actor]{User (student)} 689 675 \item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.}
690 676
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 691 677 \item[Desired Outcome]{The User shall only receive notifications at the
\\ 692 678 times that were specified}
693 679 \\
\item[Priority Level]{``Must''} 694 680
695 681 \item[User Goals]{The User shall not be bothered needlessly or at
\item[Status]{In progress} 696 682 inconvenient times}
697 683
\item[Preconditions:] 698 684 \item[Primary Actor]{User (student)}
\begin{itemize} 699 685
\itemsep1pt\parskip0pt\parsep0pt 700 686 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\item 701 687 \\
{The User has registered with the email testuser@flashy.cards. } 702 688
\item 703 689 \item[Priority Level]{``Must''}
{The user has verified their email address.} 704 690
\item {The User is logged in with the above email.} 705 691 \item[Status]{In progress}
\end{itemize} 706 692
707 693 \item[Preconditions:]
\item[Postconditions:] 708 694 \begin{itemize}
\begin{itemize} 709 695 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 710 696 \item
\item 711 697 {The User has registered with the email testuser@flashy.cards. }
{User only receive notifications at specified times} 712 698 \item
\end{itemize} 713 699 {The user has verified their email address.}
714 700 \item {The User is logged in with the above email.}
\item[Trigger]{UserX wants to change their notification settings} 715 701 \end{itemize}
716 702
\item[Workflow] 717 703 \item[Postconditions:]
\begin{enumerate} 718 704 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 719 705 \itemsep1pt\parskip0pt\parsep0pt
\item 720 706 \item
{UserX shall select ``Account Settings'' button from the top header.} 721 707 {User only receive notifications at specified times}
\item 722 708 \end{itemize}
{The System shall display a settings screen.} 723 709
\item 724 710 \item[Trigger]{UserX wants to change their notification settings}
{UserX shall change the notification timing to 1 min.} 725 711
\item 726 712 \item[Workflow]
{UserX shall click ``Save Settings'' button.} 727 713 \begin{enumerate}
\item 728 714 \itemsep1pt\parskip0pt\parsep0pt
{The System shall display a message confirming the settings are saved.} 729 715 \item
\item 730 716 {UserX shall select ``Account Settings'' button from the top header.}
{The System shall save notification settings to the user's attributes.} 731 717 \item
\end{enumerate} 732 718 {The System shall display a settings screen.}
733 719 \item
\item[Expected Result:]{UserX shall be notified at least as slow as 1 min.} 734 720 {UserX shall change the notification timing to 1 min.}
\end{description} 735 721 \item
\newpage 736 722 {UserX shall click ``Save Settings'' button.}
737 723 \item
{} 738 724 {The System shall display a message confirming the settings are saved.}
739 725 \item
\section{Flashcards} 740 726 {The System shall save notification settings to the user's attributes.}
\subsection{[F1] Push Flashcard} 741 727 \end{enumerate}
742 728
\begin{description} 743 729 \item[Expected Result:]{UserX shall be notified at least as slow as 1 min.}
\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. } 744 730 \end{description}
745 731 \newpage
\item[Desired Outcome:]{The user shall have the flashcard added to their own deck and the Live Feed.} 746 732
747 733 {}
\item[User Goals:]{The user will see their flashcard in their deck and the flashcard will be shared with others.} 748 734
749 735 \section{Flashcards}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 750 736 \subsection{[F1] Push Flashcard}
\\ 751 737
752 738 \begin{description}
\item[Preconditions:] 753 739 \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. }
\begin{itemize} 754 740
\itemsep1pt\parskip0pt\parsep0pt 755 741 \item[Desired Outcome:]{The user shall have the flashcard added to their own deck and the Live Feed.}
\item 756 742
{UserX has registered with the email testuser@flashy.cards and password ``test''. } 757 743 \item[User Goals:]{The user will see their flashcard in their deck and the flashcard will be shared with others.}
\item 758 744
{UserY has registered with the email TEST1@flashy.cards and password ``test''. } 759 745 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\item 760 746 \\
{UserX and UserY have verified their email addresses.} 761 747
\item {UserX and UserY are logged in with their respective emails.} 762 748 \item[Priority Level:]{``Must''}
\item 763 749
{UserX and UserY have added the class TEST 1.} 764 750 \item[Status:]{Implemented}
\item 765 751
{UserX and UserY are on the Live Feed for TEST 1.} 766 752 \item[Preconditions:]
\end{itemize} 767 753 \begin{itemize}
768 754 \itemsep1pt\parskip0pt\parsep0pt
\item[Postconditions:] 769 755 \item
\begin{itemize} 770 756 {UserX has registered with the email testuser@flashy.cards and password ``test''. }
\itemsep1pt\parskip0pt\parsep0pt 771 757 \item
\item 772 758 {UserY has registered with the email TEST1@flashy.cards and password ``test''. }
{UserX has flashcard added to their deck.} 773 759 \item
\item 774 760 {UserX and UserY have verified their email addresses.}
{The Flashcard is shown in the Live Feed.} 775 761 \item {UserX and UserY are logged in with their respective emails.}
\item 776 762 \item
{UserY and other users can add this flashcard to their decks.} 777 763 {UserX and UserY have added the class TEST 1.}
\end{itemize} 778 764 \item
779 765 {UserX and UserY are on the Live Feed for TEST 1.}
\item[Trigger:]{UserX wants to make a flashcard.} 780 766 \end{itemize}
781 767
\item[Workflow:] 782 768 \item[Postconditions:]
\begin{enumerate} 783 769 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 784 770 \itemsep1pt\parskip0pt\parsep0pt
\item {UserX has clicked the circular plus button (``Create Card'' button) in the lower right corner of the Live Feed.} 785 771 \item
\item 786 772 {UserX has flashcard added to their deck.}
{The System shall present a modal with a text box.} 787 773 \item
\item 788 774 {The Flashcard is shown in the Live Feed.}
{UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.} 789 775 \item
\item 790 776 {UserY and other users can add this flashcard to their decks.}
{UserX shall select the ``Contribute'' button in the modal.} 791 777 \end{itemize}
\item 792 778
{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''.} 793 779 \item[Trigger:]{UserX wants to make a flashcard.}
\item 794 780
{UserY shall see the card appear in their feed within a minute (See Notes).} 795 781 \item[Workflow:]
\item 796 782 \begin{enumerate}
{The System shall hide the modal from UserX.} 797 783 \itemsep1pt\parskip0pt\parsep0pt
\item 798 784 \item {UserX has clicked the circular plus button (``Create Card'' button) in the lower right corner of the Live Feed.}
{The flashcard shall be included in the UserX's deck.(c.f. Note 2 for procedure.} 799 785 \item
\end{enumerate} 800 786 {The System shall present a modal with a text box.}
801 787 \item
\item[Expected Result:] {UserX will have the new flashcard in their deck, and the new flashcard will show up on the live feed of class TEST 1.} 802 788 {UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.}
803 789 \item
\item[Alternative Workflow:] 804 790 {UserX shall select the ``Contribute'' button in the modal.}
\begin{enumerate} 805 791 \item
\itemsep1pt\parskip0pt\parsep0pt 806 792 {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''.}
\item 807 793 \item
{The System shall present a modal with a text box.} 808 794 {UserY shall see the card appear in their feed within a minute (See Notes).}
\item 809 795 \item
{UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.} 810 796 {The System shall hide the modal from UserX.}
\item 811 797 \item
{UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.} 812 798 {The flashcard shall be included in the UserX's deck.(c.f. Note 2 for procedure.}
\item 813 799 \end{enumerate}
{The System shall bold the word Spain.} 814 800
\item 815 801 \item[Expected Result:] {UserX will have the new flashcard in their deck, and the new flashcard will show up on the live feed of class TEST 1.}
{UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.} 816 802
\item 817 803 \item[Alternative Workflow:]
{The System shall bold the word plain.} 818 804 \begin{enumerate}
\item 819 805 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall click the ``Contribute'' button in the dialog.} 820 806 \item
\item 821 807 {The System shall present a modal with a text box.}
{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.} 822 808 \item
\item 823 809 {UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.}
{UserY shall view the Live Feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.} 824 810 \item
\end{enumerate} 825 811 {UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.}
826 812 \item
\item[Expected Result:] {UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded and the new flashcard will appear visible to UserX and UserY on the Live Feed of the class TEST 1.} 827 813 {The System shall bold the word Spain.}
828 814 \item
\end{description} 829 815 {UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.}
\newpage 830 816 \item
831 817 {The System shall bold the word plain.}
{} 832 818 \item
833 819 {UserX shall click the ``Contribute'' button in the dialog.}
\subsection{[F2] Edit Flashcard} 834 820 \item
835 821 {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.}
\begin{description} 836 822 \item
\item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.} 837 823 {UserY shall view the Live Feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.}
838 824 \end{enumerate}
\item[Desired Outcome:]{Flashcard is edited and saved appropriately} 839 825
\\ 840 826 \item[Expected Result:] {UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded and the new flashcard will appear visible to UserX and UserY on the Live Feed of the class TEST 1.}
841 827
\item[User Goals:]{To be able to change the text, the blanked words, and the study date on a flashcard.} 842 828 \end{description}
843 829 \newpage
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 844 830
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard} 845 831 {}
846 832
\item[Preconditions:] 847 833 \subsection{[F2] Edit Flashcard}
848 834
\begin{itemize} 849 835 \begin{description}
\itemsep1pt\parskip0pt\parsep0pt 850 836 \item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.}
\item 851 837
{The User has registered with the email testuser@flashy.cards. } 852 838 \item[Desired Outcome:]{Flashcard is edited and saved appropriately}
\item 853 839 \\
{The user has verified their email address.} 854 840
\item {The User is logged in with the above email.} 855 841 \item[User Goals:]{To be able to change the text, the blanked words, and the study date on a flashcard.}
\item 856 842
{The User has added the class TEST EDIT} 857 843 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\item 858 844 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard}
{The User is their deck for TEST EDIT.} 859 845
\end{itemize} 860 846 \item[Priority Level:]{``Should''}
861 847
\item[Postconditions:] 862 848 \item[Status:]{Implemented}
\begin{itemize} 863 849
\itemsep1pt\parskip0pt\parsep0pt 864 850 \item[Preconditions:]
\item 865 851
{Flashcard is edited} 866 852 \begin{itemize}
\end{itemize} 867 853 \itemsep1pt\parskip0pt\parsep0pt
868 854 \item
\item[Trigger:]{The User wants to edit their card.} 869 855 {The User has registered with the email testuser@flashy.cards. }
870 856 \item
\item[Workflow:] 871 857 {The user has verified their email address.}
\begin{enumerate} 872 858 \item {The User is logged in with the above email.}
\itemsep1pt\parskip0pt\parsep0pt 873 859 \item
\item 874 860 {The User has added the class TEST EDIT}
{UserX shall move the cursor over the flashcard ``this is made for edit''.} 875 861 \item
\item 876 862 {The User is their deck for TEST EDIT.}
{UserX shall click the edit button on bottom left of the selected flashcard.} 877 863 \end{itemize}
\item 878 864
{The System shall present a modal that contains the text of the selected flashcard.} 879 865 \item[Postconditions:]
\item 880 866 \begin{itemize}
{UserX shall be able to change the text to ``Edit has been made''.} 881 867 \itemsep1pt\parskip0pt\parsep0pt
\item 882 868 \item
{UserX shall click 'Save'} 883 869 {Flashcard is edited}
\item 884 870 \end{itemize}
{The System shall hide the model from UserX.} 885 871
\end{enumerate} 886 872 \item[Trigger:]{The User wants to edit their card.}
887 873
\item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.} 888 874 \item[Workflow:]
889 875 \begin{enumerate}
\item[Alternative Workflow A:] 890 876 \itemsep1pt\parskip0pt\parsep0pt
891 877 \item
\begin{enumerate} 892 878 {UserX shall move the cursor over the flashcard ``this is made for edit''.}
\itemsep1pt\parskip0pt\parsep0pt 893 879 \item
\item 894 880 {UserX shall click the edit button on bottom left of the selected flashcard.}
{UserX shall move the cursor over the flash card ``this is made for edit2''.} 895 881 \item
\item 896 882 {The System shall present a modal that contains the text of the selected flashcard.}
{UserX shall click the edit button on bottom left of the selected flashcard.} 897 883 \item
\item 898 884 {UserX shall be able to change the text to ``Edit has been made''.}
{The System shall present a modal that contains the text of the selected flashcard.} 899 885 \item
\item 900 886 {UserX shall click 'Save'}
{UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.} 901 887 \item
\item 902 888 {The System shall hide the model from UserX.}
{UserX shall click 'Save'} 903 889 \end{enumerate}
\item 904 890
{The System shall hide the modal from UserX.} 905 891 \item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.}
\item 906 892
{The selected flashcard's blanked words shall be changed to ``fun''.} 907 893 \item[Alternative Workflow A:]
\end{enumerate} 908 894
909 895 \begin{enumerate}
\item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.} 910 896 \itemsep1pt\parskip0pt\parsep0pt
911 897 \item
\item[Alternative Workflow B:] 912 898 {UserX shall move the cursor over the flash card ``this is made for edit2''.}
913 899 \item
\begin{enumerate} 914 900 {UserX shall click the edit button on bottom left of the selected flashcard.}
\itemsep1pt\parskip0pt\parsep0pt 915 901 \item
\item 916 902 {The System shall present a modal that contains the text of the selected flashcard.}
{UserX shall move the cursor over the flash card ``this is made for edit3''.} 917 903 \item
\item 918 904 {UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.}
{UserX shall click the edit button on bottom left of the selected flashcard.} 919 905 \item
\item 920 906 {UserX shall click 'Save'}
{The System shall present a modal that contains the text of the selected flashcard.} 921 907 \item
\item 922 908 {The System shall hide the modal from UserX.}
{UserX shall be able the study date to 6/12.} 923 909 \item
\item 924 910 {The selected flashcard's blanked words shall be changed to ``fun''.}
{UserX shall click 'Save'} 925 911 \end{enumerate}
\item 926 912
{The System shall hide the modal from UserX.} 927 913 \item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.}
\end{enumerate} 928 914
929 915 \item[Alternative Workflow B:]
\item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.} 930 916
\end{description} 931 917 \begin{enumerate}
\newpage 932 918 \itemsep1pt\parskip0pt\parsep0pt
933 919 \item
{} 934 920 {UserX shall move the cursor over the flash card ``this is made for edit3''.}
935 921 \item
\subsection{[F3] Pull Flashcard} 936 922 {UserX shall click the edit button on bottom left of the selected flashcard.}
\begin{description} 937 923 \item
\item[Description:]{This test case outlines the presentation layering step 938 924 {The System shall present a modal that contains the text of the selected flashcard.}
process of a user pulling a flashcard.} 939 925 \item
940 926 {UserX shall be able the study date to 6/12.}
\item[Desired Outcome:]{The User shall have the flashcard added to their own 941 927 \item
deck } 942 928 {UserX shall click 'Save'}
\\ 943 929 \item
944 930 {The System shall hide the modal from UserX.}
\item[User Goals:]{The user will be able to review that flashcard. } 945 931 \end{enumerate}
946 932
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 947 933 \item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.}
Login, [A3] Add a Class, [F1] Push Flashard} 948 934 \end{description}
949 935 \newpage
\item[Priority Level:]{``Must'' } 950 936
951 937 {}
\item[Status:]{Not Implemented} 952 938
953 939 \subsection{[F3] Pull Flashcard}
\item[Preconditions:] 954 940 \begin{description}
\begin{itemize} 955 941 \item[Description:]{This test case outlines the presentation layering step
\itemsep1pt\parskip0pt\parsep0pt 956 942 process of a user pulling a flashcard.}
\item 957 943
{User has registered for a class.} 958 944 \item[Desired Outcome:]{The User shall have the flashcard added to their own
\item 959 945 deck }
{User is at live feed for said class.} 960 946 \\
\item 961 947
{Flashcard with text ``TESTY FLASHY'' has been created.} 962 948 \item[User Goals:]{The user will be able to review that flashcard. }
\item 963 949
{That flashcard with the text ``TESTY FLASHY'' is in the Live Feed of class TEST 1.} 964 950 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\end{itemize} 965 951 Login, [A3] Add a Class, [F1] Push Flashard}
966 952
\item[Postconditions:] 967 953 \item[Priority Level:]{``Must'' }
\begin{itemize} 968 954
\itemsep1pt\parskip0pt\parsep0pt 969 955 \item[Status:]{Not Implemented}
\item 970 956
{User shall have that flashcard with the text ``TESTY FLASHY'' added to their deck} 971 957 \item[Preconditions:]
\item 972 958 \begin{itemize}
{User can review this flashcard later} 973 959 \itemsep1pt\parskip0pt\parsep0pt
\end{itemize} 974 960 \item
975 961 {User has registered for a class.}
\item[Trigger:]{UserX wants to add a flashcard to their deck to study it.} 976 962 \item
977 963 {User is at live feed for said class.}
\item[Workflow:] 978 964 \item
979 965 {Flashcard with text ``TESTY FLASHY'' has been created.}
\begin{enumerate} 980 966 \item
\itemsep1pt\parskip0pt\parsep0pt 981 967 {That flashcard with the text ``TESTY FLASHY'' is in the Live Feed of class TEST 1.}
\item 982 968 \end{itemize}
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed and hover their cursor 983 969
over it.} 984 970 \item[Postconditions:]
\item 985 971 \begin{itemize}
{The System shall present buttons on mouseover.} 986 972 \itemsep1pt\parskip0pt\parsep0pt
\item 987 973 \item
{UserX shall click on the large plus that appears over the flashcard with the text ``TESTY FLASHY''.} 988 974 {User shall have that flashcard with the text ``TESTY FLASHY'' added to their deck}
\item 989 975 \item
{The System shall hide the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed for UserX.} 990 976 {User can review this flashcard later}
\item 991 977 \end{itemize}
{UserX shall check that card with the text ``TESTY FLASHY'' has been added to their class TEST 1 deck by checking API.} 992 978
\end{enumerate} 993 979 \item[Trigger:]{UserX wants to add a flashcard to their deck to study it.}
994 980
\item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' is in the class TEST 1 deck.} 995 981 \item[Workflow:]
\end{description} 996 982
\newpage 997 983 \begin{enumerate}
998 984 \itemsep1pt\parskip0pt\parsep0pt
{} 999 985 \item
1000 986 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed and hover their cursor
\subsection{[F4] Flag Inappropriate Cards} 1001 987 over it.}
1002 988 \item
\begin{description} 1003 989 {The System shall present buttons on mouseover.}
\item[Description:]{This test case outlines the presentation layering step 1004 990 \item
process of a user flagging a card they have deemed inappropriate.} 1005 991 {UserX shall click on the large plus that appears over the flashcard with the text ``TESTY FLASHY''.}
1006 992 \item
\item[Desired Outcome:]{The flashcard's inappropriateness variable is 1007 993 {The System shall hide the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed for UserX.}
adjusted} 1008 994 \item
\\ 1009 995 {UserX shall check that card with the text ``TESTY FLASHY'' has been added to their class TEST 1 deck by checking API.}
\item[User Goals:]{To note if a card should not belong in the class and 1010 996 \end{enumerate}
should not be displayed in the feed} 1011 997
1012 998 \item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' is in the class TEST 1 deck.}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1013 999 \end{description}
Login, [A3] Add a Class, [F1] Push Flashcard} 1014 1000 \newpage
1015 1001
\item[Priority Level:]{``Should''} 1016 1002 {}
1017 1003
\item[Status:]{Not Implemented} 1018 1004 \subsection{[F4] Flag Inappropriate Cards}
1019 1005
\item[Preconditions:] 1020 1006 \begin{description}
\begin{itemize} 1021 1007 \item[Description:]{This test case outlines the presentation layering step
\itemsep1pt\parskip0pt\parsep0pt 1022 1008 process of a user flagging a card they have deemed inappropriate.}
\item 1023 1009
{UserX has registered for a class TEST 1.} 1024 1010 \item[Desired Outcome:]{The flashcard's inappropriateness variable is
\item 1025 1011 adjusted}
{UserX is in the live feed for class TEST 1.} 1026 1012 \\
\item 1027 1013 \item[User Goals:]{To note if a card should not belong in the class and
{Flashcard has been created.} 1028 1014 should not be displayed in the feed}
\item 1029 1015
{That flashcard is in the Live Feed.} 1030 1016 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\end{itemize} 1031 1017 Login, [A3] Add a Class, [F1] Push Flashcard}
1032 1018
\item[Postconditions:] 1033 1019 \item[Priority Level:]{``Should''}
\begin{itemize} 1034 1020
\itemsep1pt\parskip0pt\parsep0pt 1035 1021 \item[Status:]{Not Implemented}
\item 1036 1022
{User shall have that flashcard added to their deck} 1037 1023 \item[Preconditions:]
\item 1038 1024 \begin{itemize}
{User can review this flashcard later} 1039 1025 \itemsep1pt\parskip0pt\parsep0pt
\end{itemize} 1040 1026 \item
1041 1027 {UserX has registered for a class TEST 1.}
\item[Trigger:]{UserX wants to mark a card innapropriate.} 1042 1028 \item
1043 1029 {UserX is in the live feed for class TEST 1.}
\item[Workflow:] 1044 1030 \item
\begin{enumerate} 1045 1031 {Flashcard has been created.}
\itemsep1pt\parskip0pt\parsep0pt 1046 1032 \item
\item 1047 1033 {That flashcard is in the Live Feed.}
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the feed and hover their cursor 1048 1034 \end{itemize}
over it.} 1049 1035
\item 1050 1036 \item[Postconditions:]
{The System shall present buttons on mouseover.} 1051 1037 \begin{itemize}
\item 1052 1038 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall click on the flag icon that appears on the card.} 1053 1039 \item
\item 1054 1040 {User shall have that flashcard added to their deck}
{The System shall mark the card as flagged and hide the card from the 1055 1041 \item
feed for the User.} 1056 1042 {User can review this flashcard later}
\end{enumerate} 1057 1043 \end{itemize}
1058 1044
\item[Expected Result:] {The flashycard with the text ``TESTY FLASHY'' will be flagged for inappropriateness.} 1059 1045 \item[Trigger:]{UserX wants to mark a card innapropriate.}
\end{description} 1060 1046
\newpage 1061 1047 \item[Workflow:]
1062 1048 \begin{enumerate}
{} 1063 1049 \itemsep1pt\parskip0pt\parsep0pt
1064 1050 \item
\subsection{[F5] Filter Flashcards} 1065 1051 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the feed and hover their cursor
1066 1052 over it.}
\begin{description} 1067 1053 \item
\item[Description:]{This test case outlines the presentation layering step 1068 1054 {The System shall present buttons on mouseover.}
process of a user filtering existing flashcards to view only a specified subset.} 1069 1055 \item
1070 1056 {UserX shall click on the flag icon that appears on the card.}
\item[Desired Outcome:]{The user shall see flashcards based on the filter 1071 1057 \item
options} 1072 1058 {The System shall mark the card as flagged and hide the card from the
1073 1059 feed for the User.}
\item[User Goals:]{The user can find what he/she is specifically looking 1074 1060 \end{enumerate}
for} 1075 1061
1076 1062 \item[Expected Result:] {The flashycard with the text ``TESTY FLASHY'' will be flagged for inappropriateness.}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1077 1063 \end{description}
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull 1078 1064 \newpage
Flashcard} 1079 1065
\\ 1080 1066 {}
1081 1067
\item[Priority Level:]{``Should''} 1082 1068 \subsection{[F5] Filter Flashcards}
1083 1069
\item[Status:]{Not Implemented} 1084 1070 \begin{description}
1085 1071 \item[Description:]{This test case outlines the presentation layering step
\item[Preconditions:] 1086 1072 process of a user filtering existing flashcards to view only a specified subset.}
\begin{itemize} 1087 1073
\itemsep1pt\parskip0pt\parsep0pt 1088 1074 \item[Desired Outcome:]{The user shall see flashcards based on the filter
\item 1089 1075 options}
{UserX has registered for the class TEST 1.} 1090 1076
\item 1091 1077 \item[User Goals:]{The user can find what he/she is specifically looking
{Flashcards exist in the course} 1092 1078 for}
\item 1093 1079
{USerX is at Card List View for the class.} 1094 1080 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\end{itemize} 1095 1081 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull
1096 1082 Flashcard}
\item[Postconditions:] 1097 1083
\begin{itemize} 1098 1084 \item[Priority Level:]{``Should''}
\itemsep1pt\parskip0pt\parsep0pt 1099 1085
\item 1100 1086 \item[Status:]{Not Implemented}
{User only sees specific flashcards} 1101 1087
\end{itemize} 1102 1088 \item[Preconditions:]
1103 1089 \begin{itemize}
\item[Trigger:]{User is looking for specific flashcards.} 1104 1090 \itemsep1pt\parskip0pt\parsep0pt
1105 1091 \item
\item[Workflow:] 1106 1092 {UserX has registered for the class TEST 1.}
\begin{enumerate} 1107 1093 \item
\itemsep1pt\parskip0pt\parsep0pt 1108 1094 {Flashcards exist in the course}
\item 1109 1095 \item
{UserX shall select certain tags (checkboxes) from top box.} 1110 1096 {UserX is at Card List View for the class.}
\item 1111 1097 \end{itemize}
{UserX shall click ``Filter'' button.} 1112 1098
\item 1113 1099 \item[Postconditions:]
{The System shall display only cards sorted under those tags in list.} 1114 1100 \begin{itemize}
\end{enumerate} 1115 1101 \itemsep1pt\parskip0pt\parsep0pt
1116 1102 \item
\item[Expected Result:] {Flashcards are filtered.} 1117 1103 {User only sees specific flashcards}
\end{description} 1118 1104 \end{itemize}
\newpage 1119 1105
1120 1106 \item[Trigger:]{User is looking for specific flashcards.}
{} 1121 1107
1122 1108 \item[Workflow:]
\subsection{[F6] Blank Out Words in Flashcard} 1123 1109 \begin{enumerate}
1124 1110 \itemsep1pt\parskip0pt\parsep0pt
\begin{description} 1125 1111 \item
\item[Description:]{The User shall be able to blank out keywords in any 1126 1112 {UserX shall select certain tags (checkboxes) from top box.}
flashcard in his deck.} 1127 1113 \item
1128 1114 {UserX shall click ``Filter'' button.}
\item[Desired Outcome:]{The blanked out words in the flashcard notify the 1129 1115 \item
System that they are keywords.} 1130 1116 {The System shall display only cards sorted under those tags in list.}
\\ 1131 1117 \end{enumerate}
1132 1118
\item[User Goals:]{The User shall mark some words as keywords so the System 1133 1119 \item[Expected Result:] {Flashcards are filtered.}
may later quiz theirself by blanking out the keywords and having the 1134 1120 \end{description}
User guess what they are.} 1135 1121 \newpage
1136 1122
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1137 1123 {}
Login, [A3] Add a Class, [F1] Push Flashcard} 1138 1124
1139 1125 \subsection{[F6] Blank Out Words in Flashcard}
\item[Preconditions:] 1140 1126
\begin{itemize} 1141 1127 \begin{description}
\itemsep1pt\parskip0pt\parsep0pt 1142 1128 \item[Description:]{The User shall be able to blank out keywords in any
\item 1143 1129 flashcard in his deck.}
{The User has registered with the email testuser@flashy.cards.} 1144 1130
\item 1145 1131 \item[Desired Outcome:]{The blanked out words in the flashcard notify the
{The User has verified their email address.} 1146 1132 System that they are keywords.}
\item 1147 1133
{The User is logged in with the above email.} 1148 1134 \item[User Goals:]{The User shall mark some words as keywords so the System
\item 1149 1135 may later quiz theirself by blanking out the keywords and having the
{The User has enrolled in the class TEST 1.} 1150 1136 User guess what they are.}
\item 1151 1137
{The User is at the Deck View for the class ``TEST 1''.} 1152 1138 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\item 1153 1139 Login, [A3] Add a Class, [F1] Push Flashcard}
{The User has created and added a flashcard to their deck with text 1154 1140
``The rain in Spain stays mainly in the plain''.} 1155 1141 \item[Preconditions:]
\end{itemize} 1156 1142 \begin{itemize}
1157 1143 \itemsep1pt\parskip0pt\parsep0pt
\item[Postconditions:] 1158 1144 \item
\begin{itemize} 1159 1145 {The User has registered with the email testuser@flashy.cards.}
\itemsep1pt\parskip0pt\parsep0pt 1160 1146 \item
\item 1161 1147 {The User has verified their email address.}
{The blanked out words in the flashcard are marked} 1162 1148 \item
\end{itemize} 1163 1149 {The User is logged in with the above email.}
1164 1150 \item
\item[Workflow:] 1165 1151 {The User has enrolled in the class TEST 1.}
\begin{enumerate} 1166 1152 \item
\itemsep1pt\parskip0pt\parsep0pt 1167 1153 {The User is at the Deck View for the class ``TEST 1''.}
\item 1168 1154 \item
{UserX shall click on the edit button on the flashcard in their deck.} 1169 1155 {The User has created and added a flashcard to their deck with text
\item 1170 1156 ``The rain in Spain stays mainly in the plain''.}
{The System shall bring up the edit flashcard modal.} 1171 1157 \end{itemize}
\item 1172 1158
{UserX shall select the input field bold ``Spain'' highlighting it and 1173 1159 \item[Postconditions:]
pressing the blank out button.} 1174 1160 \begin{itemize}
\item 1175 1161 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall click on `Save' or the equivalent button to save the 1176 1162 \item
changes.} 1177 1163 {The blanked out words in the flashcard are marked}
\item 1178 1164 \end{itemize}
{The System will save the blanked out word in the Flashcard Mask.} 1179 1165
\end{enumerate} 1180 1166 \item[Workflow:]
1181 1167 \begin{enumerate}
\item[Expected Result:] {The System shall show ``Spain'' marked in the flashcard.} 1182 1168 \itemsep1pt\parskip0pt\parsep0pt
1183 1169 \item
\item[Alternative Workflow:] 1184 1170 {UserX shall click on the edit button on the flashcard in their deck.}
\begin{enumerate} 1185 1171 \item
\itemsep1pt\parskip0pt\parsep0pt 1186 1172 {The System shall bring up the edit flashcard modal.}
\item 1187 1173 \item
{UserX shall click on the Feed View button.} 1188 1174 {UserX shall select the input field bold ``Spain'' highlighting it and
\item 1189 1175 pressing the blank out button.}
{The System shall switch the view to Feed.} 1190 1176 \item
\item 1191 1177 {UserX shall click on `Save' or the equivalent button to save the
{UserX shall click the plus button to add a card.} 1192 1178 changes.}
\item 1193 1179 \item
{The System shall bring up the flashcard modal.} 1194 1180 {The System will save the blanked out word in the Flashcard Mask.}
\item 1195 1181 \end{enumerate}
{UserX shall select the input field bold ``Spain'' highlighting it and 1196 1182
pressing the blank out button.} 1197 1183 \item[Expected Result:] {The System shall show ``Spain'' marked in the flashcard.}
\item 1198 1184
{The System will save the blanked out word in the Flashcard Mask.} 1199 1185 \item[Alternative Workflow:]
\end{enumerate} 1200 1186 \begin{enumerate}
1201 1187 \itemsep1pt\parskip0pt\parsep0pt
\item[Expected Result:]{The System shall show ``Spain'' marked in the flashcard.} 1202 1188 \item
\end{description} 1203 1189 {UserX shall click on the Feed View button.}
\newpage 1204 1190 \item
1205 1191 {The System shall switch the view to Feed.}
{} 1206 1192 \item
1207 1193 {UserX shall click the plus button to add a card.}
\subsection{[F7] Fix Flashcard} 1208 1194 \item
1209 1195 {The System shall bring up the flashcard modal.}
\begin{description} 1210 1196 \item
\item[Description:]{The User shall be able to alter a flashcard he/she made 1211 1197 {UserX shall select the input field bold ``Spain'' highlighting it and
originally and not have to make a new copy of it.} 1212 1198 pressing the blank out button.}
1213 1199 \item
\item[Desired Outcome:]{The User shall alter one flashcard and that 1214 1200 {The System will save the blanked out word in the Flashcard Mask.}
alteration will be shown to all users of that flashcard} 1215 1201 \end{enumerate}
1216 1202
\item[User Goals:]{The user shall make the flashcard say something different 1217 1203 \item[Expected Result:]{The System shall show ``Spain'' marked in the flashcard.}
than it did originally.} 1218 1204 \end{description}
1219 1205 \newpage
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1220 1206
Login, [A3] Add a Class, [F1] Push Flashcard} 1221 1207 {}
1222 1208
\item[Preconditions]: 1223 1209 \subsection{[F7] Fix Flashcard}
\begin{itemize} 1224 1210
\itemsep1pt\parskip0pt\parsep0pt 1225 1211 \begin{description}
\item 1226 1212 \item[Description:]{The User shall be able to alter a flashcard he/she made
{The User has registered with the email testuser@flashy.cards.} 1227 1213 originally and not have to make a new copy of it.}
\item 1228 1214
{The User has verified their email address.} 1229 1215 \item[Desired Outcome:]{The User shall alter one flashcard and that
\item 1230 1216 alteration will be shown to all users of that flashcard}
{The User is logged in with the above email.} 1231 1217
\item 1232 1218 \item[User Goals:]{The user shall make the flashcard say something different
{The User has enrolled in the class TEST 1.} 1233 1219 than it did originally.}
\item 1234 1220
{The User is at the Deck View for the class ``TEST 1''.} 1235 1221 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\item 1236 1222 Login, [A3] Add a Class, [F1] Push Flashcard}
{The User has created and added a flashcard to their deck with text 1237 1223
``The rain in Spain stays mainly in the plain''.} 1238 1224 \item[Preconditions:]
\end{itemize} 1239 1225 \begin{itemize}
1240 1226 \itemsep1pt\parskip0pt\parsep0pt
\item[Postconditions:] 1241 1227 \item
\begin{itemize} 1242 1228 {The User has registered with the email testuser@flashy.cards.}
\itemsep1pt\parskip0pt\parsep0pt 1243 1229 \item
\item 1244 1230 {The User has verified their email address.}
{The user shall see their alteration for that flashcard.} 1245 1231 \item
\item 1246 1232 {The User is logged in with the above email.}
{Other users will be notified of the alteration.} 1247 1233 \item
\end{itemize} 1248 1234 {The User has enrolled in the class TEST 1.}
1249 1235 \item
\item[Workflow:] 1250 1236 {The User is at the Deck View for the class ``TEST 1''.}
\begin{enumerate} 1251 1237 \item
\itemsep1pt\parskip0pt\parsep0pt 1252 1238 {The User has created and added a flashcard to their deck with text
\item 1253 1239 ``The rain in Spain stays mainly in the plain''.}
{UserX shall select the Flashcard they created.} 1254 1240 \end{itemize}
\item 1255 1241
{UserX shall select ``Info'' button on the flashcard.} 1256 1242 \item[Postconditions:]
\item 1257 1243 \begin{itemize}
{The System shall bring up the flashcard information modal.} 1258 1244 \itemsep1pt\parskip0pt\parsep0pt
\item 1259 1245 \item
{UserX shall select the ``Fix'' button.} 1260 1246 {The user shall see their alteration for that flashcard.}
\item 1261 1247 \item
{The System shall bring up the edit flashcard modal.} 1262 1248 {Other users will be notified of the alteration.}
\item 1263 1249 \end{itemize}
{UserX shall change the text to ``The rain in Spain stays mainly in Germany''.} 1264 1250
\item 1265 1251 \item[Workflow:]
{UserX shall select the ``Done'' button.} 1266 1252 \begin{enumerate}
\item 1267 1253 \itemsep1pt\parskip0pt\parsep0pt
{The System shall update the flashcard's content.} 1268 1254 \item
\item 1269 1255 {UserX shall select the Flashcard they created.}
{The System shall close the edit flashcard modal and the close the 1270 1256 \item
flashcard information modal.} 1271 1257 {UserX shall select ``Info'' button on the flashcard.}
\end{enumerate} 1272 1258 \item
1273 1259 {The System shall bring up the flashcard information modal.}
\item[Expected Results:]{The Client shall show the flashcard with new text:``The rain in Spain stays mainly in Germany''.} 1274 1260 \item
\end{description} 1275 1261 {UserX shall select the ``Fix'' button.}
\newpage 1276 1262 \item
1277 1263 {The System shall bring up the edit flashcard modal.}
{} 1278 1264 \item
1279 1265 {UserX shall change the text to ``The rain in Spain stays mainly in Germany''.}
\subsection{[F8] Hide cards from feed} 1280 1266 \item
1281 1267 {UserX shall select the ``Done'' button.}
\begin{description} 1282 1268 \item
\item[Description:]{The user shall be able to hide cards from feed} 1283 1269 {The System shall update the flashcard's content.}
1284 1270 \item
\item[Desired Outcome:]{The card is no longer visible to the user} 1285 1271 {The System shall close the edit flashcard modal and the close the
\\ 1286 1272 flashcard information modal.}
1287 1273 \end{enumerate}
\item[User Goals:]{The card has been looked at and should be hidden to 1288 1274
reduce screen clutter} 1289 1275 \item[Expected Results:]{The Client shall show the flashcard with new text:``The rain in Spain stays mainly in Germany''.}
1290 1276 \end{description}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1291 1277 \newpage
Login, [A3] Add a Class, [F1] Push Flashcard} 1292 1278
1293 1279 {}
\item[Preconditions:] 1294 1280
\item 1295 1281 \subsection{[F8] Hide cards from feed}
{The User has registered with the email testuser@flashy.cards.} 1296 1282
\item 1297 1283 \begin{description}
{The User has verified their email address.} 1298 1284 \item[Description:]{The User shall be able to hide cards from feed}
\item 1299 1285
{The User is logged in with the above email.} 1300 1286 \item[Desired Outcome:]{The card is no longer visible to the User}
\item 1301 1287 \\
{The User has enrolled in the class TEST 1.} 1302 1288
\item 1303 1289 \item[User Goals:]{The card has been looked at and should be hidden to