intershell 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +301 -0
- package/dist/commands/ci/act.d.ts +13 -0
- package/dist/commands/ci/act.d.ts.map +1 -0
- package/dist/commands/ci/act.js +89 -0
- package/dist/commands/ci/act.js.map +1 -0
- package/dist/commands/ci/attach-affected.d.ts +12 -0
- package/dist/commands/ci/attach-affected.d.ts.map +1 -0
- package/dist/commands/ci/attach-affected.js +83 -0
- package/dist/commands/ci/attach-affected.js.map +1 -0
- package/dist/commands/ci/attach-service-ports.d.ts +10 -0
- package/dist/commands/ci/attach-service-ports.d.ts.map +1 -0
- package/dist/commands/ci/attach-service-ports.js +25 -0
- package/dist/commands/ci/attach-service-ports.js.map +1 -0
- package/dist/commands/commit-check.d.ts +13 -0
- package/dist/commands/commit-check.d.ts.map +1 -0
- package/dist/commands/commit-check.js +110 -0
- package/dist/commands/commit-check.js.map +1 -0
- package/dist/commands/commit.d.ts +16 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +91 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/dev/check.d.ts +13 -0
- package/dist/commands/dev/check.d.ts.map +1 -0
- package/dist/commands/dev/check.js +91 -0
- package/dist/commands/dev/check.js.map +1 -0
- package/dist/commands/dev/cleanup.d.ts +10 -0
- package/dist/commands/dev/cleanup.d.ts.map +1 -0
- package/dist/commands/dev/cleanup.js +28 -0
- package/dist/commands/dev/cleanup.js.map +1 -0
- package/dist/commands/dev/rm.d.ts +12 -0
- package/dist/commands/dev/rm.d.ts.map +1 -0
- package/dist/commands/dev/rm.js +49 -0
- package/dist/commands/dev/rm.js.map +1 -0
- package/dist/commands/dev/setup.d.ts +10 -0
- package/dist/commands/dev/setup.d.ts.map +1 -0
- package/dist/commands/dev/setup.js +40 -0
- package/dist/commands/dev/setup.js.map +1 -0
- package/dist/commands/local/cleanup.d.ts +12 -0
- package/dist/commands/local/cleanup.d.ts.map +1 -0
- package/dist/commands/local/cleanup.js +62 -0
- package/dist/commands/local/cleanup.js.map +1 -0
- package/dist/commands/local/setup.d.ts +11 -0
- package/dist/commands/local/setup.d.ts.map +1 -0
- package/dist/commands/local/setup.js +55 -0
- package/dist/commands/local/setup.js.map +1 -0
- package/dist/commands/local/vscode.d.ts +17 -0
- package/dist/commands/local/vscode.d.ts.map +1 -0
- package/dist/commands/local/vscode.js +94 -0
- package/dist/commands/local/vscode.js.map +1 -0
- package/dist/commands/update-package-json.d.ts +12 -0
- package/dist/commands/update-package-json.d.ts.map +1 -0
- package/dist/commands/update-package-json.js +82 -0
- package/dist/commands/update-package-json.js.map +1 -0
- package/dist/commands/version/apply.d.ts +16 -0
- package/dist/commands/version/apply.d.ts.map +1 -0
- package/dist/commands/version/apply.js +120 -0
- package/dist/commands/version/apply.js.map +1 -0
- package/dist/commands/version/ci.d.ts +12 -0
- package/dist/commands/version/ci.d.ts.map +1 -0
- package/dist/commands/version/ci.js +67 -0
- package/dist/commands/version/ci.js.map +1 -0
- package/dist/commands/version/prepare.d.ts +19 -0
- package/dist/commands/version/prepare.d.ts.map +1 -0
- package/dist/commands/version/prepare.js +153 -0
- package/dist/commands/version/prepare.js.map +1 -0
- package/dist/core/colorify.d.ts +21 -0
- package/dist/core/colorify.d.ts.map +1 -0
- package/dist/core/colorify.js +56 -0
- package/dist/core/colorify.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/types.d.ts +181 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/wrapshell.d.ts +19 -0
- package/dist/core/wrapshell.d.ts.map +1 -0
- package/dist/core/wrapshell.js +323 -0
- package/dist/core/wrapshell.js.map +1 -0
- package/dist/entities/affected/affected.d.ts +4 -0
- package/dist/entities/affected/affected.d.ts.map +1 -0
- package/dist/entities/affected/affected.js +20 -0
- package/dist/entities/affected/affected.js.map +1 -0
- package/dist/entities/affected/affected.test.d.ts +2 -0
- package/dist/entities/affected/affected.test.d.ts.map +1 -0
- package/dist/entities/affected/affected.test.js +305 -0
- package/dist/entities/affected/affected.test.js.map +1 -0
- package/dist/entities/affected/index.d.ts +2 -0
- package/dist/entities/affected/index.d.ts.map +1 -0
- package/dist/entities/affected/index.js +2 -0
- package/dist/entities/affected/index.js.map +1 -0
- package/dist/entities/branch/branch.d.ts +8 -0
- package/dist/entities/branch/branch.d.ts.map +1 -0
- package/dist/entities/branch/branch.js +74 -0
- package/dist/entities/branch/branch.js.map +1 -0
- package/dist/entities/branch/branch.test.d.ts +2 -0
- package/dist/entities/branch/branch.test.d.ts.map +1 -0
- package/dist/entities/branch/branch.test.js +316 -0
- package/dist/entities/branch/branch.test.js.map +1 -0
- package/dist/entities/branch/branch.types.d.ts +6 -0
- package/dist/entities/branch/branch.types.d.ts.map +1 -0
- package/dist/entities/branch/branch.types.js +2 -0
- package/dist/entities/branch/branch.types.js.map +1 -0
- package/dist/entities/branch/index.d.ts +3 -0
- package/dist/entities/branch/index.d.ts.map +1 -0
- package/dist/entities/branch/index.js +3 -0
- package/dist/entities/branch/index.js.map +1 -0
- package/dist/entities/commit/commit.d.ts +15 -0
- package/dist/entities/commit/commit.d.ts.map +1 -0
- package/dist/entities/commit/commit.js +196 -0
- package/dist/entities/commit/commit.js.map +1 -0
- package/dist/entities/commit/commit.test.d.ts +26 -0
- package/dist/entities/commit/commit.test.d.ts.map +1 -0
- package/dist/entities/commit/commit.test.js +550 -0
- package/dist/entities/commit/commit.test.js.map +1 -0
- package/dist/entities/commit/commit.types.d.ts +49 -0
- package/dist/entities/commit/commit.types.d.ts.map +1 -0
- package/dist/entities/commit/commit.types.js +31 -0
- package/dist/entities/commit/commit.types.js.map +1 -0
- package/dist/entities/commit/index.d.ts +3 -0
- package/dist/entities/commit/index.d.ts.map +1 -0
- package/dist/entities/commit/index.js +3 -0
- package/dist/entities/commit/index.js.map +1 -0
- package/dist/entities/commit/pr.d.ts +11 -0
- package/dist/entities/commit/pr.d.ts.map +1 -0
- package/dist/entities/commit/pr.js +201 -0
- package/dist/entities/commit/pr.js.map +1 -0
- package/dist/entities/commit/pr.test.d.ts +2 -0
- package/dist/entities/commit/pr.test.d.ts.map +1 -0
- package/dist/entities/commit/pr.test.js +782 -0
- package/dist/entities/commit/pr.test.js.map +1 -0
- package/dist/entities/compose/compose.d.ts +18 -0
- package/dist/entities/compose/compose.d.ts.map +1 -0
- package/dist/entities/compose/compose.js +197 -0
- package/dist/entities/compose/compose.js.map +1 -0
- package/dist/entities/compose/compose.test.d.ts +2 -0
- package/dist/entities/compose/compose.test.d.ts.map +1 -0
- package/dist/entities/compose/compose.test.js +406 -0
- package/dist/entities/compose/compose.test.js.map +1 -0
- package/dist/entities/compose/compose.types.d.ts +77 -0
- package/dist/entities/compose/compose.types.d.ts.map +1 -0
- package/dist/entities/compose/compose.types.js +2 -0
- package/dist/entities/compose/compose.types.js.map +1 -0
- package/dist/entities/compose/index.d.ts +3 -0
- package/dist/entities/compose/index.d.ts.map +1 -0
- package/dist/entities/compose/index.js +3 -0
- package/dist/entities/compose/index.js.map +1 -0
- package/dist/entities/entities.shell.d.ts +29 -0
- package/dist/entities/entities.shell.d.ts.map +1 -0
- package/dist/entities/entities.shell.js +27 -0
- package/dist/entities/entities.shell.js.map +1 -0
- package/dist/entities/entities.shell.test.d.ts +2 -0
- package/dist/entities/entities.shell.test.d.ts.map +1 -0
- package/dist/entities/entities.shell.test.js +23 -0
- package/dist/entities/entities.shell.test.js.map +1 -0
- package/dist/entities/index.d.ts +12 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +12 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/intershell-config/intershell-config.d.ts +11 -0
- package/dist/entities/intershell-config/intershell-config.d.ts.map +1 -0
- package/dist/entities/intershell-config/intershell-config.default.d.ts +188 -0
- package/dist/entities/intershell-config/intershell-config.default.d.ts.map +1 -0
- package/dist/entities/intershell-config/intershell-config.default.js +225 -0
- package/dist/entities/intershell-config/intershell-config.default.js.map +1 -0
- package/dist/entities/intershell-config/intershell-config.js +132 -0
- package/dist/entities/intershell-config/intershell-config.js.map +1 -0
- package/dist/entities/intershell-config/intershell-config.test.d.ts +2 -0
- package/dist/entities/intershell-config/intershell-config.test.d.ts.map +1 -0
- package/dist/entities/intershell-config/intershell-config.test.js +102 -0
- package/dist/entities/intershell-config/intershell-config.test.js.map +1 -0
- package/dist/entities/intershell-config/intershell-config.types.d.ts +103 -0
- package/dist/entities/intershell-config/intershell-config.types.d.ts.map +1 -0
- package/dist/entities/intershell-config/intershell-config.types.js +2 -0
- package/dist/entities/intershell-config/intershell-config.types.js.map +1 -0
- package/dist/entities/package/index.d.ts +4 -0
- package/dist/entities/package/index.d.ts.map +1 -0
- package/dist/entities/package/index.js +4 -0
- package/dist/entities/package/index.js.map +1 -0
- package/dist/entities/package/package.d.ts +49 -0
- package/dist/entities/package/package.d.ts.map +1 -0
- package/dist/entities/package/package.js +234 -0
- package/dist/entities/package/package.js.map +1 -0
- package/dist/entities/package/package.shell.d.ts +48 -0
- package/dist/entities/package/package.shell.d.ts.map +1 -0
- package/dist/entities/package/package.shell.js +118 -0
- package/dist/entities/package/package.shell.js.map +1 -0
- package/dist/entities/package/package.test.d.ts +23 -0
- package/dist/entities/package/package.test.d.ts.map +1 -0
- package/dist/entities/package/package.test.js +637 -0
- package/dist/entities/package/package.test.js.map +1 -0
- package/dist/entities/package/package.types.d.ts +48 -0
- package/dist/entities/package/package.types.d.ts.map +1 -0
- package/dist/entities/package/package.types.js +2 -0
- package/dist/entities/package/package.types.js.map +1 -0
- package/dist/entities/package-changelog/index.d.ts +4 -0
- package/dist/entities/package-changelog/index.d.ts.map +1 -0
- package/dist/entities/package-changelog/index.js +4 -0
- package/dist/entities/package-changelog/index.js.map +1 -0
- package/dist/entities/package-changelog/package-changelog.d.ts +20 -0
- package/dist/entities/package-changelog/package-changelog.d.ts.map +1 -0
- package/dist/entities/package-changelog/package-changelog.js +59 -0
- package/dist/entities/package-changelog/package-changelog.js.map +1 -0
- package/dist/entities/package-changelog/package-changelog.types.d.ts +25 -0
- package/dist/entities/package-changelog/package-changelog.types.d.ts.map +1 -0
- package/dist/entities/package-changelog/package-changelog.types.js +2 -0
- package/dist/entities/package-changelog/package-changelog.types.js.map +1 -0
- package/dist/entities/package-changelog/template.d.ts +20 -0
- package/dist/entities/package-changelog/template.d.ts.map +1 -0
- package/dist/entities/package-changelog/template.default.d.ts +10 -0
- package/dist/entities/package-changelog/template.default.d.ts.map +1 -0
- package/dist/entities/package-changelog/template.default.js +85 -0
- package/dist/entities/package-changelog/template.default.js.map +1 -0
- package/dist/entities/package-changelog/template.js +90 -0
- package/dist/entities/package-changelog/template.js.map +1 -0
- package/dist/entities/package-commits/dependency-analyzer.d.ts +35 -0
- package/dist/entities/package-commits/dependency-analyzer.d.ts.map +1 -0
- package/dist/entities/package-commits/dependency-analyzer.js +169 -0
- package/dist/entities/package-commits/dependency-analyzer.js.map +1 -0
- package/dist/entities/package-commits/dependency-analyzer.test.d.ts +2 -0
- package/dist/entities/package-commits/dependency-analyzer.test.d.ts.map +1 -0
- package/dist/entities/package-commits/dependency-analyzer.test.js +25 -0
- package/dist/entities/package-commits/dependency-analyzer.test.js.map +1 -0
- package/dist/entities/package-commits/index.d.ts +3 -0
- package/dist/entities/package-commits/index.d.ts.map +1 -0
- package/dist/entities/package-commits/index.js +3 -0
- package/dist/entities/package-commits/index.js.map +1 -0
- package/dist/entities/package-commits/package-commits.d.ts +33 -0
- package/dist/entities/package-commits/package-commits.d.ts.map +1 -0
- package/dist/entities/package-commits/package-commits.js +149 -0
- package/dist/entities/package-commits/package-commits.js.map +1 -0
- package/dist/entities/package-commits/package-commits.test.d.ts +2 -0
- package/dist/entities/package-commits/package-commits.test.d.ts.map +1 -0
- package/dist/entities/package-commits/package-commits.test.js +40 -0
- package/dist/entities/package-commits/package-commits.test.js.map +1 -0
- package/dist/entities/package-tags/index.d.ts +2 -0
- package/dist/entities/package-tags/index.d.ts.map +1 -0
- package/dist/entities/package-tags/index.js +2 -0
- package/dist/entities/package-tags/index.js.map +1 -0
- package/dist/entities/package-tags/package-tags.d.ts +24 -0
- package/dist/entities/package-tags/package-tags.d.ts.map +1 -0
- package/dist/entities/package-tags/package-tags.js +197 -0
- package/dist/entities/package-tags/package-tags.js.map +1 -0
- package/dist/entities/package-tags/package-tags.test.d.ts +2 -0
- package/dist/entities/package-tags/package-tags.test.d.ts.map +1 -0
- package/dist/entities/package-tags/package-tags.test.js +60 -0
- package/dist/entities/package-tags/package-tags.test.js.map +1 -0
- package/dist/entities/package-version/index.d.ts +3 -0
- package/dist/entities/package-version/index.d.ts.map +1 -0
- package/dist/entities/package-version/index.js +3 -0
- package/dist/entities/package-version/index.js.map +1 -0
- package/dist/entities/package-version/package-version.d.ts +16 -0
- package/dist/entities/package-version/package-version.d.ts.map +1 -0
- package/dist/entities/package-version/package-version.js +166 -0
- package/dist/entities/package-version/package-version.js.map +1 -0
- package/dist/entities/package-version/package-version.test.d.ts +2 -0
- package/dist/entities/package-version/package-version.test.d.ts.map +1 -0
- package/dist/entities/package-version/package-version.test.js +113 -0
- package/dist/entities/package-version/package-version.test.js.map +1 -0
- package/dist/entities/package-version/package-version.types.d.ts +31 -0
- package/dist/entities/package-version/package-version.types.d.ts.map +1 -0
- package/dist/entities/package-version/package-version.types.js +2 -0
- package/dist/entities/package-version/package-version.types.js.map +1 -0
- package/dist/entities/tag/index.d.ts +3 -0
- package/dist/entities/tag/index.d.ts.map +1 -0
- package/dist/entities/tag/index.js +3 -0
- package/dist/entities/tag/index.js.map +1 -0
- package/dist/entities/tag/tag.d.ts +24 -0
- package/dist/entities/tag/tag.d.ts.map +1 -0
- package/dist/entities/tag/tag.js +168 -0
- package/dist/entities/tag/tag.js.map +1 -0
- package/dist/entities/tag/tag.test.d.ts +2 -0
- package/dist/entities/tag/tag.test.d.ts.map +1 -0
- package/dist/entities/tag/tag.test.js +638 -0
- package/dist/entities/tag/tag.test.js.map +1 -0
- package/dist/entities/tag/tag.types.d.ts +35 -0
- package/dist/entities/tag/tag.types.d.ts.map +1 -0
- package/dist/entities/tag/tag.types.js +2 -0
- package/dist/entities/tag/tag.types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/package.json +73 -0
- package/src/commands/ci/act.ts +95 -0
- package/src/commands/ci/attach-affected.ts +93 -0
- package/src/commands/ci/attach-service-ports.ts +31 -0
- package/src/commands/commit-check.ts +124 -0
- package/src/commands/commit.ts +103 -0
- package/src/commands/dev/check.ts +117 -0
- package/src/commands/dev/cleanup.ts +34 -0
- package/src/commands/dev/rm.ts +66 -0
- package/src/commands/dev/setup.ts +48 -0
- package/src/commands/local/cleanup.ts +74 -0
- package/src/commands/local/setup.ts +68 -0
- package/src/commands/local/vscode.ts +118 -0
- package/src/commands/update-package-json.ts +104 -0
- package/src/commands/version/apply.ts +156 -0
- package/src/commands/version/ci.ts +85 -0
- package/src/commands/version/prepare.ts +217 -0
- package/src/core/colorify.ts +61 -0
- package/src/core/index.ts +3 -0
- package/src/core/types.ts +262 -0
- package/src/core/wrapshell.ts +388 -0
- package/src/entities/affected/affected.test.ts +427 -0
- package/src/entities/affected/affected.ts +22 -0
- package/src/entities/affected/index.ts +1 -0
- package/src/entities/branch/branch.test.ts +348 -0
- package/src/entities/branch/branch.ts +89 -0
- package/src/entities/branch/branch.types.ts +5 -0
- package/src/entities/branch/index.ts +2 -0
- package/src/entities/commit/commit.test.ts +769 -0
- package/src/entities/commit/commit.ts +245 -0
- package/src/entities/commit/commit.types.ts +81 -0
- package/src/entities/commit/index.ts +2 -0
- package/src/entities/commit/pr.test.ts +860 -0
- package/src/entities/commit/pr.ts +241 -0
- package/src/entities/compose/compose.test.ts +496 -0
- package/src/entities/compose/compose.ts +251 -0
- package/src/entities/compose/compose.types.ts +88 -0
- package/src/entities/compose/index.ts +2 -0
- package/src/entities/entities.shell.test.ts +35 -0
- package/src/entities/entities.shell.ts +81 -0
- package/src/entities/index.ts +11 -0
- package/src/entities/intershell-config/intershell-config.default.ts +229 -0
- package/src/entities/intershell-config/intershell-config.test.ts +117 -0
- package/src/entities/intershell-config/intershell-config.ts +143 -0
- package/src/entities/intershell-config/intershell-config.types.ts +118 -0
- package/src/entities/package/index.ts +3 -0
- package/src/entities/package/package.shell.ts +124 -0
- package/src/entities/package/package.test.ts +830 -0
- package/src/entities/package/package.ts +267 -0
- package/src/entities/package/package.types.ts +49 -0
- package/src/entities/package-changelog/index.ts +3 -0
- package/src/entities/package-changelog/package-changelog.ts +81 -0
- package/src/entities/package-changelog/package-changelog.types.ts +30 -0
- package/src/entities/package-changelog/template.default.ts +109 -0
- package/src/entities/package-changelog/template.ts +118 -0
- package/src/entities/package-commits/dependency-analyzer.test.ts +29 -0
- package/src/entities/package-commits/dependency-analyzer.ts +194 -0
- package/src/entities/package-commits/index.ts +2 -0
- package/src/entities/package-commits/package-commits.test.ts +44 -0
- package/src/entities/package-commits/package-commits.ts +191 -0
- package/src/entities/package-tags/index.ts +1 -0
- package/src/entities/package-tags/package-tags.test.ts +73 -0
- package/src/entities/package-tags/package-tags.ts +234 -0
- package/src/entities/package-version/index.ts +2 -0
- package/src/entities/package-version/package-version.test.ts +141 -0
- package/src/entities/package-version/package-version.ts +234 -0
- package/src/entities/package-version/package-version.types.ts +35 -0
- package/src/entities/tag/index.ts +2 -0
- package/src/entities/tag/tag.test.ts +844 -0
- package/src/entities/tag/tag.ts +208 -0
- package/src/entities/tag/tag.types.ts +37 -0
- package/src/index.ts +7 -0
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
import { afterAll, afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
2
|
+
// Import EntityTag directly
|
|
3
|
+
const { EntityTag } = await import("./tag");
|
|
4
|
+
describe("EntityTag", () => {
|
|
5
|
+
// Store original methods to restore after tests
|
|
6
|
+
let originalGitTagList;
|
|
7
|
+
let originalGitTagLatest;
|
|
8
|
+
let originalGitRevParse;
|
|
9
|
+
let originalGitTagExists;
|
|
10
|
+
// Restore module mocks after all tests
|
|
11
|
+
afterAll(() => {
|
|
12
|
+
mock.restore();
|
|
13
|
+
});
|
|
14
|
+
let originalGitTag;
|
|
15
|
+
let originalGitPushTag;
|
|
16
|
+
let originalGitDeleteTag;
|
|
17
|
+
let originalGitTagInfo;
|
|
18
|
+
let originalGitFirstCommit;
|
|
19
|
+
beforeEach(async () => {
|
|
20
|
+
// Import and mock entitiesShell methods directly
|
|
21
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
22
|
+
// Store original methods if not already stored
|
|
23
|
+
if (!originalGitTagList) {
|
|
24
|
+
originalGitTagList = entitiesShell.gitTagList;
|
|
25
|
+
}
|
|
26
|
+
if (!originalGitTagLatest) {
|
|
27
|
+
originalGitTagLatest = entitiesShell.gitTagLatest;
|
|
28
|
+
}
|
|
29
|
+
if (!originalGitRevParse) {
|
|
30
|
+
originalGitRevParse = entitiesShell.gitRevParse;
|
|
31
|
+
}
|
|
32
|
+
if (!originalGitTagExists) {
|
|
33
|
+
originalGitTagExists = entitiesShell.gitTagExists;
|
|
34
|
+
}
|
|
35
|
+
if (!originalGitTag) {
|
|
36
|
+
originalGitTag = entitiesShell.gitTag;
|
|
37
|
+
}
|
|
38
|
+
if (!originalGitPushTag) {
|
|
39
|
+
originalGitPushTag = entitiesShell.gitPushTag;
|
|
40
|
+
}
|
|
41
|
+
if (!originalGitDeleteTag) {
|
|
42
|
+
originalGitDeleteTag = entitiesShell.gitDeleteTag;
|
|
43
|
+
}
|
|
44
|
+
if (!originalGitTagInfo) {
|
|
45
|
+
originalGitTagInfo = entitiesShell.gitTagInfo;
|
|
46
|
+
}
|
|
47
|
+
if (!originalGitFirstCommit) {
|
|
48
|
+
originalGitFirstCommit = entitiesShell.gitFirstCommit;
|
|
49
|
+
}
|
|
50
|
+
// Mock individual methods directly
|
|
51
|
+
entitiesShell.gitTagList = mock(() => ({
|
|
52
|
+
exitCode: 0,
|
|
53
|
+
text: () => ["v1.0.0", "v1.1.0", "intershell-v1.0.0"].join("\n"),
|
|
54
|
+
}));
|
|
55
|
+
entitiesShell.gitTagLatest = mock(() => ({
|
|
56
|
+
exitCode: 0,
|
|
57
|
+
text: () => "v1.1.0",
|
|
58
|
+
}));
|
|
59
|
+
entitiesShell.gitRevParse = mock(() => ({
|
|
60
|
+
exitCode: 0,
|
|
61
|
+
text: () => "abc123",
|
|
62
|
+
}));
|
|
63
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
64
|
+
exitCode: 0,
|
|
65
|
+
text: () => "v1.0.0",
|
|
66
|
+
}));
|
|
67
|
+
entitiesShell.gitTag = mock(() => Promise.resolve());
|
|
68
|
+
entitiesShell.gitPushTag = mock(() => Promise.resolve());
|
|
69
|
+
entitiesShell.gitDeleteTag = mock(() => Promise.resolve());
|
|
70
|
+
entitiesShell.gitTagInfo = mock(() => ({
|
|
71
|
+
exitCode: 0,
|
|
72
|
+
text: () => ["2024-01-01T00:00:00Z", "test message"].join("\n"),
|
|
73
|
+
}));
|
|
74
|
+
entitiesShell.gitFirstCommit = mock(() => ({
|
|
75
|
+
exitCode: 0,
|
|
76
|
+
text: () => "first123",
|
|
77
|
+
}));
|
|
78
|
+
});
|
|
79
|
+
afterEach(async () => {
|
|
80
|
+
// Restore original methods
|
|
81
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
82
|
+
if (originalGitTagList) {
|
|
83
|
+
entitiesShell.gitTagList = originalGitTagList;
|
|
84
|
+
}
|
|
85
|
+
if (originalGitTagLatest) {
|
|
86
|
+
entitiesShell.gitTagLatest = originalGitTagLatest;
|
|
87
|
+
}
|
|
88
|
+
if (originalGitRevParse) {
|
|
89
|
+
entitiesShell.gitRevParse = originalGitRevParse;
|
|
90
|
+
}
|
|
91
|
+
if (originalGitTagExists) {
|
|
92
|
+
entitiesShell.gitTagExists = originalGitTagExists;
|
|
93
|
+
}
|
|
94
|
+
if (originalGitTag) {
|
|
95
|
+
entitiesShell.gitTag = originalGitTag;
|
|
96
|
+
}
|
|
97
|
+
if (originalGitPushTag) {
|
|
98
|
+
entitiesShell.gitPushTag = originalGitPushTag;
|
|
99
|
+
}
|
|
100
|
+
if (originalGitDeleteTag) {
|
|
101
|
+
entitiesShell.gitDeleteTag = originalGitDeleteTag;
|
|
102
|
+
}
|
|
103
|
+
if (originalGitTagInfo) {
|
|
104
|
+
entitiesShell.gitTagInfo = originalGitTagInfo;
|
|
105
|
+
}
|
|
106
|
+
if (originalGitFirstCommit) {
|
|
107
|
+
entitiesShell.gitFirstCommit = originalGitFirstCommit;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
describe("parseByName", () => {
|
|
111
|
+
test("should parse tag name correctly", () => {
|
|
112
|
+
const result = EntityTag.parseByName("v1.0.0");
|
|
113
|
+
expect(result).toEqual({
|
|
114
|
+
name: "v1.0.0",
|
|
115
|
+
prefix: "v",
|
|
116
|
+
format: "semver",
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
test("should parse tag with package prefix", () => {
|
|
120
|
+
const result = EntityTag.parseByName("intershell-v1.0.0");
|
|
121
|
+
expect(result).toEqual({
|
|
122
|
+
name: "intershell-v1.0.0",
|
|
123
|
+
prefix: "intershell-v",
|
|
124
|
+
format: "custom",
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
test("should parse calver tag", () => {
|
|
128
|
+
const result = EntityTag.parseByName("2024.01.01");
|
|
129
|
+
expect(result).toEqual({
|
|
130
|
+
name: "2024.01.01",
|
|
131
|
+
prefix: undefined,
|
|
132
|
+
format: "semver",
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
test("should parse custom tag", () => {
|
|
136
|
+
const result = EntityTag.parseByName("release-2024");
|
|
137
|
+
expect(result).toEqual({
|
|
138
|
+
name: "release-2024",
|
|
139
|
+
prefix: "release-",
|
|
140
|
+
format: "custom",
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
test("should handle empty tag name", () => {
|
|
144
|
+
const result = EntityTag.parseByName("");
|
|
145
|
+
expect(result).toEqual({
|
|
146
|
+
name: "",
|
|
147
|
+
prefix: undefined,
|
|
148
|
+
format: undefined,
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
describe("utility methods", () => {
|
|
153
|
+
describe("detectFormat", () => {
|
|
154
|
+
test("should detect semver format", () => {
|
|
155
|
+
expect(EntityTag.detectFormat("v1.0.0")).toBe("semver");
|
|
156
|
+
expect(EntityTag.detectFormat("1.0.0")).toBe("semver");
|
|
157
|
+
});
|
|
158
|
+
test("should detect calver format", () => {
|
|
159
|
+
expect(EntityTag.detectFormat("2024.01.01")).toBe("semver");
|
|
160
|
+
expect(EntityTag.detectFormat("2024.12.25")).toBe("semver");
|
|
161
|
+
});
|
|
162
|
+
test("should detect custom format", () => {
|
|
163
|
+
expect(EntityTag.detectFormat("release-2024")).toBe("custom");
|
|
164
|
+
expect(EntityTag.detectFormat("beta-v1")).toBe("custom");
|
|
165
|
+
});
|
|
166
|
+
test("should return undefined for empty tag", () => {
|
|
167
|
+
expect(EntityTag.detectFormat("")).toBeFalsy();
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe("detectPrefix", () => {
|
|
171
|
+
test("should detect v prefix", () => {
|
|
172
|
+
expect(EntityTag.detectPrefix("v1.0.0")).toBe("v");
|
|
173
|
+
});
|
|
174
|
+
test("should detect package prefix", () => {
|
|
175
|
+
expect(EntityTag.detectPrefix("intershell-v1.0.0")).toBe("intershell-v");
|
|
176
|
+
});
|
|
177
|
+
test("should detect custom prefix", () => {
|
|
178
|
+
expect(EntityTag.detectPrefix("release-v1.0.0")).toBe("release-v");
|
|
179
|
+
});
|
|
180
|
+
test("should return undefined for numeric prefix", () => {
|
|
181
|
+
expect(EntityTag.detectPrefix("1.0.0")).toBeFalsy();
|
|
182
|
+
});
|
|
183
|
+
test("should return undefined for empty tag", () => {
|
|
184
|
+
expect(EntityTag.detectPrefix("")).toBeFalsy();
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe("getVersionFromTag", () => {
|
|
188
|
+
test("should extract version from v prefixed tag", () => {
|
|
189
|
+
expect(EntityTag.getVersionFromTag("v1.0.0")).toBe("1.0.0");
|
|
190
|
+
});
|
|
191
|
+
test("should extract version from package prefixed tag", () => {
|
|
192
|
+
expect(EntityTag.getVersionFromTag("intershell-v1.0.0")).toBe("1.0.0");
|
|
193
|
+
});
|
|
194
|
+
test("should return original tag when no prefix", () => {
|
|
195
|
+
expect(EntityTag.getVersionFromTag("1.0.0")).toBe("1.0.0");
|
|
196
|
+
});
|
|
197
|
+
test("should handle empty prefix", () => {
|
|
198
|
+
expect(EntityTag.getVersionFromTag("v1.0.0")).toBe("1.0.0");
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe.skip("validate", () => {
|
|
203
|
+
test("should validate valid tag name", () => {
|
|
204
|
+
// Mock config for this test
|
|
205
|
+
mock.module("../config/config", () => ({
|
|
206
|
+
entitiesConfig: {
|
|
207
|
+
getConfig: () => ({
|
|
208
|
+
tag: {
|
|
209
|
+
name: {
|
|
210
|
+
enabled: true,
|
|
211
|
+
minLength: 1,
|
|
212
|
+
maxLength: 100,
|
|
213
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.]+$/,
|
|
214
|
+
noSpaces: true,
|
|
215
|
+
noSpecialChars: false,
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
}),
|
|
219
|
+
},
|
|
220
|
+
}));
|
|
221
|
+
const result = EntityTag.validate("v1.0.0");
|
|
222
|
+
expect(result.isValid).toBe(true);
|
|
223
|
+
expect(result.errors).toEqual([]);
|
|
224
|
+
// Restore the mock after the test
|
|
225
|
+
mock.restore();
|
|
226
|
+
});
|
|
227
|
+
test("should validate parsed tag object", () => {
|
|
228
|
+
// Mock config for this test
|
|
229
|
+
mock.module("../config/config", () => ({
|
|
230
|
+
entitiesConfig: {
|
|
231
|
+
getConfig: () => ({
|
|
232
|
+
tag: {
|
|
233
|
+
name: {
|
|
234
|
+
enabled: true,
|
|
235
|
+
minLength: 1,
|
|
236
|
+
maxLength: 100,
|
|
237
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.]+$/,
|
|
238
|
+
noSpaces: true,
|
|
239
|
+
noSpecialChars: false,
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
}),
|
|
243
|
+
},
|
|
244
|
+
}));
|
|
245
|
+
const parsedTag = EntityTag.parseByName("v1.0.0");
|
|
246
|
+
const result = EntityTag.validate(parsedTag);
|
|
247
|
+
expect(result.isValid).toBe(true);
|
|
248
|
+
expect(result.errors).toEqual([]);
|
|
249
|
+
// Restore the mock after the test
|
|
250
|
+
mock.restore();
|
|
251
|
+
});
|
|
252
|
+
test("should fail validation for tag name too short", async () => {
|
|
253
|
+
// Mock config with higher minLength
|
|
254
|
+
mock.module("../config/config", () => ({
|
|
255
|
+
entitiesConfig: {
|
|
256
|
+
getConfig: () => ({
|
|
257
|
+
tag: {
|
|
258
|
+
name: {
|
|
259
|
+
enabled: true,
|
|
260
|
+
minLength: 5,
|
|
261
|
+
maxLength: 100,
|
|
262
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.]+$/,
|
|
263
|
+
noSpaces: true,
|
|
264
|
+
noSpecialChars: true,
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
}),
|
|
268
|
+
},
|
|
269
|
+
}));
|
|
270
|
+
const result = EntityTag.validate("v1.0");
|
|
271
|
+
expect(result.isValid).toBe(false);
|
|
272
|
+
expect(result.errors).toContain("tag name should be at least 5 characters long");
|
|
273
|
+
// Restore the mock after the test
|
|
274
|
+
mock.restore();
|
|
275
|
+
});
|
|
276
|
+
test("should fail validation for tag name too long", async () => {
|
|
277
|
+
// Mock config with lower maxLength
|
|
278
|
+
mock.module("../config/config", () => ({
|
|
279
|
+
entitiesConfig: {
|
|
280
|
+
getConfig: () => ({
|
|
281
|
+
tag: {
|
|
282
|
+
name: {
|
|
283
|
+
enabled: true,
|
|
284
|
+
minLength: 1,
|
|
285
|
+
maxLength: 5,
|
|
286
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.]+$/,
|
|
287
|
+
noSpaces: true,
|
|
288
|
+
noSpecialChars: true,
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
}),
|
|
292
|
+
},
|
|
293
|
+
}));
|
|
294
|
+
const result = EntityTag.validate("very-long-tag-name");
|
|
295
|
+
expect(result.isValid).toBe(false);
|
|
296
|
+
expect(result.errors).toContain("tag name should be max 5 characters, received: 18");
|
|
297
|
+
// Restore the mock after the test
|
|
298
|
+
mock.restore();
|
|
299
|
+
});
|
|
300
|
+
test("should fail validation for invalid characters", async () => {
|
|
301
|
+
// Mock config with strict allowed characters
|
|
302
|
+
mock.module("../config/config", () => ({
|
|
303
|
+
entitiesConfig: {
|
|
304
|
+
getConfig: () => ({
|
|
305
|
+
tag: {
|
|
306
|
+
name: {
|
|
307
|
+
enabled: true,
|
|
308
|
+
minLength: 1,
|
|
309
|
+
maxLength: 100,
|
|
310
|
+
allowedCharacters: /^[a-zA-Z0-9]+$/,
|
|
311
|
+
noSpaces: true,
|
|
312
|
+
noSpecialChars: true,
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
}),
|
|
316
|
+
},
|
|
317
|
+
}));
|
|
318
|
+
const result = EntityTag.validate("v1.0.0");
|
|
319
|
+
expect(result.isValid).toBe(false);
|
|
320
|
+
expect(result.errors).toContain("tag name contains invalid characters. allowed: ^[a-zA-Z0-9]+$");
|
|
321
|
+
// Restore the mock after the test
|
|
322
|
+
mock.restore();
|
|
323
|
+
});
|
|
324
|
+
test("should fail validation for spaces when noSpaces is true", async () => {
|
|
325
|
+
// Mock config with noSpaces enabled
|
|
326
|
+
mock.module("../config/config", () => ({
|
|
327
|
+
entitiesConfig: {
|
|
328
|
+
getConfig: () => ({
|
|
329
|
+
tag: {
|
|
330
|
+
name: {
|
|
331
|
+
enabled: true,
|
|
332
|
+
minLength: 1,
|
|
333
|
+
maxLength: 100,
|
|
334
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.\s]+$/,
|
|
335
|
+
noSpaces: true,
|
|
336
|
+
noSpecialChars: true,
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
}),
|
|
340
|
+
},
|
|
341
|
+
}));
|
|
342
|
+
const result = EntityTag.validate("v 1.0.0");
|
|
343
|
+
expect(result.isValid).toBe(false);
|
|
344
|
+
expect(result.errors).toContain("tag name should not contain spaces");
|
|
345
|
+
// Restore the mock after the test
|
|
346
|
+
mock.restore();
|
|
347
|
+
});
|
|
348
|
+
test("should fail validation for special characters when noSpecialChars is true", async () => {
|
|
349
|
+
// Mock config with noSpecialChars enabled
|
|
350
|
+
mock.module("../config/config", () => ({
|
|
351
|
+
entitiesConfig: {
|
|
352
|
+
getConfig: () => ({
|
|
353
|
+
tag: {
|
|
354
|
+
name: {
|
|
355
|
+
enabled: true,
|
|
356
|
+
minLength: 1,
|
|
357
|
+
maxLength: 100,
|
|
358
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.!@#$%^&*()]+$/,
|
|
359
|
+
noSpaces: true,
|
|
360
|
+
noSpecialChars: true,
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
}),
|
|
364
|
+
},
|
|
365
|
+
}));
|
|
366
|
+
const result = EntityTag.validate("v1.0.0!");
|
|
367
|
+
expect(result.isValid).toBe(false);
|
|
368
|
+
expect(result.errors).toContain("tag name should not contain special characters");
|
|
369
|
+
// Restore the mock after the test
|
|
370
|
+
mock.restore();
|
|
371
|
+
});
|
|
372
|
+
test("should pass validation when name validation is disabled", async () => {
|
|
373
|
+
// Mock config with name validation disabled
|
|
374
|
+
mock.module("../config/config", () => ({
|
|
375
|
+
entitiesConfig: {
|
|
376
|
+
getConfig: () => ({
|
|
377
|
+
tag: {
|
|
378
|
+
name: {
|
|
379
|
+
enabled: false,
|
|
380
|
+
minLength: 1,
|
|
381
|
+
maxLength: 100,
|
|
382
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.]+$/,
|
|
383
|
+
noSpaces: true,
|
|
384
|
+
noSpecialChars: true,
|
|
385
|
+
},
|
|
386
|
+
},
|
|
387
|
+
}),
|
|
388
|
+
},
|
|
389
|
+
}));
|
|
390
|
+
const result = EntityTag.validate("invalid@tag#name");
|
|
391
|
+
expect(result.isValid).toBe(true);
|
|
392
|
+
expect(result.errors).toEqual([]);
|
|
393
|
+
// Restore the mock after the test
|
|
394
|
+
mock.restore();
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
describe.skip("Git operations", () => {
|
|
398
|
+
describe("listTags", () => {
|
|
399
|
+
test("should return list of tags with prefix", async () => {
|
|
400
|
+
const result = await EntityTag.listTags("v");
|
|
401
|
+
expect(result).toEqual(["v1.0.0", "v1.1.0", "intershell-v1.0.0"]);
|
|
402
|
+
});
|
|
403
|
+
test("should handle empty tag list", async () => {
|
|
404
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
405
|
+
entitiesShell.gitTagList = mock(() => ({
|
|
406
|
+
exitCode: 0,
|
|
407
|
+
text: () => "",
|
|
408
|
+
}));
|
|
409
|
+
const result = await EntityTag.listTags("nonexistent");
|
|
410
|
+
expect(result).toEqual([]);
|
|
411
|
+
});
|
|
412
|
+
test("should filter out empty lines", async () => {
|
|
413
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
414
|
+
entitiesShell.gitTagList = mock(() => ({
|
|
415
|
+
exitCode: 0,
|
|
416
|
+
text: () => ["v1.0.0", "", "v1.1.0", " ", "v1.2.0"].join("\n"),
|
|
417
|
+
}));
|
|
418
|
+
const result = await EntityTag.listTags("v");
|
|
419
|
+
expect(result).toEqual(["v1.0.0", "v1.1.0", " ", "v1.2.0"]);
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
describe("getLatestTag", () => {
|
|
423
|
+
test("should return latest tag for prefix", async () => {
|
|
424
|
+
const result = await EntityTag.getLatestTag("v");
|
|
425
|
+
expect(result).toBe("v1.1.0");
|
|
426
|
+
});
|
|
427
|
+
test("should return null for empty tag", async () => {
|
|
428
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
429
|
+
entitiesShell.gitTagLatest = mock(() => ({
|
|
430
|
+
exitCode: 0,
|
|
431
|
+
text: () => "",
|
|
432
|
+
}));
|
|
433
|
+
const result = await EntityTag.getLatestTag("nonexistent");
|
|
434
|
+
expect(result).toBe(null);
|
|
435
|
+
});
|
|
436
|
+
test("should throw error when git command fails", async () => {
|
|
437
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
438
|
+
entitiesShell.gitTagLatest = mock(() => ({
|
|
439
|
+
exitCode: 1,
|
|
440
|
+
text: () => "error",
|
|
441
|
+
}));
|
|
442
|
+
await expect(EntityTag.getLatestTag("invalid")).rejects.toThrow("Could not get latest tag for pattern invalid");
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
describe("getTagSha", () => {
|
|
446
|
+
test("should return tag SHA", async () => {
|
|
447
|
+
const result = await EntityTag.getTagSha("v1.0.0");
|
|
448
|
+
expect(result).toBe("abc123");
|
|
449
|
+
});
|
|
450
|
+
test("should throw error when tag not found", async () => {
|
|
451
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
452
|
+
entitiesShell.gitRevParse = mock(() => ({
|
|
453
|
+
exitCode: 1,
|
|
454
|
+
text: () => "error",
|
|
455
|
+
}));
|
|
456
|
+
await expect(EntityTag.getTagSha("nonexistent")).rejects.toThrow("Tag nonexistent not found");
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
describe("tagExists", () => {
|
|
460
|
+
test("should return true when tag exists", async () => {
|
|
461
|
+
const result = await EntityTag.tagExists("v1.0.0");
|
|
462
|
+
expect(result).toBe(true);
|
|
463
|
+
});
|
|
464
|
+
test("should return false when tag does not exist", async () => {
|
|
465
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
466
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
467
|
+
exitCode: 1,
|
|
468
|
+
text: () => "",
|
|
469
|
+
}));
|
|
470
|
+
const result = await EntityTag.tagExists("nonexistent");
|
|
471
|
+
expect(result).toBe(false);
|
|
472
|
+
});
|
|
473
|
+
test("should return false when tag name doesn't match", async () => {
|
|
474
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
475
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
476
|
+
exitCode: 0,
|
|
477
|
+
text: () => "different-tag",
|
|
478
|
+
}));
|
|
479
|
+
const result = await EntityTag.tagExists("v1.0.0");
|
|
480
|
+
expect(result).toBe(false);
|
|
481
|
+
});
|
|
482
|
+
});
|
|
483
|
+
});
|
|
484
|
+
describe.skip("createTag", () => {
|
|
485
|
+
test("should create tag successfully", async () => {
|
|
486
|
+
// This test verifies the createTag method exists and can be called
|
|
487
|
+
// The actual implementation will be tested in integration tests
|
|
488
|
+
expect(typeof EntityTag.createTag).toBe("function");
|
|
489
|
+
expect(EntityTag.createTag.length).toBe(2); // tagName, message (options has default value)
|
|
490
|
+
});
|
|
491
|
+
test("should create tag with force option", () => {
|
|
492
|
+
// This test verifies the createTag method accepts force option
|
|
493
|
+
expect(typeof EntityTag.createTag).toBe("function");
|
|
494
|
+
});
|
|
495
|
+
test("should create tag and push when push option is true", () => {
|
|
496
|
+
// This test verifies the createTag method accepts push option
|
|
497
|
+
expect(typeof EntityTag.createTag).toBe("function");
|
|
498
|
+
});
|
|
499
|
+
test("should throw error when tag already exists without force", async () => {
|
|
500
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
501
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
502
|
+
exitCode: 0,
|
|
503
|
+
text: () => "v1.0.0",
|
|
504
|
+
}));
|
|
505
|
+
await expect(EntityTag.createTag("v1.0.0", "Test tag")).rejects.toThrow("Tag v1.0.0 already exists, use --force to override");
|
|
506
|
+
});
|
|
507
|
+
test("should throw error when tag validation fails", async () => {
|
|
508
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
509
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
510
|
+
exitCode: 1,
|
|
511
|
+
text: () => "",
|
|
512
|
+
}));
|
|
513
|
+
// Mock config with strict validation
|
|
514
|
+
mock.module("../config/config", () => ({
|
|
515
|
+
entitiesConfig: {
|
|
516
|
+
getConfig: () => ({
|
|
517
|
+
tag: {
|
|
518
|
+
name: {
|
|
519
|
+
enabled: true,
|
|
520
|
+
minLength: 10,
|
|
521
|
+
maxLength: 100,
|
|
522
|
+
allowedCharacters: /^[a-zA-Z0-9\-_.]+$/,
|
|
523
|
+
noSpaces: true,
|
|
524
|
+
noSpecialChars: true,
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
}),
|
|
528
|
+
},
|
|
529
|
+
}));
|
|
530
|
+
await expect(EntityTag.createTag("v1.0.0", "Test tag")).rejects.toThrow("Tag v1.0.0 is invalid: tag name should be at least 10 characters long");
|
|
531
|
+
});
|
|
532
|
+
test("should throw error when git tag command fails", () => {
|
|
533
|
+
// This test verifies error handling exists
|
|
534
|
+
expect(typeof EntityTag.createTag).toBe("function");
|
|
535
|
+
});
|
|
536
|
+
test("should throw error when push fails", () => {
|
|
537
|
+
// This test verifies error handling exists
|
|
538
|
+
expect(typeof EntityTag.createTag).toBe("function");
|
|
539
|
+
});
|
|
540
|
+
});
|
|
541
|
+
describe.skip("deleteTag", () => {
|
|
542
|
+
test("should delete tag successfully", () => {
|
|
543
|
+
// This test verifies the deleteTag method exists
|
|
544
|
+
expect(typeof EntityTag.deleteTag).toBe("function");
|
|
545
|
+
expect(EntityTag.deleteTag.length).toBe(1); // tagName (deleteRemote has default value)
|
|
546
|
+
});
|
|
547
|
+
test("should delete tag and remote when deleteRemote is true", () => {
|
|
548
|
+
// This test verifies the deleteTag method accepts deleteRemote parameter
|
|
549
|
+
expect(typeof EntityTag.deleteTag).toBe("function");
|
|
550
|
+
});
|
|
551
|
+
test("should throw error when tag does not exist", async () => {
|
|
552
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
553
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
554
|
+
exitCode: 1,
|
|
555
|
+
text: () => "",
|
|
556
|
+
}));
|
|
557
|
+
await expect(EntityTag.deleteTag("nonexistent")).rejects.toThrow("Tag nonexistent does not exist");
|
|
558
|
+
});
|
|
559
|
+
test("should throw error when git delete command fails", async () => {
|
|
560
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
561
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
562
|
+
exitCode: 0,
|
|
563
|
+
text: () => "v1.0.0",
|
|
564
|
+
}));
|
|
565
|
+
entitiesShell.gitDeleteTag = mock(() => Promise.reject(new Error("Delete error")));
|
|
566
|
+
await expect(EntityTag.deleteTag("v1.0.0")).rejects.toThrow("Failed to delete tag v1.0.0: Delete error");
|
|
567
|
+
});
|
|
568
|
+
test("should throw error when remote delete fails", async () => {
|
|
569
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
570
|
+
entitiesShell.gitTagExists = mock(() => ({
|
|
571
|
+
exitCode: 0,
|
|
572
|
+
text: () => "v1.0.0",
|
|
573
|
+
}));
|
|
574
|
+
entitiesShell.gitPushTag = mock(() => Promise.reject(new Error("Remote delete error")));
|
|
575
|
+
await expect(EntityTag.deleteTag("v1.0.0", true)).rejects.toThrow("Failed to delete remote tag v1.0.0: Remote delete error");
|
|
576
|
+
});
|
|
577
|
+
});
|
|
578
|
+
describe.skip("getTagInfo", () => {
|
|
579
|
+
test("should return tag info successfully", async () => {
|
|
580
|
+
const result = await EntityTag.getTagInfo("v1.0.0");
|
|
581
|
+
expect(result).toEqual({
|
|
582
|
+
date: "2024-01-01T00:00:00Z",
|
|
583
|
+
message: "test message",
|
|
584
|
+
});
|
|
585
|
+
});
|
|
586
|
+
test("should throw error when tag info cannot be retrieved", async () => {
|
|
587
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
588
|
+
entitiesShell.gitTagInfo = mock(() => ({
|
|
589
|
+
exitCode: 1,
|
|
590
|
+
text: () => "error",
|
|
591
|
+
}));
|
|
592
|
+
await expect(EntityTag.getTagInfo("nonexistent")).rejects.toThrow("Could not get info for tag nonexistent");
|
|
593
|
+
});
|
|
594
|
+
test("should throw error when tag info has insufficient data", async () => {
|
|
595
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
596
|
+
entitiesShell.gitTagInfo = mock(() => ({
|
|
597
|
+
exitCode: 0,
|
|
598
|
+
text: () => "2024-01-01T00:00:00Z", // Only one line
|
|
599
|
+
}));
|
|
600
|
+
await expect(EntityTag.getTagInfo("v1.0.0")).rejects.toThrow("Could not get info for tag v1.0.0");
|
|
601
|
+
});
|
|
602
|
+
test("should handle undefined text function", async () => {
|
|
603
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
604
|
+
entitiesShell.gitTagInfo = mock(() => ({
|
|
605
|
+
exitCode: 0,
|
|
606
|
+
text: undefined,
|
|
607
|
+
}));
|
|
608
|
+
await expect(EntityTag.getTagInfo("v1.0.0")).rejects.toThrow("Could not get info for tag v1.0.0");
|
|
609
|
+
});
|
|
610
|
+
});
|
|
611
|
+
describe.skip("getBaseCommitSha", () => {
|
|
612
|
+
test("should return SHA for provided reference", async () => {
|
|
613
|
+
const result = await EntityTag.getBaseCommitSha("v1.0.0");
|
|
614
|
+
expect(result).toBe("abc123");
|
|
615
|
+
});
|
|
616
|
+
test("should return first commit SHA when no reference provided", async () => {
|
|
617
|
+
const result = await EntityTag.getBaseCommitSha();
|
|
618
|
+
expect(result).toBe("first123");
|
|
619
|
+
});
|
|
620
|
+
test("should throw error when reference is invalid", async () => {
|
|
621
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
622
|
+
entitiesShell.gitRevParse = mock(() => ({
|
|
623
|
+
exitCode: 1,
|
|
624
|
+
text: () => "error",
|
|
625
|
+
}));
|
|
626
|
+
await expect(EntityTag.getBaseCommitSha("invalid-ref")).rejects.toThrow("Invalid reference: invalid-ref. Not found as tag, branch, or commit.");
|
|
627
|
+
});
|
|
628
|
+
test("should throw error when first commit cannot be found", async () => {
|
|
629
|
+
const { entitiesShell } = await import("../entities.shell");
|
|
630
|
+
entitiesShell.gitFirstCommit = mock(() => ({
|
|
631
|
+
exitCode: 1,
|
|
632
|
+
text: () => "error",
|
|
633
|
+
}));
|
|
634
|
+
await expect(EntityTag.getBaseCommitSha()).rejects.toThrow("Could not find first commit");
|
|
635
|
+
});
|
|
636
|
+
});
|
|
637
|
+
});
|
|
638
|
+
//# sourceMappingURL=tag.test.js.map
|