Commit 2d7d97a9598be7b26d1b01f77d155f7b822dfa44
Exists in
master
Merged conflicts
Showing 17 changed files Side-by-side Diff
- DesignUseCases.tex
- TestCases.tex
- UserStories.tex
- screen_sequence_diagrams/aaa_legend.dot
- screen_sequence_diagrams/add_class.dot
- screen_sequence_diagrams/blank_out_words.dot
- screen_sequence_diagrams/change_password.dot
- screen_sequence_diagrams/drop_class.dot
- screen_sequence_diagrams/fix_flashcard.dot
- screen_sequence_diagrams/reset_password.dot
- screen_sequence_diagrams/review_notification.dot
- screen_sequence_diagrams/study_deck.dot
- screen_sequence_diagrams/user_login_out.dot
- screen_sequence_diagrams/user_register.dot
- screen_sequence_diagrams/view_by_material_time.dot
- screen_sequence_diagrams/view_by_pull_time.dot
- use_cases_diagram.dot
DesignUseCases.tex
View file @
2d7d97a
... | ... | @@ -698,7 +698,7 @@ |
698 | 698 | |
699 | 699 | \item[Status]{Implemented} |
700 | 700 | |
701 | -\item[Pre-conditions]{The User has an account registered and is logged in.} | |
701 | +\item[Pre-conditions]{None.} | |
702 | 702 | |
703 | 703 | \item[Post-conditions]{The admin receives the user's message.} |
704 | 704 | |
... | ... | @@ -710,7 +710,7 @@ |
710 | 710 | \begin{enumerate} |
711 | 711 | \itemsep1pt\parskip0pt\parsep0pt |
712 | 712 | \item |
713 | - {The User shall click the '?' button in the right half of the navbar.} | |
713 | + {The User shall click the '?' button in the right corner of the navigation bar.} | |
714 | 714 | \item |
715 | 715 | {The frontend shall render the page using the help.html template.} |
716 | 716 | \item |
... | ... | @@ -1022,7 +1022,7 @@ |
1022 | 1022 | |
1023 | 1023 | {} |
1024 | 1024 | |
1025 | -\subsection{[F5] Filter Flashcards} | |
1025 | +\subsection{[F5] Filter Flashcards } | |
1026 | 1026 | |
1027 | 1027 | \begin{description} |
1028 | 1028 | \item[Description]{The user is able to filter for flashcards by material date and text.} |
... | ... | @@ -1196,7 +1196,7 @@ |
1196 | 1196 | \\ |
1197 | 1197 | \item[Priority Level]{Must} |
1198 | 1198 | |
1199 | -\item[Status]{Not Implemented} | |
1199 | +\item[Status]{Implemented} | |
1200 | 1200 | |
1201 | 1201 | \item[Pre-conditions] |
1202 | 1202 | |
... | ... | @@ -1396,8 +1396,7 @@ |
1396 | 1396 | {User's deck is added to the database.} |
1397 | 1397 | \end{itemize} |
1398 | 1398 | |
1399 | -\item[Trigger]{User has selected a card from the pool. User submitted a | |
1400 | -new flashcard after ``Make New Flashcard''.} | |
1399 | +\item[Trigger]{The User wants to have a collection of cards.} | |
1401 | 1400 | |
1402 | 1401 | \item[Workflow] |
1403 | 1402 | |
... | ... | @@ -1484,7 +1483,7 @@ |
1484 | 1483 | {Desired cards are hidden to the user.} |
1485 | 1484 | \end{itemize} |
1486 | 1485 | |
1487 | -\item[Trigger]{User has selected a card to be hidden.} | |
1486 | +\item[Trigger]{The User no longer wishes to be able to study a card. } | |
1488 | 1487 | |
1489 | 1488 | \item[Workflow] |
1490 | 1489 | |
... | ... | @@ -1571,7 +1570,7 @@ |
1571 | 1570 | \begin{itemize} |
1572 | 1571 | \itemsep1pt\parskip0pt\parsep0pt |
1573 | 1572 | \item |
1574 | - {User must have added cards to deck} | |
1573 | + {User must have added cards to deck.} | |
1575 | 1574 | \end{itemize} |
1576 | 1575 | |
1577 | 1576 | \item[Post-conditions]{} |
1578 | 1577 | |
... | ... | @@ -1579,10 +1578,10 @@ |
1579 | 1578 | \begin{itemize} |
1580 | 1579 | \itemsep1pt\parskip0pt\parsep0pt |
1581 | 1580 | \item |
1582 | - {User takes a quiz and notice the deck has been shuffled} | |
1581 | + {User takes a quiz and notice the deck has been shuffled.} | |
1583 | 1582 | \end{itemize} |
1584 | 1583 | |
1585 | -\item[Trigger]{User has clicked on the button ``SHUFFLE DECK''} | |
1584 | +\item[Trigger]{The User wants to review their cards in random order.} | |
1586 | 1585 | |
1587 | 1586 | \item[Workflow] |
1588 | 1587 | |
... | ... | @@ -1670,7 +1669,7 @@ |
1670 | 1669 | {Cards in the deck are in time order.} |
1671 | 1670 | \end{itemize} |
1672 | 1671 | |
1673 | -\item[Trigger]{User selects organize by add time.} | |
1672 | +\item[Trigger]{The User wants to view their cards in a meaningful order.} | |
1674 | 1673 | |
1675 | 1674 | \item[Workflow] |
1676 | 1675 | |
... | ... | @@ -1735,7 +1734,7 @@ |
1735 | 1734 | \\ |
1736 | 1735 | \item[Priority Level]{``Must''} |
1737 | 1736 | |
1738 | -\item[Status]{Not Implemented} | |
1737 | +\item[Status]{Implemented} | |
1739 | 1738 | |
1740 | 1739 | \item[Pre-conditions] |
1741 | 1740 | |
... | ... | @@ -1820,7 +1819,7 @@ |
1820 | 1819 | \\ |
1821 | 1820 | \item[Priority Level]{``Must''} |
1822 | 1821 | |
1823 | -\item[Status]{Not Implemented} | |
1822 | +\item[Status]{Implemented} | |
1824 | 1823 | |
1825 | 1824 | \item[Pre-conditions] |
1826 | 1825 | |
... | ... | @@ -1845,7 +1844,7 @@ |
1845 | 1844 | {User shall be notified.} |
1846 | 1845 | \end{itemize} |
1847 | 1846 | |
1848 | -\item[Trigger]{The delay time for a card to be shown has passed} | |
1847 | +\item[Trigger]{The delay time for a card to be shown has passed.} | |
1849 | 1848 | |
1850 | 1849 | \item[Workflow] |
1851 | 1850 | |
... | ... | @@ -1907,7 +1906,7 @@ |
1907 | 1906 | \end{itemize} |
1908 | 1907 | |
1909 | 1908 | \item[Trigger]{User indicates that they want to change their notification |
1910 | -settings} | |
1909 | +settings.} | |
1911 | 1910 | |
1912 | 1911 | \item[Workflow] |
1913 | 1912 |
TestCases.tex
View file @
2d7d97a
... | ... | @@ -114,7 +114,8 @@ |
114 | 114 | \item |
115 | 115 | {The System shall display a registration form.} |
116 | 116 | \item |
117 | - {UserX shall fill in the form with email UserX@flashy.cards and password ``mynameisuserx''.} | |
117 | + {UserX shall fill in the form with email \mbox{UserX@flashy.cards} and password | |
118 | +\mbox{``mynameisuserx''}.} | |
118 | 119 | \item |
119 | 120 | {The System shall successfully receive the correct credentials and send an |
120 | 121 | email to the User's address with a link to validate the User's email address |
... | ... | @@ -132,7 +133,7 @@ |
132 | 133 | \item |
133 | 134 | {The System shall present UserX Login screen.} |
134 | 135 | \item |
135 | - {UserX shall once again login with ``UserX@flashy.cards'' and ``mynameisuserx''.} | |
136 | + {UserX shall once again login with \mbox{``UserX@flashy.cards''} and \mbox{``mynameisuserx''}.} | |
136 | 137 | \end{enumerate} |
137 | 138 | |
138 | 139 | \item [Expected Result:]{UserX shall see Add Class page without a toast asking |
... | ... | @@ -150,7 +151,7 @@ |
150 | 151 | process of a user logging into the application.} |
151 | 152 | |
152 | 153 | \item[Desired Outcome:]{The User shall be able to provide their email address and |
153 | -password to access their courses and flash cards. The User shall gain | |
154 | +password to access their courses and flashcards. The User shall gain | |
154 | 155 | access to the list of the courses they have added, and be able to review |
155 | 156 | the flashcards they have added to their decks.} |
156 | 157 | |
... | ... | @@ -167,8 +168,8 @@ |
167 | 168 | \item[Preconditions:] |
168 | 169 | \begin{itemize} |
169 | 170 | \item |
170 | - {The User has created an account before with email ``UserX@flashy.cards'' with | |
171 | -password ``mynameisuserx''.} | |
171 | + {The User has created an account before with email \mbox{``UserX@flashy.cards''} with | |
172 | +password \mbox{``mynameisuserx''}.} | |
172 | 173 | \end{itemize} |
173 | 174 | |
174 | 175 | \item[Postconditions:] |
... | ... | @@ -184,7 +185,8 @@ |
184 | 185 | \begin{enumerate} |
185 | 186 | \itemsep1pt\parskip0pt\parsep0pt |
186 | 187 | \item |
187 | - {UserX shall enter their email ``UserX@flashy.cards'' and password ``mynameisuserx''.} | |
188 | + {UserX shall enter their email \mbox{``UserX@flashy.cards''} and password | |
189 | +\mbox{``mynameisuserx''}.} | |
188 | 190 | \item |
189 | 191 | {The System shall authenticate UserX's email and password and checks if UserX is active.} |
190 | 192 | \item |
... | ... | @@ -196,8 +198,8 @@ |
196 | 198 | \item [Alternate Workflow A:] |
197 | 199 | \begin{enumerate} |
198 | 200 | \item |
199 | - {UserX accidentally puts in the credentials ``UserX@flashy.cards'', | |
200 | -``hahahaha'' and clicks the ``Login'' button.} | |
201 | + {UserX accidentally puts in the credentials \mbox{``UserX@flashy.cards''}, | |
202 | +\mbox{``hahahaha''} and clicks the ``Login'' button.} | |
201 | 203 | \item |
202 | 204 | {The System shows UserX the site login page with a message reading |
203 | 205 | ``Invalid username or password!!''.} |
... | ... | @@ -209,8 +211,8 @@ |
209 | 211 | \item [Alternate Workflow B:] |
210 | 212 | \begin{enumerate} |
211 | 213 | \item |
212 | - {UserX accidentally puts in the credentials ``NotUserX@flashy.cards'', | |
213 | -``mynameisuserx'' and clicks the ``Login'' button.} | |
214 | + {UserX accidentally puts in the credentials \mbox{``NotUserX@flashy.cards''}, | |
215 | +\mbox{``mynameisuserx''} and clicks the ``Login'' button.} | |
214 | 216 | \item |
215 | 217 | {The System shows UserX the site login page with a message reading |
216 | 218 | ``Invalid username or password!!''.} |
... | ... | @@ -222,8 +224,8 @@ |
222 | 224 | \item [Alternate Workflow C:] |
223 | 225 | \begin{enumerate} |
224 | 226 | \item |
225 | - {UserX accidentally puts in the credentials ``theflash@flashy.cards'', | |
226 | -``MyNameIsUserX'' and clicks the ``Login'' button.} | |
227 | + {UserX accidentally puts in the credentials \mbox{``theflash@flashy.cards''}, | |
228 | +\mbox{``MyNameIsUserX''} and clicks the ``Login'' button.} | |
227 | 229 | \item |
228 | 230 | {The System shows UserX the site login page with a message reading |
229 | 231 | ``Invalid username or password!!''.} |
... | ... | @@ -430,10 +432,6 @@ |
430 | 432 | \item[Dependency Use Cases:]{[A1] User Registration, [A2] User Login} |
431 | 433 | \\ |
432 | 434 | |
433 | -\item[Details:]{The user provides their current password and a new password | |
434 | -in a form. If the current password is correct, the system updates their | |
435 | -password to the requested new password.} | |
436 | - | |
437 | 435 | \item[Priority Level:]{``Must''} |
438 | 436 | |
439 | 437 | \item[Status:]{Implemented} |
... | ... | @@ -444,7 +442,7 @@ |
444 | 442 | \item |
445 | 443 | {The User is logged in as UserX.} |
446 | 444 | \item |
447 | - {The User knows the current password (``oldPassword'').} | |
445 | + {The User knows the current password \mbox{``mynameisuserx''}.} | |
448 | 446 | \item |
449 | 447 | {The User is at the Settings page.} |
450 | 448 | \end{itemize} |
451 | 449 | |
452 | 450 | |
... | ... | @@ -465,17 +463,53 @@ |
465 | 463 | \begin{enumerate} |
466 | 464 | \itemsep1pt\parskip0pt\parsep0pt |
467 | 465 | \item |
468 | - {UserX shall enter their current password ``oldPassword'' and the desired | |
469 | -new password ``newPassword'' (twice) in the ``Change Password'' form.} | |
466 | + {UserX shall enter their current password \mbox{``mynameisuserx''} and the desired | |
467 | +new password \mbox{``newPassword''} (twice) in the ``Change Password'' form.} | |
470 | 468 | \item |
471 | 469 | {UserX shall click the ``Submit'' button.} |
472 | 470 | \item |
473 | 471 | {The System shall check UserX's current password.} |
474 | 472 | \item |
475 | - {The System shall update the UserX's current password ``oldPassword'' to the new password ``newPassword''.} | |
473 | + {The System shall update the UserX's current password \mbox{``mynameisuserx''} | |
474 | +to the new password \mbox{``newPassword''}.} | |
476 | 475 | \end{enumerate} |
477 | 476 | |
478 | -\item[Expected Result:] {User's password is changed from ``oldPasswrd'' to ``newPassword''.} | |
477 | +\item[Expected Result:] {User's password is changed from \mbox{``mynameisuserx''} | |
478 | +to \mbox{``newPassword''}.} | |
479 | +\\ | |
480 | + | |
481 | +\item[Alternate Workflow A:] | |
482 | +\begin{enumerate} | |
483 | +\itemsep1pt\parskip0pt\parsep0pt | |
484 | +\item | |
485 | + {UserX shall enter an incorrect current password \mbox{``MyNameIsUserX''} and the desired | |
486 | +new password \mbox{``newPassword''} (twice) in the ``Change Password'' form.} | |
487 | +\item | |
488 | + {UserX shall click the ``Submit'' button.} | |
489 | +\item | |
490 | + {The System shall ensure validity of new password.} | |
491 | +\item | |
492 | + {The System shall check UserX's current password.} | |
493 | +\end{enumerate} | |
494 | + | |
495 | +\item[Expected Result:] {The System shall display a toast ``Your old password is not correct''.} | |
496 | +\\ | |
497 | + | |
498 | +\item[Workflow:] | |
499 | +\begin{enumerate} | |
500 | +\itemsep1pt\parskip0pt\parsep0pt | |
501 | +\item | |
502 | + {UserX shall enter their current password \mbox{``mynameisuserx''} and the desired | |
503 | +new password \mbox{``newPass''} (twice) in the ``Change Password'' form.} | |
504 | +\item | |
505 | + {UserX shall click the ``Submit'' button.} | |
506 | +\item | |
507 | + {The System shall ensure validity of new password.} | |
508 | +\end{enumerate} | |
509 | + | |
510 | +\item[Expected Result:] {The System shall display error text ``New password | |
511 | +must be at least 8 characters.''} | |
512 | + | |
479 | 513 | \end{description} |
480 | 514 | \newpage |
481 | 515 | |
482 | 516 | |
483 | 517 | |
484 | 518 | |
... | ... | @@ -484,28 +518,19 @@ |
484 | 518 | \subsection{[A6] Password Reset} |
485 | 519 | |
486 | 520 | \begin{description} |
487 | -\item[Description:]{The User shall be able to reset their password without | |
488 | -being logged in } | |
521 | +\item[Description:]{This test case outlines the presentation step layering process of | |
522 | +a user requesting a password reset without logging in.} | |
489 | 523 | |
490 | 524 | \item[Desired Outcome:]{The User's password shall be changed to one that |
491 | -they remember} | |
525 | +they remember.} | |
492 | 526 | \\ |
493 | 527 | |
494 | 528 | \item[User Goals:]{The User does not know their current password but wants |
495 | -to log into the site} | |
529 | +to log into the site.} | |
496 | 530 | |
497 | 531 | \item[Dependency Use Cases:]{[A1] User Registration} |
498 | 532 | \\ |
499 | 533 | |
500 | -\item[Details:]{The User provides their email in a password reset form. If | |
501 | -the address is valid, the site sends a password reset link with a random | |
502 | -token to that address. If the address is invalid, the site does not send | |
503 | -a link. For security reasons, we do not reveal to the user whether the | |
504 | -email address was valid, and we expire the link after 24 hours. When a | |
505 | -user visits the link emailed to them, they are able to specify a new | |
506 | -password in a form. When they submit the form, their password is updated | |
507 | -if the token is correct. } | |
508 | - | |
509 | 534 | \item[Priority Level:]{``Must''} |
510 | 535 | |
511 | 536 | \item[Status]{Implemented} |
512 | 537 | |
... | ... | @@ -526,10 +551,9 @@ |
526 | 551 | {UserX can log in with the new password.} |
527 | 552 | \end{itemize} |
528 | 553 | |
529 | -\item[Trigger]{UserX forgot their password and wants to access the site.} | |
554 | +\item[Trigger:]{UserX forgot their password and wants to access the site.} | |
530 | 555 | |
531 | 556 | \item[Workflow:] |
532 | - | |
533 | 557 | \begin{enumerate} |
534 | 558 | \itemsep1pt\parskip0pt\parsep0pt |
535 | 559 | \item |
... | ... | @@ -537,7 +561,7 @@ |
537 | 561 | \item |
538 | 562 | {The System shall prompt the user for their current email.} |
539 | 563 | \item |
540 | - {UserX shall submit their email ``UserX@flashy.cards''.} | |
564 | + {UserX shall submit their email \mbox{``UserX@flashy.cards''}.} | |
541 | 565 | \item |
542 | 566 | {The System shall check if an account exists with the email entered by UserX.} |
543 | 567 | \item |
544 | 568 | |
545 | 569 | |
546 | 570 | |
547 | 571 | |
... | ... | @@ -550,26 +574,28 @@ |
550 | 574 | \item |
551 | 575 | {The System shall render a form that will prompt the user for a new password.} |
552 | 576 | \item |
553 | - {UserX shall provide a new password, ``newPassword'', in the form.} | |
577 | + {UserX shall provide a new password, \mbox{``newPassword''}, in the form.} | |
554 | 578 | \item |
555 | 579 | {The System shall change the password associated with the user's email.} |
556 | 580 | \item |
557 | - {UserX shall navigate back to the login page and enter ``UserX@flashy.cards'' | |
558 | -with the old password ``mynameisuserx''.} | |
581 | + {UserX shall navigate back to the login page and enter \mbox{``UserX@flashy.cards''} | |
582 | +with the old password \mbox{``mynameisuserx''}.} | |
559 | 583 | \item |
560 | 584 | {The System shall display ``Invalid username or password!''} |
561 | 585 | \item |
562 | - {UserX shall login as ``UserX@flashy.cards'' with the password ``newPassword''.} | |
586 | + {UserX shall login as \mbox{``UserX@flashy.cards''} with the password \mbox{``newPassword''}.} | |
563 | 587 | \end{enumerate} |
564 | 588 | |
565 | -\item[Expected Result:] {The login shall succeed.} | |
589 | +\item[Expected Result:] {UserX shall be logged in.} | |
590 | +\\ | |
566 | 591 | |
567 | 592 | \item[Alternate Workflow:] |
568 | 593 | \begin{enumerate} |
569 | 594 | \setcounter{enumi}{4} |
570 | 595 | \itemsep1pt\parskip0pt\parsep0pt |
571 | 596 | \item |
572 | - {If no such account exists, the System shall display a modal display ``Cannot find account.'' to UserX.} | |
597 | + {If no such account exists, the System shall display an error message | |
598 | +``Enter a valid email!'' to UserX.} | |
573 | 599 | \end{enumerate} |
574 | 600 | |
575 | 601 | \item[Expected Result:] {UserX's password will not be reset.} |
... | ... | @@ -595,7 +621,7 @@ |
595 | 621 | |
596 | 622 | \item[Priority Level:]{``Should''} |
597 | 623 | |
598 | -\item[Status:]{Implemented} | |
624 | +\item[Status:]{Deferred (see Add a Class)} | |
599 | 625 | |
600 | 626 | \item[Preconditions:] |
601 | 627 | \begin{itemize} |
602 | 628 | |
... | ... | @@ -645,14 +671,14 @@ |
645 | 671 | \subsection{[A8] User Logout} |
646 | 672 | |
647 | 673 | \begin{description} |
648 | -\item[Description:]{The User shall be able to log out of his/her account on | |
649 | -the site.} | |
674 | +\item[Description:]{This test case outlines the presentation layering step process | |
675 | +of a user logging out from their account.} | |
650 | 676 | |
651 | 677 | \item[Desired Outcome:]{The User's information and data will no longer be |
652 | 678 | accessible after logging out. } |
653 | 679 | |
654 | -\item[User Goals:]{The User is done with his/her session of using the | |
655 | -website, and wants to make sure others cannot access the data in his/her | |
680 | +\item[User Goals:]{The User is done with their session of using the | |
681 | +website, and wants to make sure others cannot access the data in their | |
656 | 682 | account.} |
657 | 683 | |
658 | 684 | \item[Dependency Use Cases:] {[A1] User Registration, [A2] User Login} |
659 | 685 | |
660 | 686 | |
661 | 687 | |
662 | 688 | |
663 | 689 | |
664 | 690 | |
... | ... | @@ -662,25 +688,35 @@ |
662 | 688 | |
663 | 689 | \item[Status:]{Implemented} |
664 | 690 | |
665 | -\item[Preconditions:]{The user is logged into their account.} | |
691 | +\item[Preconditions:] | |
692 | +\begin{itemize} | |
693 | +\itemsep1pt\parskip0pt\parsep0pt | |
694 | +\item | |
695 | +{The user is logged in as UserX.} | |
696 | +\end{itemize} | |
666 | 697 | |
667 | -\item[Postconditions:]{The user's data can no longer be accessed.} | |
698 | +\item[Postconditions:] | |
699 | +\begin{itemize} | |
700 | +\itemsep1pt\parskip0pt\parsep0pt | |
701 | +\item | |
702 | +{The user's data can no longer be accessed.} | |
703 | +\end{itemize} | |
668 | 704 | |
669 | -\item[Trigger:] | |
705 | +\item[Trigger:] {UserX does not currently want access to the site and does | |
706 | +not want others tampering with their account.} | |
670 | 707 | |
671 | 708 | \item[Workflow:] |
672 | - | |
673 | 709 | \begin{enumerate} |
674 | 710 | \itemsep1pt\parskip0pt\parsep0pt |
675 | 711 | \item |
676 | - {UserX shall click the ``Logout'' button.} | |
712 | + {UserX shall click ``Logout'' (power button) in the top right.} | |
677 | 713 | \item |
678 | - {The System shall logs out UserX.} | |
714 | + {The System shall log out UserX.} | |
679 | 715 | \item |
680 | 716 | {The System shall redirect UserX to the login page.} |
681 | 717 | \end{enumerate} |
682 | 718 | |
683 | -\item[Expected Result:] {User is logged out and is redirected to the login page.} | |
719 | +\item[Expected Result:] {UserX is logged out and on the login page.} | |
684 | 720 | \end{description} |
685 | 721 | \newpage |
686 | 722 | |
... | ... | @@ -761,7 +797,7 @@ |
761 | 797 | \begin{enumerate} |
762 | 798 | \itemsep1pt\parskip0pt\parsep0pt |
763 | 799 | \item |
764 | - {UserX shall select ``Settings'' button from the top header.} | |
800 | + {UserX shall select ``Settings'' (gear) from the top right.} | |
765 | 801 | \item |
766 | 802 | {The System shall display a settings screen.} |
767 | 803 | \item |
... | ... | @@ -807,7 +843,7 @@ |
807 | 843 | \item |
808 | 844 | {The User is logged as UserX.} |
809 | 845 | \item |
810 | -{The User is logged in a different browser session as UserY.} | |
846 | +{The User is logged in a different browser session as UserY (see Testing Notes).} | |
811 | 847 | \item |
812 | 848 | {UserX and UserY have added the class TEST 101.} |
813 | 849 | \item |
814 | 850 | |
815 | 851 | |
816 | 852 | |
... | ... | @@ -860,19 +896,23 @@ |
860 | 896 | \setcounter{enumi}{3} |
861 | 897 | \itemsep1pt\parskip0pt\parsep0pt |
862 | 898 | \item |
863 | - {UserX shall user their cursor to select the word Spain in the text box, then click the ``Blank Word'' button.} | |
899 | + {UserX shall user their cursor to select the word Spain in the text box, | |
900 | +then click the ``Blank Word'' button.} | |
864 | 901 | \item |
865 | 902 | {The System shall bold the word Spain.} |
866 | 903 | \item |
867 | - {UserX shall use the cursor to select the word ``plain'' in the text box, then click the ``Blank Word'' button.} | |
904 | + {UserX shall use the cursor to select the word ``plain'' in the text box, | |
905 | +then click the ``Blank Word'' button.} | |
868 | 906 | \item |
869 | 907 | {The System shall bold the word plain.} |
870 | 908 | \item |
871 | 909 | {UserX shall click the ``Contribute'' button in the modal.} |
872 | 910 | \item |
873 | - {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.} | |
911 | + {The System shall add the new flashcard containing the text ``The rain in | |
912 | +\textbf{Spain} stays mainly in the \textbf{plain}'' to the feed of each user enrolled in TEST.} | |
874 | 913 | \item |
875 | - {UserY shall view the live feed and within a minute see the new flashcard appear with ``Spain'' and ``plain'' bolded.} | |
914 | + {UserY shall view the live feed and within a minute see the new flashcard | |
915 | +appear with ``Spain'' and ``plain'' bolded.} | |
876 | 916 | \end{enumerate} |
877 | 917 | |
878 | 918 | \item[Expected Result:] { |
... | ... | @@ -883,7 +923,7 @@ |
883 | 923 | The new flashcard will show up on UserY's live feed on class TEST 101 |
884 | 924 | without checkmark and pencil icon.} |
885 | 925 | |
886 | -\item[Alternative Workflow:] | |
926 | +\item[Alternate Workflow:] | |
887 | 927 | \begin{enumerate} |
888 | 928 | \setcounter{enumi}{2} |
889 | 929 | \itemsep1pt\parskip0pt\parsep0pt |
890 | 930 | |
... | ... | @@ -893,9 +933,10 @@ |
893 | 933 | {UserX shall click the ``Contribute'' button in the dialog.} |
894 | 934 | \end{enumerate} |
895 | 935 | |
896 | -\item[Expected Result:] {Blank flashcard will not be added to UserX's deck or to the live feed of TEST 101.} | |
936 | +\item[Expected Result:] {Blank flashcard will not be added to UserX's deck or | |
937 | +to the live feed of TEST 101.} | |
897 | 938 | |
898 | -\item[Alternative Workflow:] | |
939 | +\item[Alternate Workflow:] | |
899 | 940 | \begin{enumerate} |
900 | 941 | \setcounter{enumi}{2} |
901 | 942 | \itemsep1pt\parskip0pt\parsep0pt |
... | ... | @@ -917,7 +958,8 @@ |
917 | 958 | \subsection{[F2] Edit Flashcard} |
918 | 959 | |
919 | 960 | \begin{description} |
920 | -\item[Description:]{This test case outlines the presentation layering step process of a user editting a flashcard.} | |
961 | +\item[Description:]{This test case outlines the presentation layering step | |
962 | +process of a user editting a flashcard.} | |
921 | 963 | |
922 | 964 | \item[Desired Outcome:]{Flashcard is edited and saved appropriately} |
923 | 965 | \\ |
924 | 966 | |
... | ... | @@ -981,14 +1023,13 @@ |
981 | 1023 | {The System shall hide the modal from UserX.} |
982 | 1024 | \end{enumerate} |
983 | 1025 | |
984 | -\item[Expected Results:]{UserX shall see a new flashcard with the | |
1026 | +\item[Expected Result:]{UserX shall see a new flashcard with the | |
985 | 1027 | text ``Edit has been made'' added to the top of the feed and the new |
986 | 1028 | flashcard will be added to UserX's deck. |
987 | 1029 | The flashcard with the text ``this is made for edit'' |
988 | 1030 | will be hidden from UserX.} |
989 | 1031 | |
990 | -\item[Alternative Workflow:] | |
991 | - | |
1032 | +\item[Alternate Workflow A:] | |
992 | 1033 | \begin{enumerate} |
993 | 1034 | \itemsep1pt\parskip0pt\parsep0pt |
994 | 1035 | \item |
... | ... | @@ -1005,7 +1046,7 @@ |
1005 | 1046 | \item |
1006 | 1047 | {UserX shall select } |
1007 | 1048 | \item |
1008 | - {UserX shall click 'Save'} | |
1049 | + {UserX shall click ``Save Changes''.} | |
1009 | 1050 | \item |
1010 | 1051 | {The System shall hide the modal from UserX.} |
1011 | 1052 | \item |
... | ... | @@ -1015,7 +1056,7 @@ |
1015 | 1056 | |
1016 | 1057 | \item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.} |
1017 | 1058 | |
1018 | -\item[Alternate Workflow:] | |
1059 | +\item[Alternate Workflow B:] | |
1019 | 1060 | \begin{enumerate} |
1020 | 1061 | \itemsep1pt\parskip0pt\parsep0pt |
1021 | 1062 | \item |
1022 | 1063 | |
1023 | 1064 | |
... | ... | @@ -1038,13 +1079,13 @@ |
1038 | 1079 | {The System shall hide the modal from UserX.} |
1039 | 1080 | \end{enumerate} |
1040 | 1081 | |
1041 | -\item[Expected Results:]{UserX shall see a new flashcard with the | |
1082 | +\item[Expected Result:]{UserX shall see a new flashcard with the | |
1042 | 1083 | text ``Edit has been made'' added to the top of the feed and the new |
1043 | 1084 | flashcard will be added to UserX's deck. |
1044 | 1085 | The flashcard with the text ``this is made for edit'' |
1045 | 1086 | will be hidden from UserX.} |
1046 | -\item[Alternative Workflow B:] | |
1047 | 1087 | |
1088 | +\item[Alternative Workflow B:] | |
1048 | 1089 | \begin{enumerate} |
1049 | 1090 | \itemsep1pt\parskip0pt\parsep0pt |
1050 | 1091 | \item |
... | ... | @@ -1573,7 +1614,7 @@ |
1573 | 1614 | |
1574 | 1615 | \section{Decks} |
1575 | 1616 | |
1576 | -\subsection{[D1] Remove a card from a deck} | |
1617 | +\subsection{[D1] Remove a Card from Deck} | |
1577 | 1618 | |
1578 | 1619 | \begin{description} |
1579 | 1620 | \item[Description:]{This test case outlines the presentation layering step process |
UserStories.tex
View file @
2d7d97a
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | \usepackage{tgpagella} |
3 | 3 | \setkomafont{disposition}{\normalfont\bfseries} |
4 | 4 | %\usepackage[markuppercase]{scrpage2} |
5 | -\title{\huge System Test Plan} | |
5 | +\title{\huge User Stories} | |
6 | 6 | \date{\today} |
7 | 7 | \author{\Large Students With A Goal (S.W.A.G.)} |
8 | 8 | \usepackage[pass]{geometry} |
9 | 9 | |
10 | 10 | |
11 | 11 | |
12 | 12 | |
... | ... | @@ -44,43 +44,55 @@ |
44 | 44 | \textbf{\LARGE{These User Stories supercede the the User Stories listed on the post it notes on the CSE Software Tools |
45 | 45 | Site. We were not able to remove those User Stories. Please use these as the User Stories. }} |
46 | 46 | \tableofcontents |
47 | +\newpage | |
47 | 48 | \section{ Account } |
48 | -As a student, I want to be able to log in to the account I signed up with. | |
49 | -As a student, I want to be able to change my password for my account. | |
50 | -As a student, I want to be able to recover my password when I forget it | |
51 | -As a student, I want to configure my notifications. | |
52 | -As a student, I want to be able to logout my account. | |
53 | -As a first time user, I want to be able build my deck without going through registration process in class. | |
54 | -As an instructor, I want to limit access to the cards for my course | |
55 | -As an instructor, I want to invite students to the class group I created | |
56 | -As a student I want to receive notifications without installing an app | |
57 | -As a student I want to be able to delete my account | |
49 | +\begin {enumerate} | |
50 | +\item {As a student, I want to be able to log in to the account I signed up with.} | |
51 | +\item {As a student, I want to be able to change my password for my account.} | |
52 | +\item {As a student, I want to be able to recover my password when I forget it.} | |
53 | +\item {As a student, I want to configure my notifications.} | |
54 | +\item {As a student, I want to be able to logout my account. } | |
55 | +\item {As a first time user, I want to be able build my deck without going through registration process in class.} | |
56 | +\item {As an instructor, I want to limit access to the cards for my course.} | |
57 | +\item {As an instructor, I want to invite students to the class group I created.} | |
58 | +\item {As a student, I want to receive notifications without installing an app.} | |
59 | +\item {As a student, I want to be able to delete my account.} | |
60 | +\end{enumerate} | |
61 | +\newpage | |
58 | 62 | \section{ Flashcards } |
59 | -As a student, I want to pick flashcards | |
60 | -As a student, I want to be able to make my own flashcard | |
61 | -As a student, I want to remove cards from my deck | |
62 | -As a student, I don't want to see low-quality cards. | |
63 | -As a student, I want to edit my card. | |
64 | -As a student, I want to make flashcards quickly | |
65 | -As a student, I want to flag abusive flash cards. | |
66 | -As a student I want to see other cards at the time they are added to the feed | |
67 | -As a student, I want to be able to hide unwanted cards from my live feed | |
63 | +\begin{enumerate} | |
64 | +\item As a student, I want to pick flashcards. | |
65 | +\item As a student, I want to be able to make my own flashcard. | |
66 | +\item As a student, I want to remove cards from my deck. | |
67 | +\item As a student, I don't want to see low-quality cards. | |
68 | +\item As a student, I want to edit my card. | |
69 | +\item As a student, I want to make flashcards quickly | |
70 | +\item As a student, I want to flag abusive flash cards. | |
71 | +\item As a student, I want to see other cards at the time they are added to the feed. | |
72 | +\item As a student, I want to be able to hide unwanted cards from my live feed. | |
73 | +\end{enumerate} | |
74 | +\newpage | |
68 | 75 | \section{ Decks} |
69 | -As a student, I want to be able to make my own deck | |
70 | -As a student, I want to be able to separate the live feed for each class | |
71 | -As a student, I want to add myself to a class | |
72 | -As a student, I want to my deck to be private | |
73 | -As a student, I want to be able to shuffle my deck. | |
74 | -As a student, I want to be able to remove courses that I was registered to. | |
76 | +\begin {enumerate} | |
77 | +\item As a student, I want to be able to make my own deck. | |
78 | +\item As a student, I want to be able to separate the live feed for each class. | |
79 | +\item As a student, I want to add myself to a class. | |
80 | +\item As a student, I want to my deck to be private. | |
81 | +\item As a student, I want to be able to shuffle my deck. | |
82 | +\item As a student, I want to be able to remove courses that I was registered to. | |
83 | +\end{enumerate} | |
84 | +\newpage | |
75 | 85 | \section{Study} |
76 | -As a student, I want to be able to study my deck. | |
77 | -As a student, I want to have the app remind me when to review my cards | |
78 | -As a student, I want to be able to blank out words to make cards. | |
79 | -As a student I want to review cards without waiting for a notification | |
80 | -As a student I want to view cards in my deck in the order they were created | |
81 | -As a student, I want to be able to search/sort/filter for flashcards by date, class, tag, keywords | |
82 | -As a student, I want to be able to scroll infinitely | |
83 | -As a student I want to use the keyboard to interact with the app | |
86 | +\begin{enumerate} | |
87 | +\item As a student, I want to be able to study my deck. | |
88 | +\item As a student, I want to have the app remind me when to review my cards. | |
89 | +\item As a student, I want to be able to blank out words to make cards. | |
90 | +\item As a student, I want to review cards without waiting for a notification. | |
91 | +\item As a student, I want to view cards in my deck in the order they were created. | |
92 | +\item As a student, I want to be able to search/sort/filter for flashcards by date, class, tag, keywords. | |
93 | +\item As a student, I want to be able to scroll infinitely. | |
94 | +\item As a student, I want to use the keyboard to interact with the app. | |
95 | +\end{enumerate} | |
84 | 96 | \newpage |
85 | 97 | \end{document} |
screen_sequence_diagrams/aaa_legend.dot
View file @
2d7d97a
1 | +digraph G{ | |
2 | + ratio=0.75; | |
3 | + //rankdir="LR"; | |
4 | + labelloc="t"; | |
5 | + label=" Screen Sequence Diagram Legend"; | |
6 | + node[shape=box, style="rounded,filled,bold"]; | |
7 | + | |
8 | + | |
9 | + "Pages"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | + | |
11 | + "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
12 | + fixedsize=true, width=1.4, height=1.4]; | |
13 | + | |
14 | + "Actions"; | |
15 | + | |
16 | + "Requests/Changes"[shape=none]; | |
17 | + | |
18 | +} |
screen_sequence_diagrams/add_class.dot
View file @
2d7d97a
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | nodesep=1.4; |
7 | 7 | labelloc="t"; |
8 | 8 | label = "[A3] Add a Class"; |
9 | - "Navigation Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
9 | + "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, |
11 | 11 | fixedsize=true, width=1.4, height=1.4]; |
12 | 12 | "POST /api/sections/{pk}/enroll"[shape=none]; |
13 | 13 | |
14 | 14 | |
... | ... | @@ -21,16 +21,16 @@ |
21 | 21 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, |
22 | 22 | fixedsize=true, width=1.4, height=1.4]; |
23 | 23 | "WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; |
24 | - "Navigation Menu" -> "POST /api/sections/{pk}/enroll"[dir=none]; | |
24 | + "Navbar" -> "POST /api/sections/{pk}/enroll"[dir=none]; | |
25 | 25 | "POST /api/sections/{pk}/enroll" -> "Controller"; |
26 | 26 | "Controller" -> "FAILURE"; |
27 | - "FAILURE" -> "Navigation Menu"; | |
27 | + "FAILURE" -> "Navbar"; | |
28 | 28 | "Controller" -> "SUCCESS"; |
29 | 29 | "SUCCESS"->"WhiteListCheck"; |
30 | 30 | "WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; |
31 | 31 | "WhiteListCheck" -> "Success! \n User is added to class"; |
32 | - "Success! \n User is added to class" -> "Navigation Menu"; | |
33 | - "Permission Denied: \n User cannot be enrolled in class" -> "Navigation Menu"; | |
32 | + "Success! \n User is added to class" -> "Navbar"; | |
33 | + "Permission Denied: \n User cannot be enrolled in class" -> "Navbar"; | |
34 | 34 | |
35 | 35 | } |
screen_sequence_diagrams/blank_out_words.dot
View file @
2d7d97a
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; |
10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, |
11 | 11 | fixedsize=true, width=1.4, height=1.4]; |
12 | - "POST /api/flashcards/{pk}"[shape=none] | |
12 | + "POST /api/flashcards/{pk}"[shape=none] | |
13 | 13 | |
14 | 14 | "View Deck" -> "Flashcard"; |
15 | 15 | "Flashcard" -> "Edit Flashcard Page"; |
screen_sequence_diagrams/change_password.dot
View file @
2d7d97a
... | ... | @@ -5,23 +5,23 @@ |
5 | 5 | splines=ortho; |
6 | 6 | nodesep=1.4; |
7 | 7 | labelloc="t"; |
8 | - label="[A5] Change password & [A6] Reset password"; | |
9 | - "Navigation Menu/Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
8 | + label="[A5] Change password"; | |
9 | + "Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond]; |
11 | - "POST /api/request_password_reset"[shape=none]; | |
11 | + "PATCH /api/me"[shape=none]; | |
12 | 12 | labelfloat=true; |
13 | 13 | lp=100; |
14 | - | |
14 | + | |
15 | 15 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, |
16 | - fixedsize=true, width=1.4, height=1.4]; | |
17 | - "Navigation Menu/Settings" -> "POST /api/request_password_reset"[dir=none]; | |
18 | - "POST /api/request_password_reset" -> "Controller"; | |
19 | - "Controller" -> "Email"; | |
20 | - "Failure: User did not\nchange password"[shape=none]; | |
21 | - "Email" -> "Failure: User did not\nchange password"; | |
22 | - "Failure: User did not\nchange password" -> "Navigation Menu"; | |
23 | - "Success: User \nchanged password"[shape=none]; | |
16 | + fixedsize=true, width=1.4, height=1.4]; | |
17 | + "Failure: User did not\nchange password"[shape=none]; | |
18 | + "Success: User \nchanged password"[shape=none]; | |
19 | + | |
20 | + "Settings" -> "PATCH /api/me"; | |
21 | + "PATCH /api/me" -> "Controller"; | |
22 | + "Controller" -> "Failure: User did not\nchange password"; | |
23 | + "Failure: User did not\nchange password" -> "Settings"; | |
24 | 24 | "Email" -> "Success: User \nchanged password"; |
25 | - "Success: User \nchanged password" -> "Navigation Menu"; | |
25 | + "Success: User \nchanged password" -> "Settings"; | |
26 | 26 | } |
screen_sequence_diagrams/drop_class.dot
View file @
2d7d97a
... | ... | @@ -5,25 +5,31 @@ |
5 | 5 | splines=ortho; |
6 | 6 | nodesep=1.4; |
7 | 7 | labelloc="t"; |
8 | - label="[A4] Drop a class"; | |
9 | - "Navigation Menu/Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
8 | + label="[A4] Drop a Class"; | |
9 | + "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, |
11 | - fixedsize=true, width=1.4, height=1.4]; | |
11 | + fixedsize=true, width=1.4, height=1.4]; | |
12 | 12 | "User Check"[center=true, fillcolor="#aaaaff", style=filled]; |
13 | + "SUCCESS"[shape=none]; | |
14 | + "FAILURE"[shape=none]; | |
13 | 15 | //labelfloat=true; |
14 | 16 | //lp=100; |
15 | 17 | |
16 | 18 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, |
17 | - fixedsize=true, width=1.4, height=1.4]; | |
18 | - "POST /api/sections/{pk}/drop"[shape=none]; | |
19 | - "Navigation Menu/Settings" -> "POST /api/sections/{pk}/drop"; | |
20 | - "POST /api/sections/{pk}/drop" -> "Controller"; | |
19 | + fixedsize=true, width=1.4, height=1.4]; | |
20 | + "POST /api/sections/{pk}/drop"[shape=none]; | |
21 | + "Navbar" -> "POST /api/sections/{pk}/drop"; | |
22 | + "POST /api/sections/{pk}/drop" -> "Controller"; | |
21 | 23 | "Controller" -> "User Check"; |
22 | - "User did not\ndrop class"[shape=none]; | |
23 | - "User Check" -> "User did not\ndrop class"; | |
24 | - "User did not\ndrop class" -> "Navigation Menu/Settings"; | |
25 | - "User successfully\ndropped class"[shape=none]; | |
26 | - "User Check" -> "User successfully\ndropped class"; | |
27 | - "User successfully\ndropped class" -> "Navigation Menu/Settings"; | |
24 | + | |
25 | + "Class not dropped"[shape=none]; | |
26 | + "User Check" -> "FAILURE"; | |
27 | + "FAILURE" -> "Class not dropped"; | |
28 | + "Class not dropped" -> "Navbar"; | |
29 | + | |
30 | + "Class dropped"[shape=none]; | |
31 | + "User Check" -> "SUCCESS"; | |
32 | + "SUCCESS" -> "Class dropped"; | |
33 | + "Class dropped" -> "Navbar"; | |
28 | 34 | } |
screen_sequence_diagrams/fix_flashcard.dot
View file @
2d7d97a
... | ... | @@ -10,9 +10,9 @@ |
10 | 10 | "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; |
11 | 11 | "View Deck" -> "Edit Flashcard"; |
12 | 12 | "Edit Flashcard" -> "POST /api/flashcard/{pk}/edit"; |
13 | - "POST /api/flashcard/{pk}/edit" -> "FlashcardViewSet.edit"; | |
14 | - "FlashcardViewSet.edit" -> "Text or material date altered"; | |
15 | - "FlashcardViewSet.edit" -> "Only mask altered"; | |
13 | + "POST /api/flashcard/{pk}/edit" -> "Controller"; | |
14 | + "Controller" -> "Text or material date altered"; | |
15 | + "Controller" -> "Only mask altered"; | |
16 | 16 | "Only mask altered" -> "Update UserFlashcard object"; |
17 | 17 | "Text or material date altered" -> "Create new Flashcard with prev pointer\nNotify all users who've pulled the card"; |
18 | 18 | "Only mask altered"[shape=none]; |
19 | 19 | |
20 | 20 | |
21 | 21 | |
22 | 22 | |
... | ... | @@ -22,22 +22,21 @@ |
22 | 22 | "POST /api/flashcard/{pk}/edit"[shape=none]; |
23 | 23 | labelfloat=true; |
24 | 24 | lp=100; |
25 | - "FlashcardViewSet.edit"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=2.2, height=2.2]; | |
26 | - "Navigation Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
25 | + "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
27 | 26 | "WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; |
28 | - "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=1.1, height=1.1]; | |
27 | + "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=2.2, height=2.2]; | |
29 | 28 | "POST"[shape=none]; |
30 | 29 | "FAILURE"[shape=none]; |
31 | 30 | "SUCCESS"[shape=none]; |
32 | - "Navigation Menu" -> "POST"; | |
31 | + "Navbar" -> "POST"; | |
33 | 32 | "POST" -> "Controller"; |
34 | 33 | "Controller" -> "FAILURE"; |
35 | - "FAILURE" -> "Navigation Menu"; | |
34 | + "FAILURE" -> "Navbar"; | |
36 | 35 | "Controller" -> "SUCCESS"; |
37 | 36 | "SUCCESS"->"WhiteListCheck"; |
38 | 37 | "WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; |
39 | 38 | "WhiteListCheck" -> "Success! \n User is added to class"; |
40 | - "Success! \n User is added to class" -> "Navigation Menu"; | |
41 | - "Permission Denied: \n User cannot be enrolled in class" -> "Navigation Menu"; | |
39 | + "Success! \n User is added to class" -> "Navbar"; | |
40 | + "Permission Denied: \n User cannot be enrolled in class" -> "Navbar"; | |
42 | 41 | } |
screen_sequence_diagrams/reset_password.dot
View file @
2d7d97a
1 | +digraph G{ | |
2 | + ratio=0.75; | |
3 | + //rankdir="LR"; | |
4 | + node[shape=box, style="rounded,filled,bold"]; | |
5 | + splines=ortho; | |
6 | + nodesep=1.4; | |
7 | + labelloc="t"; | |
8 | + label="[A6] Reset password"; | |
9 | + "Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | + "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond]; | |
11 | + "POST /api/request_password_reset"[shape=none]; | |
12 | + labelfloat=true; | |
13 | + lp=100; | |
14 | + | |
15 | + "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
16 | + fixedsize=true, width=1.4, height=1.4]; | |
17 | + | |
18 | + "Settings" -> "POST /api/request_password_reset"; | |
19 | + "POST /api/request_password_reset" -> "Controller"; | |
20 | + "Controller" -> "Email"; | |
21 | + | |
22 | + "Email" -> "Failure: User did not\nreset password"[shape=none]; | |
23 | + "Failure: User did not\nreset password" -> "Settings"; | |
24 | + | |
25 | + "Email" -> "Success: User \nreset password"[shape=none]; | |
26 | + "Success: User \nreset password" -> "Settings"; | |
27 | +} |
screen_sequence_diagrams/review_notification.dot
View file @
2d7d97a
... | ... | @@ -6,8 +6,9 @@ |
6 | 6 | node[shape=box, style="rounded,filled,bold"]; |
7 | 7 | splines=ortho; |
8 | 8 | nodesep=1.4; |
9 | - "Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
9 | + "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | 10 | "Server"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; |
11 | + "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=1.1, height=1.1]; | |
11 | 12 | |
12 | 13 | "Notification"[shape=none]; |
13 | 14 | "UPDATE"[shape=none]; |
... | ... | @@ -15,7 +16,7 @@ |
15 | 16 | "Server" -> "Notification"; |
16 | 17 | "Notification" -> "Controller"; |
17 | 18 | "Controller" -> "UPDATE"; |
18 | - "UPDATE" -> "Sidebar Menu"; | |
19 | + "UPDATE" -> "Navbar"; | |
19 | 20 | |
20 | 21 | } |
screen_sequence_diagrams/study_deck.dot
View file @
2d7d97a
... | ... | @@ -13,7 +13,7 @@ |
13 | 13 | "StudyView Blank"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; |
14 | 14 | "StudyView Response"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; |
15 | 15 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, |
16 | - fixedsize=true, width=1.4, height=1.4]; | |
16 | + fixedsize=true, width=2.2, height=2.2]; | |
17 | 17 | "POST"[shape=none]; |
18 | 18 | labelfloat=true; |
19 | 19 | lp=100; |
... | ... | @@ -26,7 +26,7 @@ |
26 | 26 | "POST" -> "Controller"; |
27 | 27 | "Controller" -> "FAILURE:\nUser has no card in the deck."; |
28 | 28 | "Controller" -> "SUCCESS\nUser has at least a card in the deck."; |
29 | - "FAILURE:\nUser has no card in the deck." -> "Sidebar Menu"; | |
29 | + "FAILURE:\nUser has no card in the deck." -> "Navbar"; | |
30 | 30 | "SUCCESS\nUser has at least a card in the deck." -> "StudyView Blank"; |
31 | 31 | "StudyView Blank" -> "POST"; |
32 | 32 | "Controller" -> "StudyView Response"; |
screen_sequence_diagrams/user_login_out.dot
View file @
2d7d97a
1 | 1 | digraph G{ |
2 | - labelloc="t"; | |
3 | - label="[A2] Login & [A8] Logout"; | |
2 | + labelloc="t"; | |
3 | + label="[A2] Login & [A8] Logout"; | |
4 | 4 | |
5 | - // Other | |
5 | + // Other | |
6 | 6 | ratio=0.75; |
7 | 7 | node[shape=box, style="rounded,filled,bold"]; |
8 | 8 | splines=ortho; |
9 | 9 | |
... | ... | @@ -10,9 +10,9 @@ |
10 | 10 | "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; |
11 | 11 | "Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled]; |
12 | 12 | "Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, |
13 | - fixedsize=true, width=1.8, height=1.8]; | |
13 | + fixedsize=true, width=1.8, height=1.8]; | |
14 | 14 | "Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, |
15 | - fixedsize=true, width=1.8, height=1.8]; | |
15 | + fixedsize=true, width=1.8, height=1.8]; | |
16 | 16 | "POST"[shape=none]; |
17 | 17 | labelfloat=true; |
18 | 18 | lp=100; |
19 | 19 | |
20 | 20 | |
21 | 21 | |
22 | 22 | |
23 | 23 | |
24 | 24 | |
25 | 25 | |
... | ... | @@ -21,26 +21,26 @@ |
21 | 21 | "SUCCESS:\n User logged out"[shape=none]; |
22 | 22 | "Logout FAILURE"[shape=none]; |
23 | 23 | "Login FAILURE"[shape=none]; |
24 | - | |
24 | + | |
25 | 25 | "Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, |
26 | - fixedsize=true, width=1.8, height=1.8]; | |
26 | + fixedsize=true, width=1.8, height=1.8]; | |
27 | 27 | "Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, |
28 | - fixedsize=true, width=1.8, height=1.8]; | |
28 | + fixedsize=true, width=1.8, height=1.8]; | |
29 | 29 | |
30 | - // Graph | |
31 | - "Navbar" -> "POST"[dir=none]; | |
30 | + // Graph | |
31 | + "Navbar" -> "POST"; | |
32 | 32 | "POST" -> "Logout Controller"; |
33 | - "Logout Controller" -> "Logout FAILURE"[dir=none]; | |
33 | + "Logout Controller" -> "Logout FAILURE"; | |
34 | 34 | "Logout FAILURE" -> "Sidebar Menu"; |
35 | 35 | |
36 | 36 | "Logout Controller" -> "SUCCESS:\n User logged out"; |
37 | - "SUCCESS:\n User logged out" -> "Login/Register Page"; | |
37 | + "SUCCESS:\n User logged out" -> "Login/Register Page"; | |
38 | 38 | |
39 | - "Login/Register Page" -> "Login Controller"; | |
40 | - "Login Controller" -> "SUCCESS:\n User logged in"; | |
41 | - "SUCCESS:\n User logged in" -> "Sidebar Menu"; | |
39 | + "Login/Register Page" -> "Login Controller"; | |
40 | + "Login Controller" -> "SUCCESS:\n User logged in"; | |
41 | + "SUCCESS:\n User logged in" -> "Sidebar Menu"; | |
42 | 42 | |
43 | - "Login Controller" -> "Login FAILURE"; | |
44 | - "Login FAILURE" -> "Login/Register Page"; | |
43 | + "Login Controller" -> "Login FAILURE"; | |
44 | + "Login FAILURE" -> "Login/Register Page"; | |
45 | 45 | } |
screen_sequence_diagrams/user_register.dot
View file @
2d7d97a
... | ... | @@ -4,7 +4,7 @@ |
4 | 4 | labelloc="t"; |
5 | 5 | label="[A1] User Registration"; |
6 | 6 | |
7 | - // Other | |
7 | + // Other | |
8 | 8 | ratio=0.75; |
9 | 9 | node[shape=box, style="rounded,filled,bold"]; |
10 | 10 | splines=ortho; |
11 | 11 | |
... | ... | @@ -23,10 +23,9 @@ |
23 | 23 | |
24 | 24 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, |
25 | 25 | fixedsize=true, width=1.5, height=1.5]; |
26 | - "Server"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
27 | - fixedsize=true, width=1.5, height=1.5]; | |
26 | + "Server"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
28 | 27 | |
29 | - // Graph | |
28 | + // Graph | |
30 | 29 | "Login/Register Page" -> "POST"; |
31 | 30 | "POST" -> "Controller"; |
32 | 31 |
screen_sequence_diagrams/view_by_material_time.dot
View file @
2d7d97a
1 | +digraph G{ | |
2 | + ratio=0.75; | |
3 | + //rankdir="LR"; | |
4 | + labelloc="t"; | |
5 | + label="[D2] View A Card by Material Time"; | |
6 | + node[shape=box, style="rounded,filled,bold"]; | |
7 | + splines=ortho; | |
8 | + nodesep=1.0; | |
9 | + "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | + "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
11 | + fixedsize=true, width=1.4, height=1.4]; | |
12 | + "POST"[shape=none]; | |
13 | + labelfloat=true; | |
14 | + lp=100; | |
15 | + | |
16 | + "FAILURE"[shape=none]; | |
17 | + | |
18 | + "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
19 | + fixedsize=true, width=1.4, height=1.4]; | |
20 | + "POST"[shape=none]; | |
21 | + "View Deck" -> "POST"; | |
22 | + "POST" -> "Controller"; | |
23 | + "Controller" -> "FAILURE"; | |
24 | + "FAILURE" -> "View Deck"; | |
25 | + "Controller" -> "Sort by Ascending\nor Descending Time"; | |
26 | + "Sort by Ascending\nor Descending Time" -> "View Deck"; | |
27 | +} |
screen_sequence_diagrams/view_by_pull_time.dot
View file @
2d7d97a
1 | -digraph G{ | |
2 | - ratio=0.75; | |
3 | - //rankdir="LR"; | |
4 | - labelloc="t"; | |
5 | - label="[D2] View A Card by Pull Time"; | |
6 | - node[shape=box, style="rounded,filled,bold"]; | |
7 | - splines=ortho; | |
8 | - nodesep=1.0; | |
9 | - "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
10 | - "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
11 | - fixedsize=true, width=1.4, height=1.4]; | |
12 | - "POST"[shape=none]; | |
13 | - labelfloat=true; | |
14 | - lp=100; | |
15 | - | |
16 | - "FAILURE"[shape=none]; | |
17 | - | |
18 | - "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
19 | - fixedsize=true, width=1.4, height=1.4]; | |
20 | - "POST"[shape=none]; | |
21 | - "View Deck" -> "POST"; | |
22 | - "POST" -> "Controller"; | |
23 | - "Controller" -> "FAILURE"; | |
24 | - "FAILURE" -> "View Deck"; | |
25 | - "Controller" -> "Sort by Ascending\nor Descending Time"; | |
26 | - "Sort by Ascending\nor Descending Time" -> "View Deck"; | |
27 | -} |
use_cases_diagram.dot
View file @
2d7d97a
... | ... | @@ -34,7 +34,7 @@ |
34 | 34 | "[R1] Study Deck"[fillcolor="#ffeeaa", style=filled]; |
35 | 35 | |
36 | 36 | // User |
37 | - [shape=none, shapefile="stick.png"]; | |
37 | + "User"[shape=none, shapefile="stick.png"]; | |
38 | 38 | |
39 | 39 | //Graph |
40 | 40 | "User"->"[A1] User Registration"; |
... | ... | @@ -44,6 +44,7 @@ |
44 | 44 | "[A2] User Login"->"[A5] Password Change"; |
45 | 45 | "[A2] User Login"->"[A3] Add a Class"; |
46 | 46 | "[A2] User Login"->"[A8] User Logout"; |
47 | + "[A2] User Login" ->"[A10] Configure Account Notifications"; | |
47 | 48 | "[A3] Add a Class"->"[F9] View Class Feed"; |
48 | 49 | "[A3] Add a Class"->"[A4] Drop a Class" |
49 | 50 | "[A8] User Logout"->"[A2] User Login"; |