nycJSorg/angular-presentation

View on GitHub
libs/code-demos/src/lib/shared/deps-order.service.spec.ts

Summary

Maintainability
A
3 hrs
Test Coverage
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
      ]);
    }
  ));
});