Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
"semver": "^7.2.1",
"source-map-support": "^0.5.13",
"username": "^5.1.0",
"vite": "^5.0.12",
"vite": "^7.2.4",
"webpack": "^5.69.1",
"webpack-dev-server": "^4.0.0",
"webpack-merge": "^5.7.3",
Expand Down Expand Up @@ -119,7 +119,7 @@
"ts-node": "^10.0.0",
"typedoc": "0.25.13",
"typescript": "~5.4.5",
"vitest": "^3.1.3",
"vitest": "^4.0.14",
"xvfb-maybe": "^0.2.1",
"yaml-hook": "^1.0.0"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/api/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
},
"devDependencies": {
"@malept/cross-spawn-promise": "^2.0.0",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"dependencies": {
"@electron-forge/core": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion packages/api/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"@types/rechoir": "^0.6.1",
"electron-forge-template-fixture-two": "link:./spec/fixture/electron-forge-template-fixture",
"electron-installer-common": "^0.10.2",
"vitest": "^3.1.3",
"vitest": "^4.0.14",
"yaml-hook": "^1.0.0"
},
"dependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/appx/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"main": "dist/MakerAppX.js",
"typings": "dist/MakerAppX.d.ts",
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/base/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"main": "dist/Maker.js",
"typings": "dist/Maker.d.ts",
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/deb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"typings": "dist/MakerDeb.d.ts",
"devDependencies": {
"@electron-forge/test-utils": "workspace:*",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/dmg/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"typings": "dist/MakerDMG.d.ts",
"devDependencies": {
"@electron-forge/test-utils": "workspace:*",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/flatpak/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"typings": "dist/MakerFlatpak.d.ts",
"devDependencies": {
"@electron-forge/test-utils": "workspace:*",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/msix/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"main": "dist/MakerMSIX.js",
"typings": "dist/MakerMSIX.d.ts",
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/pkg/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"typings": "dist/MakerPKG.d.ts",
"devDependencies": {
"@electron-forge/test-utils": "workspace:*",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/rpm/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"typings": "dist/MakerRpm.d.ts",
"devDependencies": {
"@electron-forge/test-utils": "workspace:*",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/snap/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"typings": "dist/MakerSnap.d.ts",
"devDependencies": {
"@electron-forge/test-utils": "workspace:*",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/wix/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"main": "dist/MakerWix.js",
"typings": "dist/MakerWix.d.ts",
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/maker/zip/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"typings": "dist/MakerZIP.d.ts",
"devDependencies": {
"@electron-forge/test-utils": "workspace:*",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin/local-electron/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"fs-extra": "^10.0.0"
},
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"publishConfig": {
"access": "public"
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin/vite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"@malept/cross-spawn-promise": "^2.0.0",
"@types/node": "^18.0.3",
"vite": "^5.0.12",
"vitest": "^3.1.3",
"vitest": "^4.0.14",
"which": "^2.0.2",
"xvfb-maybe": "^0.2.1"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin/webpack/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"@electron/packager": "^18.3.5",
"@malept/cross-spawn-promise": "^2.0.0",
"@types/node": "^18.0.3",
"vitest": "^3.1.3",
"vitest": "^4.0.14",
"which": "^2.0.2",
"xvfb-maybe": "^0.2.1"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/publisher/base-static/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"@electron-forge/shared-types": "workspace:*"
},
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/publisher/base/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"@electron-forge/shared-types": "workspace:*"
},
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/publisher/electron-release-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"typings": "dist/PublisherERS.d.ts",
"devDependencies": {
"msw": "^2.7.0",
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/publisher/github/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"main": "dist/PublisherGithub.js",
"typings": "dist/PublisherGithub.d.ts",
"devDependencies": {
"vitest": "^3.1.3"
"vitest": "^4.0.14"
},
"engines": {
"node": ">= 16.4.0"
Expand Down
3 changes: 3 additions & 0 deletions packages/publisher/s3/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
"@electron-forge/shared-types": "workspace:*",
"debug": "^4.3.1"
},
"devDependencies": {
"vitest": "^4.0.14"
},
"publishConfig": {
"access": "public"
},
Expand Down
80 changes: 46 additions & 34 deletions packages/publisher/s3/spec/PublisherS3.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,65 +8,81 @@ import {
ForgeMakeResult,
ResolvedForgeConfig,
} from '@electron-forge/shared-types';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import {
afterEach,
beforeEach,
describe,
expect,
it,
type Mock,
vi,
} from 'vitest';

import { PublisherS3, PublisherS3Config } from '../src/PublisherS3';

// Mock AWS SDK modules
// Get the actual fs module for test fixtures (before mocking)
const actualFs = await vi.importActual<typeof import('node:fs')>('node:fs');

vi.mock('@aws-sdk/client-s3');
vi.mock('@aws-sdk/lib-storage');
vi.mock('node:fs');

describe('PublisherS3', () => {
let publisher: PublisherS3;
let mockS3Client: vi.Mocked<S3Client>;
let mockUpload: vi.Mocked<Upload>;
let mockS3Client: S3Client;
let mockUploadOn: Mock;
let mockUploadDone: Mock;
let tmpDir: string;

beforeEach(async () => {
// Create temporary directory for test artifacts
const tmp = os.tmpdir();
const tmpdir = path.join(tmp, 'electron-forge-test-');
tmpDir = await fs.promises.mkdtemp(tmpdir);
tmpDir = await actualFs.promises.mkdtemp(tmpdir);

// Create test artifact files
await fs.promises.writeFile(
await actualFs.promises.writeFile(
path.join(tmpDir, 'test-app-1.0.0.dmg'),
'fake-dmg-content',
);
await fs.promises.writeFile(
await actualFs.promises.writeFile(
path.join(tmpDir, 'test-app-1.0.0.exe'),
'fake-exe-content',
);
await fs.promises.writeFile(
await actualFs.promises.writeFile(
path.join(tmpDir, 'RELEASES'),
'fake-releases-content',
);
await fs.promises.writeFile(
await actualFs.promises.writeFile(
path.join(tmpDir, 'RELEASES.json'),
'fake-releases-json-content',
);

// Mock S3Client constructor
mockS3Client = {
send: vi.fn(),
} as any;
vi.mocked(S3Client).mockImplementation(() => mockS3Client);

// Mock Upload class
mockUpload = {
on: vi.fn().mockReturnThis(),
done: vi.fn().mockResolvedValue(undefined),
} as any;
vi.mocked(Upload).mockImplementation(() => mockUpload);
vi.mocked(S3Client).mockImplementation(function (this: S3Client) {
return mockS3Client;
});

mockUploadDone = vi.fn().mockImplementation(() => Promise.resolve());
mockUploadOn = vi.fn().mockImplementation(function (this: unknown) {
return this;
});

vi.mocked(Upload).mockImplementation(function (this: Upload) {
const instance = {
on: mockUploadOn,
done: mockUploadDone,
};
mockUploadOn.mockReturnValue(instance);
return instance;
});

// Mock fs.createReadStream
vi.mocked(fs.createReadStream).mockReturnValue('fake-stream' as any);
});

afterEach(async () => {
// Clean up temporary directory
await fs.promises.rm(tmpDir, { recursive: true, force: true });
await actualFs.promises.rm(tmpDir, { recursive: true, force: true });
vi.clearAllMocks();
});

Expand Down Expand Up @@ -167,7 +183,6 @@ describe('PublisherS3', () => {
setStatusLine: mockSetStatusLine,
});

// Verify S3Client was created with correct options
expect(S3Client).toHaveBeenCalledWith({
credentials: undefined,
region: 'us-east-1',
Expand All @@ -177,7 +192,7 @@ describe('PublisherS3', () => {

// Verify Upload was called for each artifact
expect(Upload).toHaveBeenCalledTimes(2);
expect(mockUpload.done).toHaveBeenCalledTimes(2);
expect(mockUploadDone).toHaveBeenCalledTimes(2);

// Verify status line updates
expect(mockSetStatusLine).toHaveBeenCalledWith(
Expand Down Expand Up @@ -208,7 +223,6 @@ describe('PublisherS3', () => {
setStatusLine: mockSetStatusLine,
});

// Verify S3Client was created with credentials
expect(S3Client).toHaveBeenCalledWith({
credentials: {
accessKeyId: 'test-key',
Expand All @@ -220,7 +234,6 @@ describe('PublisherS3', () => {
forcePathStyle: false,
});

// Verify Upload parameters
expect(Upload).toHaveBeenCalledWith({
client: mockS3Client,
leavePartsOnError: true,
Expand Down Expand Up @@ -283,7 +296,6 @@ describe('PublisherS3', () => {
Body: 'fake-stream',
Bucket: 'test-bucket',
Key: expect.any(String),
// ACL should not be present
},
});
});
Expand Down Expand Up @@ -397,9 +409,12 @@ describe('PublisherS3', () => {
setStatusLine: mockSetStatusLine,
});

// Verify Upload was called twice (once for each RELEASES file)
expect(Upload).toHaveBeenCalledTimes(2);
expect(mockUpload.done).toHaveBeenCalledTimes(2);
expect(Upload).toHaveBeenCalledTimes(
makeResultsWithBothReleases[0].artifacts.length,
);
expect(mockUploadDone).toHaveBeenCalledTimes(
makeResultsWithBothReleases[0].artifacts.length,
);

// Verify both uploads include Cache-Control header
const uploadCalls = vi.mocked(Upload).mock.calls;
Expand All @@ -421,7 +436,6 @@ describe('PublisherS3', () => {
setStatusLine: mockSetStatusLine,
});

// Verify Upload parameters don't include Cache-Control metadata for non-RELEASES files
expect(Upload).toHaveBeenCalledWith({
client: mockS3Client,
leavePartsOnError: true,
Expand All @@ -448,8 +462,7 @@ describe('PublisherS3', () => {
setStatusLine: mockSetStatusLine,
});

// Verify progress event handler was set up
expect(mockUpload.on).toHaveBeenCalledWith(
expect(mockUploadOn).toHaveBeenCalledWith(
'httpUploadProgress',
expect.any(Function),
);
Expand All @@ -470,7 +483,6 @@ describe('PublisherS3', () => {
setStatusLine: mockSetStatusLine,
});

// Verify S3Client was created with custom endpoint and forcePathStyle
expect(S3Client).toHaveBeenCalledWith({
credentials: undefined,
region: undefined,
Expand Down
Loading
Loading