c9-core/plugins/c9.vfs.server/vfs_proxy_test.js

143 wiersze
4.2 KiB
JavaScript

#!/usr/bin/env node
/*global describe it before after beforeEach afterEach */
"use strict";
"use server";
require("c9/inline-mocha")(module);
var assert = require("assert-diff");
var async = require("async");
var sinon = require("sinon");
var vfs = require("vfs-local");
var vfsProxy = require("./vfs_proxy");
describe(__filename, function() {
var proxy, home, workspace;
before(function() {
home = vfs({
root: __dirname,
testing: true,
checkSymlinks: true
});
home.root = __dirname;
workspace = vfs({
root: __dirname + "/views",
testing: true,
checkSymlinks: true
});
});
beforeEach(function() {
proxy = vfsProxy(Object.keys(home), home, workspace);
});
it("should use home for files starting with ~ ", function(done) {
home.readfile = sinon.stub().callsArgWith(2, null, "home");
workspace.readfile = sinon.stub().callsArgWith(2, null, "workspace");
proxy.readfile("~/foo.txt", {}, function(err, data) {
assert(!err, err);
assert.equal(data, "home");
done();
});
});
it("should use workspace for files not starting with ~ ", function(done) {
home.readfile = sinon.stub().callsArgWith(2, null, "home");
workspace.readfile = sinon.stub().callsArgWith(2, null, "workspace");
proxy.readfile("foo.txt", {}, function(err, data) {
assert(!err, err);
assert.equal(data, "workspace");
done();
});
});
it("should expand ~ to paths relative to 'home'", function(done) {
home.readfile = function(path, options, callback) {
assert.equal(path, "/foo.txt");
callback(null, "home");
};
proxy.readfile("~/foo.txt", {}, function(err, data) {
assert(!err, err);
assert.equal(data, "home");
done();
});
});
it("should expand ~ in options", function(done) {
home.readfile = function(path, options, callback) {
assert.equal(path, "/foo.txt");
assert.equal(options.target, "/bar");
assert.equal(options.to, "/juhu");
assert.equal(options.from, "/kinners");
assert.equal(options.stuff, "~/stuff");
callback(null, "home");
};
proxy.readfile("~/foo.txt", {
target: "~/bar",
to: "~/juhu",
from: "~/kinners",
stuff: "~/stuff"
}, function(err, data) {
assert(!err, err);
assert.equal(data, "home");
done();
});
});
it("should expand some commands to absolute paths", function(done) {
home.execFile = function(path, options, callback) {
assert.equal(path, __dirname + "/foo.txt");
callback(null, "home");
};
proxy.execFile("~/foo.txt", {}, function(err, data) {
assert(!err, err);
assert.equal(data, "home");
done();
});
});
it("should not wrap some commands", function(done) {
async.eachSeries([
"connect",
"on",
"off",
"emit",
"extend",
"unextend",
"use",
"killtree"
], function(cmd, next) {
workspace[cmd] = function(path, options, callback) {
assert.equal(path, "~/foo.txt");
callback(null, "workspace");
};
proxy[cmd]("~/foo.txt", {}, function(err, data) {
assert(!err, err);
assert.equal(data, "workspace");
next();
});
}, done);
});
it("bad execFile arguments should not break the server", function(done) {
workspace.execFile = sinon.stub().callsArgWith(2, null, "done");
proxy.execFile(['ls', '-a'], { encoding: "utf8" }, function(err, data) {
assert(!err, err);
assert.equal(data, "done");
done();
});
});
});