Hex Artifact Content
Not logged in

Artifact 1ebbc11cd5579c6a800666687966d8e9adada016:


0000: 27 75 73 65 20 73 74 72 69 63 74 27 0a 0a 76 61  'use strict'..va
0010: 72 20 73 65 72 76 65 72 20 3d 20 72 65 71 75 69  r server = requi
0020: 72 65 28 27 2e 2f 73 65 72 76 65 72 27 29 0a 20  re('./server'). 
0030: 20 2c 20 72 65 71 75 65 73 74 20 3d 20 72 65 71   , request = req
0040: 75 69 72 65 28 27 2e 2e 2f 69 6e 64 65 78 27 29  uire('../index')
0050: 0a 20 20 2c 20 74 61 70 65 20 3d 20 72 65 71 75  .  , tape = requ
0060: 69 72 65 28 27 74 61 70 65 27 29 0a 0a 76 61 72  ire('tape')..var
0070: 20 73 20 3d 20 73 65 72 76 65 72 2e 63 72 65 61   s = server.crea
0080: 74 65 53 65 72 76 65 72 28 29 0a 0a 74 61 70 65  teServer()..tape
0090: 28 27 73 65 74 75 70 27 2c 20 66 75 6e 63 74 69  ('setup', functi
00a0: 6f 6e 28 74 29 20 7b 0a 20 20 73 2e 6c 69 73 74  on(t) {.  s.list
00b0: 65 6e 28 73 2e 70 6f 72 74 2c 20 66 75 6e 63 74  en(s.port, funct
00c0: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 74 2e 65 6e  ion() {.    t.en
00d0: 64 28 29 0a 20 20 7d 29 0a 7d 29 0a 0a 66 75 6e  d().  }).})..fun
00e0: 63 74 69 6f 6e 20 74 65 73 74 4a 53 4f 4e 56 61  ction testJSONVa
00f0: 6c 75 65 28 74 65 73 74 49 64 2c 20 76 61 6c 75  lue(testId, valu
0100: 65 29 20 7b 0a 20 20 74 61 70 65 28 27 74 65 73  e) {.  tape('tes
0110: 74 20 27 20 2b 20 74 65 73 74 49 64 2c 20 66 75  t ' + testId, fu
0120: 6e 63 74 69 6f 6e 28 74 29 20 7b 0a 20 20 20 20  nction(t) {.    
0130: 76 61 72 20 74 65 73 74 55 72 6c 20 3d 20 27 2f  var testUrl = '/
0140: 27 20 2b 20 74 65 73 74 49 64 0a 20 20 20 20 73  ' + testId.    s
0150: 2e 6f 6e 28 74 65 73 74 55 72 6c 2c 20 73 65 72  .on(testUrl, ser
0160: 76 65 72 2e 63 72 65 61 74 65 50 6f 73 74 4a 53  ver.createPostJS
0170: 4f 4e 56 61 6c 69 64 61 74 6f 72 28 76 61 6c 75  ONValidator(valu
0180: 65 2c 20 27 61 70 70 6c 69 63 61 74 69 6f 6e 2f  e, 'application/
0190: 6a 73 6f 6e 27 29 29 0a 20 20 20 20 76 61 72 20  json')).    var 
01a0: 6f 70 74 73 20 3d 20 7b 0a 20 20 20 20 20 20 6d  opts = {.      m
01b0: 65 74 68 6f 64 3a 20 27 50 55 54 27 2c 0a 20 20  ethod: 'PUT',.  
01c0: 20 20 20 20 75 72 69 3a 20 73 2e 75 72 6c 20 2b      uri: s.url +
01d0: 20 74 65 73 74 55 72 6c 2c 0a 20 20 20 20 20 20   testUrl,.      
01e0: 6a 73 6f 6e 3a 20 74 72 75 65 2c 0a 20 20 20 20  json: true,.    
01f0: 20 20 62 6f 64 79 3a 20 76 61 6c 75 65 0a 20 20    body: value.  
0200: 20 20 7d 0a 20 20 20 20 72 65 71 75 65 73 74 28    }.    request(
0210: 6f 70 74 73 2c 20 66 75 6e 63 74 69 6f 6e 20 28  opts, function (
0220: 65 72 72 2c 20 72 65 73 70 2c 20 62 6f 64 79 29  err, resp, body)
0230: 20 7b 0a 20 20 20 20 20 20 74 2e 65 71 75 61 6c   {.      t.equal
0240: 28 65 72 72 2c 20 6e 75 6c 6c 29 0a 20 20 20 20  (err, null).    
0250: 20 20 74 2e 65 71 75 61 6c 28 72 65 73 70 2e 73    t.equal(resp.s
0260: 74 61 74 75 73 43 6f 64 65 2c 20 32 30 30 29 0a  tatusCode, 200).
0270: 20 20 20 20 20 20 74 2e 64 65 65 70 45 71 75 61        t.deepEqua
0280: 6c 28 62 6f 64 79 2c 20 76 61 6c 75 65 29 0a 20  l(body, value). 
0290: 20 20 20 20 20 74 2e 65 6e 64 28 29 0a 20 20 20       t.end().   
02a0: 20 7d 29 0a 20 20 7d 29 0a 7d 0a 0a 66 75 6e 63   }).  }).}..func
02b0: 74 69 6f 6e 20 74 65 73 74 4a 53 4f 4e 56 61 6c  tion testJSONVal
02c0: 75 65 52 65 76 69 76 65 72 28 74 65 73 74 49 64  ueReviver(testId
02d0: 2c 20 76 61 6c 75 65 2c 20 72 65 76 69 76 65 72  , value, reviver
02e0: 2c 20 72 65 76 69 76 65 64 56 61 6c 75 65 29 20  , revivedValue) 
02f0: 7b 0a 20 20 74 61 70 65 28 27 74 65 73 74 20 27  {.  tape('test '
0300: 20 2b 20 74 65 73 74 49 64 2c 20 66 75 6e 63 74   + testId, funct
0310: 69 6f 6e 28 74 29 20 7b 0a 20 20 20 20 76 61 72  ion(t) {.    var
0320: 20 74 65 73 74 55 72 6c 20 3d 20 27 2f 27 20 2b   testUrl = '/' +
0330: 20 74 65 73 74 49 64 0a 20 20 20 20 73 2e 6f 6e   testId.    s.on
0340: 28 74 65 73 74 55 72 6c 2c 20 73 65 72 76 65 72  (testUrl, server
0350: 2e 63 72 65 61 74 65 50 6f 73 74 4a 53 4f 4e 56  .createPostJSONV
0360: 61 6c 69 64 61 74 6f 72 28 76 61 6c 75 65 2c 20  alidator(value, 
0370: 27 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f  'application/jso
0380: 6e 27 29 29 0a 20 20 20 20 76 61 72 20 6f 70 74  n')).    var opt
0390: 73 20 3d 20 7b 0a 20 20 20 20 20 20 6d 65 74 68  s = {.      meth
03a0: 6f 64 3a 20 27 50 55 54 27 2c 0a 20 20 20 20 20  od: 'PUT',.     
03b0: 20 75 72 69 3a 20 73 2e 75 72 6c 20 2b 20 74 65   uri: s.url + te
03c0: 73 74 55 72 6c 2c 0a 20 20 20 20 20 20 6a 73 6f  stUrl,.      jso
03d0: 6e 3a 20 74 72 75 65 2c 0a 20 20 20 20 20 20 6a  n: true,.      j
03e0: 73 6f 6e 52 65 76 69 76 65 72 3a 20 72 65 76 69  sonReviver: revi
03f0: 76 65 72 2c 0a 20 20 20 20 20 20 62 6f 64 79 3a  ver,.      body:
0400: 20 76 61 6c 75 65 0a 20 20 20 20 7d 0a 20 20 20   value.    }.   
0410: 20 72 65 71 75 65 73 74 28 6f 70 74 73 2c 20 66   request(opts, f
0420: 75 6e 63 74 69 6f 6e 20 28 65 72 72 2c 20 72 65  unction (err, re
0430: 73 70 2c 20 62 6f 64 79 29 20 7b 0a 20 20 20 20  sp, body) {.    
0440: 20 20 74 2e 65 71 75 61 6c 28 65 72 72 2c 20 6e    t.equal(err, n
0450: 75 6c 6c 29 0a 20 20 20 20 20 20 74 2e 65 71 75  ull).      t.equ
0460: 61 6c 28 72 65 73 70 2e 73 74 61 74 75 73 43 6f  al(resp.statusCo
0470: 64 65 2c 20 32 30 30 29 0a 20 20 20 20 20 20 74  de, 200).      t
0480: 2e 64 65 65 70 45 71 75 61 6c 28 62 6f 64 79 2c  .deepEqual(body,
0490: 20 72 65 76 69 76 65 64 56 61 6c 75 65 29 0a 20   revivedValue). 
04a0: 20 20 20 20 20 74 2e 65 6e 64 28 29 0a 20 20 20       t.end().   
04b0: 20 7d 29 0a 20 20 7d 29 0a 7d 0a 0a 74 65 73 74   }).  }).}..test
04c0: 4a 53 4f 4e 56 61 6c 75 65 28 27 6a 73 6f 6e 4e  JSONValue('jsonN
04d0: 75 6c 6c 27 2c 20 6e 75 6c 6c 29 0a 74 65 73 74  ull', null).test
04e0: 4a 53 4f 4e 56 61 6c 75 65 28 27 6a 73 6f 6e 54  JSONValue('jsonT
04f0: 72 75 65 27 2c 20 74 72 75 65 29 0a 74 65 73 74  rue', true).test
0500: 4a 53 4f 4e 56 61 6c 75 65 28 27 6a 73 6f 6e 46  JSONValue('jsonF
0510: 61 6c 73 65 27 2c 20 66 61 6c 73 65 29 0a 74 65  alse', false).te
0520: 73 74 4a 53 4f 4e 56 61 6c 75 65 28 27 6a 73 6f  stJSONValue('jso
0530: 6e 4e 75 6d 62 65 72 27 2c 20 2d 32 38 39 33 36  nNumber', -28936
0540: 35 2e 32 39 33 38 29 0a 74 65 73 74 4a 53 4f 4e  5.2938).testJSON
0550: 56 61 6c 75 65 28 27 6a 73 6f 6e 53 74 72 69 6e  Value('jsonStrin
0560: 67 27 2c 20 27 73 6f 6d 65 20 73 74 72 69 6e 67  g', 'some string
0570: 27 29 0a 74 65 73 74 4a 53 4f 4e 56 61 6c 75 65  ').testJSONValue
0580: 28 27 6a 73 6f 6e 41 72 72 61 79 27 2c 20 5b 27  ('jsonArray', ['
0590: 76 61 6c 75 65 31 27 2c 20 32 2c 20 6e 75 6c 6c  value1', 2, null
05a0: 2c 20 38 39 32 35 2e 35 33 32 38 39 2c 20 74 72  , 8925.53289, tr
05b0: 75 65 2c 20 66 61 6c 73 65 2c 20 5b 27 61 72 72  ue, false, ['arr
05c0: 61 79 27 5d 2c 20 7b 20 6f 62 6a 65 63 74 3a 20  ay'], { object: 
05d0: 27 70 72 6f 70 65 72 74 79 27 20 7d 5d 29 0a 74  'property' }]).t
05e0: 65 73 74 4a 53 4f 4e 56 61 6c 75 65 28 27 6a 73  estJSONValue('js
05f0: 6f 6e 4f 62 6a 65 63 74 27 2c 20 7b 0a 20 20 74  onObject', {.  t
0600: 72 75 65 50 72 6f 70 65 72 74 79 3a 20 74 72 75  rueProperty: tru
0610: 65 2c 0a 20 20 66 61 6c 73 65 50 72 6f 70 65 72  e,.  falseProper
0620: 74 79 3a 20 66 61 6c 73 65 2c 0a 20 20 6e 75 6d  ty: false,.  num
0630: 62 65 72 50 72 6f 70 65 72 74 79 3a 20 2d 39 38  berProperty: -98
0640: 33 34 36 2e 33 34 36 39 38 2c 0a 20 20 73 74 72  346.34698,.  str
0650: 69 6e 67 50 72 6f 70 65 72 74 79 3a 20 27 73 74  ingProperty: 'st
0660: 72 69 6e 67 27 2c 0a 20 20 6e 75 6c 6c 50 72 6f  ring',.  nullPro
0670: 70 65 72 74 79 3a 20 6e 75 6c 6c 2c 0a 20 20 61  perty: null,.  a
0680: 72 72 61 79 50 72 6f 70 65 72 74 79 3a 20 5b 27  rrayProperty: ['
0690: 61 72 72 61 79 27 5d 2c 0a 20 20 6f 62 6a 65 63  array'],.  objec
06a0: 74 50 72 6f 70 65 72 74 79 3a 20 7b 20 6f 62 6a  tProperty: { obj
06b0: 65 63 74 3a 20 27 70 72 6f 70 65 72 74 79 27 20  ect: 'property' 
06c0: 7d 0a 7d 29 0a 0a 74 65 73 74 4a 53 4f 4e 56 61  }.})..testJSONVa
06d0: 6c 75 65 52 65 76 69 76 65 72 28 27 6a 73 6f 6e  lueReviver('json
06e0: 52 65 76 69 76 65 72 27 2c 20 2d 34 38 32 36 39  Reviver', -48269
06f0: 2e 35 39 32 2c 20 66 75 6e 63 74 69 6f 6e 20 28  .592, function (
0700: 6b 2c 20 76 29 20 7b 0a 20 20 72 65 74 75 72 6e  k, v) {.  return
0710: 20 76 20 2a 20 2d 31 0a 7d 2c 20 34 38 32 36 39   v * -1.}, 48269
0720: 2e 35 39 32 29 0a 74 65 73 74 4a 53 4f 4e 56 61  .592).testJSONVa
0730: 6c 75 65 52 65 76 69 76 65 72 28 27 6a 73 6f 6e  lueReviver('json
0740: 52 65 76 69 76 65 72 49 6e 76 61 6c 69 64 27 2c  ReviverInvalid',
0750: 20 2d 34 38 32 36 39 2e 35 39 32 2c 20 27 69 6e   -48269.592, 'in
0760: 76 61 6c 69 64 20 72 65 76 69 76 65 72 27 2c 20  valid reviver', 
0770: 2d 34 38 32 36 39 2e 35 39 32 29 0a 0a 74 61 70  -48269.592)..tap
0780: 65 28 27 6d 69 73 73 69 6e 67 20 62 6f 64 79 27  e('missing body'
0790: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 74 29 20 7b  , function (t) {
07a0: 0a 20 20 73 2e 6f 6e 28 27 2f 6d 69 73 73 69 6e  .  s.on('/missin
07b0: 67 2d 62 6f 64 79 27 2c 20 66 75 6e 63 74 69 6f  g-body', functio
07c0: 6e 20 28 72 65 71 2c 20 72 65 73 29 20 7b 0a 20  n (req, res) {. 
07d0: 20 20 20 74 2e 65 71 75 61 6c 28 72 65 71 2e 68     t.equal(req.h
07e0: 65 61 64 65 72 73 5b 27 63 6f 6e 74 65 6e 74 2d  eaders['content-
07f0: 74 79 70 65 27 5d 2c 20 75 6e 64 65 66 69 6e 65  type'], undefine
0800: 64 29 0a 20 20 20 20 72 65 73 2e 65 6e 64 28 29  d).    res.end()
0810: 0a 20 20 7d 29 0a 20 20 72 65 71 75 65 73 74 28  .  }).  request(
0820: 7b 75 72 6c 3a 73 2e 75 72 6c 20 2b 20 27 2f 6d  {url:s.url + '/m
0830: 69 73 73 69 6e 67 2d 62 6f 64 79 27 2c 20 6a 73  issing-body', js
0840: 6f 6e 3a 74 72 75 65 7d 2c 20 66 75 6e 63 74 69  on:true}, functi
0850: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 74 2e 65 6e  on () {.    t.en
0860: 64 28 29 0a 20 20 7d 29 0a 7d 29 0a 0a 74 61 70  d().  }).})..tap
0870: 65 28 27 63 6c 65 61 6e 75 70 27 2c 20 66 75 6e  e('cleanup', fun
0880: 63 74 69 6f 6e 28 74 29 20 7b 0a 20 20 73 2e 63  ction(t) {.  s.c
0890: 6c 6f 73 65 28 66 75 6e 63 74 69 6f 6e 28 29 20  lose(function() 
08a0: 7b 0a 20 20 20 20 74 2e 65 6e 64 28 29 0a 20 20  {.    t.end().  
08b0: 7d 29 0a 7d 29 0a                                }).}).