Compare View

switch
from
...
to
 
Commits (2)

Diff

Showing 1 changed file Inline Diff

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