Commit 8c3e42b893972772b2f801249702a818ffde283e

Authored by Rohan Rangray
Exists in master

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

ermging

Showing 1 changed file Inline Diff

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