summaryrefslogtreecommitdiffstats
path: root/dgbuilder/test/red/ui_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'dgbuilder/test/red/ui_spec.js')
-rw-r--r--dgbuilder/test/red/ui_spec.js177
1 files changed, 177 insertions, 0 deletions
diff --git a/dgbuilder/test/red/ui_spec.js b/dgbuilder/test/red/ui_spec.js
new file mode 100644
index 00000000..b9de7bff
--- /dev/null
+++ b/dgbuilder/test/red/ui_spec.js
@@ -0,0 +1,177 @@
+/**
+ * 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");
+var redUI = require("../../red/ui");
+
+
+describe("red/ui icon handler", function() {
+ it('returns the default icon when getting an unknown icon', function(done) {
+ var app = express();
+ redUI({},app);
+ 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 = express();
+ redUI({},app);
+ 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 = express();
+ redUI({},app);
+ 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 = express();
+ redUI(settings,app);
+ 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 = express();
+ redUI({},app);
+
+ 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 rapp = express();
+ redUI({},rapp);
+
+ var app = express().use('/root', rapp);
+
+ request(app)
+ .get("/root")
+ .expect('Content-Type', /text\/plain/)
+ .expect(302)
+ .end(function(err, res){
+ if (err){
+ return done(err);
+ }
+ done();
+ });
+
+ });
+});