const {CookieJar} = require('tough-cookie');
const {cookieToString, jarFromCookies, cookiesFromJar} = require('..');

describe('jarFromCookies()', () => {
  it('returns valid cookies', done => {
    const jar = jarFromCookies([{
      key: 'foo',
      value: 'bar',
      domain: 'google.com'
    }]);

    jar.store.getAllCookies((err, cookies) => {
      expect(err).toBeNull();
      expect(cookies[0].creation instanceof Date).toEqual(true);
      expect(cookies[0].expires).toEqual('Infinity');
      done();
    });
  });

  it('handles malformed JSON', () => {
    const jar = jarFromCookies('not a jar');
    expect(jar.constructor.name).toBe('CookieJar');
  });
});

describe('cookiesFromJar()', () => {
  it('returns valid jar', async () => {
    const d = new Date();
    const initialCookies = [{
      key: 'bar',
      value: 'baz',
      domain: 'insomnia.rest',
      expires: d
    }, {
      // This one will fail to parse, and be skipped
      bad: 'cookie'
    }];

    const jar = CookieJar.fromJSON({cookies: initialCookies});

    const cookies = await cookiesFromJar(jar);

    expect(cookies[0].domain).toBe('insomnia.rest');
    expect(cookies[0].key).toBe('bar');
    expect(cookies[0].value).toBe('baz');
    expect(cookies[0].creation).toMatch(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/);
    expect(cookies[0].expires).toEqual(d.toISOString());
  });

  it('handles bad jar', async () => {
    const jar = CookieJar.fromJSON({cookies: []});

    // MemoryStore never actually throws errors, so lets mock the
    // function to force it to this time.
    jar.store.getAllCookies = cb => cb(new Error('Dummy Error'));
    const cookies = await cookiesFromJar(jar);

    // Cookies failed to p
    expect(cookies.length).toBe(0);
  });
});
      expect(cookies[0].domain).toEqual('google.com');
      expect(cookies[0].key).toEqual('foo');
      expect(cookies[0].value).toEqual('bar');