'use strict';
const Filer = require('../../src');
const util = require('../lib/test-utils.js');
const expect = require('chai').expect;

describe('Filer.FileSystem', function() {
  beforeEach(util.setup);
  afterEach(util.cleanup);

  it('should properly mount new or existing filesystem', function(done) {
    const provider = util.provider().provider;

    // 1) Should be able to open a new filesystem, and get empty root
    const fs1 = new Filer.FileSystem({provider: provider}, function() {
      fs1.readdir('/', function(err, entries) {
        expect(err).not.to.exist;
        expect(entries).to.be.an('array');
        expect(entries.length).to.equal(0);

        fs1.writeFile('/file', 'data', function(err) {
          if(err) throw err;

          // 2) Should be able to open an existing filesystem
          const fs2 = new Filer.FileSystem({provider: provider}, function() {
            fs2.readdir('/', function(err, entries) {
              expect(err).not.to.exist;
              expect(entries).to.be.an('array');
              expect(entries.length).to.equal(1);
              expect(entries[0]).to.equal('file');


              // 3) FORMAT flag should wipe an existing filesystem
              const fs3 = new Filer.FileSystem({provider: provider, flags: ['FORMAT']}, function() {
                fs3.readdir('/', function(err, entries) {
                  expect(err).not.to.exist;
                  expect(entries).to.be.an('array');
                  expect(entries.length).to.equal(0);
                  done();
                });
              });
            });
          });
        });
      });
    });
  });
});
