Commit ddf8c534c676b175479a689ee8124b54ae2ea246

Authored by Chung Wang
1 parent e2dd8a1eb8
Exists in master

more test cases in F1

Showing 1 changed file with 42 additions and 12 deletions Inline Diff

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