dbca60c98e
CI / lint (pull_request) Successful in 14s
CI / typecheck (pull_request) Successful in 27s
CI / security (pull_request) Successful in 23s
CI / quality (pull_request) Successful in 16s
CI / integration_tests (pull_request) Failing after 3m31s
CI / build (pull_request) Successful in 15s
CI / lint (push) Successful in 13s
CI / typecheck (push) Successful in 28s
CI / security (push) Successful in 23s
CI / quality (push) Successful in 15s
CI / unit_tests (pull_request) Failing after 9m45s
CI / docker (pull_request) Has been skipped
CI / integration_tests (push) Failing after 3m30s
CI / build (push) Successful in 15s
CI / unit_tests (push) Failing after 9m42s
CI / docker (push) Has been skipped
CI / coverage (pull_request) Failing after 3m29s
CI / coverage (push) Failing after 3m28s
116 lines
6.1 KiB
Gherkin
116 lines
6.1 KiB
Gherkin
Feature: Project database tables migration
|
|
As a developer working on project infrastructure
|
|
I need database tables for projects and project resource links
|
|
So that spec-aligned namespaced projects can be persisted and queried
|
|
|
|
Background:
|
|
Given a project tables in-memory database is initialized
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Table existence
|
|
# ---------------------------------------------------------------------------
|
|
|
|
Scenario: Projects table exists after migration
|
|
Then the project database should contain table "ns_projects"
|
|
|
|
Scenario: Project resource links table exists
|
|
Then the project database should contain table "project_resource_links"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# ProjectModel CRUD
|
|
# ---------------------------------------------------------------------------
|
|
|
|
Scenario: Can insert and retrieve a project
|
|
When I insert a project "local/my-project" with namespace "local"
|
|
Then I can retrieve project "local/my-project"
|
|
And the retrieved project namespace is "local"
|
|
And the retrieved project description is empty
|
|
And the retrieved project tags_json is "[]"
|
|
|
|
Scenario: Can insert a project with description
|
|
When I insert a described project "local/described-proj" with namespace "local" and description "A test project"
|
|
Then I can retrieve project "local/described-proj"
|
|
And the retrieved project description is "A test project"
|
|
|
|
Scenario: Can insert a project with JSON fields
|
|
When I insert a project "local/json-proj" with JSON fields
|
|
Then the project invariants_json round-trips correctly
|
|
And the project context_policy_json round-trips correctly
|
|
And the project tags_json round-trips as a list
|
|
|
|
Scenario: Project namespaced_name uniqueness is enforced
|
|
When I insert a project "local/unique-test" with namespace "local"
|
|
Then inserting a duplicate project "local/unique-test" raises an integrity error
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# ProjectResourceLinkModel CRUD
|
|
# ---------------------------------------------------------------------------
|
|
|
|
Scenario: Can link a resource to a project
|
|
Given a resource type "builtin/git-checkout" exists in project db
|
|
And a resource "local/my-repo" of type "builtin/git-checkout" exists in project db
|
|
And a project "local/linked-proj" exists in project db
|
|
When I create a project resource link for project "local/linked-proj" to resource "local/my-repo"
|
|
Then the project resource link can be retrieved
|
|
And the project resource link project_name is "local/linked-proj"
|
|
And the project resource link read_only is false
|
|
|
|
Scenario: Can link a resource with alias and read_only
|
|
Given a resource type "builtin/git-checkout" exists in project db
|
|
And a resource "local/aliased-repo" of type "builtin/git-checkout" exists in project db
|
|
And a project "local/aliased-proj" exists in project db
|
|
When I create a project resource link with alias "my-alias" and read_only true
|
|
Then the project resource link alias is "my-alias"
|
|
And the project resource link read_only is true
|
|
|
|
Scenario: Duplicate project-resource link is rejected
|
|
Given a resource type "builtin/git-checkout" exists in project db
|
|
And a resource "local/dup-repo" of type "builtin/git-checkout" exists in project db
|
|
And a project "local/dup-proj" exists in project db
|
|
When I create a project resource link for project "local/dup-proj" to resource "local/dup-repo"
|
|
Then creating a duplicate link for project "local/dup-proj" to resource "local/dup-repo" raises an integrity error
|
|
|
|
Scenario: Deleting a project cascades to links
|
|
Given a resource type "builtin/git-checkout" exists in project db
|
|
And a resource "local/cascade-repo" of type "builtin/git-checkout" exists in project db
|
|
And a project "local/cascade-proj" exists in project db
|
|
And a project resource link exists for "local/cascade-proj" to "local/cascade-repo"
|
|
When I delete the project "local/cascade-proj"
|
|
Then the project resource link for "local/cascade-proj" should not exist
|
|
|
|
Scenario: Deleting a linked resource is restricted
|
|
Given a resource type "builtin/git-checkout" exists in project db
|
|
And a resource "local/restrict-repo" of type "builtin/git-checkout" exists in project db
|
|
And a project "local/restrict-proj" exists in project db
|
|
And a project resource link exists for "local/restrict-proj" to "local/restrict-repo"
|
|
Then deleting the linked resource "local/restrict-repo" raises an integrity error
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# ORM Model domain conversion
|
|
# ---------------------------------------------------------------------------
|
|
|
|
Scenario: NamespacedProjectModel to_domain round-trips
|
|
When I insert a described project "local/domain-proj" with namespace "local" and description "Domain test"
|
|
Then converting the project to domain returns a NamespacedProject
|
|
And the domain project name is "domain-proj"
|
|
And the domain project namespace is "local"
|
|
And the domain project description is "Domain test"
|
|
|
|
Scenario: NamespacedProjectModel from_domain creates a valid model
|
|
When I create a NamespacedProject domain model
|
|
And I convert it to a NamespacedProjectModel via from_domain
|
|
Then the model namespaced_name is "local/from-domain-test"
|
|
And the model namespace is "local"
|
|
|
|
Scenario: Project resource link index on project_name exists
|
|
Then the project database should have an index "ix_project_resource_links_project_name" on table "project_resource_links"
|
|
|
|
Scenario: Project resource link index on resource_id exists
|
|
Then the project database should have an index "ix_project_resource_links_resource_id" on table "project_resource_links"
|
|
|
|
Scenario: Project resource link composite index on project_name and alias exists
|
|
Then the project database should have an index "ix_project_resource_links_project_alias" on table "project_resource_links"
|
|
|
|
Scenario: Project namespace index exists
|
|
Then the project database should have an index "ix_ns_projects_namespace" on table "ns_projects"
|