Compare View

switch
from
...
to
 
Commits (2)

Diff

Showing 1 changed file Inline Diff

TestCases.tex View file @ 15fd812
\documentclass[letterpaper]{scrartcl} % or whatever 1 1 \documentclass[letterpaper]{scrartcl} % or whatever
\usepackage{tgpagella} 2 2 \usepackage{tgpagella}
\setkomafont{disposition}{\normalfont\bfseries} 3 3 \setkomafont{disposition}{\normalfont\bfseries}
%\usepackage[markuppercase]{scrpage2} 4 4 %\usepackage[markuppercase]{scrpage2}
\title{\huge System Test Plan} 5 5 \title{\huge System Test Plan}
\date{\today} 6 6 \date{\today}
\author{\Large Students With A Goal (S.W.A.G.)} 7 7 \author{\Large Students With A Goal (S.W.A.G.)}
\usepackage[pass]{geometry} 8 8 \usepackage[pass]{geometry}
\usepackage{hyperref} 9 9 \usepackage{hyperref}
\usepackage{graphicx} 10 10 \usepackage{graphicx}
\usepackage{enumitem} 11 11 \usepackage{enumitem}
\setlist[description]{style=multiline,leftmargin=3cm,font=\normalfont\textbf} 12 12 \setlist[description]{style=multiline,leftmargin=3cm,font=\normalfont\textbf}
\setlistdepth{9} 13 13 \setlistdepth{9}
14 14
\setlist[itemize,1]{label=$\bullet$} 15 15 \setlist[itemize,1]{label=$\bullet$}
\setlist[itemize,2]{label=$\bullet$} 16 16 \setlist[itemize,2]{label=$\bullet$}
\setlist[itemize,3]{label=$\bullet$} 17 17 \setlist[itemize,3]{label=$\bullet$}
\setlist[itemize,4]{label=$\bullet$} 18 18 \setlist[itemize,4]{label=$\bullet$}
\setlist[itemize,5]{label=$\bullet$} 19 19 \setlist[itemize,5]{label=$\bullet$}
\setlist[itemize,6]{label=$\bullet$} 20 20 \setlist[itemize,6]{label=$\bullet$}
\setlist[itemize,7]{label=$\bullet$} 21 21 \setlist[itemize,7]{label=$\bullet$}
\setlist[itemize,8]{label=$\bullet$} 22 22 \setlist[itemize,8]{label=$\bullet$}
\setlist[itemize,9]{label=$\bullet$} 23 23 \setlist[itemize,9]{label=$\bullet$}
\renewlist{itemize}{itemize}{9} 24 24 \renewlist{itemize}{itemize}{9}
\begin{document} 25 25 \begin{document}
\maketitle 26 26 \maketitle
\begin{center} 27 27 \begin{center}
\includegraphics[width=12cm]{../swag_logo.png}\\ 28 28 \includegraphics[width=12cm]{../swag_logo.png}\\
29 29
\begin{tabular}{l r} 30 30 \begin{tabular}{l r}
Melody Jeng & System Architect \\ 31 31 Melody Jeng & System Architect \\
Arno Gau & Senior System Analyst \\ 32 32 Arno Gau & Senior System Analyst \\
Rachel Lee & Software Development Lead \\ 33 33 Rachel Lee & Software Development Lead \\
Laura Hawkins & Project Manager \\ 34 34 Laura Hawkins & Project Manager \\
Rohan Rangray & Algorithms Specialist\\ 35 35 Rohan Rangray & Algorithms Specialist\\
Andrew Buss & Database Specialist \\ 36 36 Andrew Buss & Database Specialist \\
Nam Phuong Tran & Quality Assurance Lead \\ 37 37 Nam Phuong Tran & Quality Assurance Lead \\
Chung Kang Wang & Business Analyst\\ 38 38 Chung Kang Wang & Business Analyst\\
Masud Rahman & User Interface Specialist\\ 39 39 Masud Rahman & User Interface Specialist\\
Kevin Mach & User Interface Specialist\\ 40 40 Kevin Mach & User Interface Specialist\\
\end{tabular} 41 41 \end{tabular}
\end{center} 42 42 \end{center}
\newpage 43 43 \newpage
\tableofcontents 44 44 \tableofcontents
\newpage 45 45 \newpage
46 46
\section{Testing Notes} 47 47 \section{Testing Notes}
\subsection{Testing Accounts} 48 48 \subsection{Testing Accounts}
UserX\\ 49 49 UserX\\
- email: userx@flashy.cards\\ 50 50 - email: UserX@flashy.cards\\
- password: mynameisuserx 51 51 - password: mynameisuserx
\\ 52 52 \\
UserY\\ 53 53 UserY\\
- email: usery@flashy.cards\\ 54 54 - email: UserY@flashy.cards\\
- password: mynameisusery 55 55 - password: mynameisusery
56 56
\subsection{Fixtures} 57 57 \subsection{Fixtures}
Fixtures are provided to reset the database to a known state before running each test case. This isolates the effects of each test case and simplifies resolution of preconditions. Each test case specifies a test fixture which may be applied by running the command \texttt{scripts/apply-test-fixture.sh <fixture name>} in the root of the backend directory. Once a fixture has been applied, reload the page, log back in (if required by the test case) and continue running the test case. 58 58 Fixtures are provided to reset the database to a known state before running each test case. This isolates the effects of each test case and simplifies resolution of preconditions. Each test case specifies a test fixture which may be applied by running the command \texttt{scripts/apply-test-fixture.sh <fixture name>} in the root of the backend directory. Once a fixture has been applied, reload the page, log back in (if required by the test case) and continue running the test case.
\subsection{Testing Multiple Users} 59 59 \subsection{Testing Multiple Users}
Some test cases relating to real-time functionality require two users simultaneously logged into the the application. This requires two separate browser sessions. Refer to browser documentation for this. 60 60 Some test cases relating to real-time functionality require two users simultaneously logged into the the application. This requires two separate browser sessions. Refer to browser documentation for this.
\subsection{Supported Browser} 61 61 \subsection{Supported Browser}
Flashy officially supports Chrome version 42 on Windows and Linux. Frontend functionality may be degraded on other browsers. 62 62 Flashy officially supports Chrome version 42 on Windows and Linux. Frontend functionality may be degraded on other browsers.
63 63
\subsection{Sent Emails in Development} 64 64 \subsection{Sent Emails in Development}
As noted in the backend README, when run as a local development server for testing, Flashy does not actually send email except in a production environment. Sending email requires an AWS SES key that we do not want to bundle with our application's source. Instead they are printed out to the server console. When any reference is made to an email being sent, check the console. Example: 65 65 As noted in the backend README, when run as a local development server for testing, Flashy does not actually send email except in a production environment. Sending email requires an AWS SES key that we do not want to bundle with our application's source. Instead they are printed out to the server console. When any reference is made to an email being sent, check the console. Example:
66 66
\includegraphics[width=4in]{../doc_screenshots/console_backend.png} 67 67 \includegraphics[width=4in]{../doc_screenshots/console_backend.png}
68 68
\newpage 69 69 \newpage
70 70
71 71
\section{Accounts} 72 72 \section{Accounts}
73 73
\subsection{[A1] User Registration} 74 74 \subsection{[A1] User Registration}
\begin{description}[style=multiline,leftmargin=3cm] 75 75 \begin{description}[style=multiline,leftmargin=3cm]
76 76
\item[Description:]{This test case outlines the presentation layer step 77 77 \item[Description:]{This test case outlines the presentation layer step
process of a user registering for an account with our application.} 78 78 process of a user registering for an account with our application.}
79 79
\item[Desired Outcome:]{An account will be created for the User from the 80 80 \item[Desired Outcome:]{An account will be created for the User from the
specified username, password, email. The User will be able to log into 81 81 specified username, password, email. The User will be able to log into
the aforementioned account.} 82 82 the aforementioned account.}
83 83
\item[User Goals:]{The User shall have an account to participate in the 84 84 \item[User Goals:]{The User shall have an account to participate in the
website's activities.} 85 85 website's activities.}
86 86
\item[Dependency Use Cases:]{None} 87 87 \item[Dependency Use Cases:]{None}
\\ 88 88 \\
89 89
\item[Priority Level:]{``Must''} 90 90 \item[Priority Level:]{``Must''}
91 91
\item[Status:]{Implemented} 92 92 \item[Status:]{Implemented}
93 93
\item[Preconditions:] 94 94 \item[Preconditions:]
\begin{itemize} 95 95 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 96 96 \itemsep1pt\parskip0pt\parsep0pt
\item 97 97 \item
{None} 98 98 {None}
\end{itemize} 99 99 \end{itemize}
100 100
\item[Postconditions:] 101 101 \item[Postconditions:]
\begin{itemize} 102 102 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 103 103 \itemsep1pt\parskip0pt\parsep0pt
\item 104 104 \item
{The User has an account registered with the system.} 105 105 {The User has an account registered with the system.}
\end{itemize} 106 106 \end{itemize}
107 107
\item[Trigger:]{UserX wants to start creating flashcards for a class.} 108 108 \item[Trigger:]{UserX wants to start creating flashcards for a class.}
109 109
\item[Workflow:] 110 110 \item[Workflow:]
111 111 \begin{enumerate}
\begin{enumerate} 112 112 \item
\item 113 113 {UserX shall click the ``Sign Up'' button.}
{UserX shall click the ``Sign Up'' button.} 114 114 \item
\item 115 115 {The System shall display a registration form.}
{The System shall display a registration form.} 116 116 \item
\item 117 117 {UserX shall fill in the form with email UserX@flashy.cards and password ``mynameisuserx''.}
{UserX shall fill in the form with email testuser@flashy.cards and password ``test''.} 118 118 \item
\item 119 119 {The System shall successfully receive the correct credentials and send an
{The System shall successfully receive the correct credentials and send an email to the User's address with a link to validate the User's email address and displays the Add Class page to the User.} 120 120 email to the User's address with a link to validate the User's email address
\item 121 121 and displays the Add Class page to the User.}
{UserX receives an email with a link to verify their email. The 122 122 \item
User clicks the link.} 123 123 {The System shall display a toast ``Please verify your email address! RESEND
\item 124 124 VERIFICATION EMAIL''.}
{The Server marks the user's email as valid and saves the User object 125 125 \item
again.} 126 126 {UserX receives an email with a link to verify their email. The
\end{enumerate} 127 127 User clicks the link (see Testing Notes).}
128 128 \item
\item [Expected Results:]{UserX's account is now active (registered with the system).} 129 129 {The System shall mark UserX's email as valid.}
130 130 \item
\end{description} 131 131 {UserX shall click ``Logout'' (power button) in the top left corner.}
\newpage 132 132 \item
133 133 {The System shall present UserX Login screen.}
{} 134 134 \item
135 135 {UserX shall once again login with ``UserX@flashy.cards'' and ``mynameisuserx''.}
\subsection{[A2] User Login} 136 136 \end{enumerate}
137 137
\begin{description} 138 138 \item [Expected Result:]{UserX shall see Add Class page without a toast asking
\item[Description:]{This test case outlines the presentation layering step 139 139 UserX to verify their email.}
process of a user logging into the application.} 140 140
141 141 \end{description}
\item[Desired Outcome:]{The User shall be able to provide their email address and 142 142 \newpage
password to access their courses and flash cards. The User shall gain 143 143
access to the list of the courses they have added, and be able to review 144 144 {}
the flash cards they have added to their decks.} 145 145
146 146 \subsection{[A2] User Login}
\item[User Goals:]{The User wants to resume use of the site on another 147 147
device, or use the site after logging out.} 148 148 \begin{description}
149 149 \item[Description:]{This test case outlines the presentation layering step
\item[Dependency Use Cases:]{[A1] User Registration} 150 150 process of a user logging into the application.}
\\ 151 151
152 152 \item[Desired Outcome:]{The User shall be able to provide their email address and
\item[Priority Level:]{``Must''} 153 153 password to access their courses and flash cards. The User shall gain
154 154 access to the list of the courses they have added, and be able to review
\item[Status:]{Implemented} 155 155 the flashcards they have added to their decks.}
156 156
\item[Preconditions:] 157 157 \item[User Goals:]{The User wants to resume use of the site on another
\begin{itemize} 158 158 device, or use the site after logging out.}
\item 159 159
{The User has created an account before with email ``testuser@flashy.cards'' with password ``test''.} 160 160 \item[Dependency Use Cases:]{[A1] User Registration}
\end{itemize} 161 161 \\
162 162
\item[Postconditions:] 163 163 \item[Priority Level:]{``Must''}
\begin{itemize} 164 164
\itemsep1pt\parskip0pt\parsep0pt 165 165 \item[Status:]{Implemented}
\item 166 166
{The user can navigate the site and see their data.} 167 167 \item[Preconditions:]
\end{itemize} 168 168 \begin{itemize}
169 169 \item
\item[Trigger:]{UserX wants to view, add, or create cards for a class or classes.} 170 170 {The User has created an account before with email ``UserX@flashy.cards'' with
171 171 password ``mynameisuserx''.}
\item[Workflow:] 172 172 \end{itemize}
\begin{enumerate} 173 173
\itemsep1pt\parskip0pt\parsep0pt 174 174 \item[Postconditions:]
\item 175 175 \begin{itemize}
{UserX shall enter their email ``testuser@flashy.cards'' and password ``test''.} 176 176 \itemsep1pt\parskip0pt\parsep0pt
\item 177 177 \item
{The System shall authenticate UserX's email and password and checks if UserX is active.} 178 178 {The user can navigate the site and see their data.}
\item 179 179 \end{itemize}
{The System shall receive the credentials and display the ``Add Class'' page to the User.} 180 180
\end{enumerate} 181 181 \item[Trigger:]{UserX wants to view, add, or create cards for a class or classes.}
\item [Expected Result:] 182 182
{The User is brought to the page ``Add Class''.}\\ 183 183 \item[Workflow:]
184 184 \begin{enumerate}
\item [Alternate Workflow:] 185 185 \itemsep1pt\parskip0pt\parsep0pt
\begin{enumerate} 186 186 \item
\item 187 187 {UserX shall enter their email ``UserX@flashy.cards'' and password ``mynameisuserx''.}
{UserX accidentally puts in the wrong credentials and clicks the ``Login'' button.} 188 188 \item
\item 189 189 {The System shall authenticate UserX's email and password and checks if UserX is active.}
{The System shows UserX the site login page with a text message reading ``Invalid username or password!!'' displayed in the log in text box.} 190 190 \item
\end {enumerate} 191 191 {The System shall receive the credentials and display the ``Add Class'' page to the User.}
192 192 \end{enumerate}
\item [Expected Result:] 193 193 \item [Expected Result:]
{The User is not able to login.} \\ 194 194 {The User is brought to the page ``Add Class''.}\\
195 195
\end{description} 196 196 \item [Alternate Workflow A:]
\newpage 197 197 \begin{enumerate}
198 198 \item
{} 199 199 {UserX accidentally puts in the credentials ``UserX@flashy.cards'',
200 200 ``hahahaha'' and clicks the ``Login'' button.}
\subsection{[A3] Add a Class} 201 201 \item
\begin{description} 202 202 {The System shows UserX the site login page with a message reading
\item[Description:]{This test case outlines the presentation layer step 203 203 ``Invalid username or password!!''.}
process of a user adding a class.} 204 204 \end {enumerate}
205 205
\item[Desired Outcome:]{The class shall be linked with the student's account 206 206 \item [Expected Result:]
and the student shall have the ability to read and publish flashcards 207 207 {The User is not able to login.} \\
for this class.} 208 208
209 209 \item [Alternate Workflow B:]
\item[User Goals:]{The User wants to publish flashcards for this class and 210 210 \begin{enumerate}
read the flashcards for this class that are published by other users.} 211 211 \item
212 212 {UserX accidentally puts in the credentials ``NotUserX@flashy.cards'',
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 213 213 ``mynameisuserx'' and clicks the ``Login'' button.}
\\ 214 214 \item
215 215 {The System shows UserX the site login page with a message reading
\item[Priority Level:]{``Must''} 216 216 ``Invalid username or password!!''.}
217 217 \end {enumerate}
\item[Status:]{Implemented} 218 218
219 219 \item [Expected Result:]
\item[Preconditions:] 220 220 {The User is not able to login.} \\
\begin{itemize} 221 221
\itemsep1pt\parskip0pt\parsep0pt 222 222 \item [Alternate Workflow C:]
\item 223 223 \begin{enumerate}
{The User is logged in as UserX.} 224 224 \item
\item 225 225 {UserX accidentally puts in the credentials ``theflash@flashy.cards'',
{The User is whitelisted for class TEST 101.} 226 226 ``MyNameIsUserX'' and clicks the ``Login'' button.}
\item 227 227 \item
{The User is not whitelisted for class TEST 102.} 228 228 {The System shows UserX the site login page with a message reading
\item 229 229 ``Invalid username or password!!''.}
{The class TEST 103 has no whitelist.} 230 230 \end {enumerate}
\end{itemize} 231 231
232 232 \item [Expected Result:]
\item[Postconditions:] 233 233 {The User is not able to login.} \\
\begin{itemize} 234 234
\itemsep1pt\parskip0pt\parsep0pt 235 235 \end{description}
\item 236 236 \newpage
{The User can read the flashcards being published for the class and 237 237
add them to their deck.} 238 238 {}
\item 239 239
{The User can publish flashcards to be viewed and added by other users 240 240 \subsection{[A3] Add a Class}
in the same class.} 241 241 \begin{description}
\end{itemize} 242 242 \item[Description:]{This test case outlines the presentation layer step
243 243 process of a user adding a class.}
\item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.} 244 244
245 245 \item[Desired Outcome:]{The class shall be linked with the student's account
\item[Workflow:] 246 246 and the student shall have the ability to read and publish flashcards
\begin{enumerate} 247 247 for this class.}
\itemsep1pt\parskip0pt\parsep0pt 248 248
\item 249 249 \item[User Goals:]{The User wants to publish flashcards for this class and
{UserX shall click ``Add Class'' on the classes dropdown from the navigation bar.} 250 250 read the flashcards for this class that are published by other users.}
\item 251 251
{The System shall show the user ``Add Class'' page.} 252 252 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\item 253 253 \\
{UserX shall begin to type ``TEST 101''.} 254 254
\item 255 255 \item[Priority Level:]{``Must''}
{The System shall show suggestions as a user types.} 256 256
\item 257 257 \item[Status:]{Implemented}
{The System shall check if there is a whitelist for each class in the suggestions.} 258 258
\item 259 259 \item[Preconditions:]
{The System shall ensure that UserX is on the whitelist for each section.} 260 260 \begin{itemize}
\item 261 261 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall click on ``TEST 101'', which should not have a lock icon.} 262 262 \item
\item 263 263 {The User is logged in as UserX.}
{UserX shall click on the ``Add'' button.} 264 264 \item
\item 265 265 {The User is whitelisted for class TEST 101.}
{The System shall add UserX to the specified class TEST 101.} 266 266 \item
\end{enumerate} 267 267 {The User is not whitelisted for class TEST 102.}
268 268 \item
\item[Expected Result:] {UserX has added the section and sees the Live Feed 269 269 {The class TEST 103 has no whitelist.}
for TEST 101.} 270 270 \end{itemize}
271 271
\item[Alternate Workflow A:] 272 272 \item[Postconditions:]
\begin{enumerate} 273 273 \begin{itemize}
\setcounter{enumi}{3} 274 274 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 275 275 \item
\item 276 276 {The User can read the flashcards being published for the class and
{UserX shall begin to type ``TEST 102''.} 277 277 add them to their deck.}
\item 278 278 \item
{The System shall show suggestions as a user types.} 279 279 {The User can publish flashcards to be viewed and added by other users
\item 280 280 in the same class.}
{The System shall check if there is a whitelist for each class in the suggestions.} 281 281 \end{itemize}
\item 282 282
{The System shall see that UserX is not on the whitelist.} 283 283 \item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.}
\item 284 284
{UserX shall see a lock icon in the suggestions for TEST 102.} 285 285 \item[Workflow:]
\item 286 286 \begin{enumerate}
{UserX shall click on ``TEST 102'', which has a lock icon.} 287 287 \itemsep1pt\parskip0pt\parsep0pt
\item 288 288 \item
{The System shall disable the ``Add'' button.} 289 289 {UserX shall click ``Add Class'' on the classes dropdown from the navigation bar.}
\end{enumerate} 290 290 \item
291 291 {The System shall show the user ``Add Class'' page.}
\item[Expected Result:] {UserX cannot add the specified TEST 102 and cannot 292 292 \item
view contents related to this class.} 293 293 {UserX shall begin to type ``TEST 101''.}
294 294 \item
\item[Alternate Workflow B:] 295 295 {The System shall show suggestions as a user types.}
\begin{enumerate} 296 296 \item
\setcounter{enumi}{3} 297 297 {The System shall check if there is a whitelist for each class in the suggestions.}
\itemsep1pt\parskip0pt\parsep0pt 298 298 \item
\item 299 299 {The System shall ensure that UserX is on the whitelist for each section.}
{UserX shall begin to type ``TEST 103''.} 300 300 \item
\item 301 301 {UserX shall click on ``TEST 101'', which should not have a lock icon.}
{The System shall show suggestions as a user types.} 302 302 \item
\item 303 303 {UserX shall click on the ``Add'' button.}
{The System shall check if there is a whitelist for each class in the suggestions.} 304 304 \item
\item 305 305 {The System shall add UserX to the specified class TEST 101.}
{The System shall see there is no whitelist for TEST 103.} 306 306 \end{enumerate}
\item 307 307
{UserX shall click on ``TEST 103'', which should not have a lock icon.} 308 308 \item[Expected Result:] {UserX has added the section and sees the Live Feed
\item 309 309 for TEST 101.}
{UserX shall click on the ``Add'' button.} 310 310
\item 311 311 \item[Alternate Workflow A:]
{The System shall add UserX to TEST 103.} 312 312 \begin{enumerate}
\end{enumerate} 313 313 \setcounter{enumi}{3}
314 314 \itemsep1pt\parskip0pt\parsep0pt
\item[Expected Result:] {UserX has added the section and sees the Live Feed 315 315 \item
for TEST 103.} 316 316 {UserX shall begin to type ``TEST 102''.}
\end{description} 317 317 \item
\newpage 318 318 {The System shall show suggestions as a user types.}
319 319 \item
{} 320 320 {The System shall check if there is a whitelist for each class in the suggestions.}
321 321 \item
\subsection{[A4] Drop a Class} 322 322 {The System shall see that UserX is not on the whitelist.}
323 323 \item
\begin{description} 324 324 {UserX shall see a lock icon in the suggestions for TEST 102.}
\item[Description:]{This test case outlines the presentation layer step process of a user dropping a class.} 325 325 \item
326 326 {UserX shall click on ``TEST 102'', which has a lock icon.}
\item[Desired Outcome:]{The User has dropped the class and no longer needs 327 327 \item
access to the flashcards for the dropped class. They can no longer 328 328 {The System shall disable the ``Add'' button.}
see the flashcards associated to the class that they dropped.} 329 329 \end{enumerate}
330 330
\item[User Goals:]{The User shall not have access to a class and the 331 331 \item[Expected Result:] {UserX cannot add the specified TEST 102 and cannot
flashcards associated with that class. They will no longer see the class 332 332 view contents related to this class.}
listed in their list of ``Enrolled Classes''.} 333 333
334 334 \item[Alternate Workflow B:]
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 335 335 \begin{enumerate}
\\ 336 336 \setcounter{enumi}{3}
337 337 \itemsep1pt\parskip0pt\parsep0pt
\item[Priority Level:]{``Should''} 338 338 \item
339 339 {UserX shall begin to type ``TEST 103''.}
\item[Status:]{Implemented} 340 340 \item
341 341 {The System shall show suggestions as UserX types.}
\item[Preconditions:] 342 342 \item
\begin{itemize} 343 343 {The System shall check if there is a whitelist for each class in the suggestions.}
\itemsep1pt\parskip0pt\parsep0pt 344 344 \item
\item 345 345 {The System shall see there is no whitelist for TEST 103.}
{User is logged in as UserX.} 346 346 \item
\item 347 347 {UserX shall click on ``TEST 103'', which should not have a lock icon.}
{User has enrolled in TEST 101.} 348 348 \item
\item 349 349 {UserX shall click on the ``Add'' button.}
{User is at Settings page.} 350 350 \item
\end{itemize} 351 351 {The System shall add UserX to TEST 103.}
352 352 \end{enumerate}
\item[Postconditions:] 353 353
\begin{itemize} 354 354 \item[Expected Result:] {UserX has added the section and sees the Live Feed
\itemsep1pt\parskip0pt\parsep0pt 355 355 for TEST 103.}
\item 356 356 \end{description}
{User shall no longer have access to TEST 101, or associated flashcards.} 357 357 \newpage
\end{itemize} 358 358
359 359 {}
\item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove 360 360
all of their flashcards.} 361 361 \subsection{[A4] Drop a Class}
362 362
\item[Workflow:] 363 363 \begin{description}
\begin{enumerate} 364 364 \item[Description:]{This test case outlines the presentation layer step process of a user dropping a class.}
\itemsep1pt\parskip0pt\parsep0pt 365 365
\item 366 366 \item[Desired Outcome:]{The User has dropped the class and no longer needs
{UserX shall click ``X'' icon next to TEST 101 in ``Enrolled Classes'' table.} 367 367 access to the flashcards for the dropped class. They can no longer
\item 368 368 see the flashcards associated to the class that they dropped.}
{The System shall remove UserX from TEST 101.} 369 369
\item 370 370 \item[User Goals:]{The User shall not have access to a class and the
{The System shall display a toast indicating that a class has been dropped.} 371 371 flashcards associated with that class. They will no longer see the class
\end{enumerate} 372 372 listed in their list of ``Enrolled Classes''.}
373 373
\item[Expected Result:] {UserX no longer has access to any content related to TEST 101.} 374 374 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\end{description} 375 375 \\
\newpage 376 376
377 377 \item[Priority Level:]{``Should''}
{} 378 378
379 379 \item[Status:]{Implemented}
\subsection{[A5] Password Change} 380 380
381 381 \item[Preconditions:]
\begin{description} 382 382 \begin{itemize}
\item[Description:]{The User shall be able to change the password for their 383 383 \itemsep1pt\parskip0pt\parsep0pt
account in the account settings. This requires that they are logged in.} 384 384 \item
385 385 {The User is logged in as UserX.}
\item[Desired Outcome:]{The User's password shall be changed and the user 386 386 \item
shall be able to log in with the new password in the future.} 387 387 {The User has enrolled in TEST 101.}
388 388 \item
\item[User Goals:]{The User wants to use a different password in the future.} 389 389 {The User is at Settings page.}
390 390 \end{itemize}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 391 391
\\ 392 392 \item[Postconditions:]
393 393 \begin{itemize}
\item[Details:]{The user provides their current password and a new password 394 394 \itemsep1pt\parskip0pt\parsep0pt
in a form. If the current password is correct, the system updates their 395 395 \item
password to the requested new password.} 396 396 {The User shall no longer have access to TEST 101, or associated flashcards.}
397 397 \end{itemize}
\item[Priority Level:]{``Must''} 398 398
399 399 \item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove
\item[Status:]{Implemented} 400 400 all of their flashcards.}
401 401
\item[Preconditions:] 402 402 \item[Workflow:]
\begin{itemize} 403 403 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 404 404 \itemsep1pt\parskip0pt\parsep0pt
\item 405 405 \item
{The User is logged in as UserX.} 406 406 {UserX shall click ``X'' icon next to TEST 101 in ``Enrolled Classes'' table.}
\item 407 407 \item
{The User knows the current password (``oldPassword'').} 408 408 {The System shall remove UserX from TEST 101.}
\item 409 409 \item
{The User is at the Settings page.} 410 410 {The System shall display a toast indicating that a class has been dropped.}
\end{itemize} 411 411 \end{enumerate}
412 412
\item[Postconditions:] 413 413 \item[Expected Result:] {UserX no longer has access to any content related to TEST 101.}
\begin{itemize} 414 414 \end{description}
\itemsep1pt\parskip0pt\parsep0pt 415 415 \newpage
\item 416 416
{The User's password is changed} 417 417 {}
\item 418 418
{The User can log in with the new password} 419 419 \subsection{[A5] Password Change}
\end{itemize} 420 420
421 421 \begin{description}
\item[Trigger:]{UserX is dissatisfied with their current password and wishes 422 422 \item[Description:]{The User shall be able to change the password for their
to change it.} 423 423 account in the account settings. This requires that they are logged in.}
424 424
\item[Workflow:] 425 425 \item[Desired Outcome:]{The User's password shall be changed and the user
\begin{enumerate} 426 426 shall be able to log in with the new password in the future.}
\itemsep1pt\parskip0pt\parsep0pt 427 427
\item 428 428 \item[User Goals:]{The User wants to use a different password in the future.}
{UserX shall enter their current password ``oldPassword'' and the desired 429 429
new password ``newPassword'' (twice) in the ``Change Password'' form.} 430 430 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\item 431 431 \\
{UserX shall click the ``Submit'' button.} 432 432
\item 433 433 \item[Details:]{The user provides their current password and a new password
{The System shall check UserX's current password.} 434 434 in a form. If the current password is correct, the system updates their
\item 435 435 password to the requested new password.}
{The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.} 436 436
\end{enumerate} 437 437 \item[Priority Level:]{``Must''}
438 438
\item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.} 439 439 \item[Status:]{Implemented}
\end{description} 440 440
\newpage 441 441 \item[Preconditions:]
442 442 \begin{itemize}
{} 443 443 \itemsep1pt\parskip0pt\parsep0pt
444 444 \item
\subsection{[A6] Password Reset} 445 445 {The User is logged in as UserX.}
446 446 \item
\begin{description} 447 447 {The User knows the current password (``oldPassword'').}
\item[Description:]{The User shall be able to reset their password without 448 448 \item
being logged in } 449 449 {The User is at the Settings page.}
450 450 \end{itemize}
\item[Desired Outcome:]{The User's password shall be changed to one that 451 451
they remember} 452 452 \item[Postconditions:]
\\ 453 453 \begin{itemize}
454 454 \itemsep1pt\parskip0pt\parsep0pt
\item[User Goals:]{The User does not know their current password but wants 455 455 \item
to log into the site} 456 456 {The User's password is changed}
457 457 \item
\item[Dependency Use Cases:]{[A1] User Registration} 458 458 {The User can log in with the new password}
\\ 459 459 \end{itemize}
460 460
\item[Details:]{The User provides their email in a password reset form. If 461 461 \item[Trigger:]{UserX is dissatisfied with their current password and wishes
the address is valid, the site sends a password reset link with a random 462 462 to change it.}
token to that address. If the address is invalid, the site does not send 463 463
a link. For security reasons, we do not reveal to the user whether the 464 464 \item[Workflow:]
email address was valid, and we expire the link after 24 hours. When a 465 465 \begin{enumerate}
user visits the link emailed to them, they are able to specify a new 466 466 \itemsep1pt\parskip0pt\parsep0pt
password in a form. When they submit the form, their password is updated 467 467 \item
if the token is correct. } 468 468 {UserX shall enter their current password ``oldPassword'' and the desired
469 469 new password ``newPassword'' (twice) in the ``Change Password'' form.}
\item[Priority Level:]{``Must''} 470 470 \item
471 471 {UserX shall click the ``Submit'' button.}
\item[Status]{Implemented} 472 472 \item
473 473 {The System shall check UserX's current password.}
\item[Preconditions:] 474 474 \item
\begin{itemize} 475 475 {The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.}
\itemsep1pt\parskip0pt\parsep0pt 476 476 \end{enumerate}
\item 477 477
{Account for UserX has been created.} 478 478 \item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.}
\end{itemize} 479 479 \end{description}
480 480 \newpage
\item[Postconditions:] 481 481
\begin{itemize} 482 482 {}
\itemsep1pt\parskip0pt\parsep0pt 483 483
\item 484 484 \subsection{[A6] Password Reset}
{UserX's password is changed.} 485 485
\item 486 486 \begin{description}
{UserX can log in with the new password.} 487 487 \item[Description:]{The User shall be able to reset their password without
\end{itemize} 488 488 being logged in }
489 489
\item[Trigger]{UserX forgot their password and wants to access the site.} 490 490 \item[Desired Outcome:]{The User's password shall be changed to one that
491 491 they remember}
\item[Workflow:] 492 492 \\
493 493
\begin{enumerate} 494 494 \item[User Goals:]{The User does not know their current password but wants
\itemsep1pt\parskip0pt\parsep0pt 495 495 to log into the site}
\item 496 496
{UserX shall click the ``Forgot Password'' hyperlink.} 497 497 \item[Dependency Use Cases:]{[A1] User Registration}
\item 498 498 \\
{The System shall prompt the user for their current email.} 499 499
\item 500 500 \item[Details:]{The User provides their email in a password reset form. If
{UserX shall submit their email ``UserX@flashy.cards''.} 501 501 the address is valid, the site sends a password reset link with a random
\item 502 502 token to that address. If the address is invalid, the site does not send
{The System shall check if an account exists with the email entered by UserX.} 503 503 a link. For security reasons, we do not reveal to the user whether the
\item 504 504 email address was valid, and we expire the link after 24 hours. When a
{The System shall create a new password reset token for UserX.} 505 505 user visits the link emailed to them, they are able to specify a new
\item 506 506 password in a form. When they submit the form, their password is updated
{The System shall send an email to UserX with a link containing the token and the 507 507 if the token is correct. }
user's ID.} 508 508
\item 509 509 \item[Priority Level:]{``Must''}
{UserX shall click the link in the email to visit /app/password\_reset.} 510 510
\item 511 511 \item[Status]{Implemented}
{The System shall render a form that will prompt the user for a new password.} 512 512
\item 513 513 \item[Preconditions:]
{UserX shall provide a new password, ``newPassword'', in the form.} 514 514 \begin{itemize}
\item 515 515 \itemsep1pt\parskip0pt\parsep0pt
{The System shall change the password associated with the user's email.} 516 516 \item
\item 517 517 {Account for UserX has been created.}
{UserX shall navigate back to the login page and enter ``UserX@flashy.cards'' 518 518 \end{itemize}
with the old password ``mynameisuserx''.} 519 519
\item 520 520 \item[Postconditions:]
{The System shall display ``Invalid username or password!''} 521 521 \begin{itemize}
\item 522 522 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall login as ``UserX@flashy.cards'' with the password ``newPassword''.} 523 523 \item
\end{enumerate} 524 524 {UserX's password is changed.}
525 525 \item
\item[Expected Result:] {The login shall succeed.} 526 526 {UserX can log in with the new password.}
527 527 \end{itemize}
\item[Alternate Workflow:] 528 528
\begin{enumerate} 529 529 \item[Trigger]{UserX forgot their password and wants to access the site.}
\setcounter{enumi}{4} 530 530
\itemsep1pt\parskip0pt\parsep0pt 531 531 \item[Workflow:]
\item 532 532
{If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.} 533 533 \begin{enumerate}
\end{enumerate} 534 534 \itemsep1pt\parskip0pt\parsep0pt
535 535 \item
\item[Expected Result:] {UserX's password will not be reset.} 536 536 {UserX shall click the ``Forgot Password'' hyperlink.}
\end{description} 537 537 \item
\newpage 538 538 {The System shall prompt the user for their current email.}
539 539 \item
{} 540 540 {UserX shall submit their email ``UserX@flashy.cards''.}
541 541 \item
\subsection{[A7] Student Prevented From Accessing A Restricted Course} 542 542 {The System shall check if an account exists with the email entered by UserX.}
543 543 \item
\begin{description} 544 544 {The System shall create a new password reset token for UserX.}
\item[Description:]{The User shall not be able to access a restricted course.} 545 545 \item
546 546 {The System shall send an email to UserX with a link containing the token and the
\item[Desired Outcome:]{The class will have limited access and only those 547 547 user's ID.}
users who are whitelisted may enroll in the class.} 548 548 \item
549 549 {UserX shall click the link in the email to visit /app/password\_reset.}
\item[User Goals:]{The instructor wants to limit access to his class so only 550 550 \item
the students who are actually in his class participate, and nobody 551 551 {The System shall render a form that will prompt the user for a new password.}
else.} 552 552 \item
553 553 {UserX shall provide a new password, ``newPassword'', in the form.}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 554 554 \item
\\ 555 555 {The System shall change the password associated with the user's email.}
556 556 \item
\item[Priority Level:]{``Should''} 557 557 {UserX shall navigate back to the login page and enter ``UserX@flashy.cards''
558 558 with the old password ``mynameisuserx''.}
\item[Status:]{Implemented} 559 559 \item
560 560 {The System shall display ``Invalid username or password!''}
\item[Preconditions:] 561 561 \item
\begin{itemize} 562 562 {UserX shall login as ``UserX@flashy.cards'' with the password ``newPassword''.}
\itemsep1pt\parskip0pt\parsep0pt 563 563 \end{enumerate}
\item 564 564
{UserX has valid instructor's account} 565 565 \item[Expected Result:] {The login shall succeed.}
\end{itemize} 566 566
567 567 \item[Alternate Workflow:]
\item[Postconditions:] 568 568 \begin{enumerate}
\begin{itemize} 569 569 \setcounter{enumi}{4}
\itemsep1pt\parskip0pt\parsep0pt 570 570 \itemsep1pt\parskip0pt\parsep0pt
\item 571 571 \item
{Only those users who were whitelisted may add the class.} 572 572 {If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.}
\end{itemize} 573 573 \end{enumerate}
574 574
\item[Trigger:]{The instructor emails the administrator and requests to 575 575 \item[Expected Result:] {UserX's password will not be reset.}
limit access to his class.} 576 576 \end{description}
577 577 \newpage
\item[Workflow:] 578 578
\begin{enumerate} 579 579 {}
\itemsep1pt\parskip0pt\parsep0pt 580 580
\item 581 581 \subsection{[A7] Student Prevented From Accessing A Restricted Course}
{The instructor, ``INSTR1'', shall email the administrators from his UCSD email address 582 582
and requests to limit access to his course.} 583 583 \begin{description}
\item 584 584 \item[Description:]{The User shall not be able to access a restricted course.}
{ INSTR1 shall provide a list of 585 585
emails of the students that are to be whitelisted.} 586 586 \item[Desired Outcome:]{The class will have limited access and only those
\item 587 587 users who are whitelisted may enroll in the class.}
{The administrators shall visit a custom admin page, select the course, and 588 588
paste the list of emails.} 589 589 \item[User Goals:]{The instructor wants to limit access to his class so only
\item 590 590 the students who are actually in his class participate, and nobody
{The administrators shall submit the page directly to the System.} 591 591 else.}
\item 592 592
{The System shall create a WhitelistedAddress for each provided email, 593 593 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
attaching it to the section taught by INST1.} 594 594 \\
\item 595 595
{The System shall add any existing users whose email addresses appear 596 596 \item[Priority Level:]{``Should''}
in the whitelist to the class. } 597 597
\end{enumerate} 598 598 \item[Status:]{Implemented}
599 599
\item[Expected Result:] {A whitelist is added to a section.} 600 600 \item[Preconditions:]
\end{description} 601 601 \begin{itemize}
\newpage 602 602 \itemsep1pt\parskip0pt\parsep0pt
603 603 \item
{} 604 604 {UserX has valid instructor's account}
605 605 \end{itemize}
\subsection{[A8] User Logout} 606 606
607 607 \item[Postconditions:]
\begin{description} 608 608 \begin{itemize}
\item[Description:]{The User shall be able to log out of his/her account on 609 609 \itemsep1pt\parskip0pt\parsep0pt
the site.} 610 610 \item
611 611 {Only those users who were whitelisted may add the class.}
\item[Desired Outcome:]{The User's information and data will no longer be 612 612 \end{itemize}
accessible after logging out. } 613 613
614 614 \item[Trigger:]{The instructor emails the administrator and requests to
\item[User Goals:]{The User is done with his/her session of using the 615 615 limit access to his class.}
website, and wants to make sure others cannot access the data in his/her 616 616
account.} 617 617 \item[Workflow:]
618 618 \begin{enumerate}
\item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login} 619 619 \itemsep1pt\parskip0pt\parsep0pt
\\ 620 620 \item
621 621 {The instructor, ``INSTR1'', shall email the administrators from his UCSD email address
\item[Priority Level:]{``Must''} 622 622 and requests to limit access to his course.}
623 623 \item
\item[Status:]{Implemented} 624 624 { INSTR1 shall provide a list of
625 625 emails of the students that are to be whitelisted.}
\item[Preconditions:]{The user is logged into their account.} 626 626 \item
627 627 {The administrators shall visit a custom admin page, select the course, and
\item[Postconditions:]{The user's data can no longer be accessed.} 628 628 paste the list of emails.}
629 629 \item
\item[Trigger:] 630 630 {The administrators shall submit the page directly to the System.}
631 631 \item
\item[Workflow:] 632 632 {The System shall create a WhitelistedAddress for each provided email,
633 633 attaching it to the section taught by INST1.}
\begin{enumerate} 634 634 \item
\itemsep1pt\parskip0pt\parsep0pt 635 635 {The System shall add any existing users whose email addresses appear
\item 636 636 in the whitelist to the class. }
{UserX shall click the ``Logout'' button.} 637 637 \end{enumerate}
\item 638 638
{The System shall logs out UserX.} 639 639 \item[Expected Result:] {A whitelist is added to a section.}
\item 640 640 \end{description}
{The System shall redirect UserX to the login page.} 641 641 \newpage
\end{enumerate} 642 642
643 643 {}
\item[Expected Result:] {User is logged out and is redirected to the login page.} 644 644
\end{description} 645 645 \subsection{[A8] User Logout}
\newpage 646 646
647 647 \begin{description}
{} 648 648 \item[Description:]{The User shall be able to log out of his/her account on
649 649 the site.}
\subsection{[A9] Contact Admin} 650 650
651 651 \item[Desired Outcome:]{The User's information and data will no longer be
\begin{description} 652 652 accessible after logging out. }
\item[Description]{The User shall be able to contact the admin.} 653 653
654 654 \item[User Goals:]{The User is done with his/her session of using the
\item[Desired Outcome]{The User shall send a message to the admin; the 655 655 website, and wants to make sure others cannot access the data in his/her
admin shall receive the message.} 656 656 account.}
657 657
\item[User Goals:]{The User sends a message to the admin.} 658 658 \item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login}
659 659 \\
\item[Dependency Use Cases]{None} 660 660
\\ 661 661 \item[Priority Level:]{``Must''}
662 662
\item[Priority Level]{``Must''} 663 663 \item[Status:]{Implemented}
664 664
\item[Status]{Not Implemented and Deferred} 665 665 \item[Preconditions:]{The user is logged into their account.}
666 666
\item[Pre-conditions]{None.} 667 667 \item[Postconditions:]{The user's data can no longer be accessed.}
668 668
\item[Post-conditions]{The admin receives the user's message.} 669 669 \item[Trigger:]
670 670
\item[Trigger]{UserX wants to contact the administrators of our application.} 671 671 \item[Workflow:]
672 672
\item[Workflow] 673 673 \begin{enumerate}
\begin{enumerate} 674 674 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 675 675 \item
\item 676 676 {UserX shall click the ``Logout'' button.}
{The System shall display the admin email address on every page in the 677 677 \item
application.} 678 678 {The System shall logs out UserX.}
\end{enumerate} 679 679 \item
680 680 {The System shall redirect UserX to the login page.}
\item[Expected Result:] {The admin's email address can be seen by UserX on every page.} 681 681 \end{enumerate}
\end{description} 682 682
\newpage 683 683 \item[Expected Result:] {User is logged out and is redirected to the login page.}
684 684 \end{description}
{} 685 685 \newpage
686 686
\subsection{[A10] Configure Account Notifications} 687 687 {}
\begin{description} 688 688
\item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.} 689 689 \subsection{[A9] Contact Admin}
690 690
\item[Desired Outcome]{The User shall only receive notifications at the 691 691 \begin{description}
times that were specified.} 692 692 \item[Description]{The User shall be able to contact the admin.}
\\ 693 693
694 694 \item[Desired Outcome]{The User shall send a message to the admin; the
\item[User Goals]{The User shall not be bothered needlessly or at 695 695 admin shall receive the message.}
inconvenient times.} 696 696
697 697 \item[User Goals:]{The User sends a message to the admin.}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 698 698
\\ 699 699 \item[Dependency Use Cases]{None}
700 700 \\
\item[Priority Level]{``Must''} 701 701
702 702 \item[Priority Level]{``Must''}
\item[Status]{Deferred} 703 703
704 704 \item[Status]{Not Implemented and Deferred}
\item[Preconditions:] 705 705
\begin{itemize} 706 706 \item[Pre-conditions]{None.}
\itemsep1pt\parskip0pt\parsep0pt 707 707
\item 708 708 \item[Post-conditions]{The admin receives the user's message.}
{The User is logged in as UserX.} 709 709
\end{itemize} 710 710 \item[Trigger]{UserX wants to contact the administrators of our application.}
711 711
\item[Postconditions:] 712 712 \item[Workflow]
\begin{itemize} 713 713 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 714 714 \itemsep1pt\parskip0pt\parsep0pt
\item 715 715 \item
{User only receive notifications at specified times} 716 716 {The System shall display the admin email address on every page in the
\end{itemize} 717 717 application.}
718 718 \end{enumerate}
\item[Trigger]{UserX wants to change their notification settings} 719 719
720 720 \item[Expected Result:] {The admin's email address can be seen by UserX on every page.}
\item[Workflow] 721 721 \end{description}
\begin{enumerate} 722 722 \newpage
\itemsep1pt\parskip0pt\parsep0pt 723 723
\item 724 724 {}
{UserX shall select ``Settings'' button from the top header.} 725 725
\item 726 726 \subsection{[A10] Configure Account Notifications}
{The System shall display a settings screen.} 727 727 \begin{description}
\item 728 728 \item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.}
{UserX shall change the notification timing to 1 min.} 729 729
\item 730 730 \item[Desired Outcome]{The User shall only receive notifications at the
{UserX shall click ``Save Settings'' button.} 731 731 times that were specified.}
\item 732 732 \\
{The System shall display a message confirming the settings are saved.} 733 733
\item 734 734 \item[User Goals]{The User shall not be bothered needlessly or at
{The System shall save notification settings to the user's attributes.} 735 735 inconvenient times.}
\end{enumerate} 736 736
737 737 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\item[Expected Result:]{UserX shall be notified at least as slow as 1 min.} 738 738 \\
\end{description} 739 739
\newpage 740 740 \item[Priority Level]{``Must''}
741 741
{} 742 742 \item[Status]{Deferred}
743 743
\section{Flashcards} 744 744 \item[Preconditions:]
\subsection{[F1] Push Flashcard} 745 745 \begin{itemize}
746 746 \itemsep1pt\parskip0pt\parsep0pt
\begin{description} 747 747 \item
\item[Description:]{This test case outlines the presentation layer step 748 748 {The User is logged in as UserX.}
process of a User contributing a flashcard to the live feed and to their deck.} 749 749 \end{itemize}
750 750
\item[Desired Outcome:]{The User shall have the flashcard added to their own deck 751 751 \item[Postconditions:]
and the live feed.} 752 752 \begin{itemize}
\\ 753 753 \itemsep1pt\parskip0pt\parsep0pt
754 754 \item
\item[User Goals:]{The User will see their flashcard in their deck and the 755 755 {User only receive notifications at specified times}
flashcard will be shared with others.} 756 756 \end{itemize}
757 757
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 758 758 \item[Trigger]{UserX wants to change their notification settings}
\\ 759 759
760 760 \item[Workflow]
\item[Priority Level:]{``Must''} 761 761 \begin{enumerate}
762 762 \itemsep1pt\parskip0pt\parsep0pt
\item[Status:]{Implemented} 763 763 \item
764 764 {UserX shall select ``Settings'' button from the top header.}
\item[Preconditions:] 765 765 \item
\begin{itemize} 766 766 {The System shall display a settings screen.}
\itemsep1pt\parskip0pt\parsep0pt 767 767 \item
\item 768 768 {UserX shall change the notification timing to 1 min.}
{The User is logged as UserX.} 769 769 \item
\item 770 770 {UserX shall click ``Save Settings'' button.}
{The User is logged in a different browser session as UserY.} 771 771 \item
\item 772 772 {The System shall display a message confirming the settings are saved.}
{UserX and UserY have added the class TEST 101.} 773 773 \item
\item 774 774 {The System shall save notification settings to the user's attributes.}
{UserX and UserY are on the live feed for TEST 101.} 775 775 \end{enumerate}
\end{itemize} 776 776
777 777 \item[Expected Result:]{UserX shall be notified at least as slow as 1 min.}
\item[Postconditions:] 778 778 \end{description}
\begin{itemize} 779 779 \newpage
\itemsep1pt\parskip0pt\parsep0pt 780 780
\item 781 781 {}
{UserX has flashcard added to their deck.} 782 782
\item 783 783 \section{Flashcards}
{The Flashcard is shown in the live feed.} 784 784 \subsection{[F1] Push Flashcard}
\item 785 785
{UserY and other users can add this flashcard to their decks.} 786 786 \begin{description}
\end{itemize} 787 787 \item[Description:]{This test case outlines the presentation layer step
788 788 process of a User contributing a flashcard to the live feed and to their deck.}
\item[Trigger:]{UserX wants to contribute a flashcard to the class TEST 101.} 789 789
790 790 \item[Desired Outcome:]{The User shall have the flashcard added to their own deck
\item[Workflow:] 791 791 and the live feed.}
\begin{enumerate} 792 792 \\
\itemsep1pt\parskip0pt\parsep0pt 793 793
\item {UserX has clicked the circular plus button (``Compose'' button) in 794 794 \item[User Goals:]{The User will see their flashcard in their deck and the
the lower right corner of the live feed.} 795 795 flashcard will be shared with others.}
\item 796 796
{The System shall present a modal with a text box.} 797 797 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\item 798 798 \\
{UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.} 799 799
\item 800 800 \item[Priority Level:]{``Must''}
{UserX shall select the ``Contribute'' button in the modal.} 801 801
\item 802 802 \item[Status:]{Implemented}
{The System shall add the new card containing the text ``The rain in Spain stays mainly in 803 803
the plain'' to the feed of each user enrolled in ``TEST 101''.} 804 804 \item[Preconditions:]
\item 805 805 \begin{itemize}
{UserY shall see the card appear in their feed within a minute (See Notes).} 806 806 \itemsep1pt\parskip0pt\parsep0pt
\item 807 807 \item
{The System shall hide the modal from UserX.} 808 808 {The User is logged as UserX.}
\item 809 809 \item
{The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).} 810 810 {The User is logged in a different browser session as UserY.}
\end{enumerate} 811 811 \item
812 812 {UserX and UserY have added the class TEST 101.}
\item[Expected Result:] {UserX will have the new flashcard in their deck. 813 813 \item
For UserX, the new flashcard will have a checkmark, indicating that the card 814 814 {UserX and UserY are on the live feed for TEST 101.}
is in their deck and a pencil icon on top right to indicate UserX as 815 815 \end{itemize}
the author of the flashcard. The new flashcard will show up on UserY's 816 816
live feed on class TEST 101 without checkmark and pencil icon.} 817 817 \item[Postconditions:]
818 818 \begin{itemize}
\item[Alternative Workflow:] 819 819 \itemsep1pt\parskip0pt\parsep0pt
\begin{enumerate} 820 820 \item
\setcounter{enumi}{3} 821 821 {UserX has flashcard added to their deck.}
\itemsep1pt\parskip0pt\parsep0pt 822 822 \item
\item 823 823 {The Flashcard is shown in the live feed.}
{UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.} 824 824 \item
\item 825 825 {UserY and other users can add this flashcard to their decks.}
{The System shall bold the word Spain.} 826 826 \end{itemize}
\item 827 827
{UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.} 828 828 \item[Trigger:]{UserX wants to contribute a flashcard to the class TEST 101.}
\item 829 829
{The System shall bold the word plain.} 830 830 \item[Workflow:]
\item 831 831 \begin{enumerate}
{UserX shall click the ``Contribute'' button in the modal.} 832 832 \itemsep1pt\parskip0pt\parsep0pt
\item 833 833 \item {UserX has clicked the circular plus button (``Compose'' button) in
{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.} 834 834 the lower right corner of the live feed.}
\item 835 835 \item
{UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.} 836 836 {The System shall present a modal with a text box.}
\end{enumerate} 837 837 \item
838 838 {UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.}
\item[Expected Result:] { 839 839 \item
UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded in their deck. 840 840 {UserX shall select the ``Contribute'' button in the modal.}
For UserX, the new flashcard will have a checkmark, 841 841 \item
indicating that the card is in their deck and a pencil icon on 842 842 {The System shall add the new card containing the text ``The rain in Spain stays mainly in
top right to indicate UserX as the author of the flashcard. 843 843 the plain'' to the feed of each user enrolled in ``TEST 101''.}
The new flashcard will show up on UserY's live feed on class TEST 101 844 844 \item
without checkmark and pencil icon.} 845 845 {UserY shall see the card appear in their feed within a minute (See Notes).}
846 846 \item
\item[Alternative Workflow:] 847 847 {The System shall hide the modal from UserX.}
\begin{enumerate} 848 848 \item
\setcounter{enumi}{2} 849 849 {The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).}
\itemsep1pt\parskip0pt\parsep0pt 850 850 \end{enumerate}
\item 851 851
{UserX shall select the input field of the modal and type five blank spaces.} 852 852 \item[Expected Result:] {UserX will have the new flashcard in their deck.
\item 853 853 For UserX, the new flashcard will have a checkmark, indicating that the card
{UserX shall click the ``Contribute'' button in the dialog.} 854 854 is in their deck and a pencil icon on top right to indicate UserX as
\end{enumerate} 855 855 the author of the flashcard. The new flashcard will show up on UserY's
856 856 live feed on class TEST 101 without checkmark and pencil icon.}
\item[Expected Result:] {Blank flashcard will not be added to UserX's deck or to the live feed of TEST 101.} 857 857
858 858 \item[Alternative Workflow:]
\item[Alternative Workflow:] 859 859 \begin{enumerate}
\begin{enumerate} 860 860 \setcounter{enumi}{3}
\setcounter{enumi}{2} 861 861 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 862 862 \item
\item 863 863 {UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.}
{UserX shall select the input field and type ``Test''.} 864 864 \item
\item 865 865 {The System shall bold the word Spain.}
{UserX shall click the ``Contribute'' button in the dialog.} 866 866 \item
\end{enumerate} 867 867 {UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.}
868 868 \item
\item[Expected Result:] 869 869 {The System shall bold the word plain.}
{ Flashcard with input not meeting the length restriction will not be added to 870 870 \item
UserX's deck or to the live feed of TEST 101.} 871 871 {UserX shall click the ``Contribute'' button in the modal.}
872 872 \item
\end{description} 873 873 {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.}
\newpage 874 874 \item
875 875 {UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.}
{} 876 876 \end{enumerate}
877 877
\subsection{[F2] Edit Flashcard} 878 878 \item[Expected Result:] {
879 879 UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded in their deck.
\begin{description} 880 880 For UserX, the new flashcard will have a checkmark,
\item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.} 881 881 indicating that the card is in their deck and a pencil icon on
882 882 top right to indicate UserX as the author of the flashcard.
\item[Desired Outcome:]{Flashcard is edited and saved appropriately} 883 883 The new flashcard will show up on UserY's live feed on class TEST 101
\\ 884 884 without checkmark and pencil icon.}
885 885
\item[User Goals:]{The User shall be able to change the text and the blanked words on a flashcard.} 886 886 \item[Alternative Workflow:]
887 887 \begin{enumerate}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 888 888 \setcounter{enumi}{2}
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard} 889 889 \itemsep1pt\parskip0pt\parsep0pt
890 890 \item
\item[Priority Level:]{``Should''} 891 891 {UserX shall select the input field of the modal and type five blank spaces.}
892 892 \item
\item[Status:]{Implemented} 893 893 {UserX shall click the ``Contribute'' button in the dialog.}
894 894 \end{enumerate}
\item[Preconditions:] 895 895
\begin{itemize} 896 896 \item[Expected Result:] {Blank flashcard will not be added to UserX's deck or to the live feed of TEST 101.}
\itemsep1pt\parskip0pt\parsep0pt 897 897
\item 898 898 \item[Alternative Workflow:]
{The User is logged in as UserX.} 899 899 \begin{enumerate}
\item 900 900 \setcounter{enumi}{2}
{The User is logged in a different browser session as UserY.} 901 901 \itemsep1pt\parskip0pt\parsep0pt
\item 902 902 \item
{User has added the class TEST 101.} 903 903 {UserX shall select the input field and type ``Test''.}
\item 904 904 \item
{TEST 101 contains the flashcard ``This is made for edit''} 905 905 {UserX shall click the ``Contribute'' button in the dialog.}
, which was made by other user and is not in UserX's deck.} 906 906 \end{enumerate}
\item 907 907
{UserX has the flashcard ``I have made an \textbf{error}'', 908 908 \item[Expected Result:]
which was created by UserX, and was pulled by UserY.} 909 909 { Flashcard with input not meeting the length restriction will not be added to
\item 910 910 UserX's deck or to the live feed of TEST 101.}
{UserX is at the live feed of TEST 101.} 911 911
\end{itemize} 912 912 \end{description}
913 913 \newpage
\item[Postconditions:] 914 914
\begin{itemize} 915 915 {}
\itemsep1pt\parskip0pt\parsep0pt 916 916
\item 917 917 \subsection{[F2] Edit Flashcard}
{The selected flashcards are edited.} 918 918
\end{itemize} 919 919 \begin{description}
920 920 \item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.}
\item[Trigger:]{The User wants to edit existing flashcards.} 921 921
922 922 \item[Desired Outcome:]{Flashcard is edited and saved appropriately}
\item[Workflow:] 923 923 \\
\begin{enumerate} 924 924
\itemsep1pt\parskip0pt\parsep0pt 925 925 \item[User Goals:]{The User shall be able to change the text and the blanked words on a flashcard.}
\item 926 926
{UserX shall hover the cursor over the flashcard 927 927 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
``this is made for edit''.} 928 928 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard}
\item 929 929
{UserX shall click the edit button on bottom left of the 930 930 \item[Priority Level:]{``Should''}
hovered flashcard. The blue edit button looks like a pencil 931 931
slanted writing on a paper.} 932 932 \item[Status:]{Implemented}
\item 933 933
{The System shall present a modal that contains the 934 934 \item[Preconditions:]
``this is made for edit'' of the selected flashcard.} 935 935 \begin{itemize}
\item 936 936 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall select the entire text.} 937 937 \item
\item 938 938 {The User is logged in as UserX.}
{UserX shall change the text to ``Edit has been made''.} 939 939 \item
\item 940 940 {The User is logged in a different browser session as UserY.}
{UserX shall click 'SAVE CHANGES'} 941 941 \item
\item 942 942 {User has added the class TEST 101.}
{The System shall hide the modal from UserX.} 943 943 \item
\end{enumerate} 944 944 {TEST 101 contains the flashcard ``This is made for edit''}
945 945 , which was made by other user and is not in UserX's deck.}
\item[Expected Results:]{UserX shall see a new flashcard with the 946 946 \item
text ``Edit has been made'' added to the top of the feed and the new 947 947 {UserX has the flashcard ``I have made an \textbf{error}'',
948 which was created by UserX, and was pulled by UserY.}
949 \item
950 {UserX is at the live feed of TEST 101.}
flashcard will be added to UserX's deck. 948 951 \end{itemize}
The flashcard with the text ``this is made for edit'' 949 952
will be hidden from UserX.} 950 953 \item[Postconditions:]
951 954 \begin{itemize}
\item[Alternative Workflow:] 952 955 \itemsep1pt\parskip0pt\parsep0pt
953 956 \item
\begin{enumerate} 954 957 {The selected flashcards are edited.}
\itemsep1pt\parskip0pt\parsep0pt 955 958 \end{itemize}
\item 956 959
{UserX shall move the cursor over the flash card 957 960 \item[Trigger:]{The User wants to edit existing flashcards.}
``I have made an \textbf{error}''.} 958 961
\item 959 962 \item[Workflow:]
{UserX shall click the edit button on bottom left of the 960 963 \begin{enumerate}
hovered flashcard.} 961 964 \itemsep1pt\parskip0pt\parsep0pt
\item 962 965 \item
{The System shall present a modal that contains the text 963 966 {UserX shall hover the cursor over the flashcard
967 ``this is made for edit''.}
``I have made an \textbf{error}'' of the selected flashcard.} 964 968 \item
\item 965 969 {UserX shall click the edit button on bottom left of the
970 hovered flashcard. The blue edit button looks like a pencil
971 slanted writing on a paper.}
{UserX shall select the bolded text ``\textbf{error}''} 966 972 \item
\item 967 973 {The System shall present a modal that contains the
974 ``this is made for edit'' of the selected flashcard.}
{UserX shall select } 968 975 \item
\item 969 976 {UserX shall select the entire text.}
{UserX shall click 'Save'} 970 977 \item
\item 971 978 {UserX shall change the text to ``Edit has been made''.}
979 \item
980 {UserX shall click 'SAVE CHANGES'}
{The System shall hide the modal from UserX.} 972 981 \item
\item 973 982 {The System shall hide the modal from UserX.}
{The selected flashcard's blanked words shall be changed to ``fun''.} 974 983 \end{enumerate}
\end{enumerate} 975 984
976 985 \item[Expected Results:]{UserX shall see a new flashcard with the
986 text ``Edit has been made'' added to the top of the feed and the new
987 flashcard will be added to UserX's deck.
988 The flashcard with the text ``this is made for edit''
989 will be hidden from UserX.}
\item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.} 977 990
978 991 \item[Alternative Workflow:]
\item[Alternate Workflow:] 979 992
\begin{enumerate} 980 993 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 981 994 \itemsep1pt\parskip0pt\parsep0pt
\item 982 995 \item
{UserX shall hover the cursor over the flashcard 983 996 {UserX shall move the cursor over the flash card
997 ``I have made an \textbf{error}''.}
``Edit has been made''.} 984 998 \item
\item 985 999 {UserX shall click the edit button on bottom left of the
1000 hovered flashcard.}
{UserX shall click the edit button on bottom left of the 986 1001 \item
hovered flashcard.} 987 1002 {The System shall present a modal that contains the text
1003 ``I have made an \textbf{error}'' of the selected flashcard.}
1004 \item
1005 {UserX shall select the bolded text ``\textbf{error}''}
\item 988 1006 \item
{The System shall present a modal that contains the 989 1007 {UserX shall select }
``Edit has been made'' of the selected flashcard.} 990 1008 \item
\item 991 1009 {UserX shall click 'Save'}
{UserX shall select the entire text.} 992 1010 \item
\item 993 1011 {The System shall hide the modal from UserX.}
{UserX shall change the text to blanks.} 994 1012 \item
\item 995 1013 {The selected flashcard's blanked words shall be changed to ``fun''.}
{UserX shall click 'SAVE CHANGES' (Does not .} 996 1014 \end{enumerate}
\item 997 1015
{The System shall hide the modal from UserX.} 998 1016 \item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.}
\end{enumerate} 999 1017
1018 \item[Alternate Workflow:]
1019 \begin{enumerate}
1020 \itemsep1pt\parskip0pt\parsep0pt
1021 \item
1022 {UserX shall hover the cursor over the flashcard
1023 ``Edit has been made''.}
1024 \item
1025 {UserX shall click the edit button on bottom left of the
1026 hovered flashcard.}
1027 \item
1028 {The System shall present a modal that contains the
1029 ``Edit has been made'' of the selected flashcard.}
1030 \item
1031 {UserX shall select the entire text.}
1032 \item
1033 {UserX shall change the text to blanks.}
1034 \item
1035 {UserX shall click 'SAVE CHANGES' (Does not .}
1036 \item
1037 {The System shall hide the modal from UserX.}
1038 \end{enumerate}
1039
1040 \item[Expected Results:]{UserX shall see a new flashcard with the
1041 text ``Edit has been made'' added to the top of the feed and the new
1042 flashcard will be added to UserX's deck.
1043 The flashcard with the text ``this is made for edit''
1044 will be hidden from UserX.}
1000 1045 \item[Alternative Workflow B:]
\item[Expected Results:]{UserX shall see a new flashcard with the 1001 1046
text ``Edit has been made'' added to the top of the feed and the new 1002 1047 \begin{enumerate}
flashcard will be added to UserX's deck. 1003 1048 \itemsep1pt\parskip0pt\parsep0pt
The flashcard with the text ``this is made for edit'' 1004 1049 \item
will be hidden from UserX.} 1005 1050 {UserX shall move the cursor over the flash card ``this is made for edit3''.}
\item[Alternative Workflow B:] 1006 1051 \item
1007 1052 {UserX shall click the edit button on bottom left of the selected flashcard.}
\begin{enumerate} 1008 1053 \item
\itemsep1pt\parskip0pt\parsep0pt 1009 1054 {The System shall present a modal that contains the text of the selected flashcard.}
\item 1010 1055 \item
{UserX shall move the cursor over the flash card ``this is made for edit3''.} 1011 1056 {UserX shall be able the study date to 6/12.}
\item 1012 1057 \item
{UserX shall click the edit button on bottom left of the selected flashcard.} 1013 1058 {UserX shall click 'Save'}
\item 1014 1059 \item
{The System shall present a modal that contains the text of the selected flashcard.} 1015 1060 {The System shall hide the modal from UserX.}
\item 1016 1061 \end{enumerate}
{UserX shall be able the study date to 6/12.} 1017 1062
\item 1018 1063 \item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.}
{UserX shall click 'Save'} 1019 1064 \end{description}
\item 1020 1065 \newpage
{The System shall hide the modal from UserX.} 1021 1066
\end{enumerate} 1022 1067 {}
1023 1068
\item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.} 1024 1069 \subsection{[F3] Pull Flashcard}
\end{description} 1025 1070 \begin{description}
\newpage 1026 1071 \item[Description:]{This test case outlines the presentation layering step
1027 1072 process of a user pulling a flashcard.}
{} 1028 1073
1029 1074 \item[Desired Outcome:]{The User shall have the flashcard added to their deck.}
\subsection{[F3] Pull Flashcard} 1030 1075 \\
\begin{description} 1031 1076
\item[Description:]{This test case outlines the presentation layering step 1032 1077 \item[User Goals:]{The User will be able to review that flashcard.}
process of a user pulling a flashcard.} 1033 1078
1034 1079 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\item[Desired Outcome:]{The User shall have the flashcard added to their deck.} 1035 1080 Login, [A3] Add a Class, [F1] Push Flashard}
\\ 1036 1081
1037 1082 \item[Priority Level:]{``Must'' }
\item[User Goals:]{The User will be able to review that flashcard.} 1038 1083
1039 1084 \item[Status:]{Implemented}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1040 1085
Login, [A3] Add a Class, [F1] Push Flashard} 1041 1086 \item[Preconditions:]
1042 1087 \begin{itemize}
\item[Priority Level:]{``Must'' } 1043 1088 \itemsep1pt\parskip0pt\parsep0pt
1044 1089 \item
\item[Status:]{Implemented} 1045 1090 {The User is logged in as UserX.}
1046 1091 \item
\item[Preconditions:] 1047 1092 {User has registered for class TEST 101.}
\begin{itemize} 1048 1093 \item
\itemsep1pt\parskip0pt\parsep0pt 1049 1094 {User is at live feed for TEST 101.}
\item 1050 1095 \item
{The User is logged in as UserX.} 1051 1096 {That flashcard with the text ``Pull me'' is in the Live Feed of class TEST 101.}
\item 1052 1097 \end{itemize}
{User has registered for class TEST 101.} 1053 1098
\item 1054 1099 \item[Postconditions:]
{User is at live feed for TEST 101.} 1055 1100 \begin{itemize}
\item 1056 1101 \itemsep1pt\parskip0pt\parsep0pt
{That flashcard with the text ``Pull me'' is in the Live Feed of class TEST 101.} 1057 1102 \item
\end{itemize} 1058 1103 {UserX shall have that flashcard with the text ``Pull me'' added to their deck}
1059 1104 \item
\item[Postconditions:] 1060 1105 {UserX shall be able to review this flashcard later}
\begin{itemize} 1061 1106 \end{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1062 1107
\item 1063 1108 \item[Trigger:]{UserX wants to add a flashcard to their deck to study it.}
{UserX shall have that flashcard with the text ``Pull me'' added to their deck} 1064 1109
\item 1065 1110 \item[Workflow:]
{UserX shall be able to review this flashcard later} 1066 1111
\end{itemize} 1067 1112 \begin{enumerate}
1068 1113 \itemsep1pt\parskip0pt\parsep0pt
\item[Trigger:]{UserX wants to add a flashcard to their deck to study it.} 1069 1114 \item
1070 1115 {UserX shall choose the flashcard with the text ``Pull me'' from the
\item[Workflow:] 1071 1116 class TEST 101 feed and hover their cursor over it.}
1072 1117 \item
\begin{enumerate} 1073 1118 {The System shall present buttons on mouseover.}
\itemsep1pt\parskip0pt\parsep0pt 1074 1119 \item
\item 1075 1120 {UserX shall click on the large plus that appears over the flashcard with the text ``Pull me''.}
{UserX shall choose the flashcard with the text ``Pull me'' from the 1076 1121 \item
class TEST 101 feed and hover their cursor over it.} 1077 1122 {The System shall add the flashcard into UserX's deck.
\item 1078 1123 A checkmark shall appear on top right corner of the flashcard.}
{The System shall present buttons on mouseover.} 1079 1124 \item
\item 1080 1125 {UserX shall click the ``Deck'' icon on the top left to enter their
{UserX shall click on the large plus that appears over the flashcard with the text ``Pull me''.} 1081 1126 deck.}
\item 1082 1127 \item
{The System shall add the flashcard into UserX's deck. 1083 1128 {UserX shall check that the card with the text ``Pull me'' has been added to their class
A checkmark shall appear on top right corner of the flashcard.} 1084 1129 TEST 101 deck.}
\item 1085 1130 \end{enumerate}
{UserX shall click the ``Deck'' icon on the top left to enter their 1086 1131
deck.} 1087 1132 \item[Expected Result:] {The flashcard with the text ``Pull me'' is in the class
\item 1088 1133 TEST 101 deck. If UserX hovers the cursor over the flashcard at the live feed of
{UserX shall check that the card with the text ``Pull me'' has been added to their class 1089 1134 TEST 101, the original placement of the large plus button has been changed to large minus button.}
TEST 101 deck.} 1090 1135 \end{description}
\end{enumerate} 1091 1136 \newpage
1092 1137
\item[Expected Result:] {The flashcard with the text ``Pull me'' is in the class 1093 1138 {}
TEST 101 deck. If UserX hovers the cursor over the flashcard at the live feed of 1094 1139
TEST 101, the original placement of the large plus button has been changed to large minus button.} 1095 1140 \subsection{[F4] Flag Inappropriate Cards}
\end{description} 1096 1141
\newpage 1097 1142 \begin{description}
1098 1143 \item[Description:]{This test case outlines the presentation layering step
{} 1099 1144 process of a user flagging a card they have deemed inappropriate.}
1100 1145
\subsection{[F4] Flag Inappropriate Cards} 1101 1146 \item[Desired Outcome:]{The flashcard's inappropriateness variable is
1102 1147 adjusted.}
\begin{description} 1103 1148 \\
\item[Description:]{This test case outlines the presentation layering step 1104 1149
process of a user flagging a card they have deemed inappropriate.} 1105 1150 \item[User Goals:]{To note if a card should not belong in the class and
1106 1151 should not be displayed in the feed.}
\item[Desired Outcome:]{The flashcard's inappropriateness variable is 1107 1152
adjusted.} 1108 1153 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\\ 1109 1154 Login, [A3] Add a Class, [F1] Push Flashcard}
1110 1155
\item[User Goals:]{To note if a card should not belong in the class and 1111 1156 \item[Priority Level:]{``Should''}
should not be displayed in the feed.} 1112 1157
1113 1158 \item[Status:]{Implemented}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1114 1159
Login, [A3] Add a Class, [F1] Push Flashcard} 1115 1160 \item[Preconditions:]
1116 1161 \begin{itemize}
\item[Priority Level:]{``Should''} 1117 1162 \itemsep1pt\parskip0pt\parsep0pt
1118 1163 \item
\item[Status:]{Implemented} 1119 1164 {UserX has registered for a class TEST 101.}
1120 1165 \item
\item[Preconditions:] 1121 1166 {UserX is in the live feed for class TEST 101.}
\begin{itemize} 1122 1167 \item
\itemsep1pt\parskip0pt\parsep0pt 1123 1168 {Flashcard with text ``TESTY FLASHY'' has been created for TEST 101.}
\item 1124 1169 \item
{UserX has registered for a class TEST 101.} 1125 1170 {That flashcard ``TESTY FLASHY'' is in the Live Feed for TEST 101.}
\item 1126 1171 \end{itemize}
{UserX is in the live feed for class TEST 101.} 1127 1172
\item 1128 1173 \item[Postconditions:]
{Flashcard with text ``TESTY FLASHY'' has been created for TEST 101.} 1129 1174 \begin{itemize}
\item 1130 1175 \itemsep1pt\parskip0pt\parsep0pt
{That flashcard ``TESTY FLASHY'' is in the Live Feed for TEST 101.} 1131 1176 \item
\end{itemize} 1132 1177 {User shall have that flashcard added to their deck}
1133 1178 \item
\item[Postconditions:] 1134 1179 {User can review this flashcard later}
\begin{itemize} 1135 1180 \end{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1136 1181
\item 1137 1182 \item[Trigger:]{UserX wants to mark a card innapropriate.}
{User shall have that flashcard added to their deck} 1138 1183
\item 1139 1184 \item[Workflow:]
{User can review this flashcard later} 1140 1185 \begin{enumerate}
\end{itemize} 1141 1186 \itemsep1pt\parskip0pt\parsep0pt
1142 1187 \item
\item[Trigger:]{UserX wants to mark a card innapropriate.} 1143 1188 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the
1144 1189 feed and hover their cursor over it.}
\item[Workflow:] 1145 1190 \item
\begin{enumerate} 1146 1191 {The System shall present buttons on mouseover.}
\itemsep1pt\parskip0pt\parsep0pt 1147 1192 \item
\item 1148 1193 {UserX shall click on the crossed out eye icon (Hide) that appears on the card.}
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the 1149 1194 \item
feed and hover their cursor over it.} 1150 1195 {The System shall hide the card from UserX and display a toast, ``Card hidden! If the card was spammy or abusive you may also REPORT''.}
\item 1151 1196 \item
{The System shall present buttons on mouseover.} 1152 1197 {UserX shall click the REPORT.}
\item 1153 1198 \end{enumerate}
{UserX shall click on the crossed out eye icon (Hide) that appears on the card.} 1154 1199
\item 1155 1200 \item[Expected Result:] {The System shall display a toast, ``Report successful: thanks for letting us know!''}
{The System shall hide the card from UserX and display a toast, ``Card hidden! If the card was spammy or abusive you may also REPORT''.} 1156 1201 \end{description}
\item 1157 1202 \newpage
{UserX shall click the REPORT.} 1158 1203
\end{enumerate} 1159 1204 {}
1160 1205
\item[Expected Result:] {The System shall display a toast, ``Report successful: thanks for letting us know!''} 1161 1206 \subsection{[F5] Filter Flashcards}
\end{description} 1162 1207
\newpage 1163 1208 \begin{description}
1164 1209 \item[Description:]{This test case outlines the presentation layer process
{} 1165 1210 of a user filtering existing flashcards to view only a specified subset.}
1166 1211
\subsection{[F5] Filter Flashcards} 1167 1212 \item[Desired Outcome:]{The User shall see flashcards based on the filter
1168 1213 options.}
\begin{description} 1169 1214
\item[Description:]{This test case outlines the presentation layer process 1170 1215 \item[User Goals:]{The User can find what they are specifically looking
of a user filtering existing flashcards to view only a specified subset.} 1171 1216 for}
1172 1217
\item[Desired Outcome:]{The User shall see flashcards based on the filter 1173 1218 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
options.} 1174 1219 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull
1175 1220 Flashcard}
\item[User Goals:]{The User can find what they are specifically looking 1176 1221
for} 1177 1222 \item[Priority Level:]{``Should''}
1178 1223
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1179 1224 \item[Status:]{Implemented}
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull 1180 1225
Flashcard} 1181 1226 \item[Preconditions:]
1182 1227 \begin{itemize}
\item[Priority Level:]{``Should''} 1183 1228 \itemsep1pt\parskip0pt\parsep0pt
1184 1229 \item
\item[Status:]{Implemented} 1185 1230 {User is logged in as UserX.}
1186 1231 \item
\item[Preconditions:] 1187 1232 {UserX has registered for the class TEST 101.}
\begin{itemize} 1188 1233 \item
\itemsep1pt\parskip0pt\parsep0pt 1189 1234 {There exist flashcards in TEST 101 with the text ``apple'' and ``banana''
\item 1190 1235 for each week in the quarter.}
{User is logged in as UserX.} 1191 1236 \item
\item 1192 1237 {There exist flashcards in TEST 101 with the text ``orange'' that are hidden
{UserX has registered for the class TEST 101.} 1193 1238 for each week in the quarter.}
\item 1194 1239 \item
{There exist flashcards in TEST 101 with the text ``apple'' and ``banana'' 1195 1240 {UserX is at Card List View for the class.}
for each week in the quarter.} 1196 1241 \end{itemize}
\item 1197 1242
{There exist flashcards in TEST 101 with the text ``orange'' that are hidden 1198 1243 \item[Postconditions:]
for each week in the quarter.} 1199 1244 \begin{itemize}
\item 1200 1245 \itemsep1pt\parskip0pt\parsep0pt
{UserX is at Card List View for the class.} 1201 1246 \item
\end{itemize} 1202 1247 {User only sees flashcards pertaining to selected dates.}
1203 1248 \end{itemize}
\item[Postconditions:] 1204 1249
\begin{itemize} 1205 1250 \item[Trigger:]{User is looking for specific flashcards.}
\itemsep1pt\parskip0pt\parsep0pt 1206 1251
\item 1207 1252 \item[Workflow:]
{User only sees flashcards pertaining to selected dates.} 1208 1253 \begin{enumerate}
\end{itemize} 1209 1254 \itemsep1pt\parskip0pt\parsep0pt
1210 1255 \item
\item[Trigger:]{User is looking for specific flashcards.} 1211 1256 {UserX shall deselect ``Week Nine'' from top.}
1212 1257 \item
\item[Workflow:] 1213 1258 {The System shall hide all cards from Week 9.}
\begin{enumerate} 1214 1259 \item
\itemsep1pt\parskip0pt\parsep0pt 1215 1260 {UserX shall search for ``app'' in the search bar in the top right.}
\item 1216 1261 \item
{UserX shall deselect ``Week Nine'' from top.} 1217 1262 {The System shall display only cards including text ``app''.}
\item 1218 1263 \item
{The System shall hide all cards from Week 9.} 1219 1264 {UserX shall click ``Show Hidden'' button in the top left and clear
\item 1220 1265 the text in the search box.}
{UserX shall search for ``app'' in the search bar in the top right.} 1221 1266 \item
\item 1222 1267 {The System shall display all cards, excluding those from Week 9.}
{The System shall display only cards including text ``app''.} 1223 1268 \end{enumerate}
\item 1224 1269
{UserX shall click ``Show Hidden'' button in the top left and clear 1225 1270 \item[Expected Result:] {UserX shall see 9 cards with text ``apple'', 9 cards with text ``banana'', and 9 cards with text ``orange'', distributed evenly among weeks.}
the text in the search box.} 1226 1271 \end{description}
\item 1227 1272 \newpage
{The System shall display all cards, excluding those from Week 9.} 1228 1273
\end{enumerate} 1229 1274 {}
1230 1275
\item[Expected Result:] {UserX shall see 9 cards with text ``apple'', 9 cards with text ``banana'', and 9 cards with text ``orange'', distributed evenly among weeks.} 1231 1276 \subsection{[F6] Blank Out Words in Flashcard}
\end{description} 1232 1277
\newpage 1233 1278 \begin{description}
1234 1279 \item[Description:]{This test case outlines the presentation layer process
{} 1235 1280 of the User to create keywords in a card they are pushing.}
1236 1281
\subsection{[F6] Blank Out Words in Flashcard} 1237 1282 \item[Desired Outcome:]{The blanked out words (visually bolded) in the
1238 1283 flashcard notify the System that they are keywords.}
\begin{description} 1239 1284
\item[Description:]{This test case outlines the presentation layer process 1240 1285 \item[User Goals:]{The User shall mark some words as keywords so the System
of the User to create keywords in a card they are pushing.} 1241 1286 may later quiz the User by blanking out one keyword at a time and having the
1242 1287 User enter what they think the keyword is.}
\item[Desired Outcome:]{The blanked out words (visually bolded) in the 1243 1288
flashcard notify the System that they are keywords.} 1244 1289 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
1245 1290 Login, [A3] Add a Class, [F1] Push Flashcard}
\item[User Goals:]{The User shall mark some words as keywords so the System 1246 1291
may later quiz the User by blanking out one keyword at a time and having the 1247 1292 \item[Priority Level:]{``Must''}
User enter what they think the keyword is.} 1248 1293
1249 1294 \item[Status:]{Implemented}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1250 1295
Login, [A3] Add a Class, [F1] Push Flashcard} 1251 1296 \item[Preconditions:]
1252 1297 \begin{itemize}
\item[Priority Level:]{``Must''} 1253 1298 \itemsep1pt\parskip0pt\parsep0pt
1254 1299 \item
\item[Status:]{Implemented} 1255 1300 \item
1256 1301 {The User is logged in as UserX.}
\item[Preconditions:] 1257 1302 \item
\begin{itemize} 1258 1303 {The User has added the class TEST 101.}
\itemsep1pt\parskip0pt\parsep0pt 1259 1304 \item
\item 1260 1305 {The User is at the Feed View for the class TEST 101.}
\item 1261 1306 \end{itemize}
{The User is logged in as UserX.} 1262 1307
\item 1263 1308 \item[Postconditions:]
{The User has added the class TEST 101.} 1264 1309 \begin{itemize}
\item 1265 1310 \itemsep1pt\parskip0pt\parsep0pt
{The User is at the Feed View for the class TEST 101.} 1266 1311 \item
\end{itemize} 1267 1312 {The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline.}
1268 1313 \end{itemize}
\item[Postconditions:] 1269 1314
\begin{itemize} 1270 1315 \item[Trigger:] {The User wants their newly pushed card to have the keyword ``Spain''.}
\itemsep1pt\parskip0pt\parsep0pt 1271 1316
\item 1272 1317 \item[Workflow:]
{The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline.} 1273 1318 \begin{enumerate}
\end{itemize} 1274 1319 \itemsep1pt\parskip0pt\parsep0pt
1275 1320 \item
\item[Trigger:] {The User wants their newly pushed card to have the keyword ``Spain''.} 1276 1321 {UserX shall click the Compose button (+ circle on bottom right) of Feed.}
1277 1322 \item
\item[Workflow:] 1278 1323 {The System shall bring up the composition flashcard modal.}
\begin{enumerate} 1279 1324 \item
\itemsep1pt\parskip0pt\parsep0pt 1280 1325 {UserX shall type text ``The rain in Spain stays mainly in the plain''
\item 1281 1326 into the composition modal, replacing ``Write a flashcard''.}
{UserX shall click the Compose button (+ circle on bottom right) of Feed.} 1282 1327 \item
\item 1283 1328 {UserX shall highlight the word ``Spain''.}
{The System shall bring up the composition flashcard modal.} 1284 1329 \item {UserX shall press Blank Selected Text button.}
\item 1285 1330 \item {UserX shall press Contribute button to push the flashcard.}
{UserX shall type text ``The rain in Spain stays mainly in the plain'' 1286 1331 \item
into the composition modal, replacing ``Write a flashcard''.} 1287 1332 {The System will save the blanked out word in the Flashcard Mask of the
\item 1288 1333 newly pushed flashcard.}
{UserX shall highlight the word ``Spain''.} 1289 1334 \item {The Feed shall display the new card with the keyword underlined.}
\item {UserX shall press Blank Selected Text button.} 1290 1335 \end{enumerate}
\item {UserX shall press Contribute button to push the flashcard.} 1291 1336
\item 1292 1337 \item[Expected Result:] {The System shall show ``Spain'' underlined and bolded
{The System will save the blanked out word in the Flashcard Mask of the 1293 1338 in the flashcard. The flashcard is visible in the Feed and Deck of class TEST 101.}
newly pushed flashcard.} 1294 1339 \end{description}
\item {The Feed shall display the new card with the keyword underlined.} 1295 1340 \newpage
\end{enumerate} 1296 1341
1297 1342 {}
\item[Expected Result:] {The System shall show ``Spain'' underlined and bolded 1298 1343
in the flashcard. The flashcard is visible in the Feed and Deck of class TEST 101.} 1299 1344 \subsection{[F7] Fix Flashcard}
\end{description} 1300 1345
\newpage 1301 1346 \begin{description}
1302 1347 \item[Description:]{This Test Case outlines the presentation layer process
{} 1303 1348 for the User to alter (``fix'') a flashcard they made originally and not have
1304 1349 to make a new copy of it. It is only a ``fix'' if no other users have the
\subsection{[F7] Fix Flashcard} 1305 1350 flashcard in their Decks AND the User is the author.}
1306 1351
\begin{description} 1307 1352 \item[Desired Outcome:]{The User shall change one of their flashcard's text
\item[Description:]{This Test Case outlines the presentation layer process 1308 1353 and that alteration will be visible to all users in the Feed.}
for the User to alter (``fix'') a flashcard they made originally and not have 1309 1354
to make a new copy of it. It is only a ``fix'' if no other users have the 1310 1355 \item[User Goals:]{The User shall make their own authored flashcard say
flashcard in their Decks AND the User is the author.} 1311 1356 something different than it did originally.}
1312 1357
\item[Desired Outcome:]{The User shall change one of their flashcard's text 1313 1358 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
and that alteration will be visible to all users in the Feed.} 1314 1359 Login, [A3] Add a Class, [F1] Push Flashcard}
1315 1360
\item[User Goals:]{The User shall make their own authored flashcard say 1316 1361 \item[Priority Level:]{``Must''}
something different than it did originally.} 1317 1362
1318 1363 \item[Status:]{Implemented}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1319 1364
Login, [A3] Add a Class, [F1] Push Flashcard} 1320 1365 \item[Preconditions:]
1321 1366 \begin{itemize}
\item[Priority Level:]{``Must''} 1322 1367 \itemsep1pt\parskip0pt\parsep0pt
1323 1368 \item
\item[Status:]{Implemented} 1324 1369 {The User is logged in as UserX.}
1325 1370 \item {The User is logged in a separate browser as UserY.}
\item[Preconditions:] 1326 1371 \item
\begin{itemize} 1327 1372 {UserX and UserY has enrolled in the class TEST 101.}
\itemsep1pt\parskip0pt\parsep0pt 1328 1373 \item
\item 1329 1374 {UserX is at the Deck View for the class TEST 101.}
{The User is logged in as UserX.} 1330 1375 \item {UserY is at the Feed View for the class TEST 101.}
\item {The User is logged in a separate browser as UserY.} 1331 1376 \item
\item 1332 1377 {The User has contributed and pushed a flashcard to the TEST 101 Feed, which is
{UserX and UserY has enrolled in the class TEST 101.} 1333 1378 also in their Deck with text
\item 1334 1379 ``My card is currently broken''; this flashcard is for fixing.}
{UserX is at the Deck View for the class TEST 101.} 1335 1380 \end{itemize}
\item {UserY is at the Feed View for the class TEST 101.} 1336 1381
\item 1337 1382 \item[Postconditions:]
{The User has contributed and pushed a flashcard to the TEST 101 Feed, which is 1338 1383 \begin{itemize}
also in their Deck with text 1339 1384 \itemsep1pt\parskip0pt\parsep0pt
``My card is currently broken''; this flashcard is for fixing.} 1340 1385 \item
\end{itemize} 1341 1386 {The authoring User shall see their alteration for that flashcard in their
1342 1387 Feed and Deck for TEST 101.}
\item[Postconditions:] 1343 1388 \item {Other users shall see the fixed flashcard in the Feed for TEST 101 if they
\begin{itemize} 1344 1389 refresh the app.}
\itemsep1pt\parskip0pt\parsep0pt 1345 1390 \end{itemize}
\item 1346 1391
{The authoring User shall see their alteration for that flashcard in their 1347 1392 \item[Trigger:] {UserX realizes that a card they created previously does
Feed and Deck for TEST 101.} 1348 1393 not say what they currently desire and wishes to change it.}
\item {Other users shall see the fixed flashcard in the Feed for TEST 101 if they 1349 1394
refresh the app.} 1350 1395 \item[Workflow:]
\end{itemize} 1351 1396 \begin{enumerate}
1352 1397 \itemsep1pt\parskip0pt\parsep0pt
\item[Trigger:] {UserX realizes that a card they created previously does 1353 1398 \item
not say what they currently desire and wishes to change it.} 1354 1399 {UserX shall hover the Flashcard they created with text ``My card is currently
1355 1400 broken''.}
\item[Workflow:] 1356 1401 \item
\begin{enumerate} 1357 1402 {UserX shall select the bottom-left blue Edit Card pencil button on the flashcard.}
\itemsep1pt\parskip0pt\parsep0pt 1358 1403 \item
\item 1359 1404 {The System shall bring up the flashcard Edit modal.}
{UserX shall hover the Flashcard they created with text ``My card is currently 1360 1405 \item
broken''.} 1361 1406 {UserX shall highlight the text ``broken''.}
\item 1362 1407 \item {UserX shall change the highlighted word into ``fixed'' so that the text
{UserX shall select the bottom-left blue Edit Card pencil button on the flashcard.} 1363 1408 reads ``My card is currently fixed''.}
\item 1364 1409 \item
{The System shall bring up the flashcard Edit modal.} 1365 1410 {UserX shall press the Save Changes button.}
\item 1366 1411 \item
{UserX shall highlight the text ``broken''.} 1367 1412 {The System shall update the flashcard's text content.}
\item {UserX shall change the highlighted word into ``fixed'' so that the text 1368 1413 \item
reads ``My card is currently fixed''.} 1369 1414 {The System shall close the edit flashcard modal.}
\item 1370 1415 \item {The Client shall show the flashcard in the UserX's TEST 101 Deck with the
{UserX shall press the Save Changes button.} 1371 1416 fixed text.}
\item 1372 1417
{The System shall update the flashcard's text content.} 1373 1418 \item {UserY refreshes the TEST 101 Feed view and sees the flashcard ``My card is
\item 1374 1419 currently fixed''.}
{The System shall close the edit flashcard modal.} 1375 1420 \end{enumerate}
\item {The Client shall show the flashcard in the UserX's TEST 101 Deck with the 1376 1421
fixed text.} 1377 1422 \item[Expected Results:]{The Client shall show the fixed flashcard
1378 1423 in UserX's TEST 101 class Deck with the new text:``My card is currently fixed''.
\item {UserY refreshes the TEST 101 Feed view and sees the flashcard ``My card is 1379 1424 The Client shall show the fixed flashcard in UserY's TEST 101 Feed view as well,
currently fixed''.} 1380 1425 after page refresh.}
\end{enumerate} 1381 1426 \end{description}
1382 1427 \newpage
\item[Expected Results:]{The Client shall show the fixed flashcard 1383 1428
in UserX's TEST 101 class Deck with the new text:``My card is currently fixed''. 1384 1429 {}
The Client shall show the fixed flashcard in UserY's TEST 101 Feed view as well, 1385 1430
after page refresh.} 1386 1431 \subsection{[F8] Hide cards from feed}
\end{description} 1387 1432
\newpage 1388 1433 \begin{description}
1389 1434 \item[Description:]{This test case outlines the presentation layer process
{} 1390 1435 for the User shall be able to hide cards from their own view, on
1391 1436 the Feed and Deck.}
\subsection{[F8] Hide cards from feed} 1392 1437
1393 1438 \item[Desired Outcome:]{The System marks the flashcard as hidden from the
\begin{description} 1394 1439 User so that the User cannot see the flashcard in the Feed or Deck.}
\item[Description:]{This test case outlines the presentation layer process 1395 1440
for the User shall be able to hide cards from their own view, on 1396 1441 \item[User Goals:]{The flashcard is no longer visible to the User in the Feed or
the Feed and Deck.} 1397 1442 Deck views.}
1398 1443
\item[Desired Outcome:]{The System marks the flashcard as hidden from the 1399 1444 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
User so that the User cannot see the flashcard in the Feed or Deck.} 1400 1445 Login, [A3] Add a Class, [F1] Push Flashcard}
1401 1446
\item[User Goals:]{The flashcard is no longer visible to the User in the Feed or 1402 1447 \item[Priority Level:]{``Should''}
Deck views.} 1403 1448
1404 1449 \item[Status:]{Implemented}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1405 1450
Login, [A3] Add a Class, [F1] Push Flashcard} 1406 1451 \item[Preconditions:]
1407 1452 \begin{itemize}
\item[Priority Level:]{``Should''} 1408 1453 \itemsep1pt\parskip0pt\parsep0pt
1409 1454 \item
\item[Status:]{Implemented} 1410 1455 {The User is logged in as UserX.}
1411 1456 \item
\item[Preconditions:] 1412 1457 {The User has enrolled in the class TEST 101.}
\begin{itemize} 1413 1458 \item
\itemsep1pt\parskip0pt\parsep0pt 1414 1459 {The User is at the Feed View or Deck View (alternate workflow)
\item 1415 1460 for the class TEST 101.}
{The User is logged in as UserX.} 1416 1461 \item
\item 1417 1462 {The User has composed and contributed a flashcard to the Feed with text
{The User has enrolled in the class TEST 101.} 1418 1463 ``The rain in Spain stays mainly in the plain''.}
\item 1419 1464 \end{itemize}
{The User is at the Feed View or Deck View (alternate workflow) 1420 1465
for the class TEST 101.} 1421 1466 \item[Postconditions:]
\item 1422 1467 \begin{itemize}
{The User has composed and contributed a flashcard to the Feed with text 1423 1468 \itemsep1pt\parskip0pt\parsep0pt
``The rain in Spain stays mainly in the plain''.} 1424 1469 \item{Flashcard is not viewable by user in the Feed or Deck views in TEST 101.}
\end{itemize} 1425 1470 \end{itemize}
1426 1471
\item[Postconditions:] 1427 1472 \item[Workflow:]
\begin{itemize} 1428 1473 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1429 1474 \itemsep1pt\parskip0pt\parsep0pt
\item{Flashcard is not viewable by user in the Feed or Deck views in TEST 101.} 1430 1475 \item {UserX has navigated to the Feed View of TEST 101.}
\end{itemize} 1431 1476 \item
1432 1477 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
\item[Workflow:] 1433 1478 mainly in the plain''.}
\begin{enumerate} 1434 1479
\itemsep1pt\parskip0pt\parsep0pt 1435 1480 \item {UserX presses Hide button, which is the red crossed-out eye.}
\item {UserX has navigated to the Feed View of TEST 101.} 1436 1481
\item 1437 1482 \item {The System shall hide the card.}
{UserX hovers the flashcard they added with the text ``The rain in Spain stays 1438 1483 \item {The Client shall remove the card from view for UserX.}
mainly in the plain''.} 1439 1484 \item {A toast is shown on the client that allows the User to report the card.}
1440 1485 \item {The card is not shown on the Feed or Deck.}
\item {UserX presses Hide button, which is the red crossed-out eye.} 1441 1486 \end{enumerate}
1442 1487
\item {The System shall hide the card.} 1443 1488 \item[Expected Result:]{The Client shows the Feed without the flashcard of text
\item {The Client shall remove the card from view for UserX.} 1444 1489 ``The rain in Spain stays mainly in the plain''. A toast that allows UserX to
\item {A toast is shown on the client that allows the User to report the card.} 1445 1490 report the card shows up temporarily.}
\item {The card is not shown on the Feed or Deck.} 1446 1491
\end{enumerate} 1447 1492 \item[Alternate Workflow:]
1448 1493
\item[Expected Result:]{The Client shows the Feed without the flashcard of text 1449 1494 \begin{enumerate}
``The rain in Spain stays mainly in the plain''. A toast that allows UserX to 1450 1495 \itemsep1pt\parskip0pt\parsep0pt
report the card shows up temporarily.} 1451 1496 \item {UserX has navigated to the Deck View of TEST 101.}
1452 1497 \item
\item[Alternate Workflow:] 1453 1498 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
1454 1499 mainly in the plain''.}
\begin{enumerate} 1455 1500
\itemsep1pt\parskip0pt\parsep0pt 1456 1501 \item {UserX presses hide button, which is the red crossed-out eye.}
\item {UserX has navigated to the Deck View of TEST 101.} 1457 1502
\item 1458 1503 \item {The System shall hide the card.}
{UserX hovers the flashcard they added with the text ``The rain in Spain stays 1459 1504 \item {A toast is shown on the client that allows the User to report the card.}
mainly in the plain''.} 1460 1505 \item {The card is not shown on the Feed or Deck.}
1461 1506 \end{enumerate}
\item {UserX presses hide button, which is the red crossed-out eye.} 1462 1507
1463 1508
\item {The System shall hide the card.} 1464 1509 \item[Expected Result:]{The Client shows the Deck without the flashcard of text
\item {A toast is shown on the client that allows the User to report the card.} 1465 1510 ``The rain in Spain stays mainly in the plain''. A toast that allows UserX to
\item {The card is not shown on the Feed or Deck.} 1466 1511 report the card shows up temporarily.}
\end{enumerate} 1467 1512 \end{description}
1468 1513 \newpage
1469 1514
\item[Expected Result:]{The Client shows the Deck without the flashcard of text 1470 1515 {}