Fix OS desktop detection tests and edge cases

- Fix test cases not running for desktop OS detection.
- Fixes application throwing error when user agent is undefined.
- Refactor by making os property optional in Environment to explicit
describe its potential undefined state.
This commit is contained in:
undergroundwires
2021-12-11 11:55:43 +01:00
parent 5f091bb6ab
commit a8358b8e7a
2 changed files with 34 additions and 15 deletions

View File

@@ -24,9 +24,12 @@ export class Environment implements IEnvironment {
throw new Error('variables is null or empty'); throw new Error('variables is null or empty');
} }
this.isDesktop = isDesktop(variables); this.isDesktop = isDesktop(variables);
this.os = this.isDesktop ? if (this.isDesktop) {
getDesktopOsType(getProcessPlatform(variables)) this.os = getDesktopOsType(getProcessPlatform(variables));
: browserOsDetector.detect(getUserAgent(variables)); } else {
const userAgent = getUserAgent(variables);
this.os = !userAgent ? undefined : browserOsDetector.detect(userAgent);
}
} }
} }

View File

@@ -59,7 +59,21 @@ describe('Environment', () => {
}); });
}); });
describe('os', () => { describe('os', () => {
describe('browser os from BrowserOsDetector', () => { it('returns undefined without user agent', () => {
// arrange
const expected = undefined;
const mock: IBrowserOsDetector = {
detect: (agent) => {
throw new Error('should not reach here');
},
};
const sut = new SystemUnderTest({ }, mock);
// act
const actual = sut.os;
// assert
expect(actual).to.equal(expected);
});
it('browser os from BrowserOsDetector', () => {
// arrange // arrange
const givenUserAgent = 'testUserAgent'; const givenUserAgent = 'testUserAgent';
const expected = OperatingSystem.macOS; const expected = OperatingSystem.macOS;
@@ -87,17 +101,19 @@ describe('Environment', () => {
userAgent: 'Electron', userAgent: 'Electron',
}; };
for (const testCase of DesktopOsTestCases) { for (const testCase of DesktopOsTestCases) {
// arrange it(testCase.processPlatform, () => {
const process = { // arrange
platform: testCase.processPlatform, const process = {
}; platform: testCase.processPlatform,
// act };
const sut = new SystemUnderTest({ navigator, process }); // act
// assert const sut = new SystemUnderTest({ navigator, process });
expect(sut.os).to.equal(testCase.expectedOs, // assert
`Expected: "${OperatingSystem[testCase.expectedOs]}"\n` + expect(sut.os).to.equal(testCase.expectedOs,
`Actual: "${OperatingSystem[sut.os]}"\n` + `Expected: "${OperatingSystem[testCase.expectedOs]}"\n` +
`Platform: "${testCase.processPlatform}"`); `Actual: "${OperatingSystem[sut.os]}"\n` +
`Platform: "${testCase.processPlatform}"`);
});
} }
}); });
}); });