Skip to content

Commit 2cd0007

Browse files
author
pemrouz
committed
test: add complete end-to-end tests
1 parent 13170ab commit 2cd0007

File tree

5 files changed

+161
-6
lines changed

5 files changed

+161
-6
lines changed

package.json

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,51 @@
1212
"babel": "babel src -d dist",
1313
"clean": "rm -rf dist && mkdir dist",
1414
"build": "npm run clean && npm run babel && npm run ignore",
15-
"test": "istanbul test ./node_modules/mocha/bin/_mocha --report html -- -R spec --colors",
16-
"coverage": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && rm -rf ./coverage --colors",
17-
"cov": "istanbul cover ./node_modules/mocha/bin/_mocha -- -R spec --colors",
18-
"test-popper": "popper",
15+
"test": "node test/server.js",
1916
"version": "npm run build && git add -A",
2017
"postversion": "git push && git push --tags"
2118
},
2219
"license": "pemrouz.mit-license.org",
2320
"devDependencies": {
2421
"babel-cli": "*",
2522
"babel-preset-es2015": "*",
26-
"browserify": "*",
23+
"babelify": "^7.3.0",
2724
"browserenv": "*",
25+
"browserify": "*",
2826
"chai": "*",
2927
"coveralls": "*",
28+
"dev-null": "^0.1.1",
3029
"istanbul": "*",
3130
"mocha": "*",
3231
"mocha-lcov-reporter": "*",
3332
"mockery": "^1.4.0",
3433
"popper": "*",
34+
"rijs.backpressure": "*",
3535
"rijs.components": "*",
3636
"rijs.core": "*",
3737
"rijs.css": "*",
3838
"rijs.data": "*",
39+
"rijs.db": "*",
40+
"rijs.delay": "*",
41+
"rijs.features": "*",
3942
"rijs.fn": "*",
43+
"rijs.helpers": "*",
44+
"rijs.html": "*",
45+
"rijs.hypermedia": "*",
46+
"rijs.mysql": "*",
47+
"rijs.needs": "*",
48+
"rijs.offline": "*",
49+
"rijs.precss": "*",
50+
"rijs.prehtml": "*",
51+
"rijs.reactive": "*",
52+
"rijs.resdir": "*",
4053
"rijs.serve": "*",
54+
"rijs.sessions": "*",
4155
"rijs.shadow": "*",
56+
"rijs.singleton": "*",
4257
"rijs.sync": "*",
58+
"rijs.versioned": "*",
59+
"tapify": "0.0.1",
4360
"uglify-js": "*"
4461
},
4562
"dependencies": {

test.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

test/client.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import 'utilise'
2+
import rijs from './rijs'
3+
const ripple = rijs()
4+
, test = require('tap').test
5+
6+
test('api', t => {
7+
t.plan(2)
8+
t.same(typeof ripple.upload, 'function')
9+
t.same(typeof ripple.upload.log, 'object')
10+
})
11+
12+
test('upload', t => {
13+
// t.plan(2)
14+
const form = once(document.body)('form', 1)
15+
, canvas = form('canvas', 1).node().toBlob(createBlob)
16+
17+
function createBlob(file) {
18+
t.plan(3)
19+
20+
// you would normally create this object from a HTML form
21+
// (see https://github.com/utilise/utilise#--form)
22+
// since we can't programmatically manipulate input[type="file"]
23+
// we mimic the same
24+
const photos = [file]
25+
, forms = { name: 'foo', photos }
26+
photos.__proto__ = FileList.prototype
27+
file.name = 'photo.jpg'
28+
29+
// upload the form and listen for updates
30+
ripple.upload('events', form)
31+
.on('progress.event', progress =>
32+
t.ok(progress > 0 && progress < 100, 'progress is number')
33+
)
34+
.on('response.event', ([status, message]) => {
35+
t.same(status, 200, 'status 200')
36+
t.same(message, 'ok', 'message ok')
37+
form.remove()
38+
})
39+
}
40+
})

test/rijs.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import backpressure from 'rijs.backpressure'
2+
import components from 'rijs.components'
3+
import versioned from 'rijs.versioned'
4+
import sessions from 'rijs.sessions'
5+
import features from 'rijs.features'
6+
import offline from 'rijs.offline'
7+
import helpers from 'rijs.helpers'
8+
import precss from 'rijs.precss'
9+
import shadow from 'rijs.shadow'
10+
import resdir from 'rijs.resdir'
11+
import mysql from 'rijs.mysql'
12+
import serve from 'rijs.serve'
13+
import needs from 'rijs.needs'
14+
import sync from 'rijs.sync'
15+
import core from 'rijs.core'
16+
import data from 'rijs.data'
17+
import css from 'rijs.css'
18+
import fn from 'rijs.fn'
19+
import db from 'rijs.db'
20+
import upload from '../'
21+
22+
export default function create(opts){
23+
const ripple = core() // empty base collection of resources
24+
25+
// enrich..
26+
data(ripple) // register data types
27+
css(ripple) // register css types
28+
fn(ripple) // register fn types
29+
helpers(ripple) // expose helper functions and constants
30+
mysql(ripple) // adds mysql adaptor crud hooks
31+
db(ripple, opts) // enable external connections
32+
components(ripple) // invoke web components, fn.call(<el>, data)
33+
needs(ripple) // define default attrs for components
34+
precss(ripple) // preapplies scoped css
35+
shadow(ripple) // encapsulates with shadow dom or closes gap
36+
serve(ripple, opts) // serve client libraries
37+
offline(ripple) // loads/saves from/to localstorage
38+
sync(ripple, opts) // syncs resources between server/client
39+
backpressure(ripple) // restricts broadcast to clients based on need
40+
features(ripple) // extend components with features
41+
versioned(ripple) // versioning info and time travel
42+
sessions(ripple, opts) // populates sessionid on each connection
43+
resdir(ripple, opts) // loads from resources folder
44+
upload(ripple)
45+
46+
return ripple
47+
}

test/server.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import 'utilise'
2+
import rijs from './rijs'
3+
import popper from 'popper'
4+
import devnull from 'dev-null'
5+
6+
// the popper js api returns a ripple instance
7+
// which we can later extend with more resources
8+
const ripple = popper({
9+
watch: '.'
10+
, ripple: rijs
11+
, runner: 'tape'
12+
, browsers: ['ie11', 'chrome', 'firefox']
13+
, port: 1945
14+
, tests: `browserify ./test/client.js \
15+
-t babelify \
16+
-t tapify \
17+
-i socket.io \
18+
-i socket.io-client \
19+
-i socket.io-stream \
20+
| sed -E \"s/require\\('socket\\.io-stream'\\)/window.ss/g\"`
21+
// socket.io{-stream} does not play well in browserify
22+
// so we include these as globals
23+
, globals: `
24+
<script src="socket.io/socket.io.js"></script>
25+
<script src="https://npmcdn.com/socket.io-stream/socket.io-stream.js"></script>
26+
`
27+
})
28+
29+
// register a resource
30+
ripple('events', [], { from })
31+
32+
// request handler
33+
function from(req, res){
34+
// ignore all other requests to this resource
35+
if (req.type !== 'upload') return
36+
37+
// pipe the photos somewhere
38+
req.value
39+
.photos[0]
40+
.pipe(devnull())
41+
.on('finish', finish)
42+
43+
function finish() {
44+
if (req.value.name !== 'foo')
45+
throw new Error('name not as expected')
46+
47+
if (req.value.photos.length !== 1)
48+
throw new Error('photos not as expected')
49+
50+
res(200, 'ok')
51+
}
52+
}

0 commit comments

Comments
 (0)