Commit ede1fa6077680645e8ee27b4d676648f8a23abb9

Authored by mjeng
1 parent 600135c038
Exists in master

Did all the As, F1, F2

Showing 1 changed file with 93 additions and 61 deletions Inline Diff

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