Compare View

switch
from
...
to
 
Commits (2)

Diff

Showing 1 changed file Inline Diff

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