You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							64 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							64 lines
						
					
					
						
							2.2 KiB
						
					
					
				| 'use strict'
 | |
| 
 | |
| const t = require('tap')
 | |
| const test = t.test
 | |
| const FindMyWay = require('..')
 | |
| const noop = () => { }
 | |
| 
 | |
| const customVersioning = {
 | |
|   name: 'version',
 | |
|   // storage factory
 | |
|   storage: function () {
 | |
|     let versions = {}
 | |
|     return {
 | |
|       get: (version) => { return versions[version] || null },
 | |
|       set: (version, store) => { versions[version] = store },
 | |
|       del: (version) => { delete versions[version] },
 | |
|       empty: () => { versions = {} }
 | |
|     }
 | |
|   },
 | |
|   deriveConstraint: (req, ctx) => {
 | |
|     return req.headers.accept
 | |
|   }
 | |
| }
 | |
| 
 | |
| test('A route could support multiple versions (find) / 1', t => {
 | |
|   t.plan(5)
 | |
| 
 | |
|   const findMyWay = FindMyWay({ constraints: { version: customVersioning } })
 | |
| 
 | |
|   findMyWay.on('GET', '/', { constraints: { version: 'application/vnd.example.api+json;version=2' } }, noop)
 | |
|   findMyWay.on('GET', '/', { constraints: { version: 'application/vnd.example.api+json;version=3' } }, noop)
 | |
| 
 | |
|   t.ok(findMyWay.find('GET', '/', { version: 'application/vnd.example.api+json;version=2' }))
 | |
|   t.ok(findMyWay.find('GET', '/', { version: 'application/vnd.example.api+json;version=3' }))
 | |
|   t.notOk(findMyWay.find('GET', '/', { version: 'application/vnd.example.api+json;version=4' }))
 | |
|   t.notOk(findMyWay.find('GET', '/', { version: 'application/vnd.example.api+json;version=5' }))
 | |
|   t.notOk(findMyWay.find('GET', '/', { version: 'application/vnd.example.api+json;version=6' }))
 | |
| })
 | |
| 
 | |
| test('Overriding default strategies uses the custom deriveConstraint function', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   const findMyWay = FindMyWay({ constraints: { version: customVersioning } })
 | |
| 
 | |
|   findMyWay.on('GET', '/', { constraints: { version: 'application/vnd.example.api+json;version=2' } }, (req, res, params) => {
 | |
|     t.equal(req.headers.accept, 'application/vnd.example.api+json;version=2')
 | |
|   })
 | |
| 
 | |
|   findMyWay.on('GET', '/', { constraints: { version: 'application/vnd.example.api+json;version=3' } }, (req, res, params) => {
 | |
|     t.equal(req.headers.accept, 'application/vnd.example.api+json;version=3')
 | |
|   })
 | |
| 
 | |
|   findMyWay.lookup({
 | |
|     method: 'GET',
 | |
|     url: '/',
 | |
|     headers: { accept: 'application/vnd.example.api+json;version=2' }
 | |
|   })
 | |
|   findMyWay.lookup({
 | |
|     method: 'GET',
 | |
|     url: '/',
 | |
|     headers: { accept: 'application/vnd.example.api+json;version=3' }
 | |
|   })
 | |
| })
 |