const babel = require("babel-core");
const unpkgRewrite = require("../unpkgRewrite");

const testCases = [
  {
    before: "import React from 'react';",
    after: "import React from 'https://unpkg.com/react@15.6.1?module';"
  },
  {
    before: "import router from '@angular/router';",
    after:
      "import router from 'https://unpkg.com/@angular/router@4.3.5?module';"
  },
  {
    before: "import map from 'lodash.map';",
    after: "import map from 'https://unpkg.com/lodash.map@4.6.0?module';"
  },
  {
    before: "import fs from 'pn/fs';",
    after: "import fs from 'https://unpkg.com/pn@1.0.0/fs?module';"
  },
  {
    before: "import cupcakes from './cupcakes';",
    after: "import cupcakes from './cupcakes?module';"
  },
  {
    before: "import shoelaces from '/shoelaces';",
    after: "import shoelaces from '/shoelaces?module';"
  },
  {
    before: "import something from '//something.com/whatevs';",
    after: "import something from '//something.com/whatevs';"
  },
  {
    before: "import something from 'http://something.com/whatevs';",
    after: "import something from 'http://something.com/whatevs';"
  },
  {
    before: "let ReactDOM = require('react-dom');",
    after: "let ReactDOM = require('react-dom');"
  },
  {
    before: "export React from 'react';",
    after: "export React from 'https://unpkg.com/react@15.6.1?module';"
  },
  {
    before: "export { Component } from 'react';",
    after: "export { Component } from 'https://unpkg.com/react@15.6.1?module';"
  },
  {
    before: "export * from 'react';",
    after: "export * from 'https://unpkg.com/react@15.6.1?module';"
  },
  {
    before: "export var message = 'hello';",
    after: "export var message = 'hello';"
  }
];

const dependencies = {
  react: "15.6.1",
  "@angular/router": "4.3.5",
  "lodash.map": "4.6.0",
  pn: "1.0.0"
};

describe("Rewriting imports/exports", () => {
  testCases.forEach(testCase => {
    it(`successfully rewrites "${testCase.before}"`, () => {
      const result = babel.transform(testCase.before, {
        plugins: [unpkgRewrite(dependencies)]
      });

      expect(result.code).toEqual(testCase.after);
    });
  });
});