116 lines
5.2 KiB
Gherkin
116 lines
5.2 KiB
Gherkin
Feature: Project Service Coverage
|
|
As a developer maintaining the CleverAgents system
|
|
I want comprehensive tests for the project service
|
|
So that project management functionality works reliably
|
|
|
|
Background:
|
|
Given I have a temporary test directory for project service
|
|
And I have a Unit of Work instance for project testing
|
|
And I have a ProjectService instance
|
|
|
|
Scenario: Create project with file system error
|
|
Given I have a read-only directory for project creation
|
|
When I try to create a project in the read-only directory
|
|
Then a FileSystemError should be raised with message "Failed to create project structure"
|
|
|
|
Scenario: Create project with existing migrated project
|
|
Given I have legacy JSON project data at the target location
|
|
When I create a project that triggers migration
|
|
Then the existing migrated project should be returned
|
|
And no duplicate project should be created
|
|
|
|
Scenario: Create project with migration and existing project without force
|
|
Given I have a project already in database with name "test-project"
|
|
And I have legacy JSON project data for migration with same name
|
|
When I try to create a project with migration without force flag
|
|
Then the existing migrated project should be returned
|
|
And migration should have occurred
|
|
|
|
Scenario: Create project with migration returns existing after migration
|
|
Given I have legacy JSON project data at the target location
|
|
And migration will create a project with name "migrated-project"
|
|
When I create a project that triggers successful migration
|
|
Then the migrated project should be returned
|
|
|
|
Scenario: Get project by name that does not exist
|
|
Given there are no projects in the database
|
|
When I try to get a project by name "non-existent"
|
|
Then a NotFoundError should be raised for project "non-existent"
|
|
|
|
Scenario: Update existing project
|
|
Given I have a saved project with name "update-test"
|
|
When I update the project's settings
|
|
Then the project should be updated successfully
|
|
And the updated project should be returned
|
|
|
|
Scenario: Get project by non-existent path
|
|
Given there are no projects in the database
|
|
When I try to get a project by path "/non/existent/path"
|
|
Then no project should be returned for the path
|
|
|
|
Scenario: List projects with ordering by created date
|
|
Given I have multiple projects created at different times
|
|
When I list all projects ordered by created date
|
|
Then the projects should be returned in creation order
|
|
|
|
Scenario: List projects with ordering by name
|
|
Given I have multiple projects with different names
|
|
When I list all projects ordered by name
|
|
Then the projects should be returned in alphabetical order
|
|
|
|
Scenario: Create project with force flag overwrites existing
|
|
Given I have a project already in database with name "force-test"
|
|
When I create a project with the same name and force flag
|
|
Then a new project should be created successfully
|
|
|
|
Scenario: Project statistics with no plans
|
|
Given I have a saved project with no plans
|
|
When I get project statistics for the saved project
|
|
Then the stats should show zero plans and contexts
|
|
|
|
Scenario: Project statistics with plans and contexts
|
|
Given I have a saved project with plans and contexts
|
|
When I get project statistics for the saved project
|
|
Then the stats should show correct counts for plans and contexts
|
|
|
|
Scenario: Create project initializes database
|
|
Given I have an uninitialized database
|
|
When I create a new project
|
|
Then the database infrastructure should be initialized
|
|
And the project should be created successfully
|
|
|
|
Scenario: Create project with custom settings
|
|
Given I want to create a project with custom settings
|
|
When I create the project with custom auto_build and auto_apply
|
|
Then the project should have the custom settings applied
|
|
|
|
Scenario: Delete project removes from database
|
|
Given I have a saved project with name "delete-test"
|
|
When I delete the project
|
|
Then the project should not exist in the database
|
|
|
|
Scenario: Create project with special characters in name
|
|
Given I want to create a project with name containing spaces
|
|
When I create a project with name "my test project" using project service
|
|
Then the project should be created with sanitized name "my_test_project"
|
|
|
|
Scenario: Get current project from working directory
|
|
Given I have a project at a specific directory
|
|
And I change to that project directory
|
|
When I get the current project
|
|
Then the correct project should be returned
|
|
|
|
Scenario: Create project handles permission denied error
|
|
Given I have a directory without write permissions
|
|
When I try to create a project there
|
|
Then a FileSystemError should be raised with permission details
|
|
|
|
Scenario: Update project that does not exist
|
|
Given I have a project object that is not in database
|
|
When I try to update the non-existent project
|
|
Then the update should handle the missing project gracefully
|
|
|
|
Scenario: Create project with extremely long name
|
|
Given I want to create a project with a very long name
|
|
When I create the project with 300 character name
|
|
Then the project name should be truncated appropriately |