@iress-oss/ids-mcp-server 0.0.1-dev.3 → 0.0.1
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 +193 -0
- package/README.md +159 -29
- package/build/componentHandlers.js +205 -0
- package/{dist → build}/config.js +5 -5
- package/build/index.js +51 -0
- package/{dist → build}/iressHandlers.js +46 -52
- package/{dist → build}/resourceHandlers.js +22 -23
- package/{dist → build}/searchHandlers.js +92 -107
- package/{dist → build}/toolHandler.js +13 -13
- package/build/tools.js +165 -0
- package/{dist → build}/utils.js +15 -11
- package/docs/api-reference.md +0 -0
- package/docs/best-practices.md +0 -0
- package/docs/configuration.md +0 -0
- package/docs/examples.md +0 -0
- package/docs/guidelines.md +269 -0
- package/{generated/docs → docs/ids}/components-autocomplete-docs.md +6 -6
- package/{generated/docs → docs/ids}/components-autocomplete-recipes-docs.md +51 -17
- package/{generated/docs → docs/ids}/components-card-recipes-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-checkbox-docs.md +19 -6
- package/{generated/docs → docs/ids}/components-checkboxgroup-docs.md +18 -18
- package/{generated/docs → docs/ids}/components-checkboxgroup-recipes-docs.md +9 -9
- package/{generated/docs → docs/ids}/components-col-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-combobox-docs.md +6 -6
- package/{generated/docs → docs/ids}/components-container-docs.md +42 -8
- package/{generated/docs → docs/ids}/components-filter-docs.md +65 -12
- package/{generated/docs → docs/ids}/components-form-docs.md +335 -341
- package/{generated/docs → docs/ids}/components-form-recipes-docs.md +1 -198
- package/{generated/docs → docs/ids}/components-hide-docs.md +70 -16
- package/{generated/docs → docs/ids}/components-icon-docs.md +4 -4
- package/{generated/docs → docs/ids}/components-input-recipes-docs.md +2 -2
- package/{generated/docs → docs/ids}/components-inputcurrency-recipes-docs.md +40 -6
- package/{generated/docs → docs/ids}/components-modal-docs.md +113 -3
- package/docs/ids/components-popover-docs.md +4 -0
- package/{generated/docs → docs/ids}/components-radiogroup-docs.md +21 -21
- package/{generated/docs → docs/ids}/components-richselect-docs.md +111 -149
- package/{generated/docs → docs/ids}/components-row-docs.md +4 -4
- package/{generated/docs → docs/ids}/components-skeleton-docs.md +3 -3
- package/{generated/docs → docs/ids}/components-skeleton-recipes-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-skiplink-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-slideout-docs.md +113 -3
- package/{generated/docs → docs/ids}/components-table-ag-grid-docs.md +137 -109
- package/{generated/docs → docs/ids}/components-table-docs.md +597 -92
- package/{generated/docs → docs/ids}/components-tabset-docs.md +2 -2
- package/{generated/docs → docs/ids}/components-tag-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-toaster-docs.md +5 -5
- package/{generated/docs → docs/ids}/foundations-colours-docs.md +1 -1
- package/{generated/docs → docs/ids}/foundations-typography-docs.md +2 -7
- package/{generated/docs → docs/ids}/get-started-develop-docs.md +3 -3
- package/{generated/docs → docs/ids}/introduction-docs.md +4 -4
- package/{generated/docs → docs/ids}/patterns-loading-docs.md +2 -332
- package/docs/ids/resources-migration-guides-from-v4-to-v5-docs.md +639 -0
- package/docs/ids/themes-available-themes-docs.md +74 -0
- package/docs/ids/themes-tokens-docs.md +4580 -0
- package/docs/ids/versions-docs.md +27 -0
- package/docs/tutorials/basic-integration.md +0 -0
- package/package.json +15 -44
- package/LICENSE.txt +0 -201
- package/dist/componentHandlers.js +0 -241
- package/dist/componentHandlers.test.js +0 -380
- package/dist/index.js +0 -53
- package/dist/iressHandlers.test.js +0 -316
- package/dist/resourceHandlers.test.js +0 -352
- package/dist/searchHandlers.test.js +0 -524
- package/dist/toolHandler.test.js +0 -369
- package/dist/tools.js +0 -165
- package/dist/utils.test.js +0 -286
- package/generated/docs/components-popover-docs.md +0 -464
- package/generated/docs/foundations-accessibility-docs.md +0 -62
- package/generated/docs/foundations-consistency-docs.md +0 -52
- package/generated/docs/foundations-content-docs.md +0 -23
- package/generated/docs/foundations-introduction-docs.md +0 -17
- package/generated/docs/foundations-principles-docs.md +0 -70
- package/generated/docs/foundations-user-experience-docs.md +0 -63
- package/generated/docs/foundations-visual-design-docs.md +0 -46
- package/generated/docs/guidelines.md +0 -812
- package/generated/docs/resources-migration-guides-from-v4-to-v5-docs.md +0 -437
- package/generated/docs/themes-available-themes-docs.md +0 -66
- package/generated/docs/themes-tokens-docs.md +0 -1200
- package/generated/docs/versions-docs.md +0 -17
- /package/{dist → build}/types.js +0 -0
- /package/{generated/docs → docs/ids}/components-alert-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-badge-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-button-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-button-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-buttongroup-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-card-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-divider-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-expander-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-field-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-inline-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-input-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-inputcurrency-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-label-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-menu-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-menu-menuitem-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-navbar-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-navbar-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-panel-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-placeholder-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-popover-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-progress-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-radio-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-readonly-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-select-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-slider-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-spinner-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-stack-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-tabset-tab-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-text-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-toaster-toast-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-toggle-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-tooltip-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-validationmessage-docs.md +0 -0
- /package/{generated/docs → docs/ids}/contact-us-docs.md +0 -0
- /package/{generated/docs → docs/ids}/extensions-editor-docs.md +0 -0
- /package/{generated/docs → docs/ids}/extensions-editor-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/frequently-asked-questions-docs.md +0 -0
- /package/{generated/docs → docs/ids}/get-started-using-storybook-docs.md +0 -0
- /package/{generated/docs → docs/ids}/resources-changelog-docs.md +0 -0
- /package/{generated/docs → docs/ids}/resources-code-katas-docs.md +0 -0
- /package/{generated/docs → docs/ids}/themes-introduction-docs.md +0 -0
package/dist/utils.test.js
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for utility functions
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
5
|
-
import * as fs from 'fs';
|
|
6
|
-
import { getMarkdownFiles, mapIressComponentToFile, extractIressComponents, readFileContent, fileExists, } from './utils.js';
|
|
7
|
-
// Mock fs module
|
|
8
|
-
vi.mock('fs');
|
|
9
|
-
vi.mock('./config.js', () => ({
|
|
10
|
-
DOCS_DIR: '/mock/docs/dir',
|
|
11
|
-
}));
|
|
12
|
-
const mockedFs = vi.mocked(fs);
|
|
13
|
-
// Test helper functions and types
|
|
14
|
-
const createComponentMapping = (componentName, filePath) => ({
|
|
15
|
-
componentName,
|
|
16
|
-
filePath,
|
|
17
|
-
});
|
|
18
|
-
const mockFileList = [
|
|
19
|
-
'components-button-docs.md',
|
|
20
|
-
'components-input-docs.md',
|
|
21
|
-
'components-card-docs.md',
|
|
22
|
-
];
|
|
23
|
-
// Type for fs.readdirSync return value to avoid repetitive eslint-disable comments
|
|
24
|
-
const createMockFileArray = (...files) => files.filter((file) => file != null);
|
|
25
|
-
describe('utils', () => {
|
|
26
|
-
beforeEach(() => {
|
|
27
|
-
vi.clearAllMocks();
|
|
28
|
-
});
|
|
29
|
-
afterEach(() => {
|
|
30
|
-
vi.restoreAllMocks();
|
|
31
|
-
});
|
|
32
|
-
describe('getMarkdownFiles', () => {
|
|
33
|
-
it('should return empty array when docs directory does not exist', () => {
|
|
34
|
-
mockedFs.existsSync.mockReturnValue(false);
|
|
35
|
-
const result = getMarkdownFiles();
|
|
36
|
-
expect(result).toEqual([]);
|
|
37
|
-
expect(fs.existsSync).toHaveBeenCalledWith('/mock/docs/dir');
|
|
38
|
-
});
|
|
39
|
-
it('should return markdown files when directory exists', () => {
|
|
40
|
-
mockedFs.existsSync.mockReturnValue(true);
|
|
41
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-button-docs.md', 'components-input-docs.md', 'other-file.txt', 'nested/components-card-docs.md', Buffer.from('buffer-file')));
|
|
42
|
-
const result = getMarkdownFiles();
|
|
43
|
-
expect(result).toEqual([
|
|
44
|
-
'components-button-docs.md',
|
|
45
|
-
'components-input-docs.md',
|
|
46
|
-
'nested/components-card-docs.md',
|
|
47
|
-
]);
|
|
48
|
-
expect(fs.readdirSync).toHaveBeenCalledWith('/mock/docs/dir', {
|
|
49
|
-
recursive: true,
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
it('should handle errors gracefully', () => {
|
|
53
|
-
mockedFs.existsSync.mockReturnValue(true);
|
|
54
|
-
mockedFs.readdirSync.mockImplementation(() => {
|
|
55
|
-
throw new Error('Read error');
|
|
56
|
-
});
|
|
57
|
-
const consoleSpy = vi
|
|
58
|
-
.spyOn(console, 'error')
|
|
59
|
-
.mockImplementation(() => { });
|
|
60
|
-
const result = getMarkdownFiles();
|
|
61
|
-
expect(result).toEqual([]);
|
|
62
|
-
expect(consoleSpy).toHaveBeenCalledWith('Error reading docs directory:', expect.any(Error));
|
|
63
|
-
});
|
|
64
|
-
it('should filter out non-string entries from directory listing', () => {
|
|
65
|
-
mockedFs.existsSync.mockReturnValue(true);
|
|
66
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('file1.md', Buffer.from('buffer'), 'file2.md', null, undefined, 'file3.txt'));
|
|
67
|
-
const result = getMarkdownFiles();
|
|
68
|
-
expect(result).toEqual(['file1.md', 'file2.md']);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
describe('mapIressComponentToFile', () => {
|
|
72
|
-
beforeEach(() => {
|
|
73
|
-
mockedFs.existsSync.mockReturnValue(true);
|
|
74
|
-
});
|
|
75
|
-
it('should find exact match for component', () => {
|
|
76
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray(...mockFileList));
|
|
77
|
-
const mapping = createComponentMapping('IressButton', 'components-button-docs.md');
|
|
78
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
79
|
-
expect(result).toBe(mapping.filePath);
|
|
80
|
-
});
|
|
81
|
-
it('should find partial match when exact match is not available', () => {
|
|
82
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-button-advanced-docs.md', 'components-input-docs.md'));
|
|
83
|
-
const mapping = createComponentMapping('IressButton', 'components-button-advanced-docs.md');
|
|
84
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
85
|
-
expect(result).toBe(mapping.filePath);
|
|
86
|
-
});
|
|
87
|
-
it('should find fuzzy match when exact and partial matches are not available', () => {
|
|
88
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-custom-button-docs.md', 'components-input-docs.md'));
|
|
89
|
-
const mapping = createComponentMapping('IressButton', 'components-custom-button-docs.md');
|
|
90
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
91
|
-
expect(result).toBe(mapping.filePath);
|
|
92
|
-
});
|
|
93
|
-
it('should return null when no match is found', () => {
|
|
94
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-input-docs.md', 'components-card-docs.md'));
|
|
95
|
-
const mapping = createComponentMapping('IressButton', null);
|
|
96
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
97
|
-
expect(result).toBe(mapping.filePath);
|
|
98
|
-
});
|
|
99
|
-
it('should handle component names without Iress prefix', () => {
|
|
100
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-button-docs.md'));
|
|
101
|
-
const mapping = createComponentMapping('Button', 'components-button-docs.md');
|
|
102
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
103
|
-
expect(result).toBe(mapping.filePath);
|
|
104
|
-
});
|
|
105
|
-
it('should handle camelCase to lowercase conversion correctly', () => {
|
|
106
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-datepicker-docs.md'));
|
|
107
|
-
const mapping = createComponentMapping('IressDatePicker', 'components-datepicker-docs.md');
|
|
108
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
109
|
-
expect(result).toBe(mapping.filePath);
|
|
110
|
-
});
|
|
111
|
-
it('should prioritize exact match over partial match', () => {
|
|
112
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-button-docs.md', 'components-button-advanced-docs.md'));
|
|
113
|
-
const mapping = createComponentMapping('IressButton', 'components-button-docs.md');
|
|
114
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
115
|
-
expect(result).toBe(mapping.filePath);
|
|
116
|
-
});
|
|
117
|
-
it('should prioritize partial match over fuzzy match', () => {
|
|
118
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray('components-custom-button-docs.md', 'components-button-advanced-docs.md'));
|
|
119
|
-
const mapping = createComponentMapping('IressButton', 'components-button-advanced-docs.md');
|
|
120
|
-
const result = mapIressComponentToFile(mapping.componentName);
|
|
121
|
-
expect(result).toBe(mapping.filePath);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('extractIressComponents', () => {
|
|
125
|
-
it('should extract Iress component names from text', () => {
|
|
126
|
-
const text = `
|
|
127
|
-
Use IressButton for actions and IressInput for text entry.
|
|
128
|
-
You can also use IressCard to display content.
|
|
129
|
-
`;
|
|
130
|
-
const result = extractIressComponents(text);
|
|
131
|
-
expect(result).toEqual(['IressButton', 'IressInput', 'IressCard']);
|
|
132
|
-
});
|
|
133
|
-
it('should handle empty text', () => {
|
|
134
|
-
const result = extractIressComponents('');
|
|
135
|
-
expect(result).toEqual([]);
|
|
136
|
-
});
|
|
137
|
-
it('should handle text without Iress components', () => {
|
|
138
|
-
const text = 'This is just regular text with no components.';
|
|
139
|
-
const result = extractIressComponents(text);
|
|
140
|
-
expect(result).toEqual([]);
|
|
141
|
-
});
|
|
142
|
-
it('should remove duplicate component names', () => {
|
|
143
|
-
const text = `
|
|
144
|
-
Use IressButton here and IressButton there.
|
|
145
|
-
Also use IressInput and IressButton again.
|
|
146
|
-
`;
|
|
147
|
-
const result = extractIressComponents(text);
|
|
148
|
-
expect(result).toEqual(['IressButton', 'IressInput']);
|
|
149
|
-
});
|
|
150
|
-
it('should match component names with various cases', () => {
|
|
151
|
-
const text = `
|
|
152
|
-
IressA, IressB, IressC, IressABC, IressXYZ,
|
|
153
|
-
IressCamelCase, IressPascalCase
|
|
154
|
-
`;
|
|
155
|
-
const result = extractIressComponents(text);
|
|
156
|
-
expect(result).toEqual([
|
|
157
|
-
'IressA',
|
|
158
|
-
'IressB',
|
|
159
|
-
'IressC',
|
|
160
|
-
'IressABC',
|
|
161
|
-
'IressXYZ',
|
|
162
|
-
'IressCamelCase',
|
|
163
|
-
'IressPascalCase',
|
|
164
|
-
]);
|
|
165
|
-
});
|
|
166
|
-
it('should match component names according to current implementation', () => {
|
|
167
|
-
const text = 'ThisIressButtonIsNotValid and IressButton is valid';
|
|
168
|
-
const result = extractIressComponents(text);
|
|
169
|
-
// Current implementation matches any "Iress" followed by capital letter and additional letters
|
|
170
|
-
// This includes compound words like "IressButtonIsNotValid"
|
|
171
|
-
expect(result).toEqual(['IressButtonIsNotValid', 'IressButton']);
|
|
172
|
-
});
|
|
173
|
-
it('should handle special characters and boundaries', () => {
|
|
174
|
-
const text = `
|
|
175
|
-
<IressButton>Click me</IressButton>
|
|
176
|
-
{IressInput}
|
|
177
|
-
IressCard.
|
|
178
|
-
IressModal,
|
|
179
|
-
IressDialog;
|
|
180
|
-
IressTooltip!
|
|
181
|
-
IressForm?
|
|
182
|
-
`;
|
|
183
|
-
const result = extractIressComponents(text);
|
|
184
|
-
expect(result).toEqual([
|
|
185
|
-
'IressButton',
|
|
186
|
-
'IressInput',
|
|
187
|
-
'IressCard',
|
|
188
|
-
'IressModal',
|
|
189
|
-
'IressDialog',
|
|
190
|
-
'IressTooltip',
|
|
191
|
-
'IressForm',
|
|
192
|
-
]);
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
describe('readFileContent', () => {
|
|
196
|
-
it('should read file content successfully', () => {
|
|
197
|
-
const mockContent = 'Mock file content';
|
|
198
|
-
mockedFs.readFileSync.mockReturnValue(mockContent);
|
|
199
|
-
const result = readFileContent('/path/to/file.txt');
|
|
200
|
-
expect(result).toBe(mockContent);
|
|
201
|
-
expect(fs.readFileSync).toHaveBeenCalledWith('/path/to/file.txt', 'utf-8');
|
|
202
|
-
});
|
|
203
|
-
it('should propagate file system errors', () => {
|
|
204
|
-
const error = new Error('File not found');
|
|
205
|
-
mockedFs.readFileSync.mockImplementation(() => {
|
|
206
|
-
throw error;
|
|
207
|
-
});
|
|
208
|
-
expect(() => readFileContent('/nonexistent/file.txt')).toThrow('File not found');
|
|
209
|
-
});
|
|
210
|
-
it('should handle different file paths', () => {
|
|
211
|
-
mockedFs.readFileSync.mockReturnValue('content');
|
|
212
|
-
readFileContent('/absolute/path/file.txt');
|
|
213
|
-
expect(fs.readFileSync).toHaveBeenCalledWith('/absolute/path/file.txt', 'utf-8');
|
|
214
|
-
readFileContent('relative/path/file.txt');
|
|
215
|
-
expect(fs.readFileSync).toHaveBeenCalledWith('relative/path/file.txt', 'utf-8');
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
describe('fileExists', () => {
|
|
219
|
-
it('should return true when file exists', () => {
|
|
220
|
-
mockedFs.existsSync.mockReturnValue(true);
|
|
221
|
-
const result = fileExists('/path/to/file.txt');
|
|
222
|
-
expect(result).toBe(true);
|
|
223
|
-
expect(fs.existsSync).toHaveBeenCalledWith('/path/to/file.txt');
|
|
224
|
-
});
|
|
225
|
-
it('should return false when file does not exist', () => {
|
|
226
|
-
mockedFs.existsSync.mockReturnValue(false);
|
|
227
|
-
const result = fileExists('/nonexistent/file.txt');
|
|
228
|
-
expect(result).toBe(false);
|
|
229
|
-
expect(fs.existsSync).toHaveBeenCalledWith('/nonexistent/file.txt');
|
|
230
|
-
});
|
|
231
|
-
it('should handle different file paths', () => {
|
|
232
|
-
mockedFs.existsSync.mockReturnValue(true);
|
|
233
|
-
fileExists('/absolute/path/file.txt');
|
|
234
|
-
expect(fs.existsSync).toHaveBeenCalledWith('/absolute/path/file.txt');
|
|
235
|
-
fileExists('relative/path/file.txt');
|
|
236
|
-
expect(fs.existsSync).toHaveBeenCalledWith('relative/path/file.txt');
|
|
237
|
-
});
|
|
238
|
-
it('should handle edge cases', () => {
|
|
239
|
-
mockedFs.existsSync.mockReturnValue(false);
|
|
240
|
-
expect(fileExists('')).toBe(false);
|
|
241
|
-
expect(fileExists(' ')).toBe(false);
|
|
242
|
-
expect(fileExists('.')).toBe(false);
|
|
243
|
-
expect(fileExists('..')).toBe(false);
|
|
244
|
-
});
|
|
245
|
-
});
|
|
246
|
-
describe('type safety and helper functions', () => {
|
|
247
|
-
it('should create valid ComponentMapping objects', () => {
|
|
248
|
-
const validMapping = createComponentMapping('IressButton', 'components-button-docs.md');
|
|
249
|
-
const nullMapping = createComponentMapping('IressNonExistent', null);
|
|
250
|
-
expect(validMapping).toEqual({
|
|
251
|
-
componentName: 'IressButton',
|
|
252
|
-
filePath: 'components-button-docs.md',
|
|
253
|
-
});
|
|
254
|
-
expect(nullMapping).toEqual({
|
|
255
|
-
componentName: 'IressNonExistent',
|
|
256
|
-
filePath: null,
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
it('should work with mock file list type', () => {
|
|
260
|
-
const mockFile = 'components-button-docs.md';
|
|
261
|
-
expect(mockFileList).toContain(mockFile);
|
|
262
|
-
// Type checking ensures we can only use valid file names
|
|
263
|
-
expect(typeof mockFile).toBe('string');
|
|
264
|
-
expect(mockFile.endsWith('.md')).toBe(true);
|
|
265
|
-
});
|
|
266
|
-
it('should demonstrate type-safe component mapping workflow', () => {
|
|
267
|
-
mockedFs.existsSync.mockReturnValue(true);
|
|
268
|
-
mockedFs.readdirSync.mockReturnValue(createMockFileArray(...mockFileList));
|
|
269
|
-
const componentMappings = [
|
|
270
|
-
createComponentMapping('IressButton', null),
|
|
271
|
-
createComponentMapping('IressInput', null),
|
|
272
|
-
createComponentMapping('IressCard', null),
|
|
273
|
-
];
|
|
274
|
-
// Test that all components get properly mapped
|
|
275
|
-
const results = componentMappings.map((mapping) => ({
|
|
276
|
-
...mapping,
|
|
277
|
-
filePath: mapIressComponentToFile(mapping.componentName),
|
|
278
|
-
}));
|
|
279
|
-
expect(results).toEqual([
|
|
280
|
-
{ componentName: 'IressButton', filePath: 'components-button-docs.md' },
|
|
281
|
-
{ componentName: 'IressInput', filePath: 'components-input-docs.md' },
|
|
282
|
-
{ componentName: 'IressCard', filePath: 'components-card-docs.md' },
|
|
283
|
-
]);
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
});
|