diff --git a/package.json b/package.json index b8d19ee..9086953 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,7 @@ "babel": "babel src -d dist", "clean": "rm -rf dist && mkdir dist", "build": "npm run clean && npm run babel && npm run ignore", - "test": "istanbul test ./node_modules/mocha/bin/_mocha --report html -- -R spec --colors", - "coverage": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && rm -rf ./coverage --colors", - "cov": "istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --colors", - "test-popper": "popper", + "test": "node test/server.js", "version": "npm run build && git add -A", "postversion": "git push && git push --tags" }, @@ -23,23 +20,43 @@ "devDependencies": { "babel-cli": "*", "babel-preset-es2015": "*", - "browserify": "*", + "babelify": "^7.3.0", "browserenv": "*", + "browserify": "*", "chai": "*", "coveralls": "*", + "dev-null": "^0.1.1", "istanbul": "*", "mocha": "*", "mocha-lcov-reporter": "*", "mockery": "^1.4.0", "popper": "*", + "rijs.backpressure": "*", "rijs.components": "*", "rijs.core": "*", "rijs.css": "*", "rijs.data": "*", + "rijs.db": "*", + "rijs.delay": "*", + "rijs.features": "*", "rijs.fn": "*", + "rijs.helpers": "*", + "rijs.html": "*", + "rijs.hypermedia": "*", + "rijs.mysql": "*", + "rijs.needs": "*", + "rijs.offline": "*", + "rijs.precss": "*", + "rijs.prehtml": "*", + "rijs.reactive": "*", + "rijs.resdir": "*", "rijs.serve": "*", + "rijs.sessions": "*", "rijs.shadow": "*", + "rijs.singleton": "*", "rijs.sync": "*", + "rijs.versioned": "*", + "tapify": "0.0.1", "uglify-js": "*" }, "dependencies": { diff --git a/test.js b/test.js deleted file mode 100644 index 0ffdd02..0000000 --- a/test.js +++ /dev/null @@ -1 +0,0 @@ -// TODO \ No newline at end of file diff --git a/test/client.js b/test/client.js new file mode 100644 index 0000000..5faa5fa --- /dev/null +++ b/test/client.js @@ -0,0 +1,40 @@ +import 'utilise' +import rijs from './rijs' +const ripple = rijs() + , test = require('tap').test + +test('api', t => { + t.plan(2) + t.same(typeof ripple.upload, 'function') + t.same(typeof ripple.upload.log, 'object') +}) + +test('upload', t => { + // t.plan(2) + const form = once(document.body)('form', 1) + , canvas = form('canvas', 1).node().toBlob(createBlob) + + function createBlob(file) { + t.plan(3) + + // you would normally create this object from a HTML form + // (see https://github.com/utilise/utilise#--form) + // since we can't programmatically manipulate input[type="file"] + // we mimic the same + const photos = [file] + , forms = { name: 'foo', photos } + photos.__proto__ = FileList.prototype + file.name = 'photo.jpg' + + // upload the form and listen for updates + ripple.upload('events', form) + .on('progress.event', progress => + t.ok(progress > 0 && progress < 100, 'progress is number') + ) + .on('response.event', ([status, message]) => { + t.same(status, 200, 'status 200') + t.same(message, 'ok', 'message ok') + form.remove() + }) + } +}) \ No newline at end of file diff --git a/test/rijs.js b/test/rijs.js new file mode 100644 index 0000000..1a39d03 --- /dev/null +++ b/test/rijs.js @@ -0,0 +1,47 @@ +import backpressure from 'rijs.backpressure' +import components from 'rijs.components' +import versioned from 'rijs.versioned' +import sessions from 'rijs.sessions' +import features from 'rijs.features' +import offline from 'rijs.offline' +import helpers from 'rijs.helpers' +import precss from 'rijs.precss' +import shadow from 'rijs.shadow' +import resdir from 'rijs.resdir' +import mysql from 'rijs.mysql' +import serve from 'rijs.serve' +import needs from 'rijs.needs' +import sync from 'rijs.sync' +import core from 'rijs.core' +import data from 'rijs.data' +import css from 'rijs.css' +import fn from 'rijs.fn' +import db from 'rijs.db' +import upload from '../' + +export default function create(opts){ + const ripple = core() // empty base collection of resources + + // enrich.. + data(ripple) // register data types + css(ripple) // register css types + fn(ripple) // register fn types + helpers(ripple) // expose helper functions and constants + mysql(ripple) // adds mysql adaptor crud hooks + db(ripple, opts) // enable external connections + components(ripple) // invoke web components, fn.call(, data) + needs(ripple) // define default attrs for components + precss(ripple) // preapplies scoped css + shadow(ripple) // encapsulates with shadow dom or closes gap + serve(ripple, opts) // serve client libraries + offline(ripple) // loads/saves from/to localstorage + sync(ripple, opts) // syncs resources between server/client + backpressure(ripple) // restricts broadcast to clients based on need + features(ripple) // extend components with features + versioned(ripple) // versioning info and time travel + sessions(ripple, opts) // populates sessionid on each connection + resdir(ripple, opts) // loads from resources folder + upload(ripple) + + return ripple +} \ No newline at end of file diff --git a/test/server.js b/test/server.js new file mode 100644 index 0000000..605a647 --- /dev/null +++ b/test/server.js @@ -0,0 +1,52 @@ +import 'utilise' +import rijs from './rijs' +import popper from 'popper' +import devnull from 'dev-null' + +// the popper js api returns a ripple instance +// which we can later extend with more resources +const ripple = popper({ + watch: '.' + , ripple: rijs + , runner: 'tape' + , browsers: ['ie11', 'chrome', 'firefox'] + , port: 1945 + , tests: `browserify ./test/client.js \ + -t babelify \ + -t tapify \ + -i socket.io \ + -i socket.io-client \ + -i socket.io-stream \ + | sed -E \"s/require\\('socket\\.io-stream'\\)/window.ss/g\"` + // socket.io{-stream} does not play well in browserify + // so we include these as globals + , globals: ` + + + ` + }) + +// register a resource +ripple('events', [], { from }) + +// request handler +function from(req, res){ + // ignore all other requests to this resource + if (req.type !== 'upload') return + + // pipe the photos somewhere + req.value + .photos[0] + .pipe(devnull()) + .on('finish', finish) + + function finish() { + if (req.value.name !== 'foo') + throw new Error('name not as expected') + + if (req.value.photos.length !== 1) + throw new Error('photos not as expected') + + res(200, 'ok') + } +} \ No newline at end of file