libs/code-demos/src/lib/shared/deps-order.service.spec.ts
import { inject, TestBed } from '@angular/core/testing';
import { DepsService } from './deps-order.service';
const deps = {
componentA: {
path: 'component.ts',
code: 'import {a} from "./depA"',
template: ''
},
componentABC: {
path: 'component.ts',
code:
'import {a} from "./depA";import {a} from "./depB";import {a} from "./depC";',
template: ''
},
depA: {
path: 'depA.ts',
code: 'import {Component} from "@angular/core"',
template: ''
},
depB: {
path: 'depB.ts',
code: 'import {Component} from "@angular/core"',
template: ''
},
depC: {
path: 'depC.ts',
code: 'import {Component} from "@angular/core"',
template: ''
},
depAB: {
path: 'depAB.ts',
code: 'import {a} from "./depA";import {a} from "./depB";',
template: ''
},
depAB_C: {
path: 'depAB_C.ts',
code: 'import {a} from "./depAB";import {a} from "./depC";',
template: ''
},
depX_A: {
path: 'x/a.ts',
code: 'import {a} from "../depA";',
template: ''
}
};
describe('DepsService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [DepsService]
});
});
describe('isLocalDep', () => {
it('should return true for local deps', () => {
expect(DepsService.isLocalDep('./file')).toBeTruthy();
});
it('should return false for non local deps', () => {
expect(DepsService.isLocalDep('file')).toBeFalsy();
// special case
expect(DepsService.isLocalDep('./code')).toBeFalsy();
expect(DepsService.isLocalDep('@angular/core')).toBeFalsy();
});
});
describe('Normalizing file name', () => {
it('should normalize simple path', () => {
expect(DepsService.normalizePathRelativeToFile('file.ts', './a')).toEqual(
'a'
);
});
it('should normalize simple path in a folder', () => {
expect(
DepsService.normalizePathRelativeToFile('folder/file.ts', './a')
).toEqual('folder/a');
});
it('should normalize simple path in a folder with one level up', () => {
expect(
DepsService.normalizePathRelativeToFile('folder/file.ts', '../a')
).toEqual('a');
});
it('should normalize simple path in a folder with multiple levels up', () => {
expect(
DepsService.normalizePathRelativeToFile(
'folder/a/b/c/file.ts',
'../../../a'
)
).toEqual('folder/a');
});
});
it('should order two simple files', inject(
[DepsService],
(service: DepsService) => {
expect(service.order([deps.componentA, deps.depA])).toEqual([
deps.depA,
deps.componentA
]);
}
));
it('should order files with multiple but 1-level deps ', inject(
[DepsService],
(service: DepsService) => {
expect(
service.order([deps.depA, deps.componentABC, deps.depB, deps.depC])
).toEqual([deps.depA, deps.depB, deps.depC, deps.componentABC]);
}
));
it('should order files with multiple but 2-level deps ', inject(
[DepsService],
(service: DepsService) => {
expect(
service.order([
deps.depB,
deps.depC,
deps.depAB_C,
deps.depAB,
deps.depA
])
).toEqual([deps.depB, deps.depC, deps.depA, deps.depAB, deps.depAB_C]);
}
));
it('should order files if they are in a folder', inject(
[DepsService],
(service: DepsService) => {
expect(service.order([deps.depX_A, deps.depA])).toEqual([
deps.depA,
deps.depX_A
]);
}
));
});