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