Compare View

switch
from
...
to
 
Commits (3)

Diff

Showing 1 changed file Inline Diff

TestCases.tex View file @ 230eaae
\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
\section{Testing Notes} 46 46
\subsection{Fixtures} 47 47 \section{Testing Notes}
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 its own 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 and continue running the test case. 48 48 \subsection{Fixtures}
\subsection{Testing Multiple Users} 49 49 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 its own 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 and continue running the test case.
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. 50 50 \subsection{Testing Multiple Users}
\subsection{Supported Browser} 51 51 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.
Flashy officially supports Chrome version 42 on Windows and Linux. Frontend functionality may be degraded on other browsers. 52 52 \subsection{Supported Browser}
\newpage 53 53 Flashy officially supports Chrome version 42 on Windows and Linux. Frontend functionality may be degraded on other browsers.
54 54 \newpage
{} 55 55
\section{Accounts} 56 56 {}
57 57 \section{Accounts}
\subsection{[A1] User Registration} 58 58
\begin{description}[style=multiline,leftmargin=3cm] 59 59 \subsection{[A1] User Registration}
60 60 \begin{description}[style=multiline,leftmargin=3cm]
\item[Description:]{This Test Case outlines the presentation layer step process of a user registering for an account with our application.} 61 61
62 62 \item[Description:]{This test case outlines the presentation layer step
\item[Desired Outcome:]{An account will be created for the user from the 63 63 process of a user registering for an account with our application.}
specified username, password, email. The user will be able to log into 64 64
the aforementioned account.} 65 65 \item[Desired Outcome:]{An account will be created for the User from the
66 66 specified username, password, email. The User will be able to log into
\item[User Goals:]{The user shall have an account to participate in the 67 67 the aforementioned account.}
website's activities.} 68 68
69 69 \item[User Goals:]{The User shall have an account to participate in the
\item[Dependency Use Cases:]{None} 70 70 website's activities.}
\\ 71 71
\item[Priority Level:]{``Must''} 72 72 \item[Dependency Use Cases:]{None}
73 73 \\
\item[Status:]{Not Implemented} 74 74
75 75 \item[Priority Level:]{``Must''}
\item[Preconditions:] 76 76
\begin{itemize} 77 77 \item[Status:]{Implemented}
\itemsep1pt\parskip0pt\parsep0pt 78 78
\item 79 79 \item[Preconditions:]
{None} 80 80 \begin{itemize}
\end{itemize} 81 81 \itemsep1pt\parskip0pt\parsep0pt
82 82 \item
\item[Postconditions:] 83 83 {None}
\begin{itemize} 84 84 \end{itemize}
\itemsep1pt\parskip0pt\parsep0pt 85 85
\item 86 86 \item[Postconditions:]
{The user has an account registered with the system.} 87 87 \begin{itemize}
\end{itemize} 88 88 \itemsep1pt\parskip0pt\parsep0pt
89 89 \item
\item[Trigger:]{UserX wants to start creating flashcards for a class.} 90 90 {The User has an account registered with the system.}
91 91 \end{itemize}
\item[Workflow:] 92 92
93 93 \item[Trigger:]{UserX wants to start creating flashcards for a class.}
\begin{enumerate} 94 94
\item 95 95 \item[Workflow:]
{UserX shall click the ``Sign Up'' button.} 96 96
\item 97 97 \begin{enumerate}
{The System shall display a registration form.} 98 98 \item
\item 99 99 {UserX shall click the ``Sign Up'' button.}
{UserX shall fill in the form with email testuser@flashy.cards and password ``test''.} 100 100 \item
\item 101 101 {The System shall display a registration form.}
{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 and displays the Add Class page to the User.} 102 102 \item
\item 103 103 {UserX shall fill in the form with email testuser@flashy.cards and password ``test''.}
{UserX receives an email with a link to verify their email. The 104 104 \item
User clicks the link.} 105 105 {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 and displays the Add Class page to the User.}
\item 106 106 \item
{The Server marks the user's email as valid and saves the User object 107 107 {UserX receives an email with a link to verify their email. The
again.} 108 108 User clicks the link.}
\end{enumerate} 109 109 \item
110 110 {The Server marks the user's email as valid and saves the User object
\item [Expected Results:]{UserX's account is now active (registered with the system)} 111 111 again.}
112 112 \end{enumerate}
\end{description} 113 113
\newpage 114 114 \item [Expected Results:]{UserX's account is now active (registered with the system).}
115 115
{} 116 116 \end{description}
117 117 \newpage
\subsection{[A2] User Login} 118 118
119 119 {}
\begin{description} 120 120
\item[Description:]{This Test Case outlines the presentation layering step process of a user logging into the application} 121 121 \subsection{[A2] User Login}
122 122
\item[Desired Outcome:]{The user shall be able to provide their email address and 123 123 \begin{description}
password to access their courses and flash cards. The user shall gain 124 124 \item[Description:]{This test case outlines the presentation layering step
access to the list of the courses they have added, and be able to review 125 125 process of a user logging into the application.}
the flash cards they have added to their decks.} 126 126
127 127 \item[Desired Outcome:]{The User shall be able to provide their email address and
\item[User Goals:]{The user wants to resume use of the site on another 128 128 password to access their courses and flash cards. The User shall gain
device, or use the site after logging out.} 129 129 access to the list of the courses they have added, and be able to review
130 130 the flash cards they have added to their decks.}
\item[Dependency Use Cases:]{[A1] User Registration} 131 131
\\ 132 132 \item[User Goals:]{The User wants to resume use of the site on another
\item[Priority Level:]{``Must''} 133 133 device, or use the site after logging out.}
134 134
\item[Status:]{Not Implemented} 135 135 \item[Dependency Use Cases:]{[A1] User Registration}
136 136 \\
\item[Preconditions:] 137 137
138 138 \item[Priority Level:]{``Must''}
\begin{itemize} 139 139
\item 140 140 \item[Status:]{Implemented}
{The User has created an account before with email ``testuser@flashy.cards'' with password ``test''.} 141 141
\end{itemize} 142 142 \item[Preconditions:]
143 143 \begin{itemize}
\item[Postconditions:] 144 144 \item
145 145 {The User has created an account before with email ``testuser@flashy.cards'' with password ``test''.}
\begin{itemize} 146 146 \end{itemize}
\itemsep1pt\parskip0pt\parsep0pt 147 147
\item 148 148 \item[Postconditions:]
{The user can navigate the site and see their data.} 149 149 \begin{itemize}
\end{itemize} 150 150 \itemsep1pt\parskip0pt\parsep0pt
151 151 \item
\item[Trigger:]{ UserX wants to view, add, or create cards for a class or classes.} 152 152 {The user can navigate the site and see their data.}
153 153 \end{itemize}
\item[Workflow:] 154 154
155 155 \item[Trigger:]{UserX wants to view, add, or create cards for a class or classes.}
\begin{enumerate} 156 156
\itemsep1pt\parskip0pt\parsep0pt 157 157 \item[Workflow:]
\item 158 158 \begin{enumerate}
{UserX shall enter his or her email ``testuser@flashy.cards'' and password ``test''. } 159 159 \itemsep1pt\parskip0pt\parsep0pt
\item 160 160 \item
{The System shall authenticate UserX's email and password and checks if UserX is active.} 161 161 {UserX shall enter his or her email ``testuser@flashy.cards'' and password ``test''.}
\item 162 162 \item
{The System shall receive the credentials and display the ``Add Class'' page to the User. } 163 163 {The System shall authenticate UserX's email and password and checks if UserX is active.}
\end{enumerate} 164 164 \item
\item [Expected Results:] 165 165 {The System shall receive the credentials and display the ``Add Class'' page to the User.}
{The User is brought to the page ``Add Class''.} \\ 166 166 \end{enumerate}
167 167 \item [Expected Results:]
\item [Alternate Workflow:] 168 168 {The User is brought to the page ``Add Class''.} \\
\begin{enumerate} 169 169
\item 170 170 \item [Alternate Workflow:]
{UserX accidentally puts in the wrong credentials and clicks the ``Login'' button.} 171 171 \begin{enumerate}
\item 172 172 \item
{The System shows UserX the site login page with a text message reading ``Invalid username or password!!'' displayed in the log in text box.} 173 173 {UserX accidentally puts in the wrong credentials and clicks the ``Login'' button.}
\end {enumerate} 174 174 \item
175 175 {The System shows UserX the site login page with a text message reading ``Invalid username or password!!'' displayed in the log in text box.}
\item [Expected Results:] 176 176 \end {enumerate}
{The User is not able to login.} \\ 177 177
178 178 \item [Expected Results:]
\end{description} 179 179 {The User is not able to login.} \\
\newpage 180 180
181 181 \end{description}
{} 182 182 \newpage
183 183
\subsection{[A3] Add a Class} 184 184 {}
\begin{description} 185 185
\item[Description:]{This Test Case outlines the presentation layer step process of a User adding a class.} 186 186 \subsection{[A3] Add a Class}
187 187 \begin{description}
\item[Desired Outcome:]{The class shall be linked with the student's account 188 188 \item[Description:]{This test case outlines the presentation layer step
and the student shall have the ability to read and publish flashcards 189 189 process of a user adding a class.}
for this class.} 190 190
191 191 \item[Desired Outcome:]{The class shall be linked with the student's account
\item[User Goals:]{The user wants to publish flashcards for this class and 192 192 and the student shall have the ability to read and publish flashcards
read the flashcards for this class that are published by other users.} 193 193 for this class.}
194 194
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 195 195 \item[User Goals:]{The User wants to publish flashcards for this class and
\\ 196 196 read the flashcards for this class that are published by other users.}
197 197
\item[Priority Level:]{``Must''} 198 198 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
199 199 \\
\item[Status:]{Not implemented} 200 200
201 201 \item[Priority Level:]{``Must''}
\item[Preconditions:] 202 202
\begin{itemize} 203 203 \item[Status:]{Implemented}
\itemsep1pt\parskip0pt\parsep0pt 204 204
\item 205 205 \item[Preconditions:]
{The user has created an account.} 206 206 \begin{itemize}
\item 207 207 \itemsep1pt\parskip0pt\parsep0pt
{The user is logged in to their account and is at root view.} 208 208 \item
\end{itemize} 209 209 {The User has created an account.}
210 210 \item
\item[Postconditions:] 211 211 {The User is logged in to their account and is at root view.}
\begin{itemize} 212 212 \end{itemize}
\itemsep1pt\parskip0pt\parsep0pt 213 213
\item 214 214 \item[Postconditions:]
{The user can read the flashcards being published for the class and 215 215 \begin{itemize}
add them to his/her deck.} 216 216 \itemsep1pt\parskip0pt\parsep0pt
\item 217 217 \item
{The user can publish flashcards to be viewed and added by other users 218 218 {The User can read the flashcards being published for the class and
in the same class.} 219 219 add them to their deck.}
\end{itemize} 220 220 \item
221 221 {The User can publish flashcards to be viewed and added by other users
\item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.} 222 222 in the same class.}
223 223 \end{itemize}
\item[Workflow:] 224 224
225 225 \item[Trigger:]{UserX wants to view the Live Feed and have a flashcard deck for a class.}
\begin{enumerate} 226 226
\itemsep1pt\parskip0pt\parsep0pt 227 227 \item[Workflow:]
\item 228 228 \begin{enumerate}
{UserX shall click ``Add Class'' on the menu.} 229 229 \itemsep1pt\parskip0pt\parsep0pt
\item 230 230 \item
{The System shall show the user ``Add Class'' page.} 231 231 {UserX shall click ``Add Class'' on the menu.}
\item 232 232 \item
{UserX shall begin to type ``CSE 110''.} 233 233 {The System shall show the user ``Add Class'' page.}
\item 234 234 \item
{The System shall show suggestions as a user types.} 235 235 {UserX shall begin to type ``CSE 110''.}
\item 236 236 \item
{UserX shall click on ``CSE 110: Software Engineering (Gillespie, Gary N)''.} 237 237 {The System shall show suggestions as a user types.}
\item 238 238 \item
{UserX shall click on the ``Add'' button.} 239 239 {UserX shall click on ``CSE 110: Software Engineering (Gillespie, Gary N)''.}
\item 240 240 \item
{The System shall check if there is a whitelist for the CSE 110 section that 241 241 {UserX shall click on the ``Add'' button.}
UserX is trying to add.} 242 242 \item
\item 243 243 {The System shall check if there is a whitelist for the CSE 110 section that
{The System shall ensure that UserX is on the whitelist for the specified CSE 110 section.} 244 244 UserX is trying to add.}
\item 245 245 \item
{The System shall add UserX to the specified CSE 110 section.} 246 246 {The System shall ensure that UserX is on the whitelist for the specified CSE 110 section.}
\end{enumerate} 247 247 \item
248 248 {The System shall add UserX to the specified CSE 110 section.}
\item[Expected Result:] {UserX has added the section and sees the Live Feed for the specified CSE 110 section.} 249 249 \end{enumerate}
250 250
\item[Alternate Workflow - Planned:] 251 251 \item[Expected Result:] {UserX has added the section and sees the Live Feed for the specified CSE 110 section.}
\begin{enumerate} 252 252
\setcounter{enumi}{6} 253 253 \item[Alternate Workflow - Planned:]
\itemsep1pt\parskip0pt\parsep0pt 254 254 \begin{enumerate}
\item 255 255 \setcounter{enumi}{6}
{The System shall see that UserX is not on the whitelist. } 256 256 \itemsep1pt\parskip0pt\parsep0pt
\item 257 257 \item
{The System shall deny UserX access to the specified CSE 110 section.} 258 258 {The System shall see that UserX is not on the whitelist. }
\item 259 259 \item
{The System shall display failure message to UserX.} \\ 260 260 {The System shall deny UserX access to the specified CSE 110 section.}
\end{enumerate} 261 261 \item
262 262 {The System shall display failure message to UserX.} \\
\item[Expected Result:] {UserX cannot add the specified CSE 110 section and cannot view contents related to this class.} 263 263 \end{enumerate}
264 264
\item[Alternate Workflow - Planned:] 265 265 \item[Expected Result:] {UserX cannot add the specified CSE 110 section and cannot view contents related to this class.}
\begin{enumerate} 266 266
\setcounter{enumi}{6} 267 267 \item[Alternate Workflow - Planned:]
\itemsep1pt\parskip0pt\parsep0pt 268 268 \begin{enumerate}
\item 269 269 \setcounter{enumi}{6}
{The System shall see there is not whitelist for the specified CSE 110 section.} 270 270 \itemsep1pt\parskip0pt\parsep0pt
\item 271 271 \item
{The System shall link UserX to the specified CSE 110 section.} 272 272 {The System shall see there is not whitelist for the specified CSE 110 section.}
\item 273 273 \item
{UserX shall see the Live Feed for the specified CSE 110 section.} 274 274 {The System shall link UserX to the specified CSE 110 section.}
\end{enumerate} 275 275 \item
276 276 {UserX shall see the Live Feed for the specified CSE 110 section.}
\item[Expected Workflow:] {User has added the section and sees the Live Feed for the specified CSE 110 section.} 277 277 \end{enumerate}
\end{description} 278 278
\newpage 279 279 \item[Expected Workflow:] {User has added the section and sees the Live Feed for the specified CSE 110 section.}
280 280 \end{description}
{} 281 281 \newpage
282 282
\subsection{[A4] Drop a Class} 283 283 {}
284 284
\begin{description} 285 285 \subsection{[A4] Drop a Class}
\item[Description:]{This Test Case outlines the presentation layer step process of a user dropping a class.} 286 286
287 287 \begin{description}
\item[Desired Outcome:]{The user has dropped the class and no longer needs 288 288 \item[Description:]{This test case outlines the presentation layer step process of a user dropping a class.}
access to the flashcards for the dropped class. They can no longer 289 289
see the flashcards associated to the class that they dropped.} 290 290 \item[Desired Outcome:]{The User has dropped the class and no longer needs
291 291 access to the flashcards for the dropped class. They can no longer
\item[User Goals:]{The user shall not have access to a class and the 292 292 see the flashcards associated to the class that they dropped.}
flashcards associated with that class. They will no longer see the class 293 293
listed in their list of ``Enrolled Classes''} 294 294 \item[User Goals:]{The User shall not have access to a class and the
295 295 flashcards associated with that class. They will no longer see the class
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 296 296 listed in their list of ``Enrolled Classes''}
\\ 297 297
298 298 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\item[Priority Level:]{``Should''} 299 299 \\
300 300
\item[Status:]{Not Implemented} 301 301 \item[Priority Level:]{``Should''}
302 302
\item[Preconditions:] 303 303 \item[Status:]{Implemented}
\begin{itemize} 304 304
\itemsep1pt\parskip0pt\parsep0pt 305 305 \item[Preconditions:]
\item 306 306 \begin{itemize}
{User has a valid account.} 307 307 \itemsep1pt\parskip0pt\parsep0pt
\item 308 308 \item
{User is logged in.} 309 309 {User has a valid account.}
\item 310 310 \item
{User has enrolled in classes.} 311 311 {User is logged in.}
\end{itemize} 312 312 \item
313 313 {User has enrolled in classes.}
\item[Postconditions:] 314 314 \end{itemize}
\begin{itemize} 315 315
\itemsep1pt\parskip0pt\parsep0pt 316 316 \item[Postconditions:]
\item 317 317 \begin{itemize}
{User shall no longer have access to dropped class, or associated 318 318 \itemsep1pt\parskip0pt\parsep0pt
flashcards} 319 319 \item
\end{itemize} 320 320 {User shall no longer have access to dropped class, or associated flashcards}
321 321 \end{itemize}
\item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove all of their flashcards.} 322 322
323 323 \item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove
\item[Workflow:] 324 324 all of their flashcards.}
\begin{enumerate} 325 325
\itemsep1pt\parskip0pt\parsep0pt 326 326 \item[Workflow:]
\item 327 327 \begin{enumerate}
{UserX shall click ``Drop'' (or equivalent) button for CSE 110: Software Engineering (Gillespie, Gary N).} 328 328 \itemsep1pt\parskip0pt\parsep0pt
\item 329 329 \item
{The System shall display a dialogue box which will say ``Are you 330 330 {UserX shall click ``Drop'' (or equivalent) button for CSE 110: Software Engineering (Gillespie, Gary N).}
sure you want to drop this class?''.} 331 331 \item
\item 332 332 {The System shall display a dialogue box which will say ``Are you
{UserX shall click ``Yes'' to confirm that they want to drop the specified CSE 110 section.} 333 333 sure you want to drop this class?''.}
\item 334 334 \item
{The System shall remove UserX from the specified CSE 110 section's roster.} 335 335 {UserX shall click ``Yes'' to confirm that they want to drop the specified CSE 110 section.}
\item 336 336 \item
{The System shall remove the specified CSE 110 section from the User's list of classes.} 337 337 {The System shall remove UserX from the specified CSE 110 section's roster.}
\item {UserX shall have one less class to select on the menu.} 338 338 \item
\end{enumerate} 339 339 {The System shall remove the specified CSE 110 section from the User's list of classes.}
340 340 \item {UserX shall have one less class to select on the menu.}
\item[Expected Result:] {UserX no longer has access to any content related to to the class that has been dropped.} 341 341 \end{enumerate}
\end{description} 342 342
\newpage 343 343 \item[Expected Result:] {UserX no longer has access to any content related to to the class that has been dropped.}
344 344 \end{description}
{} 345 345 \newpage
346 346
\subsection{[A5] Password Change} 347 347 {}
348 348
\begin{description} 349 349 \subsection{[A5] Password Change}
\item[Description:]{The user shall be able to change the password for their 350 350
account in the account settings. This requires that they are logged in.} 351 351 \begin{description}
352 352 \item[Description:]{The User shall be able to change the password for their
\item[Desired Outcome:]{The user's password shall be changed and the user 353 353 account in the account settings. This requires that they are logged in.}
shall be able to log in with the new password in the future} 354 354
355 355 \item[Desired Outcome:]{The User's password shall be changed and the user
\item[User Goals:]{The user wants to use a different password in the future} 356 356 shall be able to log in with the new password in the future.}
357 357
\item[Primary Actor:]{User (student)} 358 358 \item[User Goals:]{The User wants to use a different password in the future.}
359 359
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 360 360 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
\\ 361 361 \\
362 362
\item[Details:]{The user provides their current password and a new password 363 363 \item[Details:]{The user provides their current password and a new password
in a form. If the current password is correct, the system updates their 364 364 in a form. If the current password is correct, the system updates their
password to the requested new password.} 365 365 password to the requested new password.}
366 366
\item[Priority Level:]{``Must''} 367 367 \item[Priority Level:]{``Must''}
368 368
\item[Status:]{Not Implemented} 369 369 \item[Status:]{Implemented}
370 370
\item[Preconditions:] 371 371 \item[Preconditions:]
\begin{itemize} 372 372 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 373 373 \itemsep1pt\parskip0pt\parsep0pt
\item 374 374 \item
{The user has created an account} 375 375 {The user has created an account}
\item 376 376 \item
{The user has logged in } 377 377 {The user has logged in }
\item 378 378 \item
{The user knows their current password} 379 379 {The user knows their current password}
\end{itemize} 380 380 \end{itemize}
381 381
\item[Postconditions:] 382 382 \item[Postconditions:]
\begin{itemize} 383 383 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 384 384 \itemsep1pt\parskip0pt\parsep0pt
\item 385 385 \item
{The user's password is changed} 386 386 {The user's password is changed}
\item 387 387 \item
{The user can log in with the new password} 388 388 {The user can log in with the new password}
\end{itemize} 389 389 \end{itemize}
390 390
\item[Trigger:]{UserX wants to change their password.} 391 391 \item[Trigger:]{UserX wants to change their password.}
392 392
\item[Error Handling:] 393 393 \item[Error Handling:]
\begin{description} 394 394 \begin{description}
\item[\small Missing Fields] \begin{itemize} 395 395 \item[\small Missing Fields] \begin{itemize}
\item The client shall enforce required fields 396 396 \item The client shall enforce required fields
\item The server will return an HTTP Bad Request error to the client. 397 397 \item The server will return an HTTP Bad Request error to the client.
\end{itemize} 398 398 \end{itemize}
\item[\small Incorrect Old Password] \begin{itemize} 399 399 \item[\small Incorrect Old Password] \begin{itemize}
\item The server will return an HTTP Forbidden error to the client. 400 400 \item The server will return an HTTP Forbidden error to the client.
\end{itemize} 401 401 \end{itemize}
\item[\small Blank New Password] \begin{itemize} 402 402 \item[\small Blank New Password] \begin{itemize}
\item The server will return an HTTP Bad Request error to the client. 403 403 \item The server will return an HTTP Bad Request error to the client.
\end{itemize} 404 404 \end{itemize}
\end{description} 405 405 \end{description}
406 406
\item[Workflow:] 407 407 \item[Workflow:]
\begin{enumerate} 408 408 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 409 409 \itemsep1pt\parskip0pt\parsep0pt
\item 410 410 \item
{UserX shall press the ``Change Password'' button.} 411 411 {UserX shall press the ``Change Password'' button.}
\item 412 412 \item
{The System shall render a form that requires the user to enter their old password and new password.} 413 413 {The System shall render a form that requires the user to enter their old password and new password.}
\item 414 414 \item
{UserX shall enter their current password ``oldPassword'' and the desired new password ``newPassword''.} 415 415 {UserX shall enter their current password ``oldPassword'' and the desired new password ``newPassword''.}
\item 416 416 \item
{The System shall check UserX's current password.} 417 417 {The System shall check UserX's current password.}
\item 418 418 \item
{The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.} 419 419 {The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.}
\item 420 420 \item
{The System shall display a modal displaying ``Success! You've changed your password!''} 421 421 {The System shall display a modal displaying ``Success! You've changed your password!''}
\end{enumerate} 422 422 \end{enumerate}
423 423
\item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.} 424 424 \item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.}
\end{description} 425 425 \end{description}
\newpage 426 426 \newpage
427 427
{} 428 428 {}
429 429
\subsection{[A6] Password Reset} 430 430 \subsection{[A6] Password Reset}
431 431
\begin{description} 432 432 \begin{description}
\item[Description:]{The user shall be able to reset their password without 433 433 \item[Description:]{The User shall be able to reset their password without
being logged in } 434 434 being logged in }
435 435
\item[Desired Outcome:]{The user's password shall be changed to one that 436 436 \item[Desired Outcome:]{The User's password shall be changed to one that
they remember} 437 437 they remember}
\\ 438 438 \\
439 439
\item[User Goals:]{The user does not know their current password but wants 440 440 \item[User Goals:]{The User does not know their current password but wants
to log into the site} 441 441 to log into the site}
442 442
\item[Dependency Use Cases:]{[A1] User Registration} 443 443 \item[Dependency Use Cases:]{[A1] User Registration}
\\ 444 444 \\
445 445
\item[Details:]{The user provides their email in a password reset form. If 446 446 \item[Details:]{The User provides their email in a password reset form. If
the address is valid, the site sends a password reset link with a random 447 447 the address is valid, the site sends a password reset link with a random
token to that address. If the address is invalid, the site does not send 448 448 token to that address. If the address is invalid, the site does not send
a link. For security reasons, we do not reveal to the user whether the 449 449 a link. For security reasons, we do not reveal to the user whether the
email address was valid, and we expire the link after 24 hours. When a 450 450 email address was valid, and we expire the link after 24 hours. When a
user visits the link emailed to them, they are able to specify a new 451 451 user visits the link emailed to them, they are able to specify a new
password in a form. When they submit the form, their password is updated 452 452 password in a form. When they submit the form, their password is updated
if the token is correct. } 453 453 if the token is correct. }
454 454
\item[Priority Level:]{``Must''} 455 455 \item[Priority Level:]{``Must''}
456 456
\item[Preconditions:] 457 457 \item[Preconditions:]
\begin{itemize} 458 458 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 459 459 \itemsep1pt\parskip0pt\parsep0pt
\item 460 460 \item
{UserX has created an account with testuserx@flashy.cards.} 461 461 {UserX has created an account with testuserx@flashy.cards.}
\end{itemize} 462 462 \end{itemize}
463 463
\item[Postconditions:] 464 464 \item[Postconditions:]
\begin{itemize} 465 465 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 466 466 \itemsep1pt\parskip0pt\parsep0pt
\item 467 467 \item
{UserX's password is changed.} 468 468 {UserX's password is changed.}
\item 469 469 \item
{UserX can log in with the new password.} 470 470 {UserX can log in with the new password.}
\end{itemize} 471 471 \end{itemize}
472 472
\item[Trigger]{UserX forgot their password and wants to access the site.} 473 473 \item[Trigger]{UserX forgot their password and wants to access the site.}
474 474
\item[Workflow:] 475 475 \item[Workflow:]
476 476
\begin{enumerate} 477 477 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 478 478 \itemsep1pt\parskip0pt\parsep0pt
\item 479 479 \item
{UserX shall click the ``Forgot Password'' hyperlink.} 480 480 {UserX shall click the ``Forgot Password'' hyperlink.}
\item 481 481 \item
{The System shall prompt the user for their current email} 482 482 {The System shall prompt the user for their current email.}
\item 483 483 \item
{UserX shall submit their email ``testuserx@flashy.cards''.} 484 484 {UserX shall submit their email ``testuserx@flashy.cards''.}
\item 485 485 \item
{The System shall check if an account exists with the email entered by 486 486 {The System shall check if an account exists with the email entered by UserX.}
UserX.} 487 487 \item
\item 488 488 {The System shall create a new password reset token for UserX.}
{The System shall create a new password reset token for the user} 489 489 \item
\item 490 490 {The System shall send an email to UserX with a link containing the token and the
{The System shall send an email to the user with a link containing the token and the 491 491 user's ID.}
user's ID} 492 492 \item
\item 493 493 {UserX shall click the link in the email to visit /app/password\_reset.}
{UserX shall click the link in the email to visit 494 494 \item
/app/password\_reset} 495 495 {The System shall render a form that will prompt the user for a new password.}
\item 496 496 \item
{The System shall render a form that will prompt the user for a new 497 497 {UserX shall provide a new password in the form.}
password} 498 498 \item
\item 499 499 {The System shall change the password associated with the user's email.}
{UserX shall provide a new password in the form} 500 500 \end{enumerate}
\item 501 501
{The System shall change the password associated with the user's email. } 502 502 \item[Expected Result:] {UserX's password will change to ``newPasword''.}
\end{enumerate} 503 503
504 504 \item[Alternate Workflow:]
\item[Expected Result:] {UserX's password will change to ``newPasword''.} 505 505 \begin{enumerate}
506 506 \setcounter{enumi}{4}
\item[Alternate Workflow:] 507 507 \itemsep1pt\parskip0pt\parsep0pt
\begin{enumerate} 508 508 \item
\setcounter{enumi}{4} 509 509 {If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.}
\itemsep1pt\parskip0pt\parsep0pt 510 510 \end{enumerate}
\item 511 511
{If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.} 512 512 \item[Expected Result:] {UserX's password will not be reset.}
\end{enumerate} 513 513 \end{description}
514 514 \newpage
\item[Expected Result:] {UserX's password will not be reset.} 515 515
\end{description} 516 516 {}
\newpage 517 517
518 518 \subsection{[A7] Student Prevented From Accessing A Restricted Course}
{} 519 519
520 520 \begin{description}
\subsection{[A7] Student Prevented From Accessing A Restricted Course} 521 521 \item[Description:]{The User shall not be able to access a restricted course.}
522 522
\begin{description} 523 523 \item[Desired Outcome:]{The class will have limited access and only those
\item[Description:]{The user shall not be able to access a restricted course.} 524 524 users who are whitelisted may enroll in the class.}
525 525
\item[Desired Outcome:]{The class will have limited access and only those 526 526 \item[User Goals:]{The instructor wants to limit access to his class so only
users who are whitelisted may enroll in the class.} 527 527 the students who are actually in his class participate, and nobody
528 528 else.}
\item[User Goals:]{The instructor wants to limit access to his class so only 529 529
the students who are actually in his class participate, and nobody 530 530 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
else.} 531 531 \\
532 532
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 533 533 \item[Priority Level:]{``Should''}
\\ 534 534
535 535 \item[Status:]{Implemented}
\item[Priority Level:]{``Should''} 536 536
537 537 \item[Preconditions:]
\item[Status:]{Implemented} 538 538 \begin{itemize}
539 539 \itemsep1pt\parskip0pt\parsep0pt
\item[Preconditions:] 540 540 \item
\begin{itemize} 541 541 {UserX has valid instructor's account}
\itemsep1pt\parskip0pt\parsep0pt 542 542 \end{itemize}
\item 543 543
{UserX has valid instructor's account} 544 544 \item[Postconditions:]
\end{itemize} 545 545 \begin{itemize}
546 546 \itemsep1pt\parskip0pt\parsep0pt
\item[Postconditions:] 547 547 \item
\begin{itemize} 548 548 {Only those users who were whitelisted may add the class.}
\itemsep1pt\parskip0pt\parsep0pt 549 549 \end{itemize}
\item 550 550
{Only those users who were whitelisted may add the class.} 551 551 \item[Trigger:]{The instructor emails the administrator and requests to
\end{itemize} 552 552 limit access to his class.}
553 553
\item[Trigger:]{The instructor emails the administrator and requests to 554 554 \item[Workflow:]
limit access to his class.} 555 555 \begin{enumerate}
556 556 \itemsep1pt\parskip0pt\parsep0pt
\item[Workflow:] 557 557 \item
\begin{enumerate} 558 558 {The instructor, ``INSTR1'', shall email the administrators from his UCSD email address
\itemsep1pt\parskip0pt\parsep0pt 559 559 and requests to limit access to his course.}
\item 560 560 \item
{The instructor, ``INSTR1'', shall email the administrators from his UCSD email address 561 561 { INSTR1 shall provide a list of
and requests to limit access to his course.} 562 562 emails of the students that are to be whitelisted.}
\item 563 563 \item
{ INSTR1 shall provide a list of 564 564 {The administrators shall visit a custom admin page, select the course, and
emails of the students that are to be whitelisted.} 565 565 paste the list of emails.}
\item 566 566 \item
{The administrators shall visit a custom admin page, select the course, and 567 567 {The administrators shall submit the page directly to the System.}
paste the list of emails.} 568 568 \item
\item 569 569 {The System shall create a WhitelistedAddress for each provided email,
{The administrators shall submit the page directly to the System.} 570 570 attaching it to the section taught by INST1.}
\item 571 571 \item
{The System shall create a WhitelistedAddress for each provided email, 572 572 {The System shall add any existing users whose email addresses appear
attaching it to the section taught by INST1.} 573 573 in the whitelist to the class. }
\item 574 574 \end{enumerate}
{The System shall add any existing users whose email addresses appear 575 575
in the whitelist to the class. } 576 576 \item[Expected Result:] {A whitelist is added to a section.}
\end{enumerate} 577 577 \end{description}
578 578 \newpage
\item[Expected Result:] {A whitelist is added to a section.} 579 579
\end{description} 580 580 {}
\newpage 581 581
582 582 \subsection{[A8] User Logout}
{} 583 583
584 584 \begin{description}
\subsection{[A8] User Logout} 585 585 \item[Description:]{The User shall be able to log out of his/her account on
586 586 the site.}
\begin{description} 587 587
\item[Description:]{The user shall be able to log out of his/her account on 588 588 \item[Desired Outcome:]{The User's information and data will no longer be
the site.} 589 589 accessible after logging out. }
590 590
\item[Desired Outcome:]{The user's information and data will no longer be 591 591 \item[User Goals:]{The User is done with his/her session of using the
accessible after logging out. } 592 592 website, and wants to make sure others cannot access the data in his/her
593 593 account.}
\item[User Goals:]{The user is done with his/her session of using the 594 594
website, and wants to make sure others cannot access the data in his/her 595 595 \item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login}
account.} 596 596 \\
597 597
\item[Dependency Use Cases:] None 598 598 \item[Priority Level:]{``Must''}
\\ 599 599
600 600 \item[Status:]{Implemented}
\item[Priority Level:]{``Must''} 601 601
602 602 \item[Preconditions:]{The user is logged into their account.}
\item[Status:]{Implemented} 603 603
604 604 \item[Postconditions:]{The user's data can no longer be accessed.}
\item[Preconditions:]{The user is logged into their account} 605 605
606 606 \item[Trigger:]
\item[Postconditions:]{The user's data can no longer be accessed.} 607 607
608 608 \item[Workflow:]
\item[Trigger:] 609 609
610 610 \begin{enumerate}
\item[Workflow:] 611 611 \itemsep1pt\parskip0pt\parsep0pt
612 612 \item
\begin{enumerate} 613 613 {UserX shall click the ``Logout'' button.}
\itemsep1pt\parskip0pt\parsep0pt 614 614 \item
\item 615 615 {The System shall logs out UserX.}
{UserX shall click the ``Logout'' button.} 616 616 \item
\item 617 617 {The System shall redirect UserX to the login page.}
{The System shall logs out UserX.} 618 618 \end{enumerate}
\item 619 619
{The System shall redirect UserX to the login page.} 620 620 \item[Expected Result:] {User is logged out and is redirected to the login page.}
\end{enumerate} 621 621 \end{description}
622 622 \newpage
\item[Expected Result:] {User is logged out and is redirected to the login page.} 623 623
\end{description} 624 624 {}
\newpage 625 625
626 626 \subsection{[A9] Contact Admin}
{} 627 627
628 628 \begin{description}
\subsection{[A9] Contact Admin} 629 629 \item[Description]{The User shall be able to contact the admin.}
630 630
\begin{description} 631 631 \item[Desired Outcome]{The User shall send a message to the admin; the
\item[Description]{The user shall be able to contact the admin.} 632 632 admin shall receive the message.}
633 633
\item[Desired Outcome]{The user shall send a message to the admin; the 634 634 \item[User Goals:]{The User sends a message to the admin.}
admin shall receive the message.} 635 635
636 636 \item[Dependency Use Cases]{None}
\item[User Goals:]{The user sends a message to the admin.} 637 637 \\
638 638
\item[Dependency Use Cases]{None} 639 639 \item[Priority Level]{``Must''}
\\ 640 640
641 641 \item[Status]{Not Implemented}
\item[Priority Level]{``Must''} 642 642
643 643 \item[Pre-conditions]{None.}
\item[Status]{Not Implemented} 644 644
645 645 \item[Post-conditions]{The admin receives the user's message.}
\item[Pre-conditions]{None.} 646 646
647 647 \item[Trigger]{UserX wants to contact the administrators of our application.}
\item[Post-conditions]{The admin receives the user's message.} 648 648
649 649 \item[Workflow]
\item[Trigger]{UserX wants to contact the administrators of our application.} 650 650 \begin{enumerate}
651 651 \itemsep1pt\parskip0pt\parsep0pt
\item[Workflow] 652 652 \item
\begin{enumerate} 653 653 {The System shall display the admin email address on every page in the
\itemsep1pt\parskip0pt\parsep0pt 654 654 application.}
\item 655 655 \end{enumerate}
{The System shall display the admin email address on every page in the 656 656
application.} 657 657 \item[Expected Result:] {The admin's email address can be seen by UserX on every page.}
\end{enumerate} 658 658 \end{description}
659 659 \newpage
\item[Expected Result:] {The admin's email address can be seen by UserX on every page.} 660 660
\end{description} 661 661 {}
\newpage 662 662
663 663 \subsection{[A10] Configure Account Notifications}
{} 664 664 \begin{description}
665 665 \item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.}
\subsection{[A10] Configure Account Notifications} 666 666
\begin{description} 667 667 \item[Desired Outcome]{The User shall only receive notifications at the
\item[Description]{This test case outlines the presentation layering step process of a user configuring notification settings.} 668 668 times that were specified.}
669 669 \\
\item[Desired Outcome]{The User shall only receive notifications at the 670 670
times that were specified} 671 671 \item[User Goals]{The User shall not be bothered needlessly or at
\\ 672 672 inconvenient times.}
673 673
\item[User Goals]{The User shall not be bothered needlessly or at 674 674 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login}
inconvenient times} 675 675 \\
676 676
\item[Primary Actor]{User (student)} 677 677 \item[Priority Level]{``Must''}
678 678
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} 679 679 \item[Status]{Implemented}
\\ 680 680
681 681 \item[Preconditions:]
\item[Priority Level]{``Must''} 682 682 \begin{itemize}
683 683 \itemsep1pt\parskip0pt\parsep0pt
\item[Status]{In progress} 684 684 \item
685 685 {The User has registered with the email testuser@flashy.cards.}
\item[Preconditions:] 686 686 \item
\begin{itemize} 687 687 {The user has verified their email address.}
\itemsep1pt\parskip0pt\parsep0pt 688 688 \item {The User is logged in with the above email.}
\item 689 689 \end{itemize}
{The User has registered with the email testuser@flashy.cards. } 690 690
\item 691 691 \item[Postconditions:]
{The user has verified their email address.} 692 692 \begin{itemize}
\item {The User is logged in with the above email.} 693 693 \itemsep1pt\parskip0pt\parsep0pt
\end{itemize} 694 694 \item
695 695 {User only receive notifications at specified times}
\item[Postconditions:] 696 696 \end{itemize}
\begin{itemize} 697 697
\itemsep1pt\parskip0pt\parsep0pt 698 698 \item[Trigger]{UserX wants to change their notification settings}
\item 699 699
{User only receive notifications at specified times} 700 700 \item[Workflow]
\end{itemize} 701 701 \begin{enumerate}
702 702 \itemsep1pt\parskip0pt\parsep0pt
\item[Trigger]{UserX wants to change their notification settings} 703 703 \item
704 704 {UserX shall select ``Account Settings'' button from the top header.}
\item[Workflow] 705 705 \item
\begin{enumerate} 706 706 {The System shall display a settings screen.}
\itemsep1pt\parskip0pt\parsep0pt 707 707 \item
\item 708 708 {UserX shall change the notification timing to 1 min.}
{UserX shall select ``Account Settings'' button from the top header.} 709 709 \item
\item 710 710 {UserX shall click ``Save Settings'' button.}
{The System shall display a settings screen.} 711 711 \item
\item 712 712 {The System shall display a message confirming the settings are saved.}
{UserX shall change the notification timing to 1 min.} 713 713 \item
\item 714 714 {The System shall save notification settings to the user's attributes.}
{UserX shall click ``Save Settings'' button.} 715 715 \end{enumerate}
\item 716 716
{The System shall display a message confirming the settings are saved.} 717 717 \item[Expected Result:]{UserX shall be notified at least as slow as 1 min.}
\item 718 718 \end{description}
{The System shall save notification settings to the user's attributes.} 719 719 \newpage
\end{enumerate} 720 720
721 721 {}
\item[Expected Result:]{UserX shall be notified at least as slow as 1 min.} 722 722
\end{description} 723 723 \section{Flashcards}
\newpage 724 724 \subsection{[F1] Push Flashcard}
725 725
{} 726 726 \begin{description}
727 727 \item[Description:]{This test case outlines the presentation layer step
\section{Flashcards} 728 728 process of a User contributing a flashcard to the live feed and to their deck.}
\subsection{[F1] Push Flashcard} 729 729
730 730 \item[Desired Outcome:]{The User shall have the flashcard added to their own deck
\begin{description} 731 731 and the live feed.}
\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. } 732 732 \\
733 733
\item[Desired Outcome:]{The User shall have the flashcard added to their own deck and the live feed. } 734 734 \item[User Goals:]{The User will see their flashcard in their deck and the
\\ 735 735 flashcard will be shared with others.}
\item[User Goals:]{ The User will see their flashcard in their deck and the flashcard will be shared with others. } 736 736
737 737 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, [A3] Add a Class} 738 738 \\
\\ 739 739
740 740 \item[Priority Level:]{``Must''}
\item[Priority Level:]{``Must''} 741 741
742 742 \item[Status:]{Implemented}
\item[Status:]{Implemented} 743 743
744 744 \item[Preconditions:]
\item[Preconditions:] 745 745 \begin{itemize}
\begin{itemize} 746 746 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 747 747 \item
\item 748 748 {The User is logged as UserX.}
{The User is logged as UserX.} 749 749 \item
\item 750 750 {The User is logged in a different browser session as UserY.}
{The User is logged in a different browser session as UserY.} 751 751 \item
\item 752 752 {UserX and UserY have added the class TEST 1.}
{UserX and UserY have added the class TEST 1.} 753 753 \item
\item 754 754 {UserX and UserY are on the live feed for TEST 1.}
{UserX and UserY are on the live feed for TEST 1.} 755 755 \end{itemize}
\end{itemize} 756 756
757 757 \item[Postconditions:]
\item[Postconditions:] 758 758 \begin{itemize}
\begin{itemize} 759 759 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 760 760 \item
\item 761 761 {UserX has flashcard added to their deck.}
{UserX has flashcard added to their deck.} 762 762 \item
\item 763 763 {The Flashcard is shown in the Live Feed.}
{The Flashcard is shown in the Live Feed.} 764 764 \item
\item 765 765 {UserY and other users can add this flashcard to their decks.}
{UserY and other users can add this flashcard to their decks.} 766 766 \end{itemize}
\end{itemize} 767 767
768 768 \item[Trigger:]{UserX wants to contribute a flashcard to the TEST 1.}
\item[Trigger:]{UserX wants to contribute a flashcard to the TEST 1.} 769 769
770 770 \item[Workflow:]
\item[Workflow:] 771 771 \begin{enumerate}
\begin{enumerate} 772 772 \itemsep1pt\parskip0pt\parsep0pt
\itemsep1pt\parskip0pt\parsep0pt 773 773 \item {UserX has clicked the circular plus button (``Compose'' button) in
\item {UserX has clicked the circular plus button (``Create Card'' button) in the lower right corner of the live feed.} 774 774 the lower right corner of the live feed.}
\item 775 775 \item
{The System shall present a modal with a text box.} 776 776 {The System shall present a modal with a text box.}
\item 777 777 \item
{UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.} 778 778 {UserX shall select the input field of the modal and type ``The rain in Spain stays mainly in the plain''.}
\item 779 779 \item
{UserX shall select the ``Contribute'' button in the modal.} 780 780 {UserX shall select the ``Contribute'' button in the modal.}
\item 781 781 \item
{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 1''.} 782 782 {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 1''.}
\item 783 783 \item
{UserY shall see the card appear in their feed within a minute (See Notes).} 784 784 {UserY shall see the card appear in their feed within a minute (See Notes).}
\item 785 785 \item
{The System shall hide the modal from UserX.} 786 786 {The System shall hide the modal from UserX.}
\item 787 787 \item
{The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).} 788 788 {The flashcard shall be included in the UserX's deck.(c.f. Note about simultaneous browser session).}
\end{enumerate} 789 789 \end{enumerate}
790 790
\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 is in their deck and a pencil picture on 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 1 without checkmark and pencil mark.} 791 791 \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 is in their deck and a pencil picture on 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 1 without checkmark and pencil mark.}
792
\item[Alternative Workflow:] 793 792
\begin{enumerate} 794 793 \item[Alternative Workflow:]
\setcounter{enumi}{3} 795 794 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 796 795 \setcounter{enumi}{3}
\item 797 796 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.} 798 797 \item
\item 799 798 {UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.}
{The System shall bold the word Spain.} 800 799 \item
\item 801 800 {The System shall bold the word Spain.}
{UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.} 802 801 \item
\item 803 802 {UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.}
{The System shall bold the word plain.} 804 803 \item
\item 805 804 {The System shall bold the word plain.}
{UserX shall click the ``Contribute'' button in the modal.} 806 805 \item
\item 807 806 {UserX shall click the ``Contribute'' button in the modal.}
{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 1.} 808 807 \item
\item 809 808 {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 1.}
{UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.} 810 809 \item
\end{enumerate} 811 810 {UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.}
811 \end{enumerate}
812
813 \item[Expected Result:] {
814 UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded in their deck.
815 For UserX, the new flashcard will have a checkmark,
816 indicating that the card is in their deck and a pencil picture on
817 top right to indicate UserX as the author of the flashcard.
818 The new flashcard will show up on UserY's live feed on class TEST 1
819 without checkmark and pencil mark.
820 }
821
822 \item[Alternative Workflow:]
823 \begin{enumerate}
824 \setcounter{enumi}{2}
825 \itemsep1pt\parskip0pt\parsep0pt
826 \item
827 {UserX shall select the input field of the modal and type five blank spaces.}
828 \item
829 {UserX shall click the ``Contribute'' button in the dialog.}
812 830 \end{enumerate}
\item[Expected Result:] { 813 831
UserX will have the new flashcard with the words ``Spain'' and ``plain'' bolded in their deck. 814 832 \item[Expected Result:]
833 { Blank flashcard will not be added to UserX's deck or to the live feed of TEST 1. }
834
835 \item[Alternative Workflow:]
836 \begin{enumerate}
837 \setcounter{enumi}{2}
838 \itemsep1pt\parskip0pt\parsep0pt
839 \item
840 {UserX shall select the input field and type ``Test''.}
841 \item
842 {UserX shall click the ``Contribute'' button in the dialog.}
843 \end{enumerate}
844
845 \item[Expected Result:]
846 { Flashcard with input not meeting the length restriction will not be added to UserX's deck or to the live feed of TEST 1. }
For UserX, the new flashcard will have a checkmark, 815 847
indicating that the card is in their deck and a pencil picture on 816 848 \end{description}
top right to indicate UserX as the author of the flashcard. 817 849 \newpage
The new flashcard will show up on UserY's live feed on class TEST 1 818 850
without checkmark and pencil mark. 819 851 {}
} 820 852
821 853 \subsection{[F2] Edit Flashcard}
\item[Alternative Workflow:] 822 854
\begin{enumerate} 823 855 \begin{description}
\setcounter{enumi}{2} 824 856 \item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.}
\itemsep1pt\parskip0pt\parsep0pt 825 857
\item 826 858 \item[Desired Outcome:]{Flashcard is edited and saved appropriately}
{UserX shall select the input field of the modal and type five blank spaces.} 827 859 \\
\item 828 860
{UserX shall click the ``Contribute'' button in the dialog.} 829 861 \item[User Goals:]{The User shall be able to change the text, the blanked
\end{enumerate} 830 862 words, and the study date on a flashcard.}
831 863
\item[Expected Result:] 832 864 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
{ Blank flashcard will not be added to UserX's deck or to the live feed of TEST 1. } 833 865 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard}
834 866
\item[Alternative Workflow:] 835 867 \item[Priority Level:]{``Should''}
\begin{enumerate} 836 868
\setcounter{enumi}{2} 837 869 \item[Status:]{Implemented}
\itemsep1pt\parskip0pt\parsep0pt 838 870
\item 839 871 \item[Preconditions:]
{UserX shall select the input field and type ``Test''.} 840 872 \begin{itemize}
\item 841 873 \itemsep1pt\parskip0pt\parsep0pt
{UserX shall click the ``Contribute'' button in the dialog.} 842 874 \item
\end{enumerate} 843 875 {UserX is logged in}
844
\item[Expected Result:] 845
{ Flashcard with input not meeting the length restriction will not be added to UserX's deck or to the live feed of TEST 1. } 846
847 876 \item
\end{description} 848 877 {User has added the class TEST EDIT.}
\newpage 849 878 \item
850 879 {UserX has the flashcard \textbf{Change} me in their flashcard.}
{} 851 880 \end{itemize}
852 881
\subsection{[F2] Edit Flashcard} 853 882 \item[Postconditions:]
854 883 \begin{itemize}
\begin{description} 855 884 \itemsep1pt\parskip0pt\parsep0pt
\item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.} 856 885 \item
857 886 {Flashcard is edited}
\item[Desired Outcome:]{Flashcard is edited and saved appropriately} 858 887 \end{itemize}
\\ 859 888
860 889 \item[Trigger:]{The User wants to edit their card.}
\item[User Goals:]{To be able to change the text, the blanked words, and the study date on a flashcard.} 861 890
862 891 \item[Workflow:]
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 863 892 \begin{enumerate}
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard} 864 893 \itemsep1pt\parskip0pt\parsep0pt
865 894 \item
\item[Priority Level:]{``Should''} 866 895 {UserX shall move the cursor over the flashcard ``this is made for edit''.}
867 896 \item
\item[Status:]{Implemented} 868 897 {UserX shall click the edit button on bottom left of the selected flashcard.}
869 898 \item
\item[Preconditions:] 870 899 {The System shall present a modal that contains the text of the selected flashcard.}
871 900 \item
\begin{itemize} 872 901 {UserX shall be able to change the text to ``Edit has been made''.}
\itemsep1pt\parskip0pt\parsep0pt 873 902 \item
\item 874 903 {UserX shall click 'Save'}
{UserX is logged in} 875 904 \item
\item 876 905 {The System shall hide the model from UserX.}
{User has added the class TEST EDIT.} 877 906 \end{enumerate}
\item 878 907
{UserX has the flashcard \textbf{Change} me in their flashcard.} 879 908 \item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.}
\end{itemize} 880 909
881 910 \item[Alternative Workflow A:]
\item[Postconditions:] 882 911
\begin{itemize} 883 912 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 884 913 \itemsep1pt\parskip0pt\parsep0pt
\item 885 914 \item
{Flashcard is edited} 886 915 {UserX shall move the cursor over the flash card ``this is made for edit2''.}
\end{itemize} 887 916 \item
888 917 {UserX shall click the edit button on bottom left of the selected flashcard.}
\item[Trigger:]{The User wants to edit their card.} 889 918 \item
890 919 {The System shall present a modal that contains the text of the selected flashcard.}
\item[Workflow:] 891 920 \item
\begin{enumerate} 892 921 {UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.}
\itemsep1pt\parskip0pt\parsep0pt 893 922 \item
\item 894 923 {UserX shall click 'Save'}
{UserX shall move the cursor over the flashcard ``this is made for edit''.} 895 924 \item
\item 896 925 {The System shall hide the modal from UserX.}
{UserX shall click the edit button on bottom left of the selected flashcard.} 897 926 \item
\item 898 927 {The selected flashcard's blanked words shall be changed to ``fun''.}
{The System shall present a modal that contains the text of the selected flashcard.} 899 928 \end{enumerate}
\item 900 929
{UserX shall be able to change the text to ``Edit has been made''.} 901 930 \item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.}
\item 902 931
{UserX shall click 'Save'} 903 932 \item[Alternative Workflow B:]
\item 904 933
{The System shall hide the model from UserX.} 905 934 \begin{enumerate}
\end{enumerate} 906 935 \itemsep1pt\parskip0pt\parsep0pt
907 936 \item
\item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.} 908 937 {UserX shall move the cursor over the flash card ``this is made for edit3''.}
909 938 \item
\item[Alternative Workflow A:] 910 939 {UserX shall click the edit button on bottom left of the selected flashcard.}
911 940 \item
\begin{enumerate} 912 941 {The System shall present a modal that contains the text of the selected flashcard.}
\itemsep1pt\parskip0pt\parsep0pt 913 942 \item
\item 914 943 {UserX shall be able the study date to 6/12.}
{UserX shall move the cursor over the flash card ``this is made for edit2''.} 915 944 \item
\item 916 945 {UserX shall click 'Save'}
{UserX shall click the edit button on bottom left of the selected flashcard.} 917 946 \item
\item 918 947 {The System shall hide the modal from UserX.}
{The System shall present a modal that contains the text of the selected flashcard.} 919 948 \end{enumerate}
\item 920 949
{UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.} 921 950 \item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.}
\item 922 951 \end{description}
{UserX shall click 'Save'} 923 952 \newpage
\item 924 953
{The System shall hide the modal from UserX.} 925 954 {}
\item 926 955
{The selected flashcard's blanked words shall be changed to ``fun''.} 927 956 \subsection{[F3] Pull Flashcard}
\end{enumerate} 928 957 \begin{description}
929 958 \item[Description:]{This test case outlines the presentation layering step
\item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.} 930 959 process of a user pulling a flashcard.}
931 960
\item[Alternative Workflow B:] 932 961 \item[Desired Outcome:]{The User shall have the flashcard added to their own
933 962 deck.}
\begin{enumerate} 934 963 \\
\itemsep1pt\parskip0pt\parsep0pt 935 964
\item 936 965 \item[User Goals:]{The User will be able to review that flashcard.}
{UserX shall move the cursor over the flash card ``this is made for edit3''.} 937 966
\item 938 967 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
{UserX shall click the edit button on bottom left of the selected flashcard.} 939 968 Login, [A3] Add a Class, [F1] Push Flashard}
\item 940 969
{The System shall present a modal that contains the text of the selected flashcard.} 941 970 \item[Priority Level:]{``Must'' }
\item 942 971
{UserX shall be able the study date to 6/12.} 943 972 \item[Status:]{Implemented}
\item 944 973
{UserX shall click 'Save'} 945 974 \item[Preconditions:]
\item 946 975 \begin{itemize}
{The System shall hide the modal from UserX.} 947 976 \itemsep1pt\parskip0pt\parsep0pt
\end{enumerate} 948 977 \item
949 978 {User has registered for a class.}
\item[Expected Result:]{The selected flashcard's study date shall be changed to 6/12.} 950 979 \item
\end{description} 951 980 {User is at live feed for said class.}
\newpage 952 981 \item
953 982 {Flashcard with text ``TESTY FLASHY'' has been created.}
{} 954 983 \item
955 984 {That flashcard with the text ``TESTY FLASHY'' is in the Live Feed of class TEST 1.}
\subsection{[F3] Pull Flashcard} 956 985 \end{itemize}
\begin{description} 957 986
\item[Description:]{This test case outlines the presentation layering step 958 987 \item[Postconditions:]
process of a user pulling a flashcard.} 959 988 \begin{itemize}
960 989 \itemsep1pt\parskip0pt\parsep0pt
\item[Desired Outcome:]{The User shall have the flashcard added to their own 961 990 \item
deck } 962 991 {User shall have that flashcard with the text ``TESTY FLASHY'' added to their deck}
\\ 963 992 \item
964 993 {User can review this flashcard later}
\item[User Goals:]{The user will be able to review that flashcard. } 965 994 \end{itemize}
966 995
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 967 996 \item[Trigger:]{UserX wants to add a flashcard to their deck to study it.}
Login, [A3] Add a Class, [F1] Push Flashard} 968 997
969 998 \item[Workflow:]
\item[Priority Level:]{``Must'' } 970 999
971 1000 \begin{enumerate}
\item[Status:]{Not Implemented} 972 1001 \itemsep1pt\parskip0pt\parsep0pt
973 1002 \item
\item[Preconditions:] 974 1003 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed and hover their cursor
\begin{itemize} 975 1004 over it.}
\itemsep1pt\parskip0pt\parsep0pt 976 1005 \item
\item 977 1006 {The System shall present buttons on mouseover.}
{User has registered for a class.} 978 1007 \item
\item 979 1008 {UserX shall click on the large plus that appears over the flashcard with the text ``TESTY FLASHY''.}
{User is at live feed for said class.} 980 1009 \item
\item 981 1010 {The System shall hide the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed for UserX.}
{Flashcard with text ``TESTY FLASHY'' has been created.} 982 1011 \item
\item 983 1012 {UserX shall check that card with the text ``TESTY FLASHY'' has been added to their class TEST 1 deck by checking API.}
{That flashcard with the text ``TESTY FLASHY'' is in the Live Feed of class TEST 1.} 984 1013 \end{enumerate}
\end{itemize} 985 1014
986 1015 \item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' is in the class TEST 1 deck.}
\item[Postconditions:] 987 1016 \end{description}
\begin{itemize} 988 1017 \newpage
\itemsep1pt\parskip0pt\parsep0pt 989 1018
\item 990 1019 {}
{User shall have that flashcard with the text ``TESTY FLASHY'' added to their deck} 991 1020
\item 992 1021 \subsection{[F4] Flag Inappropriate Cards}
{User can review this flashcard later} 993 1022
\end{itemize} 994 1023 \begin{description}
995 1024 \item[Description:]{This test case outlines the presentation layering step
\item[Trigger:]{UserX wants to add a flashcard to their deck to study it.} 996 1025 process of a user flagging a card they have deemed inappropriate.}
997 1026
\item[Workflow:] 998 1027 \item[Desired Outcome:]{The flashcard's inappropriateness variable is
999 1028 adjusted.}
\begin{enumerate} 1000 1029 \\
\itemsep1pt\parskip0pt\parsep0pt 1001 1030
\item 1002 1031 \item[User Goals:]{To note if a card should not belong in the class and
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed and hover their cursor 1003 1032 should not be displayed in the feed.}
over it.} 1004 1033
\item 1005 1034 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
{The System shall present buttons on mouseover.} 1006 1035 Login, [A3] Add a Class, [F1] Push Flashcard}
\item 1007 1036
{UserX shall click on the large plus that appears over the flashcard with the text ``TESTY FLASHY''.} 1008 1037 \item[Priority Level:]{``Should''}
\item 1009 1038
{The System shall hide the flashcard with the text ``TESTY FLASHY'' from the class TEST 1 feed for UserX.} 1010 1039 \item[Status:]{Implemented}
\item 1011 1040
{UserX shall check that card with the text ``TESTY FLASHY'' has been added to their class TEST 1 deck by checking API.} 1012 1041 \item[Preconditions:]
\end{enumerate} 1013 1042 \begin{itemize}
1014 1043 \itemsep1pt\parskip0pt\parsep0pt
\item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' is in the class TEST 1 deck.} 1015 1044 \item
\end{description} 1016 1045 {UserX has registered for a class TEST 1.}
\newpage 1017 1046 \item
1018 1047 {UserX is in the live feed for class TEST 1.}
{} 1019 1048 \item
1020 1049 {Flashcard has been created.}
\subsection{[F4] Flag Inappropriate Cards} 1021 1050 \item
1022 1051 {That flashcard is in the Live Feed.}
\begin{description} 1023 1052 \end{itemize}
\item[Description:]{This test case outlines the presentation layering step 1024 1053
process of a user flagging a card they have deemed inappropriate.} 1025 1054 \item[Postconditions:]
1026 1055 \begin{itemize}
\item[Desired Outcome:]{The flashcard's inappropriateness variable is 1027 1056 \itemsep1pt\parskip0pt\parsep0pt
adjusted} 1028 1057 \item
\\ 1029 1058 {User shall have that flashcard added to their deck}
\item[User Goals:]{To note if a card should not belong in the class and 1030 1059 \item
should not be displayed in the feed} 1031 1060 {User can review this flashcard later}
1032 1061 \end{itemize}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1033 1062
Login, [A3] Add a Class, [F1] Push Flashcard} 1034 1063 \item[Trigger:]{UserX wants to mark a card innapropriate.}
1035 1064
\item[Priority Level:]{``Should''} 1036 1065 \item[Workflow:]
1037 1066 \begin{enumerate}
\item[Status:]{Not Implemented} 1038 1067 \itemsep1pt\parskip0pt\parsep0pt
1039 1068 \item
\item[Preconditions:] 1040 1069 {UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the
\begin{itemize} 1041 1070 feed and hover their cursor over it.}
\itemsep1pt\parskip0pt\parsep0pt 1042 1071 \item
\item 1043 1072 {The System shall present buttons on mouseover.}
{UserX has registered for a class TEST 1.} 1044 1073 \item
\item 1045 1074 {UserX shall click on the flag icon that appears on the card.}
{UserX is in the live feed for class TEST 1.} 1046 1075 \item
\item 1047 1076 {The System shall mark the card as flagged and hide the card from the
{Flashcard has been created.} 1048 1077 feed for the User.}
\item 1049 1078 \end{enumerate}
{That flashcard is in the Live Feed.} 1050 1079
\end{itemize} 1051 1080 \item[Expected Result:] {The flashcard with the text ``TESTY FLASHY'' will be flagged for inappropriateness.}
1052 1081 \end{description}
\item[Postconditions:] 1053 1082 \newpage
\begin{itemize} 1054 1083
\itemsep1pt\parskip0pt\parsep0pt 1055 1084 {}
\item 1056 1085
{User shall have that flashcard added to their deck} 1057 1086 \subsection{[F5] Filter Flashcards}
\item 1058 1087
{User can review this flashcard later} 1059 1088 \begin{description}
\end{itemize} 1060 1089 \item[Description:]{This test case outlines the presentation layering step
1061 1090 process of a user filtering existing flashcards to view only a specified subset.}
\item[Trigger:]{UserX wants to mark a card innapropriate.} 1062 1091
1063 1092 \item[Desired Outcome:]{The User shall see flashcards based on the filter
\item[Workflow:] 1064 1093 options.}
\begin{enumerate} 1065 1094
\itemsep1pt\parskip0pt\parsep0pt 1066 1095 \item[User Goals:]{The User can find what he/she is specifically looking
\item 1067 1096 for}
{UserX shall choose the flashcard with the text ``TESTY FLASHY'' from the feed and hover their cursor 1068 1097
over it.} 1069 1098 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\item 1070 1099 Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull
{The System shall present buttons on mouseover.} 1071 1100 Flashcard}
\item 1072 1101
{UserX shall click on the flag icon that appears on the card.} 1073 1102 \item[Priority Level:]{``Should''}
\item 1074 1103
{The System shall mark the card as flagged and hide the card from the 1075 1104 \item[Status:]{Implemented}
feed for the User.} 1076 1105
\end{enumerate} 1077 1106 \item[Preconditions:]
1078 1107 \begin{itemize}
\item[Expected Result:] {The flashycard with the text ``TESTY FLASHY'' will be flagged for inappropriateness.} 1079 1108 \itemsep1pt\parskip0pt\parsep0pt
\end{description} 1080 1109 \item
\newpage 1081 1110 {UserX has registered for the class TEST 1.}
1082 1111 \item
{} 1083 1112 {Flashcards exist in the course}
1084 1113 \item
\subsection{[F5] Filter Flashcards} 1085 1114 {UserX is at Card List View for the class.}
1086 1115 \end{itemize}
\begin{description} 1087 1116
\item[Description:]{This test case outlines the presentation layering step 1088 1117 \item[Postconditions:]
process of a user filtering existing flashcards to view only a specified subset.} 1089 1118 \begin{itemize}
1090 1119 \itemsep1pt\parskip0pt\parsep0pt
\item[Desired Outcome:]{The user shall see flashcards based on the filter 1091 1120 \item
options} 1092 1121 {User only sees specific flashcards}
1093 1122 \end{itemize}
\item[User Goals:]{The user can find what he/she is specifically looking 1094 1123
for} 1095 1124 \item[Trigger:]{User is looking for specific flashcards.}
1096 1125
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1097 1126 \item[Workflow:]
Login, [A3] Add a Class, [F1] Push Flashcard, [F3] Pull 1098 1127 \begin{enumerate}
Flashcard} 1099 1128 \itemsep1pt\parskip0pt\parsep0pt
1100 1129 \item
\item[Priority Level:]{``Should''} 1101 1130 {UserX shall select certain tags (checkboxes) from top box.}
1102 1131 \item
\item[Status:]{Not Implemented} 1103 1132 {UserX shall click ``Filter'' button.}
1104 1133 \item
\item[Preconditions:] 1105 1134 {The System shall display only cards sorted under those tags in list.}
\begin{itemize} 1106 1135 \end{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1107 1136
\item 1108 1137 \item[Expected Result:] {Flashcards are filtered.}
{UserX has registered for the class TEST 1.} 1109 1138 \end{description}
\item 1110 1139 \newpage
{Flashcards exist in the course} 1111 1140
\item 1112 1141 {}
{UserX is at Card List View for the class.} 1113 1142
\end{itemize} 1114 1143 \subsection{[F6] Blank Out Words in Flashcard}
1115 1144
\item[Postconditions:] 1116 1145 \begin{description}
\begin{itemize} 1117 1146 \item[Description:]{The User shall be able to blank out keywords in a card
\itemsep1pt\parskip0pt\parsep0pt 1118 1147 they are pushing.}
\item 1119 1148
{User only sees specific flashcards} 1120 1149 \item[Desired Outcome:]{The blanked out words in the flashcard notify the
\end{itemize} 1121 1150 System that they are keywords.}
1122 1151 \\
\item[Trigger:]{User is looking for specific flashcards.} 1123 1152
1124 1153 \item[User Goals:]{The User shall mark some words as keywords so the System
\item[Workflow:] 1125 1154 may later quiz the User by blanking out one keyword at a time and having the
\begin{enumerate} 1126 1155 User enter what they think the keyword is.}
\itemsep1pt\parskip0pt\parsep0pt 1127 1156
\item 1128 1157 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
{UserX shall select certain tags (checkboxes) from top box.} 1129 1158 Login, [A3] Add a Class, [F1] Push Flashcard}
\item 1130 1159
{UserX shall click ``Filter'' button.} 1131 1160 \item[Preconditions:]
\item 1132 1161 \begin{itemize}
{The System shall display only cards sorted under those tags in list.} 1133 1162 \itemsep1pt\parskip0pt\parsep0pt
\end{enumerate} 1134 1163 \item
1135 1164 \item
\item[Expected Result:] {Flashcards are filtered.} 1136 1165 {The User is logged in as UserX.}
\end{description} 1137 1166 \item
\newpage 1138 1167 {The User has added the class ``TEST 1''.}
1139 1168 \item
{} 1140 1169 {The User is at the Feed View for the class ``TEST 1''.}
1141 1170 \end{itemize}
\subsection{[F6] Blank Out Words in Flashcard} 1142 1171
1143 1172 \item[Postconditions:]
\begin{description} 1144 1173 \begin{itemize}
\item[Description:]{The User shall be able to blank out keywords in a card 1145 1174 \itemsep1pt\parskip0pt\parsep0pt
they are pushing.} 1146 1175 \item
1147 1176 {The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline}
\item[Desired Outcome:]{The blanked out words in the flashcard notify the 1148 1177 \end{itemize}
System that they are keywords.} 1149 1178
\\ 1150 1179
1151 1180 \item[Trigger:]
\item[User Goals:]{The User shall mark some words as keywords so the System 1152 1181
may later quiz the User by blanking out one keyword at a time and having the 1153 1182 \begin{itemize}
User enter what they think the keyword is.} 1154 1183 \itemsep1pt\parskip0pt\parsep0pt
1155 1184 \item
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1156 1185 {The User wants their newly pushed card to to be blanked out at ``Spain''.}
Login, [A3] Add a Class, [F1] Push Flashcard} 1157 1186 \end{itemize}
1158 1187
\item[Preconditions:] 1159 1188
\begin{itemize} 1160 1189 \item[Workflow:]
\itemsep1pt\parskip0pt\parsep0pt 1161 1190
\item 1162 1191 \begin{enumerate}
\item 1163 1192 \itemsep1pt\parskip0pt\parsep0pt
{The User is logged in as UserX.} 1164 1193 \item
\item 1165 1194 {UserX shall click the Compose button (+ circle on bottom right) of Feed.}
{The User has added the class ``TEST 1''.} 1166 1195 \item
\item 1167 1196 {The System shall bring up the composition flashcard modal.}
{The User is at the Feed View for the class ``TEST 1''.} 1168 1197 \item
\end{itemize} 1169 1198 {UserX shall type text ``The rain in Spain stays mainly in the plain''
1170 1199 into the composition modal, replacing ``Write a flashcard''.}
\item[Postconditions:] 1171 1200 \item
\begin{itemize} 1172 1201 {UserX shall highlight the word ``Spain''.}
\itemsep1pt\parskip0pt\parsep0pt 1173 1202 \item {UserX shall press Blank Selected Text button.}
\item 1174 1203 \item {UserX shall press Contribute button.}
{The blanked out words (keyword) ``Spain'' in the flashcard are marked with underline} 1175 1204 \item
\end{itemize} 1176 1205 {The System will save the blanked out word in the Flashcard Mask of the
1177 1206 newly pushed flashcard.}
1178 1207 \item {The Feed shall display the new card with the keyword underlined.}
\item[Trigger:] 1179 1208 \end{enumerate}
1180 1209
\begin{itemize} 1181 1210 \item[Expected Result:] {The System shall show ``Spain'' underlined in the flashcard.
\itemsep1pt\parskip0pt\parsep0pt 1182 1211 The flashcard is visible in the Feed.}
\item 1183 1212 \end{description}
{The User wants their newly pushed card to to be blanked out at ``Spain''.} 1184 1213 \newpage
\end{itemize} 1185 1214
1186 1215 {}
1187 1216
\item[Workflow:] 1188 1217 \subsection{[F7] Fix Flashcard}
1189 1218
\begin{enumerate} 1190 1219 \begin{description}
\itemsep1pt\parskip0pt\parsep0pt 1191 1220 \item[Description:]{The User shall be able to alter a flashcard he/she made
\item 1192 1221 originally and not have to make a new copy of it.}
{UserX shall click the Compose button (+ circle on bottom right) of Feed.} 1193 1222
\item 1194 1223 \item[Desired Outcome:]{The User shall change one flashcard's text and that
{The System shall bring up the composition flashcard modal.} 1195 1224 alteration will be shown to all users of that flashcard}
\item 1196 1225
{UserX shall type text ``The rain in Spain stays mainly in the plain'' 1197 1226 \item[User Goals:]{The User shall make the flashcard say something different
into the composition modal, replacing ``Write a flashcard''.} 1198 1227 than it did originally.}
\item 1199 1228
{UserX shall highlight the word ``Spain''.} 1200 1229 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
\item {UserX shall press Blank Selected Text button.} 1201 1230 Login, [A3] Add a Class, [F1] Push Flashcard}
\item {UserX shall press Contribute button.} 1202 1231
\item 1203 1232 \item[Preconditions:]
{The System will save the blanked out word in the Flashcard Mask of the 1204 1233 \begin{itemize}
newly pushed flashcard.} 1205 1234 \itemsep1pt\parskip0pt\parsep0pt
\item {The Feed shall display the new card with the keyword underlined.} 1206 1235 \item
\end{enumerate} 1207 1236 {The User has registered with the email testuser@flashy.cards.}
1208 1237 \item
\item[Expected Result:] {The System shall show ``Spain'' underlined in the flashcard. 1209 1238 {The User has verified their email address.}
The flashcard is visible in the Feed.} 1210 1239 \item
\end{description} 1211 1240 {The User is logged in with the above email.}
\newpage 1212 1241 \item
1213 1242 {The User has enrolled in the class TEST 1.}
{} 1214 1243 \item
1215 1244 {The User is at the Deck View for the class ``TEST 1''.}
\subsection{[F7] Fix Flashcard} 1216 1245 \item
1217 1246 {The User has created and added a flashcard to their deck with text
\begin{description} 1218 1247 ``The rain in Spain stays mainly in the plain''.}
\item[Description:]{The User shall be able to alter a flashcard he/she made 1219 1248 \end{itemize}
originally and not have to make a new copy of it.} 1220 1249
1221 1250 \item[Postconditions:]
\item[Desired Outcome:]{The User shall change one flashcard's text and that 1222 1251 \begin{itemize}
alteration will be shown to all users of that flashcard} 1223 1252 \itemsep1pt\parskip0pt\parsep0pt
1224 1253 \item
\item[User Goals:]{The user shall make the flashcard say something different 1225 1254 {The user shall see their alteration for that flashcard.}
than it did originally.} 1226 1255 \item
1227 1256 {Other users will be notified of the alteration.}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1228 1257 \end{itemize}
Login, [A3] Add a Class, [F1] Push Flashcard} 1229 1258
1230 1259 \item[Trigger:]
\item[Preconditions:] 1231 1260
\begin{itemize} 1232 1261 \item[Workflow:]
\itemsep1pt\parskip0pt\parsep0pt 1233 1262 \begin{enumerate}
\item 1234 1263 \itemsep1pt\parskip0pt\parsep0pt
{The User has registered with the email testuser@flashy.cards.} 1235 1264 \item
\item 1236 1265 {UserX shall select the Flashcard they created.}
{The User has verified their email address.} 1237 1266 \item
\item 1238 1267 {UserX shall select ``Info'' button on the flashcard.}
{The User is logged in with the above email.} 1239 1268 \item
\item 1240 1269 {The System shall bring up the flashcard information modal.}
{The User has enrolled in the class TEST 1.} 1241 1270 \item
\item 1242 1271 {UserX shall select the ``Fix'' button.}
{The User is at the Deck View for the class ``TEST 1''.} 1243 1272 \item
\item 1244 1273 {The System shall bring up the edit flashcard modal.}
{The User has created and added a flashcard to their deck with text 1245 1274 \item
``The rain in Spain stays mainly in the plain''.} 1246 1275 {UserX shall change the text to ``The rain in Spain stays mainly in Germany''.}
\end{itemize} 1247 1276 \item
1248 1277 {UserX shall select the ``Done'' button.}
\item[Postconditions:] 1249 1278 \item
\begin{itemize} 1250 1279 {The System shall update the flashcard's content.}
\itemsep1pt\parskip0pt\parsep0pt 1251 1280 \item
\item 1252 1281 {The System shall close the edit flashcard modal and the close the
{The user shall see their alteration for that flashcard.} 1253 1282 flashcard information modal.}
\item 1254 1283 \end{enumerate}
{Other users will be notified of the alteration.} 1255 1284
\end{itemize} 1256 1285 \item[Expected Results:]{The Client shall show the flashcard with new text:``The rain in Spain stays mainly in Germany''.}
1257 1286 \end{description}
\item[Workflow:] 1258 1287 \newpage
\begin{enumerate} 1259 1288
\itemsep1pt\parskip0pt\parsep0pt 1260 1289 {}
\item 1261 1290
{UserX shall select the Flashcard they created.} 1262 1291 \subsection{[F8] Hide cards from feed}
\item 1263 1292
{UserX shall select ``Info'' button on the flashcard.} 1264 1293 \begin{description}
\item 1265 1294 \item[Description:]{The User shall be able to hide cards from their own view, on
{The System shall bring up the flashcard information modal.} 1266 1295 the Feed and Deck.}
\item 1267 1296
{UserX shall select the ``Fix'' button.} 1268 1297 \item[Desired Outcome:]{The System marks the flashcard as hidden from the
\item 1269 1298 User so that the User cannot see the flashcard in the Feed or Deck.}
{The System shall bring up the edit flashcard modal.} 1270 1299 \\
\item 1271 1300
{UserX shall change the text to ``The rain in Spain stays mainly in Germany''.} 1272 1301 \item[User Goals:]{The flashcard is no longer visible to the User in the Feed or
\item 1273 1302 Deck views.}
{UserX shall select the ``Done'' button.} 1274 1303
\item 1275 1304 \item[Dependency Use Cases:]{[A1] User Registration, [A2] User
{The System shall update the flashcard's content.} 1276 1305 Login, [A3] Add a Class, [F1] Push Flashcard}
\item 1277 1306
{The System shall close the edit flashcard modal and the close the 1278 1307 \item[Preconditions:]
flashcard information modal.} 1279 1308 \begin{itemize}
\end{enumerate} 1280 1309 \itemsep1pt\parskip0pt\parsep0pt
1281 1310 \item
\item[Expected Results:]{The Client shall show the flashcard with new text:``The rain in Spain stays mainly in Germany''.} 1282 1311 {The User is logged in as UserX.}
\end{description} 1283 1312 \item
\newpage 1284 1313 {The User has enrolled in the class ``TEST 1''.}
1285 1314 \item
{} 1286 1315 {The User is at the Feed View or Deck View (alternate workflow)
1287 1316 for the class ``TEST 1''.}
\subsection{[F8] Hide cards from feed} 1288 1317 \item
1289 1318 {The User has composed and contributed a flashcard to the Feed with text
\begin{description} 1290 1319 ``The rain in Spain stays mainly in the plain''.}
\item[Description:]{The User shall be able to hide cards from their own view, on 1291 1320 \end{itemize}
the Feed and Deck.} 1292 1321
1293 1322 \item[Postconditions:]
\item[Desired Outcome:]{The System marks the flashcard as hidden from the 1294 1323 \begin{itemize}
User so that the User cannot see the flashcard in the Feed or Deck.} 1295 1324 \itemsep1pt\parskip0pt\parsep0pt
\\ 1296 1325 \item{Flashcard is not viewable by user.}
1297 1326 \end{itemize}
\item[User Goals:]{The flashcard is no longer visible to the User in the Feed or 1298 1327
Deck views.} 1299 1328 \item[Workflow:]
1300 1329 \begin{enumerate}
\item[Dependency Use Cases:]{[A1] User Registration, [A2] User 1301 1330 \itemsep1pt\parskip0pt\parsep0pt
Login, [A3] Add a Class, [F1] Push Flashcard} 1302 1331 \item {UserX is at the Feed View.}
1303 1332 \item
\item[Preconditions:] 1304 1333 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
\begin{itemize} 1305 1334 mainly in the plain''.}
\itemsep1pt\parskip0pt\parsep0pt 1306 1335
\item 1307 1336 \item {UserX presses hide button, which is the red crossed-out eye.}
{The User is logged in as UserX.} 1308 1337
\item 1309 1338 \item {The System shall hide the card.}
{The User has enrolled in the class ``TEST 1''.} 1310 1339 \item {A toast is shown on the client that allows the User to report the card.}
\item 1311 1340 \item {The card is not shown on the Feed or Deck.}
{The User is at the Feed View or Deck View (alternate workflow) 1312 1341 \end{enumerate}
for the class ``TEST 1''.} 1313 1342
\item 1314 1343
{The User has composed and contributed a flashcard to the Feed with text 1315 1344 \item[Alternate Workflow:]
``The rain in Spain stays mainly in the plain''.} 1316 1345
\end{itemize} 1317 1346 \begin{enumerate}
1318 1347 \itemsep1pt\parskip0pt\parsep0pt
\item[Postconditions:] 1319 1348 \item {UserX is at the Deck View.}
\begin{itemize} 1320 1349 \item
\itemsep1pt\parskip0pt\parsep0pt 1321 1350 {UserX hovers the flashcard they added with the text ``The rain in Spain stays
\item{Flashcard is not viewable by user.} 1322 1351 mainly in the plain''.}
\end{itemize} 1323 1352
1324 1353 \item {UserX presses hide button, which is the red crossed-out eye.}
\item[Workflow:] 1325 1354
\begin{enumerate} 1326 1355 \item {The System shall hide the card.}
\itemsep1pt\parskip0pt\parsep0pt 1327 1356 \item {A toast is shown on the client that allows the User to report the card.}
\item {UserX is at the Feed View.} 1328 1357 \item {The card is not shown on the Feed or Deck.}
\item 1329 1358 \end{enumerate}
{UserX hovers the flashcard they added with the text ``The rain in Spain stays 1330 1359
mainly in the plain''.} 1331 1360
1332 1361 \item[Expected Result:]{The Client show the Feed without the flashcard of text
\item {UserX presses hide button, which is the red crossed-out eye.} 1333 1362 ``The rain in Spain stays mainly in the plain''. A toast that allows UserX to
1334 1363 report the card shows up temporarily.}
\item {The System shall hide the card.} 1335 1364 \end{description}
\item {A toast is shown on the client that allows the User to report the card.} 1336 1365 \newpage
\item {The card is not shown on the Feed or Deck.} 1337 1366
\end{enumerate} 1338 1367 {}
1339 1368
1340 1369 \subsection{[F9] View a Feed}
\item[Alternate Workflow:] 1341 1370
1342 1371 \begin{description}
\begin{enumerate} 1343 1372 \item[Description:]{This test case outlines the presentation layering step
\itemsep1pt\parskip0pt\parsep0pt 1344 1373 process of a user viewing a class feed.}