node-red/test/red/ui_spec.js

169 lines
5.1 KiB
JavaScript

/**
* Copyright 2014 IBM Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
var request = require("supertest");
var express = require("express");
describe("red/ui icon handler", function() {
it('returns the default icon when getting an unknown icon', function(done) {
var app = require("../../red/ui")();
request(app)
.get("/icons/youwonthaveme.png")
.expect('Content-Type', /image\/png/)
.expect(200)
.end(function(err, res){
if (err){
return done(err);
}
done();
});
});
it('returns an icon from disk', function(done) {
var app = require("../../red/ui")();
request(app)
.get("/icons/arduino.png")
.expect('Content-Type', /image\/png/)
.expect(200)
.end(function(err, res){
if (err){
return done(err);
}
done();
});
});
});
describe("icon cache handler", function() {
var fs = require('fs-extra');
var path = require('path');
var events = require("../../red/events");
var tempDir = path.join(__dirname,".tmp/");
var cachedFakePNG = tempDir + "cacheMe.png";
beforeEach(function(done) {
fs.remove(tempDir,function(err) {
fs.mkdirSync(tempDir);
fs.writeFileSync(cachedFakePNG, "Hello PNG\n");
done();
});
});
afterEach(function(done) {
fs.exists(cachedFakePNG, function(exists) {
if(exists) {
fs.unlinkSync(cachedFakePNG);
}
fs.remove(tempDir,done);
})
});
/*
* This test case test that:
* 1) any directory can be added to the path lookup (such as /tmp) by
* calling the right event
* 2) that a file we know exists gets cached so that the lookup/verification
* of actual existence doesn't occur again when a subsequent request comes in
*
* The second point verifies that the cache works. If the cache wouldn't work
* the default PNG would be served
*/
it('returns an icon using icon cache', function(done) {
var app = require("../../red/ui")();
events.emit("node-icon-dir", tempDir);
request(app)
.get("/icons/cacheMe.png")
.expect('Content-Type', /image\/png/)
.expect(200)
.end(function(err, res){
if (err){
return done(err);
}
fs.unlink(cachedFakePNG, function(err) {
if(err) {
return done(err);
}
request(app)
.get("/icons/cacheMe.png")
.expect('Content-Type', /text\/html/)
.expect(404)
.end(function(err, res){
if (err){
return done(err);
}
done();
});
});
});
});
});
describe("red/ui settings handler", function() {
it('returns the provided settings', function(done) {
var settings = {
httpNodeRoot: "testHttpNodeRoot",
version: "testVersion",
};
var app = require("../../red/ui")(settings);
request(app)
.get("/settings")
.expect('Content-Type', /application\/json/)
.expect(200, "{\n \"httpNodeRoot\": \"testHttpNodeRoot\",\n \"version\": \"testVersion\"\n}")
.end(function(err, res){
if (err){
return done(err);
}
done();
});
});
});
describe("red/ui root handler", function() {
it('server up the main page', function(done) {
var app = require("../../red/ui")();
request(app)
.get("/")
.expect('Content-Type', /text\/html/)
.expect(200)
.end(function(err, res){
if (err){
return done(err);
}
done();
});
});
it('redirects to path ending with /', function(done) {
var app = express().use('/root', require("../../red/ui")());
request(app)
.get("/root")
.expect('Content-Type', /text\/plain/)
.expect(302)
.end(function(err, res){
if (err){
return done(err);
}
done();
});
});
});