Commit fbe1c300bc2c5a64ec667bf1f78617636134e43b

Authored by Laura Hawkins
Exists in master

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

Showing 2 changed files Inline Diff

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