import 'mocha' ; import { expect } from 'chai' ; import { OperatingSystem } from '@/domain/OperatingSystem' ; import { ICategoryCollection } from '@/domain/ICategoryCollection' ; import { buildContext } from '@/application/Context/ApplicationContextFactory' ; import { IApplicationFactory } from '@/application/IApplicationFactory' ; import { IApplication } from '@/domain/IApplication' ; import { EnvironmentStub } from '@tests/unit/stubs/EnvironmentStub' ; import { ApplicationStub } from '@tests/unit/stubs/ApplicationStub' ; import { CategoryCollectionStub } from '@tests/unit/stubs/CategoryCollectionStub' ; describe ( 'ApplicationContextFactory' , ( ) => { describe ( 'buildContext' , ( ) => { describe ( 'factory' , ( ) => { it ( 'sets application from factory' , async ( ) => { const expected = new ApplicationStub ( ) . withCollection ( new CategoryCollectionStub ( ) . withOs ( OperatingSystem . macOS ) ) ; const factoryMock = mockFactoryWithApp ( expected ) ; const context = await buildContext ( factoryMock ) ; expect ( expected ) . to . equal ( context . app ) ; } ) ; } ) ; describe ( 'environment' , ( ) => { describe ( 'sets initial OS as expected' , ( ) => { it ( 'returns currentOs if it is supported' , async ( ) => { const expected = OperatingSystem . Windows ; const environment = new EnvironmentStub ( ) . withOs ( expected ) ; const collection = new CategoryCollectionStub ( ) . withOs ( expected ) ; const factoryMock = mockFactoryWithCollection ( collection ) ; const context = await buildContext ( factoryMock , environment ) ; const actual = context . state . os ; expect ( expected ) . to . equal ( actual ) ; } ) ; it ( 'fallbacks to other os if OS in environment is not supported' , async ( ) => { const expected = OperatingSystem . Windows ; const currentOs = OperatingSystem . macOS ; const environment = new EnvironmentStub ( ) . withOs ( currentOs ) ; const collection = new CategoryCollectionStub ( ) . withOs ( expected ) ; const factoryMock = mockFactoryWithCollection ( collection ) ; const context = await buildContext ( factoryMock , environment ) ; const actual = context . state . os ; expect ( expected ) . to . equal ( actual ) ; } ) ; it ( 'fallbacks to most supported os if current os is not supported' , async ( ) => { const expectedOs = OperatingSystem . Android ; const allCollections = [ new CategoryCollectionStub ( ) . withOs ( OperatingSystem . Linux ) . withTotalScripts ( 3 ) , new CategoryCollectionStub ( ) . withOs ( expectedOs ) . withTotalScripts ( 5 ) , new CategoryCollectionStub ( ) . withOs ( OperatingSystem . Windows ) . withTotalScripts ( 4 ) , ] ; const environment = new EnvironmentStub ( ) . withOs ( OperatingSystem . macOS ) ; const app = new ApplicationStub ( ) . withCollections ( ... allCollections ) ; const factoryMock = mockFactoryWithApp ( app ) ; const context = await buildContext ( factoryMock , environment ) ; const actual = context . state . os ; expect ( expectedOs ) . to . equal ( actual , `Expected: ${ OperatingSystem [ expectedOs ] }, actual: ${ OperatingSystem [ actual ] }` ) ; } ) ; } ) ; } ) ; } ) ; } ) ; function mockFactoryWithCollection ( result ) { return mockFactoryWithApp ( new ApplicationStub ( ) . withCollection ( result ) ) ; } function mockFactoryWithApp ( app ) { return { getApp : ( ) => Promise . resolve ( app ) , } ; }