Commit df85cdb147970e42083e2b63f1aeef86bf062a29

Authored by Rohan Rangray
Exists in master

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

emering

Showing 1 changed file Inline Diff

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