diff --git a/src/tests/util.test.ts b/src/tests/util.test.ts index fc40c06..2414906 100644 --- a/src/tests/util.test.ts +++ b/src/tests/util.test.ts @@ -23,15 +23,29 @@ const nodeVersion = parseInt(process.versions.node.split('.')[0]!, 10); const itNode18 = nodeVersion > 18 ? it.skip : it; describe('utils/zip', () => { + const mtime = new Date(2024, 0, 1, 0, 0, 0, 0); + beforeEach(() => { mockFs({ - '/src': { - 'test.txt': 'lorem ipsum', - modules: { - 'module.txt': 'lorem ipsum 2', + '/src': mockFs.directory({ + mtime, + items: { + 'test.txt': mockFs.file({ + mtime, + content: 'lorem ipsum', + }), + modules: mockFs.directory({ + mtime, + items: { + 'module.txt': mockFs.file({ + mtime, + content: 'lorem ipsum 2', + }), + }, + }), }, - }, - '/dist': {}, + }), + '/dist': mockFs.directory({ mtime }), }); }); @@ -70,7 +84,17 @@ describe('utils/zip', () => { }, ]; - await zip(zipPath, filesPathList, useNativeZip); + // Check the mtimes are set correctly + const sourceStat = fs.statSync(source); + expect(sourceStat.mtime).toEqual(mtime); + + const testStat = fs.statSync('/src/test.txt'); + expect(testStat.mtime).toEqual(mtime); + + const moduleStat = fs.statSync('/src/modules/module.txt'); + expect(moduleStat.mtime).toEqual(mtime); + + await expect(zip(zipPath, filesPathList, useNativeZip)).resolves.toBeUndefined(); expect(fs.existsSync(zipPath)).toEqual(true); @@ -84,7 +108,7 @@ describe('utils/zip', () => { if (!useNativeZip) { const data = fs.readFileSync(zipPath); const fileHash = crypto.createHash('sha256').update(data).digest('base64'); - expect(fileHash).toEqual('iCZdyHJ7ON2LLwBIE6gQmRvBTzXBogSqJTMvHSenzGk='); + expect(fileHash).toEqual('PHu2gv7OIMv+lAOCXYPNd30X8/7EKYTuV7KYJjw3Qd4='); } } ); diff --git a/src/utils.ts b/src/utils.ts index 6b3738b..cebf3bb 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -112,7 +112,7 @@ function nodeZip(zipPath: string, filesPathList: IFiles): Promise { zipArchive.append(fs.readFileSync(file.rootPath), { name: file.localPath, mode: stats.mode, - date: new Date(0), // necessary to get the same hash when zipping the same content + date: new Date(stats.mtime), }); });