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