###Description todo is an application which allow people can add new task, see all the tasks added, modify existing tasks, mark tasks done/remaing, or remove tasks. Every task has name and status (completed/not-completed). Task should be unique.
###Usecase
- List/Read
- See all remaning tasks
- See all completed tasks
- Create/Update/Delete
- Add new task
- Mark task as completed/remaning
- Edit existing task (name and status)
- Remove existing task
- Clean all completed tasks
###Story
Feature: Creating task
In order to create a new task
As an user
I can create new task with name
Scenario: Create new task
Given There is no task named "Buying sugar"
When I create a new task named "Buying sugar"
Then The task "Buying sugar" should be created
And The status of task "Buying sugar" should be "remaining"
Scenario: Create new task with existed name
Given There is a task named "Buying salt"
When I create a new task named "Buying salt"
Then The new task "Buying salt" should not be created
Feature: Listing task
In order to see list of tasks
As an user
I can see tasks I created
Scenario: Listing remaining and completed task
Given There are tasks:
| name | status |
| Buying salt | remaining |
| Buying milk | remaining |
| Go to supermarket | completed |
When I list tasks
Then I should see remaining tasks:
| name |
| Buying salt |
| Buying milk |
And I should see completed tasks:
| name |
| Go to supermarket |
Feature: Modifying task
In order to modify task detail
As an user
I can edit the task I created
Scenario: Editing task
Given There is a task named "Buying salt" with status "remaining"
When I modify task "Buying salt" with name "Buying salt and pepper" and status "completed"
Then The task "Buying sugar" should have name "Buying salt and pepper" and status "completed"
Scenario: Complete task status
Given There is a task named "Buying salt" with status "remaining"
When I modify task "Buying salt" with status "completed"
Then The task "Buying salt" should have status "completed"
Scenario: Redo task status
Given There is a task named "Go to supermarket" with status "completed"
When I modify task "Go to supermarket" with status "remaining"
Then The task "Go to supermarket" should have status "remaining"
Feature: Removing task
In order to remove a task
As an user
I can remove the task I created
Scenario: Removing task
Given There is a task named "Buying salt" with status "remaining"
When I remove task "Buying salt"
Then The task "Buying sugar" should be deleted
Scenario: Cleanup completed task
Given There are tasks:
| name | status |
| Buying salt | remaining |
| Buying milk | remaining |
| Go to supermarket | completed |
When I cleanup completed tasks
Then The completed tasks should be removed:
| name |
| Go to supermarket |
###Domain
- Task
- id
- name
- status (completed/remaning)
- createdAt
- updatedAt
- Factory
- TaskFactory
-
createFromName
-
- TaskFactory
- Exception
- TaskNameIsEmptyException
- TaskNameIsAlreadyExistedException
- TaskIsNotFoundException
- Specification
- TaskNameIsNotEmptySpecification
-
isSatisfiedBy
-
- TaskNameIsUniqueSpecification
-
isSatisfiedBy
-
- TaskNameIsNotEmptySpecification
- Repository
- TaskRepositoryInterface
-
findAll
-
find
-
findAllByStatus
-
findByName
-
save
-
remove
-
- TaskRepositoryInterface
###Application
- Task
- Exception
- TaskCannotBeSavedException
- TaskCannotBeRemovedException
- Query
-
getTaskById
-
getAllRemainingTasks
-
getAllCompletedTasks
-
- Command
-
addNewTask
-
completeTask
-
redoTask
-
editTask
-
removeTask
-
cleanAllCompletedTasks
-
- Exception
###Infrastructure
- Persistence
-
DoctrineORM
- Repository
- TaskRepository
-
findAll
-
find
-
findAllByStatus
-
save
-
remove
-
- TaskRepository
- Repository
-
Eloquent
- Repository
- TaskRepository
-
findAll
-
find
-
findAllByStatus
-
save
-
remove
-
- TaskRepository
- Repository
-