@mdfriday/foundry 25.8.8 → 25.8.9
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/application/incremental-build-coordinator.d.ts +2 -0
- package/dist/internal/application/incremental-build-coordinator.d.ts.map +1 -1
- package/dist/internal/application/incremental-build-coordinator.js +2 -2
- package/dist/internal/application/incremental-build-coordinator.js.map +1 -1
- package/dist/internal/application/ssg.d.ts +6 -5
- package/dist/internal/application/ssg.d.ts.map +1 -1
- package/dist/internal/application/ssg.js +12 -11
- package/dist/internal/application/ssg.js.map +1 -1
- package/dist/internal/domain/config/tests/entity-config.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/entity-config.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/entity-config.test.js +199 -0
- package/dist/internal/domain/config/tests/entity-config.test.js.map +1 -0
- package/dist/internal/domain/config/tests/entity-root.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/entity-root.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/entity-root.test.js +235 -0
- package/dist/internal/domain/config/tests/entity-root.test.js.map +1 -0
- package/dist/internal/domain/config/tests/factory-config.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/factory-config.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/factory-config.test.js +84 -0
- package/dist/internal/domain/config/tests/factory-config.test.js.map +1 -0
- package/dist/internal/domain/config/tests/index.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/index.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/index.test.js +197 -0
- package/dist/internal/domain/config/tests/index.test.js.map +1 -0
- package/dist/internal/domain/config/tests/mock-fs.d.ts +26 -0
- package/dist/internal/domain/config/tests/mock-fs.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/mock-fs.js +281 -0
- package/dist/internal/domain/config/tests/mock-fs.js.map +1 -0
- package/dist/internal/domain/config/tests/type.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/type.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/type.test.js +272 -0
- package/dist/internal/domain/config/tests/type.test.js.map +1 -0
- package/dist/internal/domain/config/tests/vo-module.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/vo-module.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/vo-module.test.js +267 -0
- package/dist/internal/domain/config/tests/vo-module.test.js.map +1 -0
- package/dist/internal/domain/config/tests/vo-root.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/vo-root.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/vo-root.test.js +165 -0
- package/dist/internal/domain/config/tests/vo-root.test.js.map +1 -0
- package/dist/internal/domain/config/tests/vo-service.test.d.ts +2 -0
- package/dist/internal/domain/config/tests/vo-service.test.d.ts.map +1 -0
- package/dist/internal/domain/config/tests/vo-service.test.js +266 -0
- package/dist/internal/domain/config/tests/vo-service.test.js.map +1 -0
- package/dist/internal/domain/content/factory/hub.js +1 -1
- package/dist/internal/domain/content/factory/hub.js.map +1 -1
- package/dist/internal/domain/content/type.d.ts +2 -1
- package/dist/internal/domain/content/type.d.ts.map +1 -1
- package/dist/internal/domain/content/type.js.map +1 -1
- package/dist/internal/domain/fs/entity/overlayfs.js +1 -1
- package/dist/internal/domain/fs/entity/overlayfs.js.map +1 -1
- package/dist/internal/domain/fs/tests/entity-basefs.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/entity-basefs.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/entity-basefs.test.js +279 -0
- package/dist/internal/domain/fs/tests/entity-basefs.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/entity-fs.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/entity-fs.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/entity-fs.test.js +230 -0
- package/dist/internal/domain/fs/tests/entity-fs.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/entity-originfs.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/entity-originfs.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/entity-originfs.test.js +47 -0
- package/dist/internal/domain/fs/tests/entity-originfs.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/entity-overlaydir.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/entity-overlaydir.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/entity-overlaydir.test.js +293 -0
- package/dist/internal/domain/fs/tests/entity-overlaydir.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/entity-overlayfs.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/entity-overlayfs.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/entity-overlayfs.test.js +281 -0
- package/dist/internal/domain/fs/tests/entity-overlayfs.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/entity-service.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/entity-service.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/entity-service.test.js +43 -0
- package/dist/internal/domain/fs/tests/entity-service.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/factory-fs.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/factory-fs.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/factory-fs.test.js +105 -0
- package/dist/internal/domain/fs/tests/factory-fs.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/type.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/type.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/type.test.js +113 -0
- package/dist/internal/domain/fs/tests/type.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-dir.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-dir.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-dir.test.js +211 -0
- package/dist/internal/domain/fs/tests/vo-dir.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-file.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-file.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-file.test.js +256 -0
- package/dist/internal/domain/fs/tests/vo-file.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-fileinfo.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-fileinfo.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-fileinfo.test.js +165 -0
- package/dist/internal/domain/fs/tests/vo-fileinfo.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-filemeta.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-filemeta.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-filemeta.test.js +171 -0
- package/dist/internal/domain/fs/tests/vo-filemeta.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.js +298 -0
- package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-filevitural.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-filevitural.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-filevitural.test.js +167 -0
- package/dist/internal/domain/fs/tests/vo-filevitural.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.js +396 -0
- package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-osfs.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-osfs.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-osfs.test.js +363 -0
- package/dist/internal/domain/fs/tests/vo-osfs.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.js +430 -0
- package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-overlayoptions.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-overlayoptions.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-overlayoptions.test.js +402 -0
- package/dist/internal/domain/fs/tests/vo-overlayoptions.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-static-copier.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-static-copier.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-static-copier.test.js +320 -0
- package/dist/internal/domain/fs/tests/vo-static-copier.test.js.map +1 -0
- package/dist/internal/domain/fs/tests/vo-walkway.test.d.ts +2 -0
- package/dist/internal/domain/fs/tests/vo-walkway.test.d.ts.map +1 -0
- package/dist/internal/domain/fs/tests/vo-walkway.test.js +295 -0
- package/dist/internal/domain/fs/tests/vo-walkway.test.js.map +1 -0
- package/dist/internal/domain/markdown/entity/markdown.d.ts +0 -21
- package/dist/internal/domain/markdown/entity/markdown.d.ts.map +1 -1
- package/dist/internal/domain/markdown/entity/markdown.js +2 -35
- package/dist/internal/domain/markdown/entity/markdown.js.map +1 -1
- package/dist/internal/domain/markdown/factory/markdown.d.ts +2 -38
- package/dist/internal/domain/markdown/factory/markdown.d.ts.map +1 -1
- package/dist/internal/domain/markdown/factory/markdown.js +2 -70
- package/dist/internal/domain/markdown/factory/markdown.js.map +1 -1
- package/dist/internal/domain/markdown/index.d.ts +0 -3
- package/dist/internal/domain/markdown/index.d.ts.map +1 -1
- package/dist/internal/domain/markdown/index.js +0 -3
- package/dist/internal/domain/markdown/index.js.map +1 -1
- package/dist/internal/domain/markdown/type.d.ts +1 -16
- package/dist/internal/domain/markdown/type.d.ts.map +1 -1
- package/dist/internal/domain/markdown/type.js.map +1 -1
- package/dist/internal/domain/markdown/vo/parserresult.d.ts +1 -60
- package/dist/internal/domain/markdown/vo/parserresult.d.ts.map +1 -1
- package/dist/internal/domain/markdown/vo/parserresult.js +1 -174
- package/dist/internal/domain/markdown/vo/parserresult.js.map +1 -1
- package/dist/pkg/log/manager.js +1 -1
- package/package.json +1 -15
- package/dist/internal/application/test-incremental-ssg.d.ts +0 -9
- package/dist/internal/application/test-incremental-ssg.d.ts.map +0 -1
- package/dist/internal/application/test-incremental-ssg.js +0 -83
- package/dist/internal/application/test-incremental-ssg.js.map +0 -1
- package/dist/internal/application/test-ssg.d.ts +0 -8
- package/dist/internal/application/test-ssg.d.ts.map +0 -1
- package/dist/internal/application/test-ssg.js +0 -30
- package/dist/internal/application/test-ssg.js.map +0 -1
- package/dist/internal/domain/markdown/test/external-adapter.test.d.ts +0 -2
- package/dist/internal/domain/markdown/test/external-adapter.test.d.ts.map +0 -1
- package/dist/internal/domain/markdown/test/external-adapter.test.js +0 -150
- package/dist/internal/domain/markdown/test/external-adapter.test.js.map +0 -1
- package/dist/internal/domain/markdown/test/markdown.test.d.ts +0 -2
- package/dist/internal/domain/markdown/test/markdown.test.d.ts.map +0 -1
- package/dist/internal/domain/markdown/test/markdown.test.js +0 -88
- package/dist/internal/domain/markdown/test/markdown.test.js.map +0 -1
- package/dist/internal/domain/markdown/vo/externaladapter.d.ts +0 -63
- package/dist/internal/domain/markdown/vo/externaladapter.d.ts.map +0 -1
- package/dist/internal/domain/markdown/vo/externaladapter.js +0 -194
- package/dist/internal/domain/markdown/vo/externaladapter.js.map +0 -1
- package/dist/internal/domain/markdown/vo/markdownit.d.ts +0 -33
- package/dist/internal/domain/markdown/vo/markdownit.d.ts.map +0 -1
- package/dist/internal/domain/markdown/vo/markdownit.js +0 -175
- package/dist/internal/domain/markdown/vo/markdownit.js.map +0 -1
- package/dist/pkg/web/server/example.d.ts +0 -2
- package/dist/pkg/web/server/example.d.ts.map +0 -1
- package/dist/pkg/web/server/example.js +0 -43
- package/dist/pkg/web/server/example.js.map +0 -1
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const overlaydir_1 = require("../entity/overlaydir");
|
|
4
|
+
const type_1 = require("../type");
|
|
5
|
+
// Mock dependencies
|
|
6
|
+
jest.mock('@internal/domain/fs/vo/overlayoptions');
|
|
7
|
+
jest.mock('@pkg/log');
|
|
8
|
+
describe('OverlayDir Entity', () => {
|
|
9
|
+
let mockFs1;
|
|
10
|
+
let mockFs2;
|
|
11
|
+
let mockDirOpener1;
|
|
12
|
+
let mockDirOpener2;
|
|
13
|
+
let mockInfoFunc;
|
|
14
|
+
let mockDirsMerger;
|
|
15
|
+
let overlayDir;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
mockFs1 = {
|
|
18
|
+
name: jest.fn().mockReturnValue('MockFs1'),
|
|
19
|
+
open: jest.fn(),
|
|
20
|
+
stat: jest.fn(),
|
|
21
|
+
};
|
|
22
|
+
mockFs2 = {
|
|
23
|
+
name: jest.fn().mockReturnValue('MockFs2'),
|
|
24
|
+
open: jest.fn(),
|
|
25
|
+
stat: jest.fn(),
|
|
26
|
+
};
|
|
27
|
+
mockDirOpener1 = jest.fn();
|
|
28
|
+
mockDirOpener2 = jest.fn();
|
|
29
|
+
mockInfoFunc = jest.fn();
|
|
30
|
+
mockDirsMerger = jest.fn().mockImplementation((a, b) => [...a, ...b]);
|
|
31
|
+
const options = {
|
|
32
|
+
name: '/test/dir',
|
|
33
|
+
fss: [mockFs1, mockFs2],
|
|
34
|
+
dirOpeners: [mockDirOpener1, mockDirOpener2],
|
|
35
|
+
info: mockInfoFunc,
|
|
36
|
+
merge: mockDirsMerger,
|
|
37
|
+
};
|
|
38
|
+
overlayDir = new overlaydir_1.OverlayDir(options);
|
|
39
|
+
});
|
|
40
|
+
afterEach(() => {
|
|
41
|
+
jest.clearAllMocks();
|
|
42
|
+
});
|
|
43
|
+
describe('constructor', () => {
|
|
44
|
+
it('should initialize with default options', () => {
|
|
45
|
+
const defaultDir = new overlaydir_1.OverlayDir();
|
|
46
|
+
expect(defaultDir.name()).toBe('');
|
|
47
|
+
expect(defaultDir.fss).toEqual([]);
|
|
48
|
+
expect(defaultDir.dirOpeners).toEqual([]);
|
|
49
|
+
expect(defaultDir.offset).toBe(0);
|
|
50
|
+
expect(defaultDir.closed).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
it('should initialize with provided options', () => {
|
|
53
|
+
expect(overlayDir.name()).toBe('/test/dir');
|
|
54
|
+
expect(overlayDir.fss).toEqual([mockFs1, mockFs2]);
|
|
55
|
+
expect(overlayDir.dirOpeners).toEqual([mockDirOpener1, mockDirOpener2]);
|
|
56
|
+
expect(overlayDir.info).toBe(mockInfoFunc);
|
|
57
|
+
expect(overlayDir.merge).toBe(mockDirsMerger);
|
|
58
|
+
});
|
|
59
|
+
it('should create copies of arrays to avoid mutation', () => {
|
|
60
|
+
const originalFss = [mockFs1, mockFs2];
|
|
61
|
+
const originalOpeners = [mockDirOpener1, mockDirOpener2];
|
|
62
|
+
const options = {
|
|
63
|
+
fss: originalFss,
|
|
64
|
+
dirOpeners: originalOpeners,
|
|
65
|
+
};
|
|
66
|
+
const dir = new overlaydir_1.OverlayDir(options);
|
|
67
|
+
expect(dir.fss).not.toBe(originalFss);
|
|
68
|
+
expect(dir.dirOpeners).not.toBe(originalOpeners);
|
|
69
|
+
expect(dir.fss).toEqual(originalFss);
|
|
70
|
+
expect(dir.dirOpeners).toEqual(originalOpeners);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('name', () => {
|
|
74
|
+
it('should return directory name', () => {
|
|
75
|
+
expect(overlayDir.name()).toBe('/test/dir');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('isClosed', () => {
|
|
79
|
+
it('should return false when directory is open', () => {
|
|
80
|
+
const result = overlayDir.isClosed();
|
|
81
|
+
expect(result).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
it('should return true when closed flag is set', () => {
|
|
84
|
+
overlayDir.closed = true;
|
|
85
|
+
const result = overlayDir.isClosed();
|
|
86
|
+
expect(result).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
it('should return true when no filesystems or openers', () => {
|
|
89
|
+
const emptyDir = new overlaydir_1.OverlayDir({ fss: [], dirOpeners: [] });
|
|
90
|
+
const result = emptyDir.isClosed();
|
|
91
|
+
expect(result).toBe(true);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('readdir', () => {
|
|
95
|
+
beforeEach(() => {
|
|
96
|
+
// Mock file objects that will be returned by filesystem open
|
|
97
|
+
const mockFile1 = {
|
|
98
|
+
readdir: jest.fn().mockResolvedValue([
|
|
99
|
+
{ name: () => 'file1.txt', isDir: () => false },
|
|
100
|
+
{ name: () => 'dir1', isDir: () => true },
|
|
101
|
+
]),
|
|
102
|
+
close: jest.fn(),
|
|
103
|
+
};
|
|
104
|
+
const mockFile2 = {
|
|
105
|
+
readdir: jest.fn().mockResolvedValue([
|
|
106
|
+
{ name: () => 'file2.txt', isDir: () => false },
|
|
107
|
+
{ name: () => 'dir2', isDir: () => true },
|
|
108
|
+
]),
|
|
109
|
+
close: jest.fn(),
|
|
110
|
+
};
|
|
111
|
+
mockFs1.open.mockResolvedValue(mockFile1);
|
|
112
|
+
mockFs2.open.mockResolvedValue(mockFile2);
|
|
113
|
+
// Ensure mockDirsMerger handles arrays correctly (like defaultDirMerger)
|
|
114
|
+
mockDirsMerger.mockImplementation((lofi, bofi) => {
|
|
115
|
+
const result = [...(lofi || [])];
|
|
116
|
+
for (const boFile of (bofi || [])) {
|
|
117
|
+
let found = false;
|
|
118
|
+
for (const loFile of (lofi || [])) {
|
|
119
|
+
if (boFile.name() === loFile.name()) {
|
|
120
|
+
found = true;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!found) {
|
|
125
|
+
result.push(boFile);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
it('should throw error when directory is closed', async () => {
|
|
132
|
+
overlayDir.closed = true;
|
|
133
|
+
await expect(overlayDir.readdir(10)).rejects.toThrow(type_1.ErrFileClosed);
|
|
134
|
+
});
|
|
135
|
+
it('should throw existing error if present', async () => {
|
|
136
|
+
const testError = new Error('Test error');
|
|
137
|
+
overlayDir.err = testError;
|
|
138
|
+
await expect(overlayDir.readdir(10)).rejects.toThrow(testError);
|
|
139
|
+
});
|
|
140
|
+
it('should load and return directory entries', async () => {
|
|
141
|
+
const result = await overlayDir.readdir(10);
|
|
142
|
+
expect(mockFs1.open).toHaveBeenCalledWith('/test/dir');
|
|
143
|
+
expect(mockFs2.open).toHaveBeenCalledWith('/test/dir');
|
|
144
|
+
expect(result).toHaveLength(4); // 2 from each filesystem
|
|
145
|
+
expect(mockDirsMerger).toHaveBeenCalled();
|
|
146
|
+
});
|
|
147
|
+
it('should handle root directory path conversion', async () => {
|
|
148
|
+
const mockFile1 = {
|
|
149
|
+
readdir: jest.fn().mockResolvedValue([
|
|
150
|
+
{ name: () => 'root-file.txt', isDir: () => false },
|
|
151
|
+
]),
|
|
152
|
+
close: jest.fn(),
|
|
153
|
+
};
|
|
154
|
+
mockFs1.open.mockResolvedValue(mockFile1);
|
|
155
|
+
const rootDir = new overlaydir_1.OverlayDir({
|
|
156
|
+
name: '/',
|
|
157
|
+
fss: [mockFs1],
|
|
158
|
+
merge: mockDirsMerger // Use the same merger to ensure consistency
|
|
159
|
+
});
|
|
160
|
+
const result = await rootDir.readdir(10);
|
|
161
|
+
expect(mockFs1.open).toHaveBeenCalledWith(''); // "/" converted to ""
|
|
162
|
+
expect(result).toHaveLength(1);
|
|
163
|
+
});
|
|
164
|
+
it('should return all entries when count is 0 or negative', async () => {
|
|
165
|
+
const result = await overlayDir.readdir(0);
|
|
166
|
+
expect(result).toHaveLength(4);
|
|
167
|
+
expect(overlayDir.err).toEqual(expect.any(Error));
|
|
168
|
+
expect(overlayDir.err.message).toBe('EOF');
|
|
169
|
+
});
|
|
170
|
+
it('should return limited entries when count is positive', async () => {
|
|
171
|
+
const result = await overlayDir.readdir(2);
|
|
172
|
+
expect(result).toHaveLength(2);
|
|
173
|
+
expect(overlayDir.offset).toBe(2);
|
|
174
|
+
});
|
|
175
|
+
it('should handle subsequent reads with offset', async () => {
|
|
176
|
+
await overlayDir.readdir(2); // First read
|
|
177
|
+
const result = await overlayDir.readdir(2); // Second read
|
|
178
|
+
expect(result).toHaveLength(2);
|
|
179
|
+
expect(overlayDir.offset).toBe(4);
|
|
180
|
+
});
|
|
181
|
+
it('should throw EOF error when no more entries', async () => {
|
|
182
|
+
await overlayDir.readdir(4); // Read all entries
|
|
183
|
+
await expect(overlayDir.readdir(1)).rejects.toThrow('EOF');
|
|
184
|
+
});
|
|
185
|
+
it('should handle filesystem errors gracefully', async () => {
|
|
186
|
+
mockFs1.open.mockRejectedValue(new Error('Access denied'));
|
|
187
|
+
// mockFs2 should still work
|
|
188
|
+
const result = await overlayDir.readdir(10);
|
|
189
|
+
expect(result).toHaveLength(2); // Only from mockFs2
|
|
190
|
+
});
|
|
191
|
+
it('should read from directory openers when filesystems fail', async () => {
|
|
192
|
+
const mockFile = {
|
|
193
|
+
readdir: jest.fn().mockResolvedValue([
|
|
194
|
+
{ name: () => 'virtual.txt', isDir: () => false },
|
|
195
|
+
]),
|
|
196
|
+
close: jest.fn(),
|
|
197
|
+
};
|
|
198
|
+
mockDirOpener1.mockResolvedValue(mockFile);
|
|
199
|
+
mockFs1.open.mockRejectedValue(new Error('Not found'));
|
|
200
|
+
mockFs2.open.mockRejectedValue(new Error('Not found'));
|
|
201
|
+
const result = await overlayDir.readdir(10);
|
|
202
|
+
expect(mockDirOpener1).toHaveBeenCalled();
|
|
203
|
+
expect(result).toHaveLength(1);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
describe('readdirnames', () => {
|
|
207
|
+
beforeEach(() => {
|
|
208
|
+
const mockFile = {
|
|
209
|
+
readdir: jest.fn().mockResolvedValue([
|
|
210
|
+
{ name: () => 'file1.txt', isDir: () => false },
|
|
211
|
+
{ name: () => 'file2.txt', isDir: () => false },
|
|
212
|
+
]),
|
|
213
|
+
close: jest.fn(),
|
|
214
|
+
};
|
|
215
|
+
mockFs1.open.mockResolvedValue(mockFile);
|
|
216
|
+
mockFs2.open.mockResolvedValue(mockFile);
|
|
217
|
+
});
|
|
218
|
+
it('should throw error when directory is closed', async () => {
|
|
219
|
+
overlayDir.closed = true;
|
|
220
|
+
await expect(overlayDir.readdirnames(10)).rejects.toThrow(type_1.ErrFileClosed);
|
|
221
|
+
});
|
|
222
|
+
it('should return directory entry names', async () => {
|
|
223
|
+
const result = await overlayDir.readdirnames(10);
|
|
224
|
+
expect(result).toEqual(['file1.txt', 'file2.txt', 'file1.txt', 'file2.txt']);
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
describe('File interface methods', () => {
|
|
228
|
+
it('should implement close method', async () => {
|
|
229
|
+
await expect(overlayDir.close()).resolves.toBeUndefined();
|
|
230
|
+
expect(overlayDir.closed).toBe(true);
|
|
231
|
+
});
|
|
232
|
+
it('should implement read method', async () => {
|
|
233
|
+
const buffer = new Uint8Array(10);
|
|
234
|
+
await expect(overlayDir.read(buffer)).rejects.toThrow('operation read not supported on directory');
|
|
235
|
+
});
|
|
236
|
+
it('should implement readAt method', async () => {
|
|
237
|
+
const buffer = new Uint8Array(10);
|
|
238
|
+
await expect(overlayDir.readAt(buffer, 0)).rejects.toThrow('operation readAt not supported on directory');
|
|
239
|
+
});
|
|
240
|
+
it('should implement seek method', async () => {
|
|
241
|
+
await expect(overlayDir.seek(0, 0)).rejects.toThrow('operation seek not supported on directory');
|
|
242
|
+
});
|
|
243
|
+
it('should implement write method', async () => {
|
|
244
|
+
const buffer = new Uint8Array([1, 2, 3]);
|
|
245
|
+
await expect(overlayDir.write(buffer)).rejects.toThrow('operation write not supported on directory');
|
|
246
|
+
});
|
|
247
|
+
it('should implement writeAt method', async () => {
|
|
248
|
+
const buffer = new Uint8Array([1, 2, 3]);
|
|
249
|
+
await expect(overlayDir.writeAt(buffer, 0)).rejects.toThrow('operation writeAt not supported on directory');
|
|
250
|
+
});
|
|
251
|
+
it('should implement stat method', async () => {
|
|
252
|
+
const mockFileInfo = { name: () => '/test/dir', isDir: () => true };
|
|
253
|
+
mockInfoFunc.mockResolvedValue(mockFileInfo);
|
|
254
|
+
const result = await overlayDir.stat();
|
|
255
|
+
expect(mockInfoFunc).toHaveBeenCalled();
|
|
256
|
+
expect(result).toBe(mockFileInfo);
|
|
257
|
+
});
|
|
258
|
+
it('should implement sync method', async () => {
|
|
259
|
+
await expect(overlayDir.sync()).rejects.toThrow('operation sync not supported on directory');
|
|
260
|
+
});
|
|
261
|
+
it('should implement truncate method', async () => {
|
|
262
|
+
await expect(overlayDir.truncate(100)).rejects.toThrow('operation truncate not supported on directory');
|
|
263
|
+
});
|
|
264
|
+
it('should implement writeString method', async () => {
|
|
265
|
+
await expect(overlayDir.writeString('test')).rejects.toThrow('operation writeString not supported on directory');
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
describe('factory functions', () => {
|
|
269
|
+
it('should create OverlayDir with newOverlayDir', () => {
|
|
270
|
+
const options = { name: 'test' };
|
|
271
|
+
const result = (0, overlaydir_1.newOverlayDir)(options);
|
|
272
|
+
expect(result).toBeInstanceOf(overlaydir_1.OverlayDir);
|
|
273
|
+
expect(result.name()).toBe('test');
|
|
274
|
+
});
|
|
275
|
+
it('should create OverlayDir with openDir', async () => {
|
|
276
|
+
const result = await (0, overlaydir_1.openDir)('/test', mockDirsMerger, mockInfoFunc, [mockFs1]);
|
|
277
|
+
expect(result).toBeInstanceOf(overlaydir_1.OverlayDir);
|
|
278
|
+
expect(result.name()).toBe('/test');
|
|
279
|
+
});
|
|
280
|
+
it('should manage directory cache with getDir and releaseDir', async () => {
|
|
281
|
+
const dir1 = (0, overlaydir_1.getDir)();
|
|
282
|
+
const dir2 = (0, overlaydir_1.getDir)();
|
|
283
|
+
// Should return different instances from pool
|
|
284
|
+
expect(dir1).toBeInstanceOf(overlaydir_1.OverlayDir);
|
|
285
|
+
expect(dir2).toBeInstanceOf(overlaydir_1.OverlayDir);
|
|
286
|
+
(0, overlaydir_1.releaseDir)(dir1);
|
|
287
|
+
// After release, can get instance from pool
|
|
288
|
+
const dir3 = (0, overlaydir_1.getDir)();
|
|
289
|
+
expect(dir3).toBeInstanceOf(overlaydir_1.OverlayDir);
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
//# sourceMappingURL=entity-overlaydir.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-overlaydir.test.js","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/entity-overlaydir.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-overlayfs.test.d.ts","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/entity-overlayfs.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const overlayfs_1 = require("../entity/overlayfs");
|
|
4
|
+
const overlayoptions_1 = require("../vo/overlayoptions");
|
|
5
|
+
const type_1 = require("../type");
|
|
6
|
+
// Mock dependencies
|
|
7
|
+
jest.mock('../vo/overlayoptions');
|
|
8
|
+
jest.mock('../entity/overlaydir');
|
|
9
|
+
jest.mock('@pkg/log');
|
|
10
|
+
describe('OverlayFs Entity', () => {
|
|
11
|
+
let mockFs1;
|
|
12
|
+
let mockFs2;
|
|
13
|
+
let mockOptions;
|
|
14
|
+
let mockDirsMerger;
|
|
15
|
+
let overlayFs;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
mockFs1 = {
|
|
18
|
+
name: jest.fn().mockReturnValue('MockFs1'),
|
|
19
|
+
stat: jest.fn(),
|
|
20
|
+
open: jest.fn(),
|
|
21
|
+
create: jest.fn(),
|
|
22
|
+
mkdir: jest.fn(),
|
|
23
|
+
mkdirAll: jest.fn(),
|
|
24
|
+
openFile: jest.fn(),
|
|
25
|
+
remove: jest.fn(),
|
|
26
|
+
removeAll: jest.fn(),
|
|
27
|
+
rename: jest.fn(),
|
|
28
|
+
chmod: jest.fn(),
|
|
29
|
+
chown: jest.fn(),
|
|
30
|
+
chtimes: jest.fn(),
|
|
31
|
+
};
|
|
32
|
+
mockFs2 = {
|
|
33
|
+
name: jest.fn().mockReturnValue('MockFs2'),
|
|
34
|
+
stat: jest.fn(),
|
|
35
|
+
open: jest.fn(),
|
|
36
|
+
create: jest.fn(),
|
|
37
|
+
mkdir: jest.fn(),
|
|
38
|
+
mkdirAll: jest.fn(),
|
|
39
|
+
openFile: jest.fn(),
|
|
40
|
+
remove: jest.fn(),
|
|
41
|
+
removeAll: jest.fn(),
|
|
42
|
+
rename: jest.fn(),
|
|
43
|
+
chmod: jest.fn(),
|
|
44
|
+
chown: jest.fn(),
|
|
45
|
+
chtimes: jest.fn(),
|
|
46
|
+
};
|
|
47
|
+
mockDirsMerger = jest.fn().mockImplementation((a, b) => [...a, ...b]);
|
|
48
|
+
mockOptions = {
|
|
49
|
+
fss: [mockFs1, mockFs2],
|
|
50
|
+
firstWritable: true,
|
|
51
|
+
dirsMerger: mockDirsMerger,
|
|
52
|
+
};
|
|
53
|
+
overlayFs = new overlayfs_1.OverlayFs(mockOptions);
|
|
54
|
+
});
|
|
55
|
+
afterEach(() => {
|
|
56
|
+
jest.clearAllMocks();
|
|
57
|
+
});
|
|
58
|
+
describe('constructor', () => {
|
|
59
|
+
it('should initialize with overlay options', () => {
|
|
60
|
+
expect(overlayFs.fss).toEqual([mockFs1, mockFs2]);
|
|
61
|
+
expect(overlayFs.firstWritable).toBe(true);
|
|
62
|
+
expect(overlayFs.mergeDirs).toBe(mockDirsMerger);
|
|
63
|
+
});
|
|
64
|
+
it('should create copy of filesystems array', () => {
|
|
65
|
+
const originalFss = mockOptions.fss;
|
|
66
|
+
expect(overlayFs.fss).not.toBe(originalFss);
|
|
67
|
+
expect(overlayFs.fss).toEqual(originalFss);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe('name', () => {
|
|
71
|
+
it('should return overlayfs name', () => {
|
|
72
|
+
expect(overlayFs.name()).toBe('overlayfs');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('FilesystemIterator interface', () => {
|
|
76
|
+
it('should return filesystem by index', () => {
|
|
77
|
+
expect(overlayFs.filesystem(0)).toBe(mockFs1);
|
|
78
|
+
expect(overlayFs.filesystem(1)).toBe(mockFs2);
|
|
79
|
+
});
|
|
80
|
+
it('should return null for out-of-bounds index', () => {
|
|
81
|
+
expect(overlayFs.filesystem(2)).toBeNull();
|
|
82
|
+
expect(overlayFs.filesystem(-1)).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
it('should return correct number of filesystems', () => {
|
|
85
|
+
expect(overlayFs.numFilesystems()).toBe(2);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('append', () => {
|
|
89
|
+
it('should append filesystems and return new instance', () => {
|
|
90
|
+
const mockFs3 = {};
|
|
91
|
+
overlayoptions_1.OverlayOptions.mockImplementation((opts) => opts);
|
|
92
|
+
const result = overlayFs.append(mockFs3);
|
|
93
|
+
expect(overlayoptions_1.OverlayOptions).toHaveBeenCalledWith({
|
|
94
|
+
fss: [mockFs1, mockFs2, mockFs3],
|
|
95
|
+
firstWritable: true,
|
|
96
|
+
dirsMerger: mockDirsMerger,
|
|
97
|
+
});
|
|
98
|
+
expect(result).toBeInstanceOf(overlayfs_1.OverlayFs);
|
|
99
|
+
expect(result).not.toBe(overlayFs);
|
|
100
|
+
});
|
|
101
|
+
it('should append multiple filesystems', () => {
|
|
102
|
+
const mockFs3 = {};
|
|
103
|
+
const mockFs4 = {};
|
|
104
|
+
overlayoptions_1.OverlayOptions.mockImplementation((opts) => opts);
|
|
105
|
+
overlayFs.append(mockFs3, mockFs4);
|
|
106
|
+
expect(overlayoptions_1.OverlayOptions).toHaveBeenCalledWith({
|
|
107
|
+
fss: [mockFs1, mockFs2, mockFs3, mockFs4],
|
|
108
|
+
firstWritable: true,
|
|
109
|
+
dirsMerger: mockDirsMerger,
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('withDirsMerger', () => {
|
|
114
|
+
it('should set new directory merger and return new instance', () => {
|
|
115
|
+
const newMerger = jest.fn();
|
|
116
|
+
overlayoptions_1.OverlayOptions.mockImplementation((opts) => opts);
|
|
117
|
+
const result = overlayFs.withDirsMerger(newMerger);
|
|
118
|
+
expect(overlayoptions_1.OverlayOptions).toHaveBeenCalledWith({
|
|
119
|
+
fss: [mockFs1, mockFs2],
|
|
120
|
+
firstWritable: true,
|
|
121
|
+
dirsMerger: newMerger,
|
|
122
|
+
});
|
|
123
|
+
expect(result).toBeInstanceOf(overlayfs_1.OverlayFs);
|
|
124
|
+
expect(result).not.toBe(overlayFs);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('writeFs', () => {
|
|
128
|
+
it('should return first filesystem when available', () => {
|
|
129
|
+
const result = overlayFs.writeFs();
|
|
130
|
+
expect(result).toBe(mockFs1);
|
|
131
|
+
});
|
|
132
|
+
it('should throw error when no filesystems available', () => {
|
|
133
|
+
const emptyOverlayFs = new overlayfs_1.OverlayFs({ fss: [], firstWritable: false, dirsMerger: mockDirsMerger });
|
|
134
|
+
expect(() => emptyOverlayFs.writeFs()).toThrow(type_1.ErrNoFilesystems);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('stat', () => {
|
|
138
|
+
it('should stat file from first available filesystem', async () => {
|
|
139
|
+
const mockFileInfo = {
|
|
140
|
+
name: jest.fn().mockReturnValue('test.txt'),
|
|
141
|
+
isDir: jest.fn().mockReturnValue(false),
|
|
142
|
+
};
|
|
143
|
+
mockFs1.stat.mockResolvedValue(mockFileInfo);
|
|
144
|
+
const result = await overlayFs.stat('test.txt');
|
|
145
|
+
expect(mockFs1.stat).toHaveBeenCalledWith('test.txt');
|
|
146
|
+
expect(result).toBe(mockFileInfo);
|
|
147
|
+
});
|
|
148
|
+
it('should try next filesystem when first fails', async () => {
|
|
149
|
+
const mockFileInfo = {
|
|
150
|
+
name: jest.fn().mockReturnValue('test.txt'),
|
|
151
|
+
isDir: jest.fn().mockReturnValue(false),
|
|
152
|
+
};
|
|
153
|
+
mockFs1.stat.mockRejectedValue(new Error('ENOENT: no such file or directory'));
|
|
154
|
+
mockFs2.stat.mockResolvedValue(mockFileInfo);
|
|
155
|
+
const result = await overlayFs.stat('test.txt');
|
|
156
|
+
expect(mockFs1.stat).toHaveBeenCalledWith('test.txt');
|
|
157
|
+
expect(mockFs2.stat).toHaveBeenCalledWith('test.txt');
|
|
158
|
+
expect(result).toBe(mockFileInfo);
|
|
159
|
+
});
|
|
160
|
+
it('should throw ErrFileNotFound when file not found in any filesystem', async () => {
|
|
161
|
+
mockFs1.stat.mockRejectedValue(new Error('ENOENT: no such file or directory'));
|
|
162
|
+
mockFs2.stat.mockRejectedValue(new Error('ENOENT: no such file or directory'));
|
|
163
|
+
await expect(overlayFs.stat('nonexistent.txt')).rejects.toThrow(type_1.ErrFileNotFound);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('open', () => {
|
|
167
|
+
it('should open file from first available filesystem', async () => {
|
|
168
|
+
const mockFile = {};
|
|
169
|
+
const mockFileInfo = {
|
|
170
|
+
isDir: jest.fn().mockReturnValue(false),
|
|
171
|
+
};
|
|
172
|
+
mockFs1.stat.mockResolvedValue(mockFileInfo);
|
|
173
|
+
mockFs1.open.mockResolvedValue(mockFile);
|
|
174
|
+
const result = await overlayFs.open('test.txt');
|
|
175
|
+
expect(mockFs1.stat).toHaveBeenCalledWith('test.txt');
|
|
176
|
+
expect(mockFs1.open).toHaveBeenCalledWith('test.txt');
|
|
177
|
+
expect(result).toBe(mockFile);
|
|
178
|
+
});
|
|
179
|
+
it('should open directory using OverlayDir when file is directory', async () => {
|
|
180
|
+
const mockFileInfo = {
|
|
181
|
+
isDir: jest.fn().mockReturnValue(true),
|
|
182
|
+
};
|
|
183
|
+
const mockOverlayDir = {};
|
|
184
|
+
// Mock both filesystems to have the directory so openDir is called
|
|
185
|
+
mockFs1.stat.mockResolvedValue(mockFileInfo);
|
|
186
|
+
mockFs2.stat.mockResolvedValue(mockFileInfo);
|
|
187
|
+
const { openDir } = require('../entity/overlaydir');
|
|
188
|
+
openDir.mockResolvedValue(mockOverlayDir);
|
|
189
|
+
const result = await overlayFs.open('testdir');
|
|
190
|
+
expect(mockFs1.stat).toHaveBeenCalledWith('testdir');
|
|
191
|
+
expect(openDir).toHaveBeenCalledWith('testdir', mockDirsMerger, expect.any(Function), expect.any(Array));
|
|
192
|
+
expect(result).toBe(mockOverlayDir);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe('write operations', () => {
|
|
196
|
+
it('should delegate create to first filesystem', async () => {
|
|
197
|
+
const mockFile = {};
|
|
198
|
+
mockFs1.create.mockResolvedValue(mockFile);
|
|
199
|
+
const result = await overlayFs.create('newfile.txt');
|
|
200
|
+
expect(mockFs1.create).toHaveBeenCalledWith('newfile.txt');
|
|
201
|
+
expect(result).toBe(mockFile);
|
|
202
|
+
});
|
|
203
|
+
it('should delegate mkdir to first filesystem', async () => {
|
|
204
|
+
await overlayFs.mkdir('newdir', 0o755);
|
|
205
|
+
expect(mockFs1.mkdir).toHaveBeenCalledWith('newdir', 0o755);
|
|
206
|
+
});
|
|
207
|
+
it('should delegate mkdirAll to first filesystem', async () => {
|
|
208
|
+
await overlayFs.mkdirAll('deep/nested/dir', 0o755);
|
|
209
|
+
expect(mockFs1.mkdirAll).toHaveBeenCalledWith('deep/nested/dir', 0o755);
|
|
210
|
+
});
|
|
211
|
+
it('should delegate openFile to first filesystem', async () => {
|
|
212
|
+
const mockFile = {};
|
|
213
|
+
mockFs1.openFile.mockResolvedValue(mockFile);
|
|
214
|
+
const result = await overlayFs.openFile('test.txt', 1, 0o644);
|
|
215
|
+
expect(mockFs1.openFile).toHaveBeenCalledWith('test.txt', 1, 0o644);
|
|
216
|
+
expect(result).toBe(mockFile);
|
|
217
|
+
});
|
|
218
|
+
it('should delegate remove to first filesystem', async () => {
|
|
219
|
+
await overlayFs.remove('test.txt');
|
|
220
|
+
expect(mockFs1.remove).toHaveBeenCalledWith('test.txt');
|
|
221
|
+
});
|
|
222
|
+
it('should delegate removeAll to first filesystem', async () => {
|
|
223
|
+
await overlayFs.removeAll('testdir');
|
|
224
|
+
expect(mockFs1.removeAll).toHaveBeenCalledWith('testdir');
|
|
225
|
+
});
|
|
226
|
+
it('should delegate rename to first filesystem', async () => {
|
|
227
|
+
await overlayFs.rename('old.txt', 'new.txt');
|
|
228
|
+
expect(mockFs1.rename).toHaveBeenCalledWith('old.txt', 'new.txt');
|
|
229
|
+
});
|
|
230
|
+
it('should delegate chmod to first filesystem', async () => {
|
|
231
|
+
await overlayFs.chmod('test.txt', 0o644);
|
|
232
|
+
expect(mockFs1.chmod).toHaveBeenCalledWith('test.txt', 0o644);
|
|
233
|
+
});
|
|
234
|
+
it('should delegate chown to first filesystem', async () => {
|
|
235
|
+
await overlayFs.chown('test.txt', 1000, 1000);
|
|
236
|
+
expect(mockFs1.chown).toHaveBeenCalledWith('test.txt', 1000, 1000);
|
|
237
|
+
});
|
|
238
|
+
it('should delegate chtimes to first filesystem', async () => {
|
|
239
|
+
const atime = new Date('2023-01-01');
|
|
240
|
+
const mtime = new Date('2023-01-02');
|
|
241
|
+
await overlayFs.chtimes('test.txt', atime, mtime);
|
|
242
|
+
expect(mockFs1.chtimes).toHaveBeenCalledWith('test.txt', atime, mtime);
|
|
243
|
+
});
|
|
244
|
+
it('should throw error when no filesystems for write operations', async () => {
|
|
245
|
+
const emptyOverlayFs = new overlayfs_1.OverlayFs({ fss: [], firstWritable: false, dirsMerger: mockDirsMerger });
|
|
246
|
+
await expect(emptyOverlayFs.create('test.txt')).rejects.toThrow('filesystem is read-only');
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
describe('isNotExistError', () => {
|
|
250
|
+
it('should identify ENOENT errors', () => {
|
|
251
|
+
const enoentError = new Error('ENOENT: no such file or directory');
|
|
252
|
+
const result = overlayFs.isNotExistError(enoentError);
|
|
253
|
+
expect(result).toBe(true);
|
|
254
|
+
});
|
|
255
|
+
it('should identify no such file errors', () => {
|
|
256
|
+
const noSuchFileError = new Error('no such file or directory');
|
|
257
|
+
const result = overlayFs.isNotExistError(noSuchFileError);
|
|
258
|
+
expect(result).toBe(true);
|
|
259
|
+
});
|
|
260
|
+
it('should identify ErrFileNotFound error', () => {
|
|
261
|
+
const result = overlayFs.isNotExistError(type_1.ErrFileNotFound);
|
|
262
|
+
expect(result).toBe(true);
|
|
263
|
+
});
|
|
264
|
+
it('should not identify other errors as not exist', () => {
|
|
265
|
+
const otherError = new Error('Permission denied');
|
|
266
|
+
const result = overlayFs.isNotExistError(otherError);
|
|
267
|
+
expect(result).toBe(false);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
describe('factory functions', () => {
|
|
271
|
+
it('should create OverlayFs with newOverlayFs', () => {
|
|
272
|
+
const result = (0, overlayfs_1.newOverlayFs)(mockOptions);
|
|
273
|
+
expect(result).toBeInstanceOf(overlayfs_1.OverlayFs);
|
|
274
|
+
});
|
|
275
|
+
it('should create OverlayFs with createOverlayFs', () => {
|
|
276
|
+
const result = (0, overlayfs_1.createOverlayFs)(mockOptions);
|
|
277
|
+
expect(result).toBeInstanceOf(overlayfs_1.OverlayFs);
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
//# sourceMappingURL=entity-overlayfs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-overlayfs.test.js","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/entity-overlayfs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-service.test.d.ts","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/entity-service.test.ts"],"names":[],"mappings":""}
|