Skip to content

Commit 290ae69

Browse files
update export test cases
1 parent 654a562 commit 290ae69

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

packages/contentstack-export/test/helpers/init.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
const path = require('path')
2+
const { createRequire } = require('node:module')
3+
const requireNode = createRequire(__filename)
24
process.env.TS_NODE_PROJECT = path.resolve('test/tsconfig.json')
35
process.env.NODE_ENV = 'development'
46

57
global.oclif = global.oclif || {}
68
global.oclif.columns = 80
79

10+
// Same node:fs singleton @contentstack/cli-utilities uses for readContentTypeSchemas
11+
globalThis.__CONTENTSTACK_TEST_FS__ = requireNode('node:fs')
12+
813
// Minimal test helper for unit tests
914
module.exports = {
1015
// Basic test utilities can be added here

packages/contentstack-export/test/unit/export/modules/entries.test.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
import { expect } from 'chai';
22
import sinon from 'sinon';
3+
import type { PathLike } from 'node:fs';
34
import * as path from 'path';
45
import { FsUtility, handleAndLogError, messageHandler } from '@contentstack/cli-utilities';
6+
7+
declare global {
8+
var __CONTENTSTACK_TEST_FS__: typeof import('node:fs');
9+
}
10+
const fs = globalThis.__CONTENTSTACK_TEST_FS__;
511
import * as utilities from '@contentstack/cli-utilities';
612
import EntriesExport from '../../../../src/export/modules/entries';
713
import ExportConfig from '../../../../src/types/export-config';
@@ -146,6 +152,35 @@ describe('EntriesExport', () => {
146152
sandbox.stub(FsUtility.prototype, 'readdir').returns([]);
147153
sandbox.stub(FsUtility.prototype, 'readFile').returns(undefined);
148154

155+
// readContentTypeSchemas() uses node:fs — mirror FsUtility stubs; only intercept content_types paths
156+
const originalExistsSync = fs.existsSync.bind(fs);
157+
const originalReaddirSync = fs.readdirSync.bind(fs);
158+
const originalReadFileSync = fs.readFileSync.bind(fs);
159+
sandbox.stub(fs, 'existsSync').callsFake((p: PathLike) => {
160+
const s = String(p);
161+
if (s.includes('content_types')) {
162+
return true;
163+
}
164+
return originalExistsSync(p);
165+
});
166+
sandbox.stub(fs, 'readdirSync').callsFake((dirPath: PathLike) => {
167+
const s = String(dirPath);
168+
if (s.includes('content_types')) {
169+
return (FsUtility.prototype.readdir as sinon.SinonStub)(s);
170+
}
171+
return originalReaddirSync(dirPath);
172+
});
173+
sandbox.stub(fs, 'readFileSync').callsFake((filePath: string | Buffer | URL, encoding?: Parameters<typeof fs.readFileSync>[1]) => {
174+
const p = String(filePath);
175+
if (p.includes('content_types')) {
176+
const r = (FsUtility.prototype.readFile as sinon.SinonStub)(p);
177+
if (r !== undefined) {
178+
return typeof r === 'string' ? r : JSON.stringify(r);
179+
}
180+
}
181+
return originalReadFileSync(filePath, encoding as any);
182+
});
183+
149184
entriesExport = new EntriesExport({
150185
exportConfig: mockExportConfig,
151186
stackAPIClient: mockStackAPIClient,
@@ -275,7 +310,9 @@ describe('EntriesExport', () => {
275310

276311
const locales = [{ code: 'en-us' }];
277312
const contentTypes = [{ uid: 'ct-1', title: 'Content Type 1' }];
278-
mockFsUtil.readFile.onFirstCall().returns(locales).onSecondCall().returns(contentTypes);
313+
mockFsUtil.readFile.returns(locales);
314+
(FsUtility.prototype.readdir as sinon.SinonStub).returns(['ct-1.json']);
315+
(FsUtility.prototype.readFile as sinon.SinonStub).returns(contentTypes[0]);
279316

280317
// Mock successful entry fetch - use callsFake to preserve call tracking
281318
const contentTypeStub = sandbox.stub().returns({

0 commit comments

Comments
 (0)