Compare View

switch
from
...
to
 
Commits (2)

Diff

Showing 1 changed file Inline Diff

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