Compare View

switch
from
...
to
 
Commits (2)

Diff

Showing 1 changed file Inline Diff

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