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