node-sass-magic-importer
Version: 
Custom node-sass importer for selector specific imports, node importing, module importing, globbing support and importing files only once
89 lines (69 loc) • 2.37 kB
text/typescript
import * as glob from 'glob';
import * as path from 'path';
import { resolveUrlFactory } from './resolve-url';
import { sassGlobPatternFactory } from './sass-glob-pattern';
import { IGlob } from '../interfaces/IGlob';
const sassGlobPattern = sassGlobPatternFactory(path);
let dependencies: any;
describe(`resolveUrl()`, () => {
  beforeEach(() => {
    dependencies = {
      sassGlobPattern,
    };
  });
  test(`It should be a function.`, () => {
    const resolveUrl = resolveUrlFactory(
      glob,
      path,
      dependencies.sassGlobPattern,
    );
    expect(typeof resolveUrl).toBe(`function`);
  });
  test(`It should call glob.sync() with resolved include path.`, () => {
    const globMock = { sync: jest.fn().mockReturnValue([]) } as any;
    const sassGlobPatternMock = jest.fn().mockReturnValue(`some/string`);
    const resolveUrl = resolveUrlFactory(
      globMock,
      path,
      sassGlobPatternMock,
    );
    resolveUrl(`test/url`, [`test/include/path`]);
    expect(sassGlobPatternMock).toBeCalledWith(`url`);
    expect(globMock.sync).toBeCalled();
  });
  test(`It should return the given URL if no absolute URL can be resolved.`, () => {
    const url = `test/url`;
    const sassGlobPatternMock = jest.fn().mockReturnValue(`some/string`);
    const resolveUrl = resolveUrlFactory(
      glob,
      path,
      sassGlobPatternMock,
    );
    const resolvedUrl = resolveUrl(url, [`test/include/path`]);
    expect(resolvedUrl).toBe(url);
  });
  test(`It should return the absolute URL to a file.`, () => {
    const url = `files/combined.scss`;
    const includePath = `/`;
    const absoluteUrl = path.resolve(includePath, url);
    const globMock = { sync: jest.fn().mockReturnValue([absoluteUrl]) } as any;
    const sassGlobPatternMock = jest.fn().mockReturnValue(`combined.scss`);
    const resolveUrl = resolveUrlFactory(
      globMock,
      path,
      sassGlobPatternMock,
    );
    const resolvedUrl = resolveUrl(url, [includePath]);
    expect(resolvedUrl).toBe(absoluteUrl);
  });
  test(`It should return the given URL if no include path could be resolved.`, () => {
    const url = `files/combined.scss`;
    const resolveUrl = resolveUrlFactory(
      glob,
      path,
      dependencies.sassGlobPattern,
    );
    const resolvedUrl = resolveUrl(url);
    expect(resolvedUrl).toBe(url);
  });
});