Commit 88d1384790ad4a7ee48acb5137162f48b6b49b78
Exists in
master
Merges
Showing 3 changed files Side-by-side Diff
DesignUseCases.tex
View file @
88d1384
... | ... | @@ -585,7 +585,7 @@ |
585 | 585 | the students who are actually in his class participate, and nobody |
586 | 586 | else.} |
587 | 587 | |
588 | -{Primary Actor: }{User (instructor)} | |
588 | +\item[Primary Actor]{Instructor} | |
589 | 589 | |
590 | 590 | \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User |
591 | 591 | Login} |
... | ... | @@ -784,8 +784,8 @@ |
784 | 784 | {The User shall highlight keywords in the flashcard text.} |
785 | 785 | \item |
786 | 786 | {The User shall click on the `Contribute' button.} |
787 | -\item {The frontend shallsubmit the flashcard text, | |
788 | - blanks, and material date, in JSON form as a POST request.} | |
787 | +\item {The frontend shall generate a POST request consisting of the flashcard text, | |
788 | + blanks, and material date, in JSON form in FeedController.js and send it to /api/flashcards/.} | |
789 | 789 | \item |
790 | 790 | {The backend shall obtain the flashcard information by deserializing |
791 | 791 | the JSON in the POST request in views.py.} |
792 | 792 | |
793 | 793 | |
794 | 794 | |
795 | 795 | |
796 | 796 | |
797 | 797 | |
798 | 798 | |
... | ... | @@ -846,29 +846,29 @@ |
846 | 846 | \item |
847 | 847 | {The user shall click `Save Changes'} |
848 | 848 | \item |
849 | - {The client shall generate a POST request for a new flashcard and send | |
850 | - it to the server at /api/flashcards/} | |
849 | + {The client shall generate a PATCH request for a new flashcard in CardGridController.js | |
850 | + and send it to the server at /api/flashcards/} | |
851 | 851 | \item |
852 | 852 | {If the user changed only the blanks of the cards, the server shall |
853 | 853 | create a new FlashcardMask object and update the appropriate |
854 | 854 | UserFlashcard object with a reference to it.} |
855 | 855 | \item |
856 | 856 | {If the user changed the text of the card, the server will instead:} |
857 | -\end{enumerate} | |
858 | 857 | |
859 | 858 | \begin{enumerate} |
860 | 859 | \itemsep1pt\parskip0pt\parsep0pt |
861 | 860 | \item |
862 | - {create a new flashcard for the section} | |
861 | + {Create a new flashcard for the section} | |
863 | 862 | \item |
864 | - {push it to the feed} | |
863 | + {Push it to the feed} | |
865 | 864 | \item |
866 | - {add it to the user's deck} | |
865 | + {Add it to the user's deck} | |
867 | 866 | \item |
868 | - {hide the old card from the user} | |
867 | + {Hide the old card from the user} | |
869 | 868 | \item |
870 | - {and return the new card to the user} | |
869 | + {Return the new card to the user} | |
871 | 870 | \end{enumerate} |
871 | +\end{enumerate} | |
872 | 872 | \end{description} |
873 | 873 | {} |
874 | 874 | |
875 | 875 | |
876 | 876 | |
877 | 877 | |
... | ... | @@ -922,19 +922,21 @@ |
922 | 922 | \begin{enumerate} |
923 | 923 | \itemsep1pt\parskip0pt\parsep0pt |
924 | 924 | \item |
925 | - {User shall click on the ``Pull Flashcard'' button on a Flashcard in | |
926 | - the Feed.} | |
925 | + {The user shall hover over the flashcard he wants to add to his deck and click on the '+' | |
926 | + icon that appears in the center of the card.} | |
927 | 927 | \item |
928 | - {The frontend shall } | |
928 | + {The frontend shall make the pulled Flashcard appear in the user's deck.} | |
929 | 929 | \item |
930 | - {The Client shall make the pulled Flashcard appear in the User's Deck | |
931 | - on the sidebar.} | |
932 | -\item | |
933 | - {The Client shall submit a POST request to | |
930 | + {The frontend shall generate a POST request in FlashcardFactory.js and send it to | |
934 | 931 | /api/flashcards/\textless{}flashcard id\textgreater{}/pull} |
935 | 932 | \item |
936 | - {The server shall create a UserFlashcard object to represent that the | |
937 | - user's deck contains the card.} | |
933 | + {The server shall call the FlashcardViewSet.pull to handle the POST request sent by the frontend.} | |
934 | +\item | |
935 | + {The FlashcardViewSet.pull method should call the user.pull method in models.py with the flashcard object | |
936 | + to be pulled as an argument} | |
937 | +\item | |
938 | + {The user.pull method shall create a UserFlashcard object associated with the request's user and the | |
939 | + passed in flashcard object and save it in the database.} | |
938 | 940 | \item |
939 | 941 | {The server shall notify connected clients about the new card rating, |
940 | 942 | if any} |
TestCases.tex
View file @
88d1384
... | ... | @@ -47,11 +47,11 @@ |
47 | 47 | \section{Testing Notes} |
48 | 48 | \subsection{Testing Accounts} |
49 | 49 | UserX\\ |
50 | -- email: userx@flashy.cards\ | |
50 | +- email: UserX@flashy.cards\ | |
51 | 51 | - password: mynameisuserx |
52 | 52 | \\ |
53 | 53 | UserY\\ |
54 | -- email: usery@flashy.cards\ | |
54 | +- email: UserY@flashy.cards\ | |
55 | 55 | - password: mynameisusery |
56 | 56 | |
57 | 57 | \subsection{Fixtures} |
... | ... | @@ -87,7 +87,7 @@ |
87 | 87 | \item[Dependency Use Cases:]{None} |
88 | 88 | \\ |
89 | 89 | |
90 | -\item[Priority Level:]{``Must''} | |
90 | +\item[Priority Level:]{``Must''} | |
91 | 91 | |
92 | 92 | \item[Status:]{Implemented} |
93 | 93 | |
... | ... | @@ -340,7 +340,7 @@ |
340 | 340 | \item |
341 | 341 | {UserX shall begin to type ``TEST 103''.} |
342 | 342 | \item |
343 | - {The System shall show suggestions as a user types.} | |
343 | + {The System shall show suggestions as UserX types.} | |
344 | 344 | \item |
345 | 345 | {The System shall check if there is a whitelist for each class in the suggestions.} |
346 | 346 | \item |
347 | 347 | |
348 | 348 | |
349 | 349 | |
... | ... | @@ -384,18 +384,18 @@ |
384 | 384 | \begin{itemize} |
385 | 385 | \itemsep1pt\parskip0pt\parsep0pt |
386 | 386 | \item |
387 | - {User is logged in as UserX.} | |
387 | + {The User is logged in as UserX.} | |
388 | 388 | \item |
389 | - {User has enrolled in TEST 101.} | |
389 | + {The User has enrolled in TEST 101.} | |
390 | 390 | \item |
391 | - {User is at Settings page.} | |
391 | + {The User is at Settings page.} | |
392 | 392 | \end{itemize} |
393 | 393 | |
394 | 394 | \item[Postconditions:] |
395 | 395 | \begin{itemize} |
396 | 396 | \itemsep1pt\parskip0pt\parsep0pt |
397 | 397 | \item |
398 | - {User shall no longer have access to TEST 101, or associated flashcards.} | |
398 | + {The User shall no longer have access to TEST 101, or associated flashcards.} | |
399 | 399 | \end{itemize} |
400 | 400 | |
401 | 401 | \item[Trigger:]{UserX wants to stop seeing the class's Live Feed and remove |
402 | 402 | |
403 | 403 | |
404 | 404 | |
405 | 405 | |
406 | 406 | |
407 | 407 | |
408 | 408 | |
409 | 409 | |
410 | 410 | |
411 | 411 | |
412 | 412 | |
413 | 413 | |
414 | 414 | |
415 | 415 | |
416 | 416 | |
417 | 417 | |
418 | 418 | |
419 | 419 | |
... | ... | @@ -974,61 +974,107 @@ |
974 | 974 | \item |
975 | 975 | {User has added the class TEST 101.} |
976 | 976 | \item |
977 | - {TEST 101 contains the flashcard ``This is made for \textbf{edit}'' | |
977 | + {TEST 101 contains the flashcard ``This is made for edit'' | |
978 | 978 | , which was made by other user and is not in UserX's deck.} |
979 | 979 | \item |
980 | - {UserX has the flashcard ``I have made an error'', which was created by UserX, in their deck.} | |
980 | + {UserX has the flashcard ``I have made an \textbf{error}'', | |
981 | +which was created by UserX, and was pulled by UserY.} | |
982 | +\item | |
983 | + {UserX is at the live feed of TEST 101.} | |
981 | 984 | \end{itemize} |
982 | 985 | |
983 | 986 | \item[Postconditions:] |
984 | 987 | \begin{itemize} |
985 | 988 | \itemsep1pt\parskip0pt\parsep0pt |
986 | 989 | \item |
987 | - {The selected flashcard is edited} | |
990 | + {The selected flashcards are edited.} | |
988 | 991 | \end{itemize} |
989 | 992 | |
990 | -\item[Trigger:]{The User wants to edit a card.} | |
993 | +\item[Trigger:]{The User wants to edit existing flashcards.} | |
991 | 994 | |
992 | 995 | \item[Workflow:] |
993 | 996 | \begin{enumerate} |
994 | 997 | \itemsep1pt\parskip0pt\parsep0pt |
995 | 998 | \item |
996 | - {UserX shall hover the cursor over the flashcard ``this is made for \textbf{edit}''.} | |
999 | + {UserX shall hover the cursor over the flashcard | |
1000 | +``this is made for edit''.} | |
997 | 1001 | \item |
998 | - {UserX shall click the edit button on bottom left of the hovered flashcard. The blue edit button looks like a pencil slanted writing on a paper.} | |
1002 | + {UserX shall click the blue pencil edit icon on | |
1003 | +the bottom left of the hovered flashcard.} | |
999 | 1004 | \item |
1000 | - {The System shall present a modal that contains the text of the selected flashcard.} | |
1005 | + {The System shall present a modal that contains the | |
1006 | +``this is made for edit'' of the selected flashcard.} | |
1001 | 1007 | \item |
1002 | - {UserX shall be able to change the text to ``Edit has been made''.} | |
1008 | + {UserX shall select the entire text.} | |
1003 | 1009 | \item |
1004 | - {UserX shall click ``Save Changes''.} | |
1010 | + {UserX shall change the text to ``Edit has been made''.} | |
1005 | 1011 | \item |
1012 | + {UserX shall click 'SAVE CHANGES'} | |
1013 | +\item | |
1006 | 1014 | {The System shall hide the modal from UserX.} |
1007 | 1015 | \end{enumerate} |
1008 | 1016 | |
1009 | -\item[Expected Results:]{The selected flashcard's text shall be changed to ``Edit has been made''.} | |
1017 | +\item[Expected Results:]{UserX shall see a new flashcard with the | |
1018 | +text ``Edit has been made'' added to the top of the feed and the new | |
1019 | +flashcard will be added to UserX's deck. | |
1020 | +The flashcard with the text ``this is made for edit'' | |
1021 | +will be hidden from UserX.} | |
1010 | 1022 | |
1011 | -\item[Alternative Workflow A:] | |
1023 | +\item[Alternate Workflow A:] | |
1012 | 1024 | \begin{enumerate} |
1013 | 1025 | \itemsep1pt\parskip0pt\parsep0pt |
1014 | 1026 | \item |
1015 | - {UserX shall move the cursor over the flash card ``this is made for edit2''.} | |
1027 | + {UserX shall move the cursor over the flash card | |
1028 | +``I have made an \textbf{error}''.} | |
1016 | 1029 | \item |
1017 | - {UserX shall click the edit button on bottom left of the selected flashcard.} | |
1030 | + {UserX shall click the blue pencil edit icon on | |
1031 | +the bottom left of the hovered flashcard.} | |
1018 | 1032 | \item |
1019 | - {The System shall present a modal that contains the text of the selected flashcard.} | |
1033 | + {The System shall present a modal that contains the text | |
1034 | +``I have made an \textbf{error}'' of the selected flashcard.} | |
1020 | 1035 | \item |
1021 | - {UserX shall be able to change the bolded text from ``edit2'' to ``fun'' by highlighting the words and click blank words.} | |
1036 | + {UserX shall select the bolded text ``\textbf{error}''} | |
1022 | 1037 | \item |
1038 | + {UserX shall select } | |
1039 | +\item | |
1023 | 1040 | {UserX shall click ``Save Changes''.} |
1024 | 1041 | \item |
1025 | 1042 | {The System shall hide the modal from UserX.} |
1026 | 1043 | \item |
1027 | - {The selected flashcard's blanked words shall be changed to ``fun''.} | |
1044 | + {The selected flashcard's blanked words shall be | |
1045 | +changed to ``fun''.} | |
1028 | 1046 | \end{enumerate} |
1029 | 1047 | |
1030 | 1048 | \item[Expected Result:]{The selected flashcard's blanked words shall be changed to ``fun''.} |
1031 | 1049 | |
1050 | +\item[Alternate Workflow B:] | |
1051 | +\begin{enumerate} | |
1052 | +\itemsep1pt\parskip0pt\parsep0pt | |
1053 | +\item | |
1054 | + {UserX shall hover the cursor over the flashcard | |
1055 | +``Edit has been made''.} | |
1056 | +\item | |
1057 | + {UserX shall click the blue pencil edit icon on | |
1058 | +the bottom left of the hovered flashcard.} | |
1059 | +\item | |
1060 | + {The System shall present a modal that contains the | |
1061 | +``Edit has been made'' of the selected flashcard.} | |
1062 | +\item | |
1063 | + {UserX shall select the entire text.} | |
1064 | +\item | |
1065 | + {UserX shall change the text to blanks.} | |
1066 | +\item | |
1067 | + {UserX shall click 'SAVE CHANGES' (button may not change | |
1068 | +color).} | |
1069 | +\item | |
1070 | + {The System shall hide the modal from UserX.} | |
1071 | +\end{enumerate} | |
1072 | + | |
1073 | +\item[Expected Result:]{UserX shall see a new flashcard with the | |
1074 | +text ``Edit has been made'' added to the top of the feed and the new | |
1075 | +flashcard will be added to UserX's deck. | |
1076 | +The flashcard with the text ``this is made for edit'' | |
1077 | +will be hidden from UserX.} | |
1032 | 1078 | \item[Alternative Workflow B:] |
1033 | 1079 | |
1034 | 1080 | \begin{enumerate} |
1035 | 1081 | |
... | ... | @@ -1504,11 +1550,11 @@ |
1504 | 1550 | \subsection{[F9] View a Feed} |
1505 | 1551 | |
1506 | 1552 | \begin{description} |
1507 | -\item[Description:]{This Test Case outlines the presentation layer process | |
1508 | - process of a user viewing a class feed of flashcards.} | |
1553 | +\item[Description:]{This test case outlines the presentation | |
1554 | +layer process process of a user viewing a class Feed.} | |
1509 | 1555 | |
1510 | -\item[Desired Outcome:]{The System shall show the user the Feed for their | |
1511 | - class.} | |
1556 | +\item[Desired Outcome:]{The System shall show the user the | |
1557 | +Feed for their class.} | |
1512 | 1558 | \\ |
1513 | 1559 | |
1514 | 1560 | \item[User Goals:]{The User will see the Feed for the class User selected.} |
1515 | 1561 | |
1516 | 1562 | |
... | ... | @@ -1534,21 +1580,24 @@ |
1534 | 1580 | \item {User shall see the Feed for the class TEST 101.} |
1535 | 1581 | \end{itemize} |
1536 | 1582 | |
1537 | -\item[Trigger:]{The User wants to view Feed of their class.} | |
1583 | +\item[Trigger:]{The User wants to view the live feed of their class.} | |
1538 | 1584 | |
1539 | 1585 | \item[Workflow:] |
1540 | 1586 | \begin{enumerate} |
1541 | 1587 | \itemsep1pt\parskip0pt\parsep0pt |
1542 | 1588 | \item |
1543 | 1589 | {UserX is at any view on the application.} |
1544 | -\item {UserX shall press the menu on the far left of the navigation bar.} | |
1545 | -\item {UserX shall select the class TEST 101 from the menu.} | |
1590 | +\item | |
1591 | +{UserX shall click the down arrow on the top left | |
1592 | +of the screen that's on the left of the navigation bar.} | |
1593 | +\item {UserX shall select the class TEST 101 from the drop down menu.} | |
1546 | 1594 | \item |
1547 | 1595 | {The System shall display the Feed view of TEST 101 to UserX.} |
1548 | 1596 | \end{enumerate} |
1549 | 1597 | |
1550 | -\item[Expected Result:]{UserX should be able to see the Feed view for the | |
1551 | - selected class TEST 101.} | |
1598 | +\item[Expected Result:]{UserX should be able to see | |
1599 | +the Feed view for the selected class TEST 101. The top left | |
1600 | +of the screen shall display TEST 101 to indicate the class.} | |
1552 | 1601 | \end{description} |
1553 | 1602 | \newpage |
1554 | 1603 |
UserStories.tex
View file @
88d1384
... | ... | @@ -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} |