Commit 52c7790a4a75412925168782b2337df1aab872b6

Authored by Kevin Mach
Exists in master

Merge branch 'master' of git.ucsd.edu:110swag/docs

Showing 1 changed file Inline Diff

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