Compare View

switch
from
...
to
 
Commits (2)

Diff

Showing 1 changed file Inline Diff

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