mirror of
https://github.com/samiyev/puaros.git
synced 2025-12-27 23:06:54 +05:00
- Add 31 tests for SourceFile.ts (46% → 100%) - Add 31 tests for ProjectPath.ts (50% → 100%) - Add 18 tests for ValueObject.ts (25% → 100%) - Add 32 tests for RepositoryViolation.ts (58% → 92.68%) - Total test count: 345 → 457 tests (all passing) - Overall coverage: 95.4% statements, 86.25% branches, 96.68% functions - Update version to 0.7.7 - Update ROADMAP.md and CHANGELOG.md
309 lines
11 KiB
TypeScript
309 lines
11 KiB
TypeScript
import { describe, it, expect } from "vitest"
|
|
import { ProjectPath } from "../../../src/domain/value-objects/ProjectPath"
|
|
|
|
describe("ProjectPath", () => {
|
|
describe("create", () => {
|
|
it("should create a ProjectPath with absolute and relative paths", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.absolute).toBe(absolutePath)
|
|
expect(projectPath.relative).toBe("src/domain/User.ts")
|
|
})
|
|
|
|
it("should handle paths with same directory", () => {
|
|
const absolutePath = "/Users/dev/project/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.absolute).toBe(absolutePath)
|
|
expect(projectPath.relative).toBe("User.ts")
|
|
})
|
|
|
|
it("should handle nested directory structures", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/entities/user/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.absolute).toBe(absolutePath)
|
|
expect(projectPath.relative).toBe("src/domain/entities/user/User.ts")
|
|
})
|
|
|
|
it("should handle Windows-style paths", () => {
|
|
const absolutePath = "C:\\Users\\dev\\project\\src\\domain\\User.ts"
|
|
const projectRoot = "C:\\Users\\dev\\project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.absolute).toBe(absolutePath)
|
|
})
|
|
})
|
|
|
|
describe("absolute getter", () => {
|
|
it("should return the absolute path", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.absolute).toBe(absolutePath)
|
|
})
|
|
})
|
|
|
|
describe("relative getter", () => {
|
|
it("should return the relative path", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.relative).toBe("src/domain/User.ts")
|
|
})
|
|
})
|
|
|
|
describe("extension getter", () => {
|
|
it("should return .ts for TypeScript files", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.extension).toBe(".ts")
|
|
})
|
|
|
|
it("should return .tsx for TypeScript JSX files", () => {
|
|
const absolutePath = "/Users/dev/project/src/components/Button.tsx"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.extension).toBe(".tsx")
|
|
})
|
|
|
|
it("should return .js for JavaScript files", () => {
|
|
const absolutePath = "/Users/dev/project/src/utils/helper.js"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.extension).toBe(".js")
|
|
})
|
|
|
|
it("should return .jsx for JavaScript JSX files", () => {
|
|
const absolutePath = "/Users/dev/project/src/components/Button.jsx"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.extension).toBe(".jsx")
|
|
})
|
|
|
|
it("should return empty string for files without extension", () => {
|
|
const absolutePath = "/Users/dev/project/README"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.extension).toBe("")
|
|
})
|
|
})
|
|
|
|
describe("filename getter", () => {
|
|
it("should return the filename with extension", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.filename).toBe("User.ts")
|
|
})
|
|
|
|
it("should handle filenames with multiple dots", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.test.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.filename).toBe("User.test.ts")
|
|
})
|
|
|
|
it("should handle filenames without extension", () => {
|
|
const absolutePath = "/Users/dev/project/README"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.filename).toBe("README")
|
|
})
|
|
})
|
|
|
|
describe("directory getter", () => {
|
|
it("should return the directory path relative to project root", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/entities/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.directory).toBe("src/domain/entities")
|
|
})
|
|
|
|
it("should return dot for files in project root", () => {
|
|
const absolutePath = "/Users/dev/project/README.md"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.directory).toBe(".")
|
|
})
|
|
|
|
it("should handle single-level directories", () => {
|
|
const absolutePath = "/Users/dev/project/src/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.directory).toBe("src")
|
|
})
|
|
})
|
|
|
|
describe("isTypeScript", () => {
|
|
it("should return true for .ts files", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isTypeScript()).toBe(true)
|
|
})
|
|
|
|
it("should return true for .tsx files", () => {
|
|
const absolutePath = "/Users/dev/project/src/components/Button.tsx"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isTypeScript()).toBe(true)
|
|
})
|
|
|
|
it("should return false for .js files", () => {
|
|
const absolutePath = "/Users/dev/project/src/utils/helper.js"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isTypeScript()).toBe(false)
|
|
})
|
|
|
|
it("should return false for .jsx files", () => {
|
|
const absolutePath = "/Users/dev/project/src/components/Button.jsx"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isTypeScript()).toBe(false)
|
|
})
|
|
|
|
it("should return false for other file types", () => {
|
|
const absolutePath = "/Users/dev/project/README.md"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isTypeScript()).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe("isJavaScript", () => {
|
|
it("should return true for .js files", () => {
|
|
const absolutePath = "/Users/dev/project/src/utils/helper.js"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isJavaScript()).toBe(true)
|
|
})
|
|
|
|
it("should return true for .jsx files", () => {
|
|
const absolutePath = "/Users/dev/project/src/components/Button.jsx"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isJavaScript()).toBe(true)
|
|
})
|
|
|
|
it("should return false for .ts files", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isJavaScript()).toBe(false)
|
|
})
|
|
|
|
it("should return false for .tsx files", () => {
|
|
const absolutePath = "/Users/dev/project/src/components/Button.tsx"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isJavaScript()).toBe(false)
|
|
})
|
|
|
|
it("should return false for other file types", () => {
|
|
const absolutePath = "/Users/dev/project/README.md"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const projectPath = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(projectPath.isJavaScript()).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe("equals", () => {
|
|
it("should return true for identical paths", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const path1 = ProjectPath.create(absolutePath, projectRoot)
|
|
const path2 = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(path1.equals(path2)).toBe(true)
|
|
})
|
|
|
|
it("should return false for different absolute paths", () => {
|
|
const projectRoot = "/Users/dev/project"
|
|
const path1 = ProjectPath.create("/Users/dev/project/src/domain/User.ts", projectRoot)
|
|
const path2 = ProjectPath.create("/Users/dev/project/src/domain/Order.ts", projectRoot)
|
|
|
|
expect(path1.equals(path2)).toBe(false)
|
|
})
|
|
|
|
it("should return false for different relative paths", () => {
|
|
const path1 = ProjectPath.create(
|
|
"/Users/dev/project1/src/User.ts",
|
|
"/Users/dev/project1",
|
|
)
|
|
const path2 = ProjectPath.create(
|
|
"/Users/dev/project2/src/User.ts",
|
|
"/Users/dev/project2",
|
|
)
|
|
|
|
expect(path1.equals(path2)).toBe(false)
|
|
})
|
|
|
|
it("should return false when comparing with undefined", () => {
|
|
const absolutePath = "/Users/dev/project/src/domain/User.ts"
|
|
const projectRoot = "/Users/dev/project"
|
|
|
|
const path1 = ProjectPath.create(absolutePath, projectRoot)
|
|
|
|
expect(path1.equals(undefined)).toBe(false)
|
|
})
|
|
})
|
|
})
|