Files
privacy.sexy/tests/unit/infrastructure/ScriptDiagnostics/ScriptEnvironmentDiagnosticsCollector.spec.ts
undergroundwires 2f31bc7b06 Fix file retention after updates on macOS #417
This fixes issue #417 where autoupdate installer files were not deleted
on macOS, leading to accumulation of old installers.

Key changes:

- Store update files in application-specific directory
- Clear update files directory on every app launch

Other supporting changes:

- Refactor file system operations to be more testable and reusable
- Improve separation of concerns in directory management
- Enhance dependency injection for auto-update logic
- Fix async completion to support `await` operations
- Add additional logging and revise some log messages during updates
2024-10-07 17:33:47 +02:00

66 lines
2.5 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import type { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
import { ScriptEnvironmentDiagnosticsCollector } from '@/infrastructure/ScriptDiagnostics/ScriptEnvironmentDiagnosticsCollector';
import { RuntimeEnvironmentStub } from '@tests/unit/shared/Stubs/RuntimeEnvironmentStub';
import { ApplicationDirectoryProviderStub } from '@tests/unit/shared/Stubs/ApplicationDirectoryProviderStub';
import { OperatingSystem } from '@/domain/OperatingSystem';
import type { ApplicationDirectoryProvider } from '@/infrastructure/FileSystem/Directory/ApplicationDirectoryProvider';
describe('ScriptEnvironmentDiagnosticsCollector', () => {
it('collects operating system path correctly', async () => {
// arrange
const expectedOperatingSystem = OperatingSystem.KaiOS;
const environment = new RuntimeEnvironmentStub()
.withOs(expectedOperatingSystem);
const collector = new CollectorBuilder()
.withEnvironment(environment)
.build();
// act
const diagnosticData = await collector.collectDiagnosticInformation();
// assert
const actualOperatingSystem = diagnosticData.currentOperatingSystem;
expect(actualOperatingSystem).to.equal(expectedOperatingSystem);
});
it('collects path correctly', async () => {
// arrange
const expectedScriptsPath = '/expected/scripts/path';
const directoryProvider = new ApplicationDirectoryProviderStub()
.withDirectoryPath('script-runs', expectedScriptsPath);
const collector = new CollectorBuilder()
.withScriptDirectoryProvider(directoryProvider)
.build();
// act
const diagnosticData = await collector.collectDiagnosticInformation();
// assert
const actualScriptsPath = diagnosticData.scriptsDirectoryAbsolutePath;
expect(actualScriptsPath).to.equal(expectedScriptsPath);
});
});
class CollectorBuilder {
private directoryProvider: ApplicationDirectoryProvider = new ApplicationDirectoryProviderStub();
private environment: RuntimeEnvironment = new RuntimeEnvironmentStub();
public withEnvironment(environment: RuntimeEnvironment): this {
this.environment = environment;
return this;
}
public withScriptDirectoryProvider(directoryProvider: ApplicationDirectoryProvider): this {
this.directoryProvider = directoryProvider;
return this;
}
public build() {
return new ScriptEnvironmentDiagnosticsCollector(
this.directoryProvider,
this.environment,
);
}
}