swallowkit 1.0.0-beta.3 → 1.0.0-beta.31
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/LICENSE +21 -21
- package/README.ja.md +353 -215
- package/README.md +406 -216
- package/dist/__tests__/fixtures.d.ts +22 -0
- package/dist/__tests__/fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures.js +146 -0
- package/dist/__tests__/fixtures.js.map +1 -0
- package/dist/cli/commands/add-auth.d.ts +10 -0
- package/dist/cli/commands/add-auth.d.ts.map +1 -0
- package/dist/cli/commands/add-auth.js +444 -0
- package/dist/cli/commands/add-auth.js.map +1 -0
- package/dist/cli/commands/add-connector.d.ts +20 -0
- package/dist/cli/commands/add-connector.d.ts.map +1 -0
- package/dist/cli/commands/add-connector.js +163 -0
- package/dist/cli/commands/add-connector.js.map +1 -0
- package/dist/cli/commands/create-model.d.ts +1 -4
- package/dist/cli/commands/create-model.d.ts.map +1 -1
- package/dist/cli/commands/create-model.js +21 -82
- package/dist/cli/commands/create-model.js.map +1 -1
- package/dist/cli/commands/dev-seeds.d.ts +57 -0
- package/dist/cli/commands/dev-seeds.d.ts.map +1 -0
- package/dist/cli/commands/dev-seeds.js +470 -0
- package/dist/cli/commands/dev-seeds.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +33 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +628 -146
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +3 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +15 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +2696 -1706
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +448 -129
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/index.d.ts +5 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +200 -42
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts +8 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +94 -5
- package/dist/core/config.js.map +1 -1
- package/dist/core/mock/connector-mock-server.d.ts +101 -0
- package/dist/core/mock/connector-mock-server.d.ts.map +1 -0
- package/dist/core/mock/connector-mock-server.js +480 -0
- package/dist/core/mock/connector-mock-server.js.map +1 -0
- package/dist/core/mock/zod-mock-generator.d.ts +14 -0
- package/dist/core/mock/zod-mock-generator.d.ts.map +1 -0
- package/dist/core/mock/zod-mock-generator.js +163 -0
- package/dist/core/mock/zod-mock-generator.js.map +1 -0
- package/dist/core/operations/create-model.d.ts +15 -0
- package/dist/core/operations/create-model.d.ts.map +1 -0
- package/dist/core/operations/create-model.js +171 -0
- package/dist/core/operations/create-model.js.map +1 -0
- package/dist/core/operations/runtime.d.ts +32 -0
- package/dist/core/operations/runtime.d.ts.map +1 -0
- package/dist/core/operations/runtime.js +225 -0
- package/dist/core/operations/runtime.js.map +1 -0
- package/dist/core/operations/scaffold-machine.d.ts +16 -0
- package/dist/core/operations/scaffold-machine.d.ts.map +1 -0
- package/dist/core/operations/scaffold-machine.js +63 -0
- package/dist/core/operations/scaffold-machine.js.map +1 -0
- package/dist/core/project/manifest.d.ts +92 -0
- package/dist/core/project/manifest.d.ts.map +1 -0
- package/dist/core/project/manifest.js +321 -0
- package/dist/core/project/manifest.js.map +1 -0
- package/dist/core/project/validation.d.ts +20 -0
- package/dist/core/project/validation.d.ts.map +1 -0
- package/dist/core/project/validation.js +209 -0
- package/dist/core/project/validation.js.map +1 -0
- package/dist/core/scaffold/auth-generator.d.ts +38 -0
- package/dist/core/scaffold/auth-generator.d.ts.map +1 -0
- package/dist/core/scaffold/auth-generator.js +1244 -0
- package/dist/core/scaffold/auth-generator.js.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts +41 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.js +1027 -0
- package/dist/core/scaffold/connector-functions-generator.js.map +1 -0
- package/dist/core/scaffold/functions-generator.d.ts +7 -1
- package/dist/core/scaffold/functions-generator.d.ts.map +1 -1
- package/dist/core/scaffold/functions-generator.js +920 -213
- package/dist/core/scaffold/functions-generator.js.map +1 -1
- package/dist/core/scaffold/model-parser.d.ts +20 -1
- package/dist/core/scaffold/model-parser.d.ts.map +1 -1
- package/dist/core/scaffold/model-parser.js +328 -135
- package/dist/core/scaffold/model-parser.js.map +1 -1
- package/dist/core/scaffold/native-schema-generator.d.ts +13 -0
- package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -0
- package/dist/core/scaffold/native-schema-generator.js +677 -0
- package/dist/core/scaffold/native-schema-generator.js.map +1 -0
- package/dist/core/scaffold/nextjs-generator.d.ts +8 -0
- package/dist/core/scaffold/nextjs-generator.d.ts.map +1 -1
- package/dist/core/scaffold/nextjs-generator.js +314 -182
- package/dist/core/scaffold/nextjs-generator.js.map +1 -1
- package/dist/core/scaffold/openapi-generator.d.ts +3 -0
- package/dist/core/scaffold/openapi-generator.d.ts.map +1 -0
- package/dist/core/scaffold/openapi-generator.js +190 -0
- package/dist/core/scaffold/openapi-generator.js.map +1 -0
- package/dist/core/scaffold/ui-generator.d.ts +10 -4
- package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
- package/dist/core/scaffold/ui-generator.js +768 -663
- package/dist/core/scaffold/ui-generator.js.map +1 -1
- package/dist/database/base-model.d.ts +3 -3
- package/dist/database/base-model.js +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/machine/contracts.d.ts +16 -0
- package/dist/machine/contracts.d.ts.map +1 -0
- package/dist/machine/contracts.js +3 -0
- package/dist/machine/contracts.js.map +1 -0
- package/dist/machine/errors.d.ts +11 -0
- package/dist/machine/errors.d.ts.map +1 -0
- package/dist/machine/errors.js +34 -0
- package/dist/machine/errors.js.map +1 -0
- package/dist/machine/index.d.ts +3 -0
- package/dist/machine/index.d.ts.map +1 -0
- package/dist/machine/index.js +156 -0
- package/dist/machine/index.js.map +1 -0
- package/dist/mcp/index.d.ts +25 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +184 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/types/index.d.ts +65 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/package-manager.d.ts +109 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +215 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/python-uv.d.ts +21 -0
- package/dist/utils/python-uv.d.ts.map +1 -0
- package/dist/utils/python-uv.js +111 -0
- package/dist/utils/python-uv.js.map +1 -0
- package/package.json +85 -73
- package/src/__tests__/__snapshots__/functions-generator.test.ts.snap +1139 -0
- package/src/__tests__/__snapshots__/nextjs-generator.test.ts.snap +194 -0
- package/src/__tests__/__snapshots__/ui-generator.test.ts.snap +532 -0
- package/src/__tests__/auth.test.ts +654 -0
- package/src/__tests__/config.test.ts +274 -0
- package/src/__tests__/connector-functions-generator.test.ts +288 -0
- package/src/__tests__/connector-mock-server.test.ts +439 -0
- package/src/__tests__/connector-model-bff.test.ts +162 -0
- package/src/__tests__/dev-seeds.test.ts +173 -0
- package/src/__tests__/dev.test.ts +252 -0
- package/src/__tests__/fixtures.ts +144 -0
- package/src/__tests__/functions-generator.test.ts +237 -0
- package/src/__tests__/init.test.ts +115 -0
- package/src/__tests__/machine.test.ts +251 -0
- package/src/__tests__/mcp.test.ts +117 -0
- package/src/__tests__/model-parser.test.ts +52 -0
- package/src/__tests__/nextjs-generator.test.ts +97 -0
- package/src/__tests__/openapi-generator.test.ts +43 -0
- package/src/__tests__/package-manager.test.ts +189 -0
- package/src/__tests__/python-uv.test.ts +48 -0
- package/src/__tests__/scaffold.test.ts +67 -0
- package/src/__tests__/string-utils.test.ts +75 -0
- package/src/__tests__/ui-generator.test.ts +144 -0
- package/src/__tests__/zod-mock-generator.test.ts +132 -0
- package/src/cli/commands/add-auth.ts +500 -0
- package/src/cli/commands/add-connector.ts +158 -0
- package/src/cli/commands/create-model.ts +62 -0
- package/src/cli/commands/dev-seeds.ts +614 -0
- package/src/cli/commands/dev.ts +1134 -0
- package/src/cli/commands/index.ts +9 -0
- package/src/cli/commands/init.ts +3480 -0
- package/src/cli/commands/provision.ts +193 -0
- package/src/cli/commands/scaffold.ts +1001 -0
- package/src/cli/index.ts +196 -0
- package/src/core/config.ts +312 -0
- package/src/core/mock/connector-mock-server.ts +555 -0
- package/src/core/mock/zod-mock-generator.ts +205 -0
- package/src/core/operations/create-model.ts +174 -0
- package/src/core/operations/runtime.ts +235 -0
- package/src/core/operations/scaffold-machine.ts +91 -0
- package/src/core/project/manifest.ts +402 -0
- package/src/core/project/validation.ts +229 -0
- package/src/core/scaffold/auth-generator.ts +1284 -0
- package/src/core/scaffold/connector-functions-generator.ts +1128 -0
- package/src/core/scaffold/functions-generator.ts +970 -0
- package/src/core/scaffold/model-parser.ts +841 -0
- package/src/core/scaffold/native-schema-generator.ts +798 -0
- package/src/core/scaffold/nextjs-generator.ts +370 -0
- package/src/core/scaffold/openapi-generator.ts +212 -0
- package/src/core/scaffold/ui-generator.ts +1061 -0
- package/src/database/base-model.ts +184 -0
- package/src/database/client.ts +140 -0
- package/src/database/repository.ts +104 -0
- package/src/database/runtime-check.ts +25 -0
- package/src/index.ts +27 -0
- package/src/machine/contracts.ts +17 -0
- package/src/machine/errors.ts +34 -0
- package/src/machine/index.ts +173 -0
- package/src/mcp/index.ts +185 -0
- package/src/types/index.ts +134 -0
- package/src/utils/package-manager.ts +229 -0
- package/src/utils/python-uv.ts +96 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import {
|
|
2
|
+
generateListPage,
|
|
3
|
+
generateDetailPage,
|
|
4
|
+
generateFormComponent,
|
|
5
|
+
generateNewPage,
|
|
6
|
+
generateEditPage,
|
|
7
|
+
} from "../core/scaffold/ui-generator";
|
|
8
|
+
import {
|
|
9
|
+
createBasicModelInfo,
|
|
10
|
+
createModelInfoWithForeignKey,
|
|
11
|
+
createModelInfoWithEnum,
|
|
12
|
+
} from "./fixtures";
|
|
13
|
+
|
|
14
|
+
describe("generateListPage", () => {
|
|
15
|
+
it("generates list page for basic model (snapshot)", () => {
|
|
16
|
+
const model = createBasicModelInfo();
|
|
17
|
+
const code = generateListPage(model, "@myapp/shared");
|
|
18
|
+
expect(code).toMatchSnapshot();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("contains 'use client' directive", () => {
|
|
22
|
+
const model = createBasicModelInfo();
|
|
23
|
+
const code = generateListPage(model, "@myapp/shared");
|
|
24
|
+
expect(code).toContain("'use client'");
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("imports schema from shared package", () => {
|
|
28
|
+
const model = createBasicModelInfo();
|
|
29
|
+
const code = generateListPage(model, "@myapp/shared");
|
|
30
|
+
expect(code).toContain("@myapp/shared");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("fetches from correct API endpoint", () => {
|
|
34
|
+
const model = createBasicModelInfo();
|
|
35
|
+
const code = generateListPage(model, "@myapp/shared");
|
|
36
|
+
expect(code).toContain("/api/todo");
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("displays up to 3 non-id fields", () => {
|
|
40
|
+
const model = createBasicModelInfo();
|
|
41
|
+
const code = generateListPage(model, "@myapp/shared");
|
|
42
|
+
// title, description, completed — first 3 non-id fields
|
|
43
|
+
expect(code).toContain("title");
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("handles foreign key fields", () => {
|
|
47
|
+
const model = createModelInfoWithForeignKey();
|
|
48
|
+
const code = generateListPage(model, "@myapp/shared");
|
|
49
|
+
expect(code).toContain("categoryId");
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
describe("generateDetailPage", () => {
|
|
54
|
+
it("generates detail page (snapshot)", () => {
|
|
55
|
+
const model = createBasicModelInfo();
|
|
56
|
+
const code = generateDetailPage(model, "@myapp/shared");
|
|
57
|
+
expect(code).toMatchSnapshot();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("contains 'use client' directive", () => {
|
|
61
|
+
const model = createBasicModelInfo();
|
|
62
|
+
const code = generateDetailPage(model, "@myapp/shared");
|
|
63
|
+
expect(code).toContain("'use client'");
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("includes delete button", () => {
|
|
67
|
+
const model = createBasicModelInfo();
|
|
68
|
+
const code = generateDetailPage(model, "@myapp/shared");
|
|
69
|
+
expect(code).toContain("DELETE");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
describe("generateFormComponent", () => {
|
|
74
|
+
it("generates form component (snapshot)", () => {
|
|
75
|
+
const model = createBasicModelInfo();
|
|
76
|
+
const code = generateFormComponent(model, "@myapp/shared");
|
|
77
|
+
expect(code).toMatchSnapshot();
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("generates inputs for non-managed fields", () => {
|
|
81
|
+
const model = createBasicModelInfo();
|
|
82
|
+
const code = generateFormComponent(model, "@myapp/shared");
|
|
83
|
+
// title and description should have form inputs
|
|
84
|
+
expect(code).toContain("title");
|
|
85
|
+
expect(code).toContain("description");
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("generates enum select for enum fields", () => {
|
|
89
|
+
const model = createModelInfoWithEnum();
|
|
90
|
+
const code = generateFormComponent(model, "@myapp/shared");
|
|
91
|
+
expect(code).toContain("select");
|
|
92
|
+
expect(code).toContain("open");
|
|
93
|
+
expect(code).toContain("in_progress");
|
|
94
|
+
expect(code).toContain("closed");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("generates checkbox for boolean fields", () => {
|
|
98
|
+
const model = createBasicModelInfo();
|
|
99
|
+
const code = generateFormComponent(model, "@myapp/shared");
|
|
100
|
+
expect(code).toContain("checkbox");
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
describe("generateNewPage", () => {
|
|
105
|
+
it("generates new page (snapshot)", () => {
|
|
106
|
+
const model = createBasicModelInfo();
|
|
107
|
+
const code = generateNewPage(model);
|
|
108
|
+
expect(code).toMatchSnapshot();
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("contains form component reference", () => {
|
|
112
|
+
const model = createBasicModelInfo();
|
|
113
|
+
const code = generateNewPage(model);
|
|
114
|
+
expect(code).toContain("Form");
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("references the form component", () => {
|
|
118
|
+
const model = createBasicModelInfo();
|
|
119
|
+
const code = generateNewPage(model);
|
|
120
|
+
expect(code).toContain("TodoForm");
|
|
121
|
+
expect(code).toContain("Create New Todo");
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
describe("generateEditPage", () => {
|
|
126
|
+
it("generates edit page (snapshot)", () => {
|
|
127
|
+
const model = createBasicModelInfo();
|
|
128
|
+
const code = generateEditPage(model, "@myapp/shared");
|
|
129
|
+
expect(code).toMatchSnapshot();
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it("loads existing data and passes to form", () => {
|
|
133
|
+
const model = createBasicModelInfo();
|
|
134
|
+
const code = generateEditPage(model, "@myapp/shared");
|
|
135
|
+
expect(code).toContain("initialData");
|
|
136
|
+
expect(code).toContain("isEdit={true}");
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it("fetches existing data for editing", () => {
|
|
140
|
+
const model = createBasicModelInfo();
|
|
141
|
+
const code = generateEditPage(model, "@myapp/shared");
|
|
142
|
+
expect(code).toContain("/api/todo/");
|
|
143
|
+
});
|
|
144
|
+
});
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod モックデータジェネレーターのテスト
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { generateMockDocument, generateMockDocuments } from "../core/mock/zod-mock-generator";
|
|
6
|
+
import {
|
|
7
|
+
createBasicModelInfo,
|
|
8
|
+
createRdbConnectorModelInfo,
|
|
9
|
+
createApiConnectorModelInfo,
|
|
10
|
+
createModelInfoWithEnum,
|
|
11
|
+
} from "./fixtures";
|
|
12
|
+
|
|
13
|
+
describe("generateMockDocument", () => {
|
|
14
|
+
it("generates a document with all model fields", () => {
|
|
15
|
+
const model = createBasicModelInfo();
|
|
16
|
+
const doc = generateMockDocument(model, 1);
|
|
17
|
+
|
|
18
|
+
expect(doc).toHaveProperty("id");
|
|
19
|
+
expect(doc).toHaveProperty("title");
|
|
20
|
+
expect(doc).toHaveProperty("description");
|
|
21
|
+
expect(doc).toHaveProperty("completed");
|
|
22
|
+
expect(doc).toHaveProperty("createdAt");
|
|
23
|
+
expect(doc).toHaveProperty("updatedAt");
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("generates id using model name and index", () => {
|
|
27
|
+
const model = createBasicModelInfo();
|
|
28
|
+
const doc = generateMockDocument(model, 1);
|
|
29
|
+
expect(doc.id).toBe("todo-001");
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("generates different values for different indices", () => {
|
|
33
|
+
const model = createBasicModelInfo();
|
|
34
|
+
const doc1 = generateMockDocument(model, 1);
|
|
35
|
+
const doc2 = generateMockDocument(model, 2);
|
|
36
|
+
expect(doc1.id).not.toBe(doc2.id);
|
|
37
|
+
expect(doc1.title).not.toBe(doc2.title);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("generates boolean fields with alternating values", () => {
|
|
41
|
+
const model = createBasicModelInfo();
|
|
42
|
+
const doc1 = generateMockDocument(model, 1);
|
|
43
|
+
const doc2 = generateMockDocument(model, 2);
|
|
44
|
+
expect(typeof doc1.completed).toBe("boolean");
|
|
45
|
+
expect(doc1.completed).not.toBe(doc2.completed);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("generates ISO date strings for *At fields", () => {
|
|
49
|
+
const model = createBasicModelInfo();
|
|
50
|
+
const doc = generateMockDocument(model, 1);
|
|
51
|
+
expect(typeof doc.createdAt).toBe("string");
|
|
52
|
+
// Should be parseable as ISO date
|
|
53
|
+
expect(new Date(doc.createdAt as string).toISOString()).toBe(doc.createdAt);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("generates string values for title fields", () => {
|
|
57
|
+
const model = createBasicModelInfo();
|
|
58
|
+
const doc = generateMockDocument(model, 1);
|
|
59
|
+
expect(typeof doc.title).toBe("string");
|
|
60
|
+
expect(doc.title).toContain("1");
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("handles optional string fields", () => {
|
|
64
|
+
const model = createBasicModelInfo();
|
|
65
|
+
const doc = generateMockDocument(model, 1);
|
|
66
|
+
// description is optional but still gets a value for mock data
|
|
67
|
+
expect(typeof doc.description).toBe("string");
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("generates email-like values for email fields", () => {
|
|
71
|
+
const model = createRdbConnectorModelInfo();
|
|
72
|
+
const doc = generateMockDocument(model, 1);
|
|
73
|
+
expect(doc.email).toContain("@example.com");
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("generates department values for department fields", () => {
|
|
77
|
+
const model = createRdbConnectorModelInfo();
|
|
78
|
+
const doc = generateMockDocument(model, 1);
|
|
79
|
+
expect(typeof doc.department).toBe("string");
|
|
80
|
+
// Should be one of the department names
|
|
81
|
+
expect(["Engineering", "Sales", "Marketing", "Support", "HR"]).toContain(doc.department);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("cycles enum values across indices", () => {
|
|
85
|
+
const model = createModelInfoWithEnum();
|
|
86
|
+
const doc1 = generateMockDocument(model, 1);
|
|
87
|
+
const doc2 = generateMockDocument(model, 2);
|
|
88
|
+
const doc3 = generateMockDocument(model, 3);
|
|
89
|
+
expect(doc1.status).toBe("open");
|
|
90
|
+
expect(doc2.status).toBe("in_progress");
|
|
91
|
+
expect(doc3.status).toBe("closed");
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("generates foreign key references for *Id fields", () => {
|
|
95
|
+
const model = createApiConnectorModelInfo();
|
|
96
|
+
const doc = generateMockDocument(model, 1);
|
|
97
|
+
expect(typeof doc.projectId).toBe("string");
|
|
98
|
+
expect(doc.projectId).toContain("project-");
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
describe("generateMockDocuments", () => {
|
|
103
|
+
it("generates the specified number of documents", () => {
|
|
104
|
+
const model = createBasicModelInfo();
|
|
105
|
+
const docs = generateMockDocuments(model, 3);
|
|
106
|
+
expect(docs).toHaveLength(3);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it("defaults to 5 documents", () => {
|
|
110
|
+
const model = createBasicModelInfo();
|
|
111
|
+
const docs = generateMockDocuments(model);
|
|
112
|
+
expect(docs).toHaveLength(5);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it("generates unique ids for each document", () => {
|
|
116
|
+
const model = createBasicModelInfo();
|
|
117
|
+
const docs = generateMockDocuments(model, 5);
|
|
118
|
+
const ids = docs.map((d) => d.id);
|
|
119
|
+
const uniqueIds = new Set(ids);
|
|
120
|
+
expect(uniqueIds.size).toBe(5);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("works with connector models", () => {
|
|
124
|
+
const model = createRdbConnectorModelInfo();
|
|
125
|
+
const docs = generateMockDocuments(model, 3);
|
|
126
|
+
expect(docs).toHaveLength(3);
|
|
127
|
+
// All should have email fields with @example.com
|
|
128
|
+
for (const doc of docs) {
|
|
129
|
+
expect(doc.email).toContain("@example.com");
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|