Notes / Assumptions
- Initial stories assume all users are admins. This is not a realistic approach, but it means students will have opportunity to do CRUD actions on every entity.
- Stories prior to login/register assume a hard-coded user.
- It is assumed that there is seed data for any story that requires data to exist, but is prioritized above stories that create data.
As the Tabloid product owner, I would like all users to be authenticated in order to perform any activity in the system so that the system will be able to record which user created post, comment, etc... and EVENTUALLY restrict access to certain features based on user and user type permissions.
Given an unauthenticated user is in the Tabloid application
When they click any link
Then they should be prompted to login using their email address
Given an unauthenticated user is viewing the login form
When they enter an email address that matches an existing User Profile
Then they should be authenticated into the system
And they should be directed to the application home page
Given an unauthenticated user is viewing the login form
When they enter an email address that does not match an existing User Profile
Then an error message should be displayed
And the user should be given another change to enter a valid email address
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As a user I would like to be able to logout of the system so that I can ensure that no one else who uses my computer will have access to my Tabloid account.
Given an authenticated user is in the Tabloid application
When they select the Logout
option from the menu
Then they should be logged out of the system
And they should be directed to the home page
As a reader, I would like to see a list of all the Posts so that I can choose a post that seems interesting to read.
Given the user is in the Tabloid application
When they select the Posts
menu option
Then they should be directed to the Posts list page
And each post in the list should display the title, author and category
And the list should ONLY contain approved Posts
And the list should ONLY contain Posts with a publication date that is in the past
And the list should be in order of publication date with the most recent on top
As an author, I would like to see a list of all the Posts I have written so that I can easily view, edit, delete, publish or unpublish them.
Given the user is in the Tabloid application
When they select the My Posts
menu option
Then they should be directed to the "My Posts" list page
And the page should display ALL the Posts authored by the logged-in user
And each post in the list should display the title, author and category
And the list should be in order of creation date with the most recent on top
As a reader, I would like to see the content of a Post so I can read it.
Given a user is viewing a list of Posts
When they select a post to read
Then they should be directed to a Post Detail page that shows the Post Details.
Post Details include:
- Title
- Header image (if exists)
- Content
- Publication date (MM/DD/YYYY)
- Author's Display Name
As an author, I would like to be able to create Posts so I can share my thoughts with the world.
Given a user is in the app
When they select the New Post
menu option
Then they should be directed to a page with a form for creating a new post
Given the user has entered the relevant information for a Post
When they click the Save
button
Then the Post should be saved to the database
And the creation datetime should be automatically set to the current date and time
And the post should automatically be approved
And the user should be recorded as the author of the Post
And the user should be redirected to the new Post's details page
The "relevant information" for a Post is
- Title
- Content
- Category
- Header Image URL (optional)
- Publication Date (optional)
As an author I would like the ability to remove a post I have written so that I can prevent others from reading it when I decide it is no longer something I wish people to read.
Given an author is viewing a Post that they have written
When they select the delete option
Then they should be presented to confirm the deletion
Given the author wishes to confirm the delete
When they the select the option to confirm
Then the Post should be removed from the system
And the author should be directed back to the Post list
Given the author decides not to confirm the delete
When they the select the option to reject confirmation
Then the Post should NOT be removed from the system
And the author should be directed back to the Post details
As a author I would like to be able to modify my Posts so that I can correct mistakes or add additional content.
Given the user is viewing the Post list
When they select the option to edit an Post
Then the user should be directed to a form and given the ability to change the Post's information
Given the user is finished updating the Post information
When they click the Save
button
Then the updated Post should be saved to the database
And the user should be redirected to the new Post's details page
Given the user has decided not to edit the Post
When they click the Cancel
button
Then the user should be redirected back to the list page
Editable Information
- Title
- Content
- Category
- Header Image URL (optional)
- Publication DateTime (optional)
As an admin I would like to see all the available categories so that I can choose to edit or delete one, or see that I should add a new one.
Given an admin is in the app
When they select the Category Management
link in the menu
Then they should be directed to a page that lists all the Category names ordered alphabetically
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an admin I would like to be able to create a new category so that I can give authors the ability to better classify their posts.
Given an admin is on the Category list page
When they select the Create Category
button
Then they should be directed to a form in which they can enter a new category name
Given an admin has entered a Category name
When they click the Save
button
Then a new category should be saved to the database
And the admin should be directed to the Category list page
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an admin I would like to be able to delete a Category so that I can remove any that are not needed.
Given an admin is vising the list of Categories
When they select the Delete
option
Then they should be prompted to confirm the deletion
Given the admin wishes to confirm the delete
When they the select the option to confirm
Then the Category should be removed from the system
And the admin should be directed back to the Category list
Given the admin decides not to confirm the delete
When they the select the option to reject confirmation
Then the Category should NOT be removed from the system
And the admin should be directed back to the Category list
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an admin I would like to be able to modify a Category so that I can rephrase the name if I think of something more appropriate.
Given the user is viewing the Category list
When they select the option to edit an Category
Then the user should be directed to a form and given the ability to change the Category's name
Given the user is finished updating the Category information
When they click the Save
button
Then the updated Category should be saved to the database
And the user should be redirected to the new Category List page
Given the user has decided not to edit the Category
When they click the Cancel
button
Then the user should be redirected back to the list page
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an admin I would like to see all the available Tags so that I can choose to edit or delete one, or see that I should add a new one.
Given an admin is in the app
When they select the Tag Management
link in the menu
Then they should be directed to a page that lists all the Tag names ordered alphabetically
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an admin I would like to be able to create a new Tag so that I can give authors the ability to better classify their posts.
Given an admin is on the Tag list page
When they select the Create Tag
button
Then they should be directed to a form in which they can enter a new Tag name
Given an admin has entered a Tag name
When they click the Save
button
Then a new Tag should be saved to the database
And the admin should be directed to the Tag list page
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an admin I would like to be able to delete a Tag so that I can remove any that are not needed.
Given an admin is vising the list of Tags
When they select the Delete
option
Then they should be prompted to confirm the deletion
Given the admin wishes to confirm the delete
When they the select the option to confirm
Then the Tag should be removed from the system
And the admin should be directed back to the Tag list
Given the admin decides not to confirm the delete
When they the select the option to reject confirmation
Then the Tag should NOT be removed from the system
And the admin should be directed back to the Tag list
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an admin I would like to be able to modify a Tag so that I can rephrase the name if I think of something more appropriate.
Given the user is viewing the Tag list
When they select the option to edit an Tag
Then the user should be directed to a form and given the ability to change the Tag's name
Given the user is finished updating the Tag information
When they click the Save
button
Then the updated Tag should be saved to the database
And the user should be redirected to the new Tag List page
Given the user has decided not to edit the Tag
When they click the Cancel
button
Then the user should be redirected back to the list page
NOTE: For the time being it is acceptable to treat all users as
admin
users. There is a future story about enforcing user permissions.
As an author I would like to be able to associate one or more Tags with one of my Posts so that readers can easily see the Post topics at a glance.
Given the author is viewing Post details
When they select the Manage Tags
option
Then they should be presented with a selection of Tags options to associate with the Post
Given the author has selected the Tags they wish to associate with a Post
When they click the Save
button
Then the association should be saved to the database
And the user should be directed to the Post details page
And the selected Tags should be displayed on the Post details page
As an author I would like to be able to unassociate one or more Tags from one of my Posts so that I can correct a mistakenly added Tag.
Given the author is viewing Post details
When they select the Manage Tags
option
Then they should be presented with a selection of Tags options that are associated with the Post
Given the author has selected the Tags they wish to remove from a Post
When they click the Save
button
Then the association should be removed from the database
And the user should be directed to the Post details page
And the removed Tags should no longer be displayed on the Post details page
As a reader, I would like to see a list of all the Comments on a Post so that I can read and take part in the discussion on a particular Post.
Given the user is viewing the Details of a Post
When they select the View Comments
button
Then they should be directed to the Comments list page for the Post
And the list should be in order of creation date with the most recent on top
And the title of the related Post should be displayed at the top of the page
And a link back to the Post should be available
Display the following information for each Comment
- Subject
- Content
- Author's Display Name
- Creation date (MM/DD/YYYY)
As a commenter, I would like to be able to add a Comment to a Post so that I can take part in the discussion about a Post.
Given the user is viewing the Details of a Post
When they select the Add Comment
menu option
Then they should be directed to a page with a form for creating a new Comment
Given the user has entered the relevant information for a Comment
When they click the Save
button
Then the Comment should be saved to the database
And the creation datetime should be automatically set to the current date and time
And the user should be redirected to the new Comments list page for the related Post
The "relevant information" for a Comment is
- Subject
- Content
As a commenter I would like the ability to remove a Comment so that I have created so that I can prevent others from seeing it in the event that I regret what I said.
Given a user is vising the list of Comments
When they select the Delete
option
Then they should be prompted to confirm the deletion
Given the user wishes to confirm the delete
When they the select the option to confirm
Then the Comment should be removed from the system
And the user should be directed back to the Comment list
Given the user decides not to confirm the delete
When they the select the option to reject confirmation
Then the Comment should NOT be removed from the system
And the user should be directed back to the Comment list
As a commenter I would like to be able to modify my Comments so that I can correct mistakes or add additional content.
Given the user is viewing the Comment list
When they select the option to edit an Comment
Then the user should be directed to a form and given the ability to change the Comment's information
Given the user is finished updating the Comment information
When they click the Save
button
Then the updated Comment should be saved to the database
And the user should be redirected to the new Comment's details page
Given the user has decided not to edit the Comment
When they click the Cancel
button
Then the user should be redirected back to the list page
Editable Information
- Subject
- Content
As an admin, I would like to see a list of all the User Profiles so that I can keep track of who is using the system.
Given the user is an admin in the Tabloid application
When they select the User Profiles
menu option
Then they should be directed to the User Profiles list page
And each user in the list should display the full name, the display name and the user type.
And the list should be in ordered alphabetically by user display name
As an admin, I would like to see the content of a User Profile so I can read it.
Given a user is viewing a list of User Profiles
When they select a user
Then they should be directed to a User Profile Detail page
User Profile Details include:
- Full name
- Avatar image (if exists, else use a default image)
- Display name
- Creation Date (MM/DD/YYYY)
- User Profile type
As an admin I would like the ability to deactivate a User Profile so that I can prevent unsavory characters from using the system.
Given an admin is vising the list of User Profiles
When they select the Deactivate
option
Then they should be prompted to confirm deactivation
Given the admin wishes to confirm the deactivation
When they the select the option to confirm
Then the User Profile should be deactivated in the system
And the admin should be directed back to the User Profile list
Given the admin decides not to confirm the deactivation
When they the select the option to reject confirmation
Then the User Profile should NOT be deactivated
And the admin should be directed back to the User Profile list
Given a user is deactivated
When they try to login to the system
Then the system should behave as if the user does not exist
As an admin I would like the ability to reactivate a User Profile so that I can correct an mistaken User Profile deactivation
Given an admin is vising the list of User Profiles
When they select the View Deactivated
option
Then they should see a list of deactivated User Profiles
Given an admin sees a User Profile they wish to reactivate
When they select the Reactivate
option
Then the user should be reactivated
And the user should have the same access to the system they had prior to being deactivated
As an admin I would like to be able to change a User Profile's user type so that I can promote people to admin users and demote people to authors.
Given the user is viewing the User Profile list
When they select the option to edit an User Profile
Then the user should be directed to a form and given the ability to change the User Profile's user type.
Given the user is finished updating the User Profile information
When they click the Save
button
Then the updated User Profile should be saved to the database
And the user should be redirected to the new User Profile list page.
Given the user has decided not to edit the User Profile
When they click the Cancel
button
And the user should be redirected to the new User Profile list page.
As the Tabloid Product Owner, I would like to ensure at least one User Profile has a User Type of admin
at all times, so that someone will always be available to administer the system.
Given only one User Profile has administrative rights
When the user attempts to deactivate that last admain
Then they should see an error message instructing them to make someone else an admin before the User Profile can be deactivated
Given only one User Profile has administrative rights
When the user attempts to change the User Type of the last admin
Then they should see an error message instructing them to make someone else an admin before the User Profile can be changed
As a potential user I would like to be able to create an account in the system so that I may use it's features.
Given a potential user wants to create an account in the system
When they select the Register
option from the menu
Then they should be directed to a form where they are prompted to enter their User Profile information
Given a potential user has entered their User Profile information
when they click the Register
button
Then a new User Profile should be created in the database
And the User Profile should have a user type of Author
And the User Profile's creation datetime should be set to the current date end time
And the user should be directed to the homepage
The User Profile information is:
- First name
- Last name
- Display name
As a reader I would like to be able to subscribe to authors that I enjoy so that I can more easily find new Posts they have written.
Given A user is on a Post detail page
When they select the option to subscribe to the Post's author's other Posts
Then a Subscription should be created in the database
And the Subscription's begin datetime should be set to the current time
As a reader I would like to see a list of Posts written by authors I am subscribed to, so that I can more easily find Posts I may be interested in.
Given A user is on the homepage
When the user has at least one Subscription
Then they should see a list of Posts written by authors they are subscribed to
As a reader I would like to unsubscribe from an author's Posts so that I won't see the Posts of author's I am no longer interested in reading.
Given a user is viewing the Post details of an author they are subscribed to
When they select the option to unsubscribe to the author
Then the Subscription end datetime should be updated with the current datetime
And the system should behave as it did before the user had created the Subscription
As the Tabloid application owner I would like the privileges of users throughout the system to be restricted based on their user type so that unauthorized users cannot corrupt, delete or view data in the system.
The privileges of each user type are listed below:
NOTE: Implementing the features outlined in this story will require updating some existing functionality in the system.
NOTE: The dev team may find it useful to break this story into smaller stories in order to facilitate assigning tasks to team members and keeping track of the work.
NOTE: Some of the privileges listed below refer to features that are further down in this backlog. When those future stories are worked, please refer back to this story for a description of the privileges.
NOTE: The order of privileges is does not indicate their priority.
Unauthenticated users can...
- Register for an account
- Login to the system
Authors can...
- Login to the system
- Logout of the system
- View any active and published Posts
- View any Posts they have created
- Comment on a Post
- Edit Comments they created
- Delete Comments they created
- Add a Reaction to a Post
- Remove a Reaction from a Post
- Subscribe to a different User's Posts
- Unsubscribe from a user's Posts
- Write a new Post
- Publish a Post they have created
- Unpublish a Post they have created
- Edit a Post they have created
- Delete a Post they have created
- Add Tags to a Post they have created
- Remove Tags from a Post they have created
- Upload a Profile image
- Upload a Post Header image
Admins can...
- Do all the things Author users can do
- View any User Profile
- Deactivate a User Profile
- Change a User Profile's user type
- Add a Category
- Edit a Category
- Remove a Category
- Add a Tag
- Edit a Tag
- Remove a Tag
- Add a Reaction to the system
- Edit a Reaction in the system
- Remove a Reaction from the system
- Upload a Reaction image
- Delete any Post
- Delete any Comment
As a reader I would like to demonstrate my feelings about a particular Post using the power of an image so that I don't have to think of any words to express myself.
Given a user is viewing a Post details page
When the select a Reaction image
Then a record should be added to the database denoting the user's Reaction to the Post
And a count beside the Reaction image should be incremented
As an author I would like to see the various Reactions to my Post so that I can get a sense of readers' responses.
Given a user is viewing a Post details page
When they look below the body of the Post
Then they should see a row of Reaction images with a number beside each to indicate how many users have chosen that Reaction
NOTE: Reaction counts should be visible to anyone who can view the Post.
As a user I would like to be able to upload an avatar image so that I do not have to find an image online to link to.
As an author I would like to be able to update a header image for a Post so that I do not have to find an image online to link to.
As an admin I would like to be able to add a new Reaction so that I can increase the variety of Reactions available to users of the system.
As an admin I would like Posts written by non-admin users (a.k.a. "Authors") to be initially unapproved, so that authors are unable to publish any inappropriate Posts without oversight.
NOTE: If an admin writes a Post it should be automatically approved.
As an admin I would like the ability to approve Posts that I deem appropriate so that the system can provide quality content.
As an admin I would like the ability to un-approve Posts in case I change my mind about the appropriateness of a Post.
As a reader I would like to be able to find Posts by Tag so that I can more easily find interesting Posts.
As a reader I would like to see all posts in a particular category so that I can more easily find interesting Posts.
As a reader I would like to be able to see all the Posts for a particular User Profile so that I can decide if I would like to subscribe to the user's Posts.
As the Tabloid Product Owner, I would like to require that two admins agree to deactivate another admin or to change an admin's user type.