'use strict';
const expect = require('chai').expect;
const utils = require('../../lib/test-utils');
const fs = utils.shimIndexedDB(() => require('../../../shims/fs'));

describe('fs shim', () => {
  it('should be defined', () => {
    expect(fs).to.not.be.undefined;
  });

  it('should be an object', () => {
    expect(typeof fs).to.equal('object');
  });

  it('should return a function when accessing fs.writeFile', () => {
    expect(typeof fs.writeFile).to.equal('function');
  });

  it('should call callback when calling fs.writeFile', (done) => {
    fs.writeFile('/test.txt', 'test', function(err) {
      if(err) throw err;

      done();
    });
  });

  it('should return an object when accessing fs.promises', () => {
    expect(typeof fs.promises).to.equal('object');
  });

  it('should return a function when accessing fs.promises.writeFile', () => {
    expect(typeof fs.promises.writeFile).to.equal('function');
  });

  it('should return a promise which resolves when calling fs.promises.writeFile', (done) => {
    const writeFilePromise = fs.promises.writeFile('/test2.txt', '');
    expect(writeFilePromise instanceof Promise).to.equal(true);
    writeFilePromise.then(() => {
      done();
    }).catch((err) => {
      done(err);
    });
  });
});
