Commit 039cefb32cd9a9175a597cc6dd660c187a0a839f
Exists in
master
Merge branch 'master' of git.ucsd.edu:110swag/docs
megkging
Showing 2 changed files Side-by-side Diff
DesignUseCases.tex
View file @
039cefb
Diff suppressed. Click to show
... | ... | @@ -47,11 +47,9 @@ |
47 | 47 | \section{Accounts} |
48 | 48 | \subsection{[A1] User Registration} |
49 | 49 | \begin{description}[style=multiline,leftmargin=3cm] |
50 | -\item[Description]{To create and save decks, the system requires the user | |
51 | -to create an account prior. The user will be able to create an account | |
52 | -through registering.} | |
50 | +\item[Description]{To create flashcards and save them into decks, the system requires the user to create an account prior. The user will be able to create an account by registering.} | |
53 | 51 | \item[Desired Outcome]{An account will be created for the user from the |
54 | -specified username, password, email. The user will be able to log into | |
52 | +specified username, password, and email. The user will be able to log into | |
55 | 53 | the aforementioned account.} |
56 | 54 | \\ |
57 | 55 | \item[User Goals]{The user shall have an account to participate in the |
... | ... | @@ -65,7 +63,7 @@ |
65 | 63 | |
66 | 64 | \item[Status]{Implemented} |
67 | 65 | |
68 | -\item[Pre-conditions]: None. | |
66 | +\item[Pre-conditions]{None} | |
69 | 67 | |
70 | 68 | \item[Post-conditions] |
71 | 69 | |
72 | 70 | |
73 | 71 | |
74 | 72 | |
75 | 73 | |
76 | 74 | |
77 | 75 | |
78 | 76 | |
79 | 77 | |
80 | 78 | |
81 | 79 | |
82 | 80 | |
... | ... | @@ -84,37 +82,33 @@ |
84 | 82 | \item |
85 | 83 | {The frontend renders the login form described in login.html.} |
86 | 84 | \item |
87 | - {The User shall click the sign up toggle.} | |
85 | + {The user shall click the sign up tab.} | |
88 | 86 | \item |
89 | - {The frontend shall render a registration form and display it to the User.} | |
87 | + {The frontend shall render a registration form and display it to the user.} | |
90 | 88 | \item |
91 | - {The User shal fill in the form.} | |
89 | + {The user shall fill in the form.} | |
92 | 90 | \item |
93 | 91 | {The frontend checks that the provided email is not invalid, and that |
94 | - the password is not valid. If anything is not valid, it displays an | |
92 | + the password is not invalid. If anything is not valid, it displays an | |
95 | 93 | error and returns this to the user. } |
96 | 94 | \item |
97 | - {If the form is valid, the frontent POSTs the form in JSON format to the | |
98 | - server API at /api/verify\_email/.} | |
95 | + {If the form is valid, the frontend POSTs the form in JSON format to the | |
96 | + backend API at /api/verify\_email/.} | |
99 | 97 | \item |
100 | - {The backend deserializes and validates the data in /api/register. If it's not valid, it | |
101 | - returns an error to the frontend.} | |
98 | + {The backend deserializes and validates the data in /api/register. If it's not valid, it returns an error to the frontend.} | |
102 | 99 | \item |
103 | - {The backend creates a new User object from the provided data, filling | |
100 | + {The backend creates a new user object from the provided data, filling | |
104 | 101 | in the email and password fields in models.py in model method create\_user.} |
105 | 102 | \item |
106 | - {The backend saves the User object in models.py.} | |
103 | + {The backend saves the user object in models.py.} | |
107 | 104 | \item |
108 | - {The backend marks the User's email as unverified.} | |
105 | + {The backend marks the user's email as unverified.} | |
109 | 106 | \item |
110 | - {The backend sends an email to the User's address with a link to | |
111 | - validate the user's email address from models.py in function send\_confirmation\_email.} | |
107 | + {The backend sends an email to the user's address with a link to validate the user's email address from models.py in function send\_confirmation\_email.} | |
112 | 108 | \item |
113 | - {The backend responds with success and logs the User in on a new | |
114 | - session for the User. } | |
109 | + {The backend responds with success and logs the user in on a new session for the User.} | |
115 | 110 | \item |
116 | - {The frontend reports success to the User and stores the sessionid for | |
117 | - future requests.} | |
111 | + {The frontend reports success to the user and stores the sessionid for future requests.} | |
118 | 112 | \end{enumerate} |
119 | 113 | |
120 | 114 | {Verification Workflow:} |
121 | 115 | |
122 | 116 | |
123 | 117 | |
... | ... | @@ -122,18 +116,16 @@ |
122 | 116 | \begin{enumerate} |
123 | 117 | \itemsep1pt\parskip0pt\parsep0pt |
124 | 118 | \item |
125 | - {The User receives an email with a link to verify their email. The | |
126 | - User clicks the link} | |
119 | + {The user receives an email with a link to verify their email. The user clicks the link} | |
127 | 120 | \item |
128 | 121 | {The frontend in VerifyEmailController submits a POST request to the backend.} |
129 | 122 | \item |
130 | - {The backend validates the code in views.py in function veryify\_email. If the code is not valid, it returns | |
131 | - an error to the frontend.} | |
123 | + {The backend validates the code in views.py in function veryify\_email. If the code is not valid, it returns an error to the frontend.} | |
132 | 124 | \item |
133 | - {The backend marks the user's email as confirmed and saves the User object | |
125 | + {The backend marks the user's email as confirmed and saves the user object | |
134 | 126 | again in models.py in function confirm\_email. The user's account is now active.} |
135 | 127 | \item |
136 | - {The frontend's VerifyEmailController.js reports success and logs the User in to the application. } | |
128 | + {The frontend's VerifyEmailController.js reports success and logs the user in to the application.} | |
137 | 129 | \end{enumerate} |
138 | 130 | |
139 | 131 | \end{description} |
... | ... | @@ -142,7 +134,7 @@ |
142 | 134 | \subsection{[A2] User Login} |
143 | 135 | |
144 | 136 | \begin{description} |
145 | -\item[Description]{User is able to login to personal account.} | |
137 | +\item[Description]{The user is able to login to personal account.} | |
146 | 138 | |
147 | 139 | \item[Desired Outcome]{The user shall be able to provide their username and |
148 | 140 | password to access their courses and flash cards. The user shall gain |
... | ... | @@ -165,8 +157,8 @@ |
165 | 157 | \begin{itemize} |
166 | 158 | \itemsep1pt\parskip0pt\parsep0pt |
167 | 159 | \item |
168 | - {The User has registered an account.} | |
169 | - {The User knows their email and password.} | |
160 | + {The user has registered an account.} | |
161 | + {The user knows their email and password.} | |
170 | 162 | \end{itemize} |
171 | 163 | |
172 | 164 | \item[Post-conditions] |
173 | 165 | |
... | ... | @@ -174,10 +166,10 @@ |
174 | 166 | \begin{itemize} |
175 | 167 | \itemsep1pt\parskip0pt\parsep0pt |
176 | 168 | \item |
177 | - {The User can navigate the site and see their data.} | |
169 | + {The user can navigate the site and see their data.} | |
178 | 170 | \end{itemize} |
179 | 171 | |
180 | -\item[Trigger]{The User wants to use the application and its core features.} | |
172 | +\item[Trigger]{The user wants to use the application and its core features.} | |
181 | 173 | |
182 | 174 | \item[Workflow] |
183 | 175 | |
184 | 176 | |
185 | 177 | |
186 | 178 | |
187 | 179 | |
188 | 180 | |
189 | 181 | |
190 | 182 | |
... | ... | @@ -186,29 +178,29 @@ |
186 | 178 | \item |
187 | 179 | {The frontend shall render the login form described in login.html and implemented in LoginController.js} |
188 | 180 | \item |
189 | -{The User shall type in their email and password.} | |
181 | +{The user shall type in their email and password.} | |
190 | 182 | \item |
191 | - {The backend shall verify that the User has submitted their email and password in views.py in function login.} | |
183 | + {The backend shall verify that the user has submitted their email and password in views.py in function login.} | |
192 | 184 | \item |
193 | - {The backend shall check that the User is active in views.py in function login.} | |
185 | + {The backend shall check that the user is active in views.py in function login.} | |
194 | 186 | \item |
195 | - {The backend shall log the User in using the Django login feature.} | |
187 | + {The backend shall log the user in using the Django login feature.} | |
196 | 188 | \item |
197 | - {The frontend shall displays the home page for the User.} | |
189 | + {The frontend shall displays the home page for the user.} | |
198 | 190 | \end{enumerate} |
199 | 191 | \end{description} |
200 | 192 | \newpage |
201 | 193 | |
202 | 194 | \subsection{[A3] Add a Class} |
203 | 195 | \begin{description} |
204 | -\item[Description]{The User shall be able to add a class and access the | |
196 | +\item[Description]{The user shall be able to add a class and access the | |
205 | 197 | flashcards associated with that class.} |
206 | 198 | |
207 | 199 | \item[Desired Outcome]{The class shall be connected to the student's account |
208 | -and the User shall have the ability to read and publish flashcards | |
200 | +and the user shall have the ability to read and publish flashcards | |
209 | 201 | for this class.} |
210 | 202 | \\ |
211 | -\item[User Goals]{The User wants to publish flashcards for this class, and | |
203 | +\item[User Goals]{The user wants to publish flashcards for this class, and | |
212 | 204 | read the flashcards for this class that are published by other users.} |
213 | 205 | |
214 | 206 | \item[Primary Actor]{User (student)} |
215 | 207 | |
... | ... | @@ -225,9 +217,9 @@ |
225 | 217 | \begin{itemize} |
226 | 218 | \itemsep1pt\parskip0pt\parsep0pt |
227 | 219 | \item |
228 | - {The User has registered an account.} | |
220 | + {The user has registered an account.} | |
229 | 221 | \item |
230 | - {The User has successfully logged in to the application.} | |
222 | + {The user has successfully logged in to the application.} | |
231 | 223 | \end{itemize} |
232 | 224 | |
233 | 225 | \item[Post-conditions] |
234 | 226 | |
235 | 227 | |
236 | 228 | |
237 | 229 | |
... | ... | @@ -235,25 +227,25 @@ |
235 | 227 | \begin{itemize} |
236 | 228 | \itemsep1pt\parskip0pt\parsep0pt |
237 | 229 | \item |
238 | - {The User can view the flashcards being published for the class and | |
230 | + {The user can view the flashcards being published for the class and | |
239 | 231 | add them to their deck.} |
240 | 232 | \item |
241 | - {The User can publish flashcards to be viewed and added by other users | |
233 | + {The user can publish flashcards to be viewed and added by other users | |
242 | 234 | in the same class.} |
243 | 235 | \end{itemize} |
244 | 236 | |
245 | -\item[Trigger]{The User wants to make flashcards and view flashcards for a class.} | |
237 | +\item[Trigger]{The user wants to make flashcards and view flashcards for a class.} | |
246 | 238 | |
247 | 239 | \item[Workflow] |
248 | 240 | |
249 | 241 | \begin{enumerate} |
250 | 242 | \itemsep1pt\parskip0pt\parsep0pt |
251 | 243 | \item |
252 | - {The User shall click "Add a Class" from the drop down menu in the upper left hand corner.} | |
244 | + {The user shall click "Add a Class" from the "Classes" drop down menu in the upper left hand corner.} | |
253 | 245 | \item |
254 | 246 | {The frontend shall navigate to the new page described by addclass.html.} |
255 | 247 | \item |
256 | - {The User shall begin to type the class department code, course title, course number, or instructor in the text box.} | |
248 | + {The user shall begin to type the class department code, course title, course number, or instructor in the text box.} | |
257 | 249 | \item |
258 | 250 | {The frontend in ClassAddController.js shall send a get request to the backend at api/sections/search/.} |
259 | 251 | \item |
260 | 252 | |
... | ... | @@ -261,11 +253,11 @@ |
261 | 253 | \item |
262 | 254 | {The frontend shall show the classes that the backend has found.} |
263 | 255 | \item |
264 | - {The User shall select from the classes the one that they want to add.} | |
256 | + {The user shall select from the classes the one that they want to add.} | |
265 | 257 | \item |
266 | 258 | {The frontend shall enable the 'Add Class' button.} |
267 | 259 | \item |
268 | - {The User shall click 'Add Class' button to the right of the text box.} | |
260 | + {The user shall click 'Add Class' button to the right of the text box.} | |
269 | 261 | \item |
270 | 262 | {The frontend shall send a post request to api/sections/.} |
271 | 263 | \item |
... | ... | @@ -273,7 +265,7 @@ |
273 | 265 | \item |
274 | 266 | {The backend in models.py in function enroll shall add the class to the User's sections.} |
275 | 267 | \item |
276 | - {The frontend shall redirect the User to the class's Live Feed using the ClassAddController.js.} | |
268 | + {The frontend shall redirect the user to the class's Live Feed using the ClassAddController.js.} | |
277 | 269 | \item |
278 | 270 | {The frontend shall present the live feed for the class by using feed.html and FeedController.js.} |
279 | 271 | |
280 | 272 | |
281 | 273 | |
282 | 274 | |
... | ... | @@ -285,20 +277,20 @@ |
285 | 277 | \itemsep1pt\parskip0pt\parsep0pt |
286 | 278 | \item []{ Precondition: The class has a whitelist, a whitelist is a list of email addresses that can add themselves to the class.\\} |
287 | 279 | \item |
288 | - {The User shall select their desired class, which has a whitelist, by clicking on ``Add Class''.} | |
280 | + {The user shall select their desired class, which has a whitelist, by clicking on ``Add Class''.} | |
289 | 281 | \item |
290 | 282 | {The frontend shall submit a POST request to /api/me/sections with |
291 | 283 | the course ID that the User typed. } |
292 | 284 | \item |
293 | 285 | {The backend shall check if there is a whitelist for the class that the |
294 | - User has selected in models.py at function is\_whitelisted.} | |
286 | + user has selected in models.py at function is\_whitelisted.} | |
295 | 287 | \item |
296 | 288 | {The backend shall check if the user is on the whitelist in models.py |
297 | 289 | in function is\_user\_on\_whitelist.} |
298 | 290 | \item |
299 | - {The backend shall add the User to the class following steps above.} | |
291 | + {The backend shall add the user to the class following steps above.} | |
300 | 292 | \item |
301 | - {The frontend shall redirect the User to the class's live feed followed the last step in the Workflow above.} | |
293 | + {The frontend shall redirect the user to the class's live feed followed the last step in the Workflow above.} | |
302 | 294 | \end{enumerate} |
303 | 295 | |
304 | 296 | \item[Alternate Workflow: User is not whitelisted.] |
305 | 297 | |
306 | 298 | |
... | ... | @@ -322,14 +314,14 @@ |
322 | 314 | \subsection{[A4] Drop a Class} |
323 | 315 | |
324 | 316 | \begin{description} |
325 | -\item[Description]{The User can remove themselves from a course he/she is | |
317 | +\item[Description]{The user can remove themselves from a course he/she is | |
326 | 318 | registered to} |
327 | 319 | |
328 | -\item[Desired Outcome]{The User has dropped the class and no longer need | |
320 | +\item[Desired Outcome]{The user has dropped the class and no longer need | |
329 | 321 | access to the flashcards for said class. This means they can no longer |
330 | 322 | see the flashcards associated to the class that they dropped } |
331 | 323 | \\ |
332 | -\item[User Goals]{The User shall not have access to a class and the | |
324 | +\item[User Goals]{The user shall not have access to a class and the | |
333 | 325 | flashcards associated with that class. They will no longer see the class |
334 | 326 | listed in their drop down menu.} |
335 | 327 | |
336 | 328 | |
337 | 329 | |
338 | 330 | |
... | ... | @@ -347,13 +339,13 @@ |
347 | 339 | \begin{itemize} |
348 | 340 | \itemsep1pt\parskip0pt\parsep0pt |
349 | 341 | \item |
350 | - {The User has a valid account.} | |
342 | + {The user has a valid account.} | |
351 | 343 | \item |
352 | - {The User is logged in.} | |
344 | + {The user is logged in.} | |
353 | 345 | \item |
354 | - {The User has enrolled in at least one class.} | |
346 | + {The user has enrolled in at least one class.} | |
355 | 347 | \item |
356 | - {The User has navigated to the Settings page.} | |
348 | + {The user has navigated to the Settings page.} | |
357 | 349 | \end{itemize} |
358 | 350 | |
359 | 351 | \item[Post-conditions]{} |
360 | 352 | |
361 | 353 | |
362 | 354 | |
363 | 355 | |
... | ... | @@ -361,25 +353,25 @@ |
361 | 353 | \begin{itemize} |
362 | 354 | \itemsep1pt\parskip0pt\parsep0pt |
363 | 355 | \item |
364 | - {User shall no longer have access to dropped class, or associated | |
356 | + {The user shall no longer have access to dropped class, or associated | |
365 | 357 | flashcards} |
366 | 358 | \end{itemize} |
367 | 359 | |
368 | -\item[Trigger]{User no longer wants to see flashcards from that class.} | |
360 | +\item[Trigger]{The user no longer wants to see flashcards from that class.} | |
369 | 361 | |
370 | 362 | \item[Workflow] |
371 | 363 | |
372 | 364 | \begin{enumerate} |
373 | 365 | \itemsep1pt\parskip0pt\parsep0pt |
374 | 366 | \item |
375 | - {The User shall click `Drop' button to the right of the class they wish to drop.} | |
367 | + {The user shall click `Drop' button to the right of the class they wish to drop.} | |
376 | 368 | \item |
377 | 369 | {The frontend shall submit a DELETE request to |
378 | 370 | /api/me/sections/\textless{}section ID number\textgreater{}.} |
379 | 371 | \item |
380 | - {The backend shall check that the User is enrolled in the section in models.py in function drop.} | |
372 | + {The backend shall check that the user is enrolled in the section in models.py in function drop.} | |
381 | 373 | \item |
382 | - {The server shall remove the selected class from a user's list of section in models.py in function drop. } | |
374 | + {The server shall remove the selected class from a user's list of section in models.py in function drop.} | |
383 | 375 | \item |
384 | 376 | {The frontend shall remove the class from the list in setting and show toast reading 'Dropped'.} |
385 | 377 | \end{enumerate} |
386 | 378 | |
... | ... | @@ -391,10 +383,10 @@ |
391 | 383 | \subsection{[A5] Password change} |
392 | 384 | |
393 | 385 | \begin{description} |
394 | -\item[Description]{The User shall be able to change the password for their | |
386 | +\item[Description]{The user shall be able to change the password for their | |
395 | 387 | account in the account settings. } |
396 | 388 | |
397 | -\item[Desired Outcome]{The User's password shall be changed and the User | |
389 | +\item[Desired Outcome]{The user's password shall be changed and the User | |
398 | 390 | shall be able to log in with the new password in the future} |
399 | 391 | \\\\ |
400 | 392 | \item[User Goals]{The User wants to use a different password in the future} |
... | ... | @@ -404,7 +396,7 @@ |
404 | 396 | \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User |
405 | 397 | Login} |
406 | 398 | \\ |
407 | -\item[Details]{The User provides their current password and a new password | |
399 | +\item[Details]{The user provides their current password and a new password | |
408 | 400 | in a form. If the current password is correct, the system updates their |
409 | 401 | password to the requested new password.} |
410 | 402 | |
411 | 403 | |
412 | 404 | |
413 | 405 | |
... | ... | @@ -417,13 +409,13 @@ |
417 | 409 | \begin{itemize} |
418 | 410 | \itemsep1pt\parskip0pt\parsep0pt |
419 | 411 | \item |
420 | - {The User has registered an account.} | |
412 | + {The user has registered an account.} | |
421 | 413 | \item |
422 | - {The User has logged in.} | |
414 | + {The user has logged in.} | |
423 | 415 | \item |
424 | - {The User knows their current password.} | |
416 | + {The user knows their current password.} | |
425 | 417 | \item |
426 | - {The User has navigated to the Settings page.} | |
418 | + {The user has navigated to the Settings page.} | |
427 | 419 | \end{itemize} |
428 | 420 | |
429 | 421 | \item[Post-conditions] |
430 | 422 | |
431 | 423 | |
432 | 424 | |
433 | 425 | |
434 | 426 | |
... | ... | @@ -431,24 +423,24 @@ |
431 | 423 | \begin{itemize} |
432 | 424 | \itemsep1pt\parskip0pt\parsep0pt |
433 | 425 | \item |
434 | - {The User's password is changed} | |
426 | + {The user's password is changed} | |
435 | 427 | \item |
436 | - {The User can log in with the new password} | |
428 | + {The user can log in with the new password} | |
437 | 429 | \end{itemize} |
438 | 430 | |
439 | -\item[Trigger]{The User wants to change their password.} | |
431 | +\item[Trigger]{The user wants to change their password.} | |
440 | 432 | |
441 | 433 | \item[Error Handling] |
442 | 434 | \begin{description} |
443 | 435 | \item[\small Missing Fields] \begin{itemize} |
444 | -\item The client shall enforce required fields | |
445 | -\item The server will return an HTTP Bad Request error to the client. | |
436 | +\item The frontend shall enforce required fields | |
437 | +\item The backend will return an HTTP Bad Request error to the frontend. | |
446 | 438 | \end{itemize} |
447 | 439 | \item[\small Incorrect Old Password] \begin{itemize} |
448 | -\item The server will return an HTTP Forbidden error to the client. | |
440 | +\item The backend will return an HTTP Forbidden error to the frontend. | |
449 | 441 | \end{itemize} |
450 | 442 | \item[\small Blank New Password] \begin{itemize} |
451 | -\item The server will return an HTTP Bad Request error to the client. | |
443 | +\item The backend will return an HTTP Bad Request error to the frontend. | |
452 | 444 | \end{itemize} |
453 | 445 | \end{description} |
454 | 446 | \item[Workflow] |
... | ... | @@ -459,7 +451,7 @@ |
459 | 451 | {The frontend shall render a form that requires the user to enter their |
460 | 452 | old password and new password from settings.html} |
461 | 453 | \item |
462 | - {The User shall type in their current password, the desired new | |
454 | + {The user shall type in their current password, the desired new | |
463 | 455 | password, and retype the desired new password to confirm.} |
464 | 456 | \item |
465 | 457 | {The frontend shall submit the data to the server by sending a PATCH |
... | ... | @@ -470,7 +462,7 @@ |
470 | 462 | {The backend shall check the user's current password in views.py in function patch under UserDetail.} |
471 | 463 | \item The backend shall update the user's current password in views.py in function patch under UserDetail. |
472 | 464 | \item |
473 | - {The frontend shall present a toast reading "Password successfully changed" and redirect the User to the Add a Class page.} | |
465 | + {The frontend shall present a toast reading "Password successfully changed" and redirect the user to the Add a Class page.} | |
474 | 466 | \end{enumerate} |
475 | 467 | \end{description} |
476 | 468 | {} |
477 | 469 | |
478 | 470 | |
... | ... | @@ -482,13 +474,13 @@ |
482 | 474 | \subsection{[A6] Password reset} |
483 | 475 | |
484 | 476 | \begin{description} |
485 | -\item[Description]{The User shall be able to reset their password without | |
477 | +\item[Description]{The user shall be able to reset their password without | |
486 | 478 | being logged in.} |
487 | 479 | |
488 | -\item[Desired Outcome]{The User's password shall be changed to one that | |
480 | +\item[Desired Outcome]{The user's password shall be changed to one that | |
489 | 481 | they remember.} |
490 | 482 | \\ |
491 | -\item[User Goals]{The User will be able to log into the site with a new password.} | |
483 | +\item[User Goals]{The user will be able to log into the site with a new password.} | |
492 | 484 | |
493 | 485 | \item[Primary Actor]{User (student)} |
494 | 486 | |
... | ... | @@ -497,7 +489,7 @@ |
497 | 489 | \item[Details]{The user provides their email in a password reset form. If |
498 | 490 | the address is valid, the site sends a password reset link with a random |
499 | 491 | token to that address. If the address is invalid, the site does not send |
500 | -a link. For security reasons, we do not reveal to the user whether the | |
492 | +a link. For security reasons, we do not reveal to the User whether the | |
501 | 493 | email address was valid, and we expire the link after 24 hours. When a |
502 | 494 | user visits the link emailed to them, they are able to specify a new |
503 | 495 | password in a form. When they submit the form, their password is updated |
504 | 496 | |
505 | 497 | |
... | ... | @@ -512,11 +504,11 @@ |
512 | 504 | \begin{itemize} |
513 | 505 | \itemsep1pt\parskip0pt\parsep0pt |
514 | 506 | \item |
515 | - {The User has created an account before.} | |
507 | + {The user has created an account before.} | |
516 | 508 | \item |
517 | - {The User knows the email address attached to their account for our application.} | |
509 | + {The user knows the email address attached to their account for our application.} | |
518 | 510 | \item |
519 | - {The User can log into their email account.} | |
511 | + {The user can log into their email account.} | |
520 | 512 | \end{itemize} |
521 | 513 | |
522 | 514 | \item[Post-conditions] |
523 | 515 | |
524 | 516 | |
... | ... | @@ -524,12 +516,12 @@ |
524 | 516 | \begin{itemize} |
525 | 517 | \itemsep1pt\parskip0pt\parsep0pt |
526 | 518 | \item |
527 | - {The User's password is changed.} | |
519 | + {The user's password is changed.} | |
528 | 520 | \item |
529 | - {The User can log in with the new password.} | |
521 | + {The user can log in with the new password.} | |
530 | 522 | \end{itemize} |
531 | 523 | |
532 | -\item[Trigger]{The User wants to log into the site but does not know their password.} | |
524 | +\item[Trigger]{The user wants to log into the site but does not know their password.} | |
533 | 525 | \item[Workflow] |
534 | 526 | |
535 | 527 | \begin{enumerate} |
... | ... | @@ -539,7 +531,7 @@ |
539 | 531 | \item |
540 | 532 | {The frontend shall render the password reset page from the template requestpasswordreset.html.} |
541 | 533 | \item |
542 | - {The User shall type in their email address for their account and click the "Reset" button.} | |
534 | + {The user shall type in their email address for their account and click the "Reset" button.} | |
543 | 535 | \item |
544 | 536 | {The frontend shall send a POST request to /api/request\_password\_reset/ from RequestResetController.js.} |
545 | 537 | \item |
546 | 538 | |
547 | 539 | |
... | ... | @@ -549,14 +541,13 @@ |
549 | 541 | {The backend shal send an email to the User with a link to the password reset page in models.py in function |
550 | 542 | request\_password\_reset.} |
551 | 543 | \item |
552 | - {The User will navigate to their email account, open the email, and click the link.} | |
544 | + {The user will navigate to their email account, open the email, and click the link.} | |
553 | 545 | \item |
554 | 546 | {The frontend shall render the password reset page from the template resetpassword.html.} |
555 | 547 | \item |
556 | - {The User shall type in their new password and re-type it to confirm it.} | |
548 | + {The user shall type in their new password and re-type it to confirm it.} | |
557 | 549 | \item |
558 | - {The frontend shall check if the new password is long enough and if the confirmed password is the same as | |
559 | - the new password in ResetPasswordController.js.} | |
550 | + {The frontend shall check if the new password is long enough and if the confirmed password is the same as the new password in ResetPasswordController.js.} | |
560 | 551 | \item |
561 | 552 | {The frontend shall send a POST request to /api/reset\_password from ResetPasswordController.js.} |
562 | 553 | \item |
... | ... | @@ -564,7 +555,7 @@ |
564 | 555 | \item |
565 | 556 | {The frontend shall redirect the User to the login page. } |
566 | 557 | \item |
567 | - {The User shall use their new password to login to the application.} | |
558 | + {The user shall use their new password to login to the application.} | |
568 | 559 | \end{enumerate} |
569 | 560 | \end{description} |
570 | 561 | \newpage |
571 | 562 | |
572 | 563 | |
... | ... | @@ -574,16 +565,12 @@ |
574 | 565 | \subsection{[A7] Limit Student Access to Courses} |
575 | 566 | |
576 | 567 | \begin{description} |
577 | -\item[Description]{The instructor shall be able to limit access to the | |
578 | -courses that he is in charge of by whitelisting only those students that | |
579 | -are actually in the class.} | |
568 | +\item[Description]{The instructor shall be able to limit access to the courses that they are in charge of by whitelisting only those students that are actually in the class.} | |
580 | 569 | |
581 | -\item[Desired Outcome]{The class will have limited access and only those | |
582 | -users who are whitelisted may enroll in the class.} | |
570 | +\item[Desired Outcome]{The class will have limited access and only those Users who are whitelisted may enroll in the class.} | |
583 | 571 | \\ |
584 | -\item[User Goals]{The instructor wants to limit access to his class so only | |
585 | -the students who are actually in his class participate, and nobody | |
586 | -else.} | |
572 | +\item[User Goals]{The instructor wants to limit access to their class so only | |
573 | +the students who are actually in their class participate, and nobody else.} | |
587 | 574 | |
588 | 575 | \item[Primary Actor]{Instructor} |
589 | 576 | |
... | ... | @@ -599,7 +586,7 @@ |
599 | 586 | \begin{itemize} |
600 | 587 | \itemsep1pt\parskip0pt\parsep0pt |
601 | 588 | \item |
602 | - {User has valid instructor's account} | |
589 | + {The user has valid instructor's account} | |
603 | 590 | \end{itemize} |
604 | 591 | |
605 | 592 | \item[Post-conditions] |
606 | 593 | |
... | ... | @@ -611,15 +598,15 @@ |
611 | 598 | \end{itemize} |
612 | 599 | |
613 | 600 | \item[Trigger]{The course instructor wants to limit the students who |
614 | -can add his class on our application.} | |
601 | +can add their class on our application.} | |
615 | 602 | |
616 | 603 | \item[Workflow] |
617 | 604 | |
618 | 605 | \begin{enumerate} |
619 | 606 | \itemsep1pt\parskip0pt\parsep0pt |
620 | 607 | \item |
621 | - {The instructor emails the administrators from his UCSD email address | |
622 | - and requests to limit access to his course. He provides a list of | |
608 | + {The instructor emails the administrators from their UCSD email address | |
609 | + and requests to limit access to their course. They provides a list of | |
623 | 610 | emails of the students that are to be whitelisted.} |
624 | 611 | \item |
625 | 612 | {The administrators visit a custom admin page, select the course, and |
... | ... | @@ -630,7 +617,7 @@ |
630 | 617 | attaching it to the section taught by the instructor.} |
631 | 618 | \item |
632 | 619 | {The backend shall add any existing users whose email addresses appear |
633 | - in the whitelist to the class. } | |
620 | + in the whitelist to the class.} | |
634 | 621 | \end{enumerate} |
635 | 622 | \end{description} |
636 | 623 | \newpage |
637 | 624 | |
638 | 625 | |
... | ... | @@ -638,14 +625,14 @@ |
638 | 625 | \subsection{[A8] User Logout} |
639 | 626 | |
640 | 627 | \begin{description} |
641 | -\item[Description]{The User shall be able to log out of his/her account on | |
628 | +\item[Description]{The user shall be able to log out of their account on | |
642 | 629 | the site.} |
643 | 630 | |
644 | -\item[Desired Outcome]{The User's information and data will no longer be | |
631 | +\item[Desired Outcome]{The user's information and data will no longer be | |
645 | 632 | accessible after logging out. } |
646 | 633 | \\ |
647 | -\item[User Goals]{The User is done with his/her session of using the | |
648 | -website, and wants to make sure others cannot access the data in his/her | |
634 | +\item[User Goals]{The user is done with his/her session of using the | |
635 | +website, and wants to make sure others cannot access the data in their | |
649 | 636 | account.} |
650 | 637 | |
651 | 638 | \item[Primary Actor]{User (student)} |
652 | 639 | |
653 | 640 | |
... | ... | @@ -660,16 +647,16 @@ |
660 | 647 | |
661 | 648 | \item[Post-conditions]{}{The user's data can no longer be accessed.} |
662 | 649 | |
663 | -\item[Trigger]{The User no longer wants to be logged into the application.} | |
650 | +\item[Trigger]{The user no longer wants to be logged into the application.} | |
664 | 651 | |
665 | 652 | \item[Workflow] |
666 | 653 | |
667 | 654 | \begin{enumerate} |
668 | 655 | \itemsep1pt\parskip0pt\parsep0pt |
669 | 656 | \item |
670 | - {The User clicks the 'Logout' button in the upper right hand corner.} | |
657 | + {The user clicks the 'Logout' button in the upper right hand corner.} | |
671 | 658 | \item |
672 | - {The backend shall log the User out using the Django logout feature.} | |
659 | + {The backend shall log the user out using the Django logout feature.} | |
673 | 660 | \item |
674 | 661 | {The frontend renders the application login page using login.html.} |
675 | 662 | \end{enumerate} |
676 | 663 | |
677 | 664 | |
... | ... | @@ -683,12 +670,12 @@ |
683 | 670 | \subsection{[A9] Contact Admin} |
684 | 671 | |
685 | 672 | \begin{description} |
686 | -\item[Description]{The User shall be able to contact the admin.} | |
673 | +\item[Description]{The user shall be able to contact the admin.} | |
687 | 674 | |
688 | -\item[Desired Outcome]{The User shall send a message to the admin; the | |
675 | +\item[Desired Outcome]{The user shall send a message to the admin; the | |
689 | 676 | admin shall receive the message.} |
690 | 677 | |
691 | -{User Goals:}{The User sends a message to the admin.} | |
678 | +{User Goals:}{The user sends a message to the admin.} | |
692 | 679 | |
693 | 680 | \item[Primary Actor]{User} |
694 | 681 | |
... | ... | @@ -702,7 +689,7 @@ |
702 | 689 | |
703 | 690 | \item[Post-conditions]{The admin receives the user's message.} |
704 | 691 | |
705 | -\item[Trigger]{The User wants to contact the adiminstators of the site with | |
692 | +\item[Trigger]{The user wants to contact the adiminstators of the site with | |
706 | 693 | bug reports, questions, or praise. } |
707 | 694 | |
708 | 695 | \item[Workflow] |
709 | 696 | |
710 | 697 | |
711 | 698 | |
... | ... | @@ -710,17 +697,17 @@ |
710 | 697 | \begin{enumerate} |
711 | 698 | \itemsep1pt\parskip0pt\parsep0pt |
712 | 699 | \item |
713 | - {The User shall click the '?' button in the right corner of the navigation bar.} | |
700 | + {The user shall click the '?' button in the right corner of the navigation bar.} | |
714 | 701 | \item |
715 | 702 | {The frontend shall render the page using the help.html template.} |
716 | 703 | \item |
717 | - {The User shall scroll to the bottom of the page.} | |
704 | + {The user shall scroll to the bottom of the page.} | |
718 | 705 | \item |
719 | - {The User shall click the text reading "Send Us an Email!"} | |
706 | + {The user shall click the text reading "Send Us an Email!"} | |
720 | 707 | \item |
721 | 708 | {The frontend shall open Microsoft Outlook or a similar application using the HelpController.js.} |
722 | 709 | \item |
723 | - {The User shall see our email address in the recipients text box.} | |
710 | + {The user shall see our email address in the recipients text box.} | |
724 | 711 | \end{enumerate} |
725 | 712 | \end{description} |
726 | 713 | \newpage |
727 | 714 | |
728 | 715 | |
... | ... | @@ -730,13 +717,13 @@ |
730 | 717 | \subsection{[F1] Push Flashcard} |
731 | 718 | |
732 | 719 | \begin{description} |
733 | -\item[Description]{The User shall be able to create a flashcard with their | |
720 | +\item[Description]{The user shall be able to create a flashcard with their | |
734 | 721 | input. } |
735 | 722 | |
736 | -\item[Desired Outcome]{The User shall have the flashcard added to their own | |
723 | +\item[Desired Outcome]{The user shall have the flashcard added to their own | |
737 | 724 | deck and the Live Feed. } |
738 | 725 | \\ |
739 | -\item[User Goals]{The User will see their flashcard in their deck and the | |
726 | +\item[User Goals]{The user will see their flashcard in their deck and the | |
740 | 727 | flashcard will be shared with others. } |
741 | 728 | |
742 | 729 | \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User |
743 | 730 | |
744 | 731 | |
... | ... | @@ -747,11 +734,11 @@ |
747 | 734 | \begin{itemize} |
748 | 735 | \itemsep1pt\parskip0pt\parsep0pt |
749 | 736 | \item |
750 | - {The User has an account.} | |
737 | + {The user has an account.} | |
751 | 738 | \item |
752 | - {The User has added at least one class.} | |
739 | + {The user has added at least one class.} | |
753 | 740 | \item |
754 | - {The User has navigated to the live feed for a class.} | |
741 | + {The user has navigated to the live feed for a class.} | |
755 | 742 | \end{itemize} |
756 | 743 | |
757 | 744 | \item[Post-conditions] |
758 | 745 | |
759 | 746 | |
760 | 747 | |
761 | 748 | |
762 | 749 | |
763 | 750 | |
... | ... | @@ -759,31 +746,31 @@ |
759 | 746 | \begin{itemize} |
760 | 747 | \itemsep1pt\parskip0pt\parsep0pt |
761 | 748 | \item |
762 | - {The User has flashcard added to their deck.} | |
749 | + {The user has flashcard added to their deck.} | |
763 | 750 | \item |
764 | 751 | {The Flashcard is shown in the Live Feed.} |
765 | 752 | \item |
766 | 753 | {Other users can add this flashcard to their decks.} |
767 | 754 | \end{itemize} |
768 | 755 | |
769 | -\item[Trigger]{The User wants to make a flashcard to study.} | |
756 | +\item[Trigger]{The user wants to make a flashcard to study.} | |
770 | 757 | |
771 | 758 | \item[Workflow] |
772 | 759 | |
773 | 760 | \begin{enumerate} |
774 | 761 | \itemsep1pt\parskip0pt\parsep0pt |
775 | 762 | \item |
776 | - {The User is at the live feed for the class from feed.html.} | |
763 | + {The user is at the live feed for the class from feed.html.} | |
777 | 764 | \item |
778 | - {The User shall click on the '+' button at the bottom right of the screen.} | |
765 | + {The user shall click on the '+' button at the bottom right of the screen.} | |
779 | 766 | \item |
780 | 767 | {The frontend shall present a modal for inputting the flashcard text to the User.} |
781 | 768 | \item |
782 | - {The User shall type in the content of their flashcard.} | |
769 | + {The user shall type in the content of their flashcard.} | |
783 | 770 | \item |
784 | - {The User shall highlight keywords in the flashcard text.} | |
771 | + {The user shall highlight keywords in the flashcard text.} | |
785 | 772 | \item |
786 | - {The User shall click on the `Contribute' button.} | |
773 | + {The user shall click on the `Contribute' button.} | |
787 | 774 | \item {The frontend shall generate a POST request consisting of the flashcard text, |
788 | 775 | blanks, and material date, in JSON form in FeedController.js and send it to /api/flashcards/.} |
789 | 776 | \item |
... | ... | @@ -1156,7 +1143,7 @@ |
1156 | 1143 | {The backend shall save the new mask in models.py.} |
1157 | 1144 | \end{enumerate} |
1158 | 1145 | |
1159 | -{Alternative Workflows:} | |
1146 | +\item [Alternate Workflow] | |
1160 | 1147 | |
1161 | 1148 | \begin{enumerate} |
1162 | 1149 | \itemsep1pt\parskip0pt\parsep0pt |
1163 | 1150 | |
... | ... | @@ -1367,97 +1354,7 @@ |
1367 | 1354 | |
1368 | 1355 | {} |
1369 | 1356 | \section{Decks} |
1370 | -\subsection{[-D2-] Making a deck - Removed} | |
1371 | 1357 | |
1372 | -\begin{description} | |
1373 | -\item[Description]{Upon selecting the right course, the student has the | |
1374 | -power to make a deck by either selecting existing flashcard or adding a | |
1375 | -new flashcard.} | |
1376 | - | |
1377 | -\item[Desired Outcome]{The user can keep track of cards that s/he wants.} | |
1378 | -\\ | |
1379 | -\item[User Goals]{The user has a personal deck ready for review later.} | |
1380 | - | |
1381 | -\item[Primary Actor]{User (student)} | |
1382 | - | |
1383 | -\item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck | |
1384 | -{[}F1{]}, Make a Flashcard {[}F3{]}} | |
1385 | -\\ | |
1386 | -\item[Priority Level]{``Must''} | |
1387 | - | |
1388 | -\item[Status]{In Progress} | |
1389 | - | |
1390 | -\item[Pre-conditions] | |
1391 | - | |
1392 | -\begin{itemize} | |
1393 | -\itemsep1pt\parskip0pt\parsep0pt | |
1394 | -\item | |
1395 | - {The user has an account with the application. } | |
1396 | -\item | |
1397 | - {The user has been added to the desired class.} | |
1398 | -\end{itemize} | |
1399 | - | |
1400 | -\item[Post-conditions] | |
1401 | - | |
1402 | -\begin{itemize} | |
1403 | -\itemsep1pt\parskip0pt\parsep0pt | |
1404 | -\item | |
1405 | - {Desired cards are added to user's deck to the specific class } | |
1406 | -\item | |
1407 | - {User's deck is added to the database.} | |
1408 | -\end{itemize} | |
1409 | - | |
1410 | -\item[Trigger]{The User wants to have a collection of cards.} | |
1411 | - | |
1412 | -\item[Workflow] | |
1413 | - | |
1414 | -\begin{enumerate} | |
1415 | -\itemsep1pt\parskip0pt\parsep0pt | |
1416 | -\item | |
1417 | - {User is at their dashboard.} | |
1418 | -\item | |
1419 | - {User selects the class of interest that they had no activity in yet.} | |
1420 | -\item | |
1421 | - {Client displays the Live Feed for the class.} | |
1422 | -\item | |
1423 | - {User presses ``Pull Flashcard'' button on a Flashcard that they want | |
1424 | - in their Deck.} | |
1425 | -\item | |
1426 | - {The server creates a Deck for the User for the Class of interest.} | |
1427 | -\item | |
1428 | - {The server adds the Flashcard to the User's Deck.} | |
1429 | -\item | |
1430 | - {The Client makes the Flashcard disappear from the Live Feed.} | |
1431 | -\item | |
1432 | - {The Client displays the Flashcard in the User's Deck in the sidebar.} | |
1433 | -\end{enumerate} | |
1434 | - | |
1435 | -{Alternate Workflow:} | |
1436 | - | |
1437 | -\begin{enumerate} | |
1438 | -\itemsep1pt\parskip0pt\parsep0pt | |
1439 | -\item | |
1440 | - {User is at their dashboard.} | |
1441 | -\item | |
1442 | - {User selects the class of interest that they had no activity in yet.} | |
1443 | -\item | |
1444 | - {Client displays the Live Feed for the class.} | |
1445 | -\item | |
1446 | - {The User adds a Flashcard into the Class.} | |
1447 | -\item | |
1448 | - {The server creates a Deck for the User for the Class of interest.} | |
1449 | -\item | |
1450 | - {The server adds the new Flashcard to the User's Deck.} | |
1451 | -\item | |
1452 | - {The Client makes the Flashcard disappear from the Live Feed.} | |
1453 | -\item | |
1454 | - {The Client displays the Flashcard in the User's Deck in the sidebar.} | |
1455 | -\end{enumerate} | |
1456 | -\end{description} | |
1457 | -\newpage | |
1458 | - | |
1459 | -{} | |
1460 | - | |
1461 | 1358 | \subsection{[D1] Remove a card from a deck} |
1462 | 1359 | |
1463 | 1360 | \begin{description} |
... | ... | @@ -1525,7 +1422,7 @@ |
1525 | 1422 | |
1526 | 1423 | {} |
1527 | 1424 | |
1528 | -{Alternate Workflow:} | |
1425 | +\item [Alternate Workflow] | |
1529 | 1426 | |
1530 | 1427 | \begin{enumerate} |
1531 | 1428 | \itemsep1pt\parskip0pt\parsep0pt |
1532 | 1429 | |
1533 | 1430 | |
... | ... | @@ -1551,99 +1448,11 @@ |
1551 | 1448 | \end{enumerate} |
1552 | 1449 | \end{description} |
1553 | 1450 | |
1554 | -\subsection{[-D2-] Shuffling deck - Removed} | |
1555 | 1451 | |
1556 | -\begin{description} | |
1557 | -\item[Description]{User is able to shuffle his/her deck as a way to study | |
1558 | -the flashcards} | |
1559 | - | |
1560 | -\item[Desired Outcome]{When taking a quiz, the user will notice that | |
1561 | -flashcards appear in random order} | |
1562 | - | |
1563 | -{User Goals:}{Improve quiz taking skills and knowledge consumption} | |
1564 | - | |
1565 | -\item[Primary Actor]{User (student)} | |
1566 | - | |
1567 | -\item[Dependency Use Cases]{Deck has been created {[}D2{]}} | |
1568 | -\\ | |
1569 | -\item[Priority Level]{}{''Won't''} | |
1570 | - | |
1571 | -\item[Status]{Implemented } | |
1572 | - | |
1573 | -\item[Pre-conditions] | |
1574 | - | |
1575 | -\begin{itemize} | |
1576 | -\itemsep1pt\parskip0pt\parsep0pt | |
1577 | -\item | |
1578 | - {User must have registered for course } | |
1579 | -\end{itemize} | |
1580 | - | |
1581 | -\begin{itemize} | |
1582 | -\itemsep1pt\parskip0pt\parsep0pt | |
1583 | -\item | |
1584 | - {User must have added cards to deck.} | |
1585 | -\end{itemize} | |
1586 | - | |
1587 | -\item[Post-conditions]{} | |
1588 | - | |
1589 | -\begin{itemize} | |
1590 | -\itemsep1pt\parskip0pt\parsep0pt | |
1591 | -\item | |
1592 | - {User takes a quiz and notice the deck has been shuffled.} | |
1593 | -\end{itemize} | |
1594 | - | |
1595 | -\item[Trigger]{The User wants to review their cards in random order.} | |
1596 | - | |
1597 | -\item[Workflow] | |
1598 | - | |
1599 | -\begin{enumerate} | |
1600 | -\itemsep1pt\parskip0pt\parsep0pt | |
1601 | -\item | |
1602 | - {User is on the homepage.} | |
1603 | -\item | |
1604 | - {User selects the ``Study'' button for the Class they want to view or | |
1605 | - shuffle cards for.} | |
1606 | -\item | |
1607 | - {The Client displays their Deck for the Class of interest.} | |
1608 | -\item | |
1609 | - {User clicks on ``shuffle deck'' button to shuffle the deck, | |
1610 | - randomizing the order in which it will be displayed.} | |
1611 | -\item | |
1612 | - {The Client displays a change in card ordering.} | |
1613 | -\item | |
1614 | - {System reorders cards' study order.} | |
1615 | -\end{enumerate} | |
1616 | - | |
1617 | -{Alternate Workflow: } | |
1618 | - | |
1619 | -\begin{enumerate} | |
1620 | -\itemsep1pt\parskip0pt\parsep0pt | |
1621 | -\item | |
1622 | - {User is on the homepage.} | |
1623 | -\item | |
1624 | - {User selects Class of interest.} | |
1625 | -\item | |
1626 | - {The Client displays the Live Feed for the Class.} | |
1627 | -\item | |
1628 | - {User clicks on ``shuffle deck'' button to shuffle the deck, | |
1629 | - randomizing the order in which it will be displayed.} | |
1630 | -\item | |
1631 | - {The Client displays a change in card ordering.} | |
1632 | -\item | |
1633 | - {System reorders cards' study order.} | |
1634 | -\end{enumerate} | |
1635 | -\end{description} | |
1636 | -{} | |
1637 | - | |
1638 | -\newpage | |
1639 | - | |
1640 | -{} | |
1641 | - | |
1642 | 1452 | \subsection{[D2] Viewing cards in deck by pull time} |
1643 | 1453 | |
1644 | 1454 | \begin{description} |
1645 | -\item[Description]{The user is able to organize the deck by Flashcards' | |
1646 | -pull timestamps.} | |
1455 | +\item[Description]{The user is able to organize the deck by time stamp.} | |
1647 | 1456 | |
1648 | 1457 | \item[Desired Outcome]{The user views the deck in time ascending/descending |
1649 | 1458 | order.} |
1650 | 1459 | |
1651 | 1460 | |
1652 | 1461 | |
1653 | 1462 | |
1654 | 1463 | |
... | ... | @@ -1652,24 +1461,25 @@ |
1652 | 1461 | |
1653 | 1462 | \item[Primary Actor]{User (student)} |
1654 | 1463 | |
1655 | -\item[Dependency Use Cases]{View by pull timestamp.} | |
1464 | +\item[Dependency Use Cases]{[A1] User Registration, [A2] User Login, [F3] Pull Flashcard, | |
1465 | +[D1] Create Deck} | |
1656 | 1466 | \\ |
1657 | 1467 | \item[Priority Level]{``Must''} |
1658 | 1468 | |
1659 | -\item[Status]{In Progress} | |
1469 | +\item[Status]{Implemented} | |
1660 | 1470 | |
1661 | 1471 | \item[Pre-conditions] |
1662 | 1472 | |
1663 | 1473 | \begin{itemize} |
1664 | 1474 | \itemsep1pt\parskip0pt\parsep0pt |
1665 | 1475 | \item |
1666 | - {User has an account with the application.} | |
1476 | + {The user has an account with the application.} | |
1667 | 1477 | \item |
1668 | - {User is logged in.} | |
1478 | + {The user is logged in.} | |
1669 | 1479 | \item |
1670 | - {User has a deck with at least 1 flashcard.} | |
1480 | + {The user has a deck with at least 1 flashcard.} | |
1671 | 1481 | \item |
1672 | - {User is at the deck view for a class.} | |
1482 | + {The user is at the live feed for a class.} | |
1673 | 1483 | \end{itemize} |
1674 | 1484 | |
1675 | 1485 | \item[Post-conditions] |
1676 | 1486 | |
1677 | 1487 | |
1678 | 1488 | |
1679 | 1489 | |
... | ... | @@ -1680,46 +1490,24 @@ |
1680 | 1490 | {Cards in the deck are in time order.} |
1681 | 1491 | \end{itemize} |
1682 | 1492 | |
1683 | -\item[Trigger]{The User wants to view their cards in a meaningful order.} | |
1493 | +\item[Trigger]{The user wants to view their cards in a meaningful order.} | |
1684 | 1494 | |
1685 | 1495 | \item[Workflow] |
1686 | 1496 | |
1687 | 1497 | \begin{enumerate} |
1688 | 1498 | \itemsep1pt\parskip0pt\parsep0pt |
1499 | +\item {The user shall select the deck view from the navbar.} | |
1689 | 1500 | \item |
1690 | - {The Client shows the user the Deck View.} | |
1691 | -\item | |
1692 | - {The User shall select the option to sort the deck by ascending time.} | |
1693 | -\item | |
1694 | - {The Client shall submit a form POST request to the server at | |
1695 | - /api/deck/ about the order} | |
1696 | -\item | |
1697 | - {The Server shall return the ordered view of the deck.} | |
1698 | -\item | |
1699 | - {The Client displays the cards in the ascending view of the pull | |
1700 | - time.} | |
1501 | + {The frontend renders the view of the deck from the template deck.html.} | |
1701 | 1502 | \end{enumerate} |
1702 | 1503 | |
1504 | +\item[Alternative Workflow] | |
1505 | +\begin {enumerate} | |
1506 | +\item {The user shall select the list view from the navbar.} | |
1507 | +\item {The frontend renders the view of the deck from the template cardlist.html.} | |
1508 | +\end {enumerate} | |
1703 | 1509 | {} |
1704 | 1510 | |
1705 | -{Alternate WorkFlow:} | |
1706 | - | |
1707 | -\begin{enumerate} | |
1708 | -\itemsep1pt\parskip0pt\parsep0pt | |
1709 | -\item | |
1710 | - {The Client shows the user the Deck View.} | |
1711 | -\item | |
1712 | - {The User shall select the option to sort the deck by descending | |
1713 | - time.} | |
1714 | -\item | |
1715 | - {The Client shall submit a form POST request to the server at | |
1716 | - /api/deck/ about the order} | |
1717 | -\item | |
1718 | - {The Server shall return the descending view of the deck.} | |
1719 | -\item | |
1720 | - {The Client displays the cards in the descending view of the pull | |
1721 | - time.} | |
1722 | -\end{enumerate} | |
1723 | 1511 | \end{description} |
1724 | 1512 | \newpage |
1725 | 1513 |
TestCases.tex
View file @
039cefb
... | ... | @@ -74,7 +74,7 @@ |
74 | 74 | \subsection{[A1] User Registration} |
75 | 75 | \begin{description}[style=multiline,leftmargin=3cm] |
76 | 76 | |
77 | -\item[Description:]{This test case outlines the presentation layer step | |
77 | +\item[Description:]{This test case outlines the presentation layering step | |
78 | 78 | process of a user registering for an account with our application.} |
79 | 79 | |
80 | 80 | \item[Desired Outcome:]{An account will be created for the User from the |
... | ... | @@ -241,7 +241,7 @@ |
241 | 241 | |
242 | 242 | \subsection{[A3] Add a Class} |
243 | 243 | \begin{description} |
244 | -\item[Description:]{This test case outlines the presentation layer step | |
244 | +\item[Description:]{This test case outlines the presentation layering step | |
245 | 245 | process of a user adding a class.} |
246 | 246 | |
247 | 247 | \item[Desired Outcome:]{The class shall be linked with the student's account |
... | ... | @@ -363,7 +363,7 @@ |
363 | 363 | \subsection{[A4] Drop a Class} |
364 | 364 | |
365 | 365 | \begin{description} |
366 | -\item[Description:]{This test case outlines the presentation layer step process of a user dropping a class.} | |
366 | +\item[Description:]{This test case outlines the presentation layering step process of a user dropping a class.} | |
367 | 367 | |
368 | 368 | \item[Desired Outcome:]{The User has dropped the class and no longer needs |
369 | 369 | access to the flashcards for the dropped class. They can no longer |
... | ... | @@ -421,8 +421,8 @@ |
421 | 421 | \subsection{[A5] Password Change} |
422 | 422 | |
423 | 423 | \begin{description} |
424 | -\item[Description:]{The User shall be able to change the password for their | |
425 | -account in the account settings. This requires that they are logged in.} | |
424 | +\item[Description:]{This test case outlines the presentation layering step process | |
425 | +of a user changing their password.} | |
426 | 426 | |
427 | 427 | \item[Desired Outcome:]{The User's password shall be changed and the user |
428 | 428 | shall be able to log in with the new password in the future.} |
... | ... | @@ -495,7 +495,7 @@ |
495 | 495 | \item[Expected Result:] {The System shall display a toast ``Your old password is not correct''.} |
496 | 496 | \\ |
497 | 497 | |
498 | -\item[Workflow:] | |
498 | +\item[Alternate Workflow B:] | |
499 | 499 | \begin{enumerate} |
500 | 500 | \itemsep1pt\parskip0pt\parsep0pt |
501 | 501 | \item |
... | ... | @@ -518,7 +518,7 @@ |
518 | 518 | \subsection{[A6] Password Reset} |
519 | 519 | |
520 | 520 | \begin{description} |
521 | -\item[Description:]{This test case outlines the presentation step layering process of | |
521 | +\item[Description:]{This test case outlines the presentation layering step process of | |
522 | 522 | a user requesting a password reset without logging in.} |
523 | 523 | |
524 | 524 | \item[Desired Outcome:]{The User's password shall be changed to one that |
525 | 525 | |
... | ... | @@ -591,11 +591,12 @@ |
591 | 591 | |
592 | 592 | \item[Alternate Workflow:] |
593 | 593 | \begin{enumerate} |
594 | -\setcounter{enumi}{4} | |
594 | +\setcounter{enumi}{2} | |
595 | 595 | \itemsep1pt\parskip0pt\parsep0pt |
596 | 596 | \item |
597 | - {If no such account exists, the System shall display an error message | |
598 | -``Enter a valid email!'' to UserX.} | |
597 | + {UserX shall submit an invalid email \mbox{``NotUserX@flashy.cards''}.} | |
598 | +\item | |
599 | + {The System shall display an error message ``Enter a valid email!'' to UserX.} | |
599 | 600 | \end{enumerate} |
600 | 601 | |
601 | 602 | \item[Expected Result:] {UserX's password will not be reset.} |
... | ... | @@ -607,7 +608,8 @@ |
607 | 608 | \subsection{[A7] Student Prevented From Accessing A Restricted Course} |
608 | 609 | |
609 | 610 | \begin{description} |
610 | -\item[Description:]{The User shall not be able to access a restricted course.} | |
611 | +\item[Description:]{This test case outlines the presentation layering step process of | |
612 | +an instructor limiting access to a class.} | |
611 | 613 | |
612 | 614 | \item[Desired Outcome:]{The class will have limited access and only those |
613 | 615 | users who are whitelisted may enroll in the class.} |
... | ... | @@ -725,7 +727,8 @@ |
725 | 727 | \subsection{[A9] Contact Admin} |
726 | 728 | |
727 | 729 | \begin{description} |
728 | -\item[Description]{The User shall be able to contact the admin.} | |
730 | +\item[Description]{This test case outlines the presentation layering step | |
731 | +process of a user contacting site admins.} | |
729 | 732 | |
730 | 733 | \item[Desired Outcome]{The User shall send a message to the admin; the |
731 | 734 | admin shall receive the message.} |
... | ... | @@ -820,7 +823,7 @@ |
820 | 823 | \subsection{[F1] Push Flashcard} |
821 | 824 | |
822 | 825 | \begin{description} |
823 | -\item[Description:]{This test case outlines the presentation layer step | |
826 | +\item[Description:]{This test case outlines the presentation layering step | |
824 | 827 | process of a User contributing a flashcard to the live feed and to their deck.} |
825 | 828 | |
826 | 829 | \item[Desired Outcome:]{The User shall have the flashcard added to their own deck |
... | ... | @@ -1248,7 +1251,7 @@ |
1248 | 1251 | \subsection{[F5] Filter Flashcards} |
1249 | 1252 | |
1250 | 1253 | \begin{description} |
1251 | -\item[Description:]{This test case outlines the presentation layer process | |
1254 | +\item[Description:]{This test case outlines the presentation layering process | |
1252 | 1255 | of a user filtering existing flashcards to view only a specified subset.} |
1253 | 1256 | |
1254 | 1257 | \item[Desired Outcome:]{The User shall see flashcards based on the filter |
... | ... | @@ -1318,7 +1321,7 @@ |
1318 | 1321 | \subsection{[F6] Blank Out Words in Flashcard} |
1319 | 1322 | |
1320 | 1323 | \begin{description} |
1321 | -\item[Description:]{This test case outlines the presentation layer process | |
1324 | +\item[Description:]{This test case outlines the presentation layering process | |
1322 | 1325 | of the User to create keywords in a card they are pushing.} |
1323 | 1326 | |
1324 | 1327 | \item[Desired Outcome:]{The blanked out words (visually bolded) in the |
... | ... | @@ -1386,7 +1389,7 @@ |
1386 | 1389 | \subsection{[F7] Fix Flashcard} |
1387 | 1390 | |
1388 | 1391 | \begin{description} |
1389 | -\item[Description:]{This Test Case outlines the presentation layer process | |
1392 | +\item[Description:]{This Test Case outlines the presentation layering process | |
1390 | 1393 | for the User to alter (``fix'') a flashcard they made originally and not have |
1391 | 1394 | to make a new copy of it. It is only a ``fix'' if no other users have the |
1392 | 1395 | flashcard in their Decks AND the User is the author.} |
... | ... | @@ -1473,7 +1476,7 @@ |
1473 | 1476 | \subsection{[F8] Hide cards from feed} |
1474 | 1477 | |
1475 | 1478 | \begin{description} |
1476 | -\item[Description:]{This test case outlines the presentation layer process | |
1479 | +\item[Description:]{This test case outlines the presentation layering process | |
1477 | 1480 | for the User shall be able to hide cards from their own view, on |
1478 | 1481 | the Feed and Deck.} |
1479 | 1482 | |
... | ... | @@ -1560,7 +1563,7 @@ |
1560 | 1563 | |
1561 | 1564 | \begin{description} |
1562 | 1565 | \item[Description:]{This test case outlines the presentation |
1563 | -layer process process of a user viewing a class Feed.} | |
1566 | +layering process process of a user viewing a class Feed.} | |
1564 | 1567 | |
1565 | 1568 | \item[Desired Outcome:]{The System shall show the user the |
1566 | 1569 | Feed for their class.} |
1567 | 1570 | |
1568 | 1571 | |
... | ... | @@ -1617,13 +1620,15 @@ |
1617 | 1620 | \subsection{[D1] Remove a Card from Deck} |
1618 | 1621 | |
1619 | 1622 | \begin{description} |
1620 | -\item[Description:]{This test case outlines the presentation layering step process | |
1621 | -of a user removing a flashcard from their deck.} | |
1623 | +\item[Description:]{This test case outlines the presentation layering | |
1624 | +step process of a user removing a flashcard from their deck.} | |
1622 | 1625 | |
1623 | -\item[Desired Outcome:]{The deck does not display the removed card.} | |
1626 | +\item[Desired Outcome:]{The selected card will not appear in | |
1627 | +the deck.} | |
1624 | 1628 | \\ |
1625 | 1629 | |
1626 | -\item[User Goals:]{The User wants to only review cards that the User wants to review.} | |
1630 | +\item[User Goals:]{The User wants to remove an undesirable card | |
1631 | +from their deck.} | |
1627 | 1632 | |
1628 | 1633 | \item[Dependency Use Cases:]{[A3] Add a class, [F1] Push Flashcard, [F3] Pull Flashcard} |
1629 | 1634 | \\ |
1630 | 1635 | |
1631 | 1636 | |
1632 | 1637 | |
... | ... | @@ -1638,18 +1643,20 @@ |
1638 | 1643 | \item |
1639 | 1644 | {User is logged in as UserX.} |
1640 | 1645 | \item |
1641 | - {UserX has enrolled in the class TEST 101.} | |
1646 | + {UserX has added the class TEST 101.} | |
1642 | 1647 | \item |
1643 | - {UserX has added cards from the feed into their deck.} | |
1648 | + {UserX has created a flashcard with the text | |
1649 | +``This is a bad card''.} | |
1644 | 1650 | \item |
1645 | - {UserX is at the deck/live feed screen for the class TEST 101.} | |
1651 | + {UserX has created a flashcard with the text | |
1652 | +``This is a bad card too''.} | |
1646 | 1653 | \end{itemize} |
1647 | 1654 | |
1648 | 1655 | \item[Postconditions:] |
1649 | 1656 | \begin{itemize} |
1650 | 1657 | \itemsep1pt\parskip0pt\parsep0pt |
1651 | 1658 | \item |
1652 | - {Desired card are hidden from the User.} | |
1659 | + {Selected card is hidden from the User.} | |
1653 | 1660 | \end{itemize} |
1654 | 1661 | |
1655 | 1662 | \item[Trigger:]{UserX wants a card to be removed from their deck.} |
1656 | 1663 | |
1657 | 1664 | |
1658 | 1665 | |
1659 | 1666 | |
1660 | 1667 | |
1661 | 1668 | |
1662 | 1669 | |
1663 | 1670 | |
1664 | 1671 | |
1665 | 1672 | |
... | ... | @@ -1658,40 +1665,42 @@ |
1658 | 1665 | \begin{enumerate} |
1659 | 1666 | \itemsep1pt\parskip0pt\parsep0pt |
1660 | 1667 | \item |
1661 | - {UserX is at the Deck screen for the class.} | |
1668 | + {UserX is at the deck for the class TEST 101.} | |
1662 | 1669 | \item |
1663 | - {UserX shall hover over the card they want to delete and click | |
1664 | - the trash icon (hereafter, the ``Delete'' button) in the lower right | |
1665 | - corner of the card.} | |
1670 | + {UserX shall hover the cursor over the card | |
1671 | +with the text ``This is a bad card''.} | |
1666 | 1672 | \item |
1667 | - {UserX shall select the appropriate class.} | |
1673 | + {UserX shall click the large green minus button.} | |
1668 | 1674 | \item |
1669 | - {The System removes the flashcard from UserX's Deck.} | |
1675 | + {The System shall remove the flashcard from UserX's Deck.} | |
1670 | 1676 | \item |
1671 | - {The System updates the flashcard's position in the Live Feed of class TEST 101.} | |
1672 | -\item | |
1673 | - {The System updates UserX's Deck.} | |
1677 | + {The System shall update UserX's Deck.} | |
1674 | 1678 | \end{enumerate} |
1675 | 1679 | |
1676 | -\item[Expected Result:] {The flashcard is removed from UserX's deck.} | |
1680 | +\item[Expected Result:] {The flashcard with the | |
1681 | +text ``This is a bad card'' will no longer have a checkmark | |
1682 | +on top right of the flashcard. After UserX refresh the page, | |
1683 | +the flashcard will be removed from the deck.} | |
1677 | 1684 | |
1678 | 1685 | \item[Alternate Workflow:] |
1679 | 1686 | \begin{enumerate} |
1680 | 1687 | \itemsep1pt\parskip0pt\parsep0pt |
1681 | 1688 | \item |
1682 | - {UserX is at the Live Feed screen for the class.} | |
1689 | + {UserX is at the live feed screen for the class.} | |
1683 | 1690 | \item |
1684 | - {UserX shall hover over the card they want to delete and click | |
1685 | - the ``Delete'' button in the lower right corner of the card.} | |
1691 | + {UserX shall hover the cursor over the card | |
1692 | +with the text ``This is a bad card too''.} | |
1686 | 1693 | \item |
1687 | - {The System removes the flashcard from the User's Deck.} | |
1694 | + {UserX shall click the large green minus button.} | |
1688 | 1695 | \item |
1689 | - {The System updates the flashcard's position in the Live Feed.} | |
1690 | -\item | |
1691 | - {The System updates the User's Deck.} | |
1696 | + {The System shall update UserX's Deck, and the flashcard's | |
1697 | +position in the live feed.} | |
1692 | 1698 | \end{enumerate} |
1693 | 1699 | |
1694 | -\item[Expected Result:] {The flashcard is removed from UserX's deck.} | |
1700 | +\item[Expected Result:] | |
1701 | +{The flashcard with the text ``This is a bad card too'' will | |
1702 | +no longer have a checkmark on the top right of the flashcard. | |
1703 | +The flashcard will no longer be in UserX's deck.} | |
1695 | 1704 | |
1696 | 1705 | \end{description} |
1697 | 1706 | \newpage |
... | ... | @@ -1707,7 +1716,8 @@ |
1707 | 1716 | \item[Desired Outcome:]{The User shall be able to view all the cards in their deck.} |
1708 | 1717 | \\ |
1709 | 1718 | |
1710 | -\item[User Goals:]{To see all pulled cards for easier editing purposes.} | |
1719 | +\item[User Goals:] | |
1720 | +{To view all pulled and created cards in their deck.} | |
1711 | 1721 | |
1712 | 1722 | \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login, |
1713 | 1723 | [A3] Add a Class, [F1] Push Flashcard, [F3] Pull Flashcard} |
1714 | 1724 | |
1715 | 1725 | |
1716 | 1726 | |
1717 | 1727 | |
1718 | 1728 | |
1719 | 1729 | |
1720 | 1730 | |
1721 | 1731 | |
... | ... | @@ -1720,56 +1730,42 @@ |
1720 | 1730 | \begin{itemize} |
1721 | 1731 | \itemsep1pt\parskip0pt\parsep0pt |
1722 | 1732 | \item |
1723 | - {A browser session is logged in as UserX.} | |
1733 | + {User is logged in as UserX.} | |
1724 | 1734 | \item |
1725 | - {Another browser session is logged in as UserY.} | |
1735 | + {UserX has created a flashcard with the text | |
1736 | +``I made this''.} | |
1726 | 1737 | \item |
1727 | - {UserX and UserY are registered for class TEST 101.} | |
1738 | + {UserX has pulled a flashcard with the text | |
1739 | +``Someone else made this''.} | |
1728 | 1740 | \item |
1729 | - {UserX and UserY are at the feed view for TEST 101.} | |
1741 | + {UserX has added the class TEST 101.} | |
1742 | +\item | |
1743 | + {UserX is at the live feed of TEST 101.} | |
1730 | 1744 | \end{itemize} |
1731 | 1745 | |
1732 | 1746 | \item[Postconditions:] |
1733 | 1747 | \begin{itemize} |
1734 | 1748 | \itemsep1pt\parskip0pt\parsep0pt |
1735 | 1749 | \item |
1736 | - {Cards in the deck are in time order.} | |
1750 | + {None} | |
1737 | 1751 | \end{itemize} |
1738 | 1752 | |
1739 | -\item[Trigger:]{User wants to view a more organized deck.} | |
1753 | +\item[Trigger:]{The User wants to view the result of their adding | |
1754 | +and pulling flashcards.} | |
1740 | 1755 | |
1741 | 1756 | \item[Workflow:] |
1742 | 1757 | \begin{enumerate} |
1743 | 1758 | \itemsep1pt\parskip0pt\parsep0pt |
1759 | + | |
1744 | 1760 | \item |
1745 | - {UserX shall click the ``Compose'' button in the lower right.} | |
1746 | -\item | |
1747 | - {The System shall present a modal with a text box.} | |
1748 | -\item | |
1749 | - {UserX shall type in ``Card A'' and click ``Contribute''.} | |
1750 | -\item | |
1751 | - {The System shall create a new card and add it to the feed.} | |
1752 | -\item | |
1753 | - {UserX shall click the ``Compose'' button in the lower right.} | |
1754 | -\item | |
1755 | - {The System shall present a modal with a text box.} | |
1756 | -\item | |
1757 | - {UserX shall type in ``Card B'' and click ``Contribute''.} | |
1758 | -\item | |
1759 | - {The System shall create a new card and add it to the feed.} | |
1760 | -\item | |
1761 | - {Another User logged in as UserY shall view the feed for TEST 101.} | |
1762 | -\item | |
1763 | - {UserY shall click ``Card B'' to pull the card and add it to their deck.} | |
1764 | -\item | |
1765 | - {UserY shall click ``Card A'' to pull the card and add it to their deck.} | |
1766 | -\item | |
1767 | - {UserY shall go to their Deck View.} | |
1761 | + {UserX shall click on 'Deck', the three vertical cards | |
1762 | +icon on the top left of the screen located on the left of the | |
1763 | +navigation bar.} | |
1768 | 1764 | \end{enumerate} |
1769 | 1765 | |
1770 | -\item[Expected Results]{For UserX the cards are listed in the | |
1771 | - order ``Card B'', ``Card A'' and for UserY they are in the | |
1772 | -deck view as ``Card A'', ``Card B''.} | |
1766 | +\item[Expected Results] | |
1767 | +{UserX shall be at the deck for the class TEST 101 and see the | |
1768 | +cards ``I made this'' and ``Someone else made this''.} | |
1773 | 1769 | |
1774 | 1770 | \end{description} |
1775 | 1771 | \newpage |