This commit applies `strictNullChecks` to the entire codebase to improve maintainability and type safety. Key changes include: - Remove some explicit null-checks where unnecessary. - Add necessary null-checks. - Refactor static factory functions for a more functional approach. - Improve some test names and contexts for better debugging. - Add unit tests for any additional logic introduced. - Refactor `createPositionFromRegexFullMatch` to its own function as the logic is reused. - Prefer `find` prefix on functions that may return `undefined` and `get` prefix for those that always return a value.
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { OperatingSystem } from '@/domain/OperatingSystem';
|
|
import { BrowserOsDetector } from '@/infrastructure/RuntimeEnvironment/BrowserOs/BrowserOsDetector';
|
|
import { itEachAbsentStringValue } from '@tests/unit/shared/TestCases/AbsentTests';
|
|
import { BrowserOsTestCases } from './BrowserOsTestCases';
|
|
|
|
describe('BrowserOsDetector', () => {
|
|
describe('returns undefined when user agent is absent', () => {
|
|
itEachAbsentStringValue((absentValue) => {
|
|
// arrange
|
|
const expected = undefined;
|
|
const userAgent = absentValue;
|
|
const sut = new BrowserOsDetector();
|
|
// act
|
|
const actual = sut.detect(userAgent);
|
|
// assert
|
|
expect(actual).to.equal(expected);
|
|
}, { excludeNull: true, excludeUndefined: true });
|
|
});
|
|
it('detects as expected', () => {
|
|
BrowserOsTestCases.forEach((testCase) => {
|
|
// arrange
|
|
const sut = new BrowserOsDetector();
|
|
// act
|
|
const actual = sut.detect(testCase.userAgent);
|
|
// assert
|
|
expect(actual).to.equal(testCase.expectedOs, printMessage());
|
|
function printMessage(): string {
|
|
return `Expected: "${OperatingSystem[testCase.expectedOs]}"\n`
|
|
+ `Actual: "${actual === undefined ? 'undefined' : OperatingSystem[actual]}"\n`
|
|
+ `UserAgent: "${testCase.userAgent}"`;
|
|
}
|
|
});
|
|
});
|
|
});
|