@skyramp/mcp 0.1.4 → 0.1.6
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/build/index.js +6 -5
- package/build/prompts/initialize-workspace/initializeWorkspacePrompt.js +11 -7
- package/build/prompts/personas.js +2 -1
- package/build/prompts/test-maintenance/drift-analysis-prompt.js +2 -1
- package/build/prompts/test-maintenance/drift-analysis-prompt.test.js +28 -0
- package/build/prompts/test-maintenance/driftAnalysisSections.js +2 -2
- package/build/prompts/test-recommendation/analysisOutputPrompt.js +74 -16
- package/build/prompts/test-recommendation/analysisOutputPrompt.test.js +154 -0
- package/build/prompts/test-recommendation/recommendationSections.js +13 -43
- package/build/prompts/test-recommendation/registerRecommendTestsPrompt.js +19 -0
- package/build/prompts/test-recommendation/test-recommendation-prompt.js +158 -70
- package/build/prompts/test-recommendation/test-recommendation-prompt.test.js +24 -117
- package/build/prompts/testbot/testbot-prompts.js +12 -18
- package/build/prompts/testbot/testbot-prompts.test.js +2 -2
- package/build/resources/analysisResources.js +1 -0
- package/build/tools/code-refactor/enhanceAssertionsTool.js +2 -1
- package/build/tools/generate-tests/generateBatchScenarioRestTool.js +127 -4
- package/build/tools/generate-tests/generateBatchScenarioRestTool.test.js +205 -18
- package/build/tools/generate-tests/generateContractRestTool.js +19 -19
- package/build/tools/generate-tests/generateIntegrationRestTool.js +9 -2
- package/build/tools/generate-tests/generateUIRestTool.js +23 -8
- package/build/tools/test-management/analyzeChangesTool.js +222 -11
- package/build/tools/test-management/analyzeChangesTool.test.js +233 -1
- package/build/types/TestRecommendation.js +0 -2
- package/build/utils/featureFlags.js +4 -22
- package/build/utils/featureFlags.test.js +81 -0
- package/build/utils/httpDefaults.js +6 -1
- package/build/utils/httpDefaults.test.js +21 -0
- package/build/utils/scenarioDrafting.js +511 -100
- package/build/utils/scenarioDrafting.test.js +545 -259
- package/build/utils/telemetry.js +2 -1
- package/build/utils/utils.js +23 -0
- package/package.json +1 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { resolveServiceDetailsRef } from "./utils.js";
|
|
2
|
+
import { isTestbotEnabled } from "./featureFlags.js";
|
|
3
|
+
// Capture and restore the original env var so these tests don't pollute other
|
|
4
|
+
// test suites or a developer's shell environment where the var may already be set.
|
|
5
|
+
let originalTestbotEnv;
|
|
6
|
+
beforeAll(() => { originalTestbotEnv = process.env.SKYRAMP_FEATURE_TESTBOT; });
|
|
7
|
+
afterAll(() => {
|
|
8
|
+
if (originalTestbotEnv === undefined) {
|
|
9
|
+
delete process.env.SKYRAMP_FEATURE_TESTBOT;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
process.env.SKYRAMP_FEATURE_TESTBOT = originalTestbotEnv;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
describe("isTestbotEnabled", () => {
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
delete process.env.SKYRAMP_FEATURE_TESTBOT;
|
|
18
|
+
});
|
|
19
|
+
it('returns true when SKYRAMP_FEATURE_TESTBOT is "1"', () => {
|
|
20
|
+
process.env.SKYRAMP_FEATURE_TESTBOT = "1";
|
|
21
|
+
expect(isTestbotEnabled()).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
it("returns false when SKYRAMP_FEATURE_TESTBOT is unset", () => {
|
|
24
|
+
expect(isTestbotEnabled()).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
it('returns false when SKYRAMP_FEATURE_TESTBOT is "0"', () => {
|
|
27
|
+
process.env.SKYRAMP_FEATURE_TESTBOT = "0";
|
|
28
|
+
expect(isTestbotEnabled()).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it('returns false when SKYRAMP_FEATURE_TESTBOT is "true"', () => {
|
|
31
|
+
process.env.SKYRAMP_FEATURE_TESTBOT = "true";
|
|
32
|
+
expect(isTestbotEnabled()).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("resolveServiceDetailsRef", () => {
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
delete process.env.SKYRAMP_FEATURE_TESTBOT;
|
|
38
|
+
});
|
|
39
|
+
describe("testbot mode (SKYRAMP_FEATURE_TESTBOT=1)", () => {
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
process.env.SKYRAMP_FEATURE_TESTBOT = "1";
|
|
42
|
+
});
|
|
43
|
+
it("returns <services> block reference for testDirRef", () => {
|
|
44
|
+
expect(resolveServiceDetailsRef().testDirRef).toContain("<output_dir>");
|
|
45
|
+
expect(resolveServiceDetailsRef().testDirRef).toContain("<services>");
|
|
46
|
+
});
|
|
47
|
+
it("returns <services> block reference for frontendTestDirRef", () => {
|
|
48
|
+
expect(resolveServiceDetailsRef().frontendTestDirRef).toContain("<output_dir>");
|
|
49
|
+
expect(resolveServiceDetailsRef().frontendTestDirRef).toContain("<services>");
|
|
50
|
+
});
|
|
51
|
+
it("returns <services> block reference for authSourceRef", () => {
|
|
52
|
+
expect(resolveServiceDetailsRef().authSourceRef).toContain("<services>");
|
|
53
|
+
});
|
|
54
|
+
it("returns <services> block reference for baseUrlRef", () => {
|
|
55
|
+
expect(resolveServiceDetailsRef().baseUrlRef).toContain("<base_url>");
|
|
56
|
+
});
|
|
57
|
+
it("does NOT reference workspace.yml in any field", () => {
|
|
58
|
+
const refs = resolveServiceDetailsRef();
|
|
59
|
+
for (const val of Object.values(refs)) {
|
|
60
|
+
expect(val).not.toContain("workspace.yml");
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe("MCP mode (SKYRAMP_FEATURE_TESTBOT unset)", () => {
|
|
65
|
+
it("returns workspace.yml reference for testDirRef", () => {
|
|
66
|
+
expect(resolveServiceDetailsRef().testDirRef).toContain("workspace.yml");
|
|
67
|
+
});
|
|
68
|
+
it("returns workspace.yml reference for frontendTestDirRef", () => {
|
|
69
|
+
expect(resolveServiceDetailsRef().frontendTestDirRef).toContain("workspace.yml");
|
|
70
|
+
});
|
|
71
|
+
it("returns workspace.yml reference for authSourceRef", () => {
|
|
72
|
+
expect(resolveServiceDetailsRef().authSourceRef).toContain("workspace.yml");
|
|
73
|
+
});
|
|
74
|
+
it("does NOT reference <services> in any field", () => {
|
|
75
|
+
const refs = resolveServiceDetailsRef();
|
|
76
|
+
for (const val of Object.values(refs)) {
|
|
77
|
+
expect(val).not.toContain("<services>");
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared HTTP method defaults used across scenario drafting and test generation.
|
|
3
3
|
*/
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Returns the conventional success status code for a given HTTP method.
|
|
6
|
+
* POST → 201 Created
|
|
7
|
+
* DELETE → 204 No Content
|
|
8
|
+
* other → 200 OK
|
|
9
|
+
*/
|
|
5
10
|
export function inferExpectedStatus(method) {
|
|
6
11
|
const m = method.toUpperCase();
|
|
7
12
|
if (m === "POST")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { inferExpectedStatus } from "./httpDefaults.js";
|
|
2
|
+
describe("inferExpectedStatus", () => {
|
|
3
|
+
it("returns 201 for POST", () => {
|
|
4
|
+
expect(inferExpectedStatus("POST")).toBe(201);
|
|
5
|
+
expect(inferExpectedStatus("post")).toBe(201);
|
|
6
|
+
});
|
|
7
|
+
it("returns 204 for DELETE", () => {
|
|
8
|
+
expect(inferExpectedStatus("DELETE")).toBe(204);
|
|
9
|
+
expect(inferExpectedStatus("delete")).toBe(204);
|
|
10
|
+
});
|
|
11
|
+
it("returns 200 for GET", () => {
|
|
12
|
+
expect(inferExpectedStatus("GET")).toBe(200);
|
|
13
|
+
expect(inferExpectedStatus("get")).toBe(200);
|
|
14
|
+
});
|
|
15
|
+
it("returns 200 for PUT", () => {
|
|
16
|
+
expect(inferExpectedStatus("PUT")).toBe(200);
|
|
17
|
+
});
|
|
18
|
+
it("returns 200 for PATCH", () => {
|
|
19
|
+
expect(inferExpectedStatus("PATCH")).toBe(200);
|
|
20
|
+
});
|
|
21
|
+
});
|