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