UNPKG

5.29 kBtext/coffeescriptView Raw
1_ = require 'lodash'
2UUID = require 'uuid'
3request = require 'request'
4Server = require '../../src/server'
5Redis = require 'ioredis'
6RedisNS = require '@octoblu/redis-ns'
7{ JobManagerResponder } = require 'meshblu-core-job-manager'
8
9describe 'POST /devices', ->
10 beforeEach (done) ->
11 @responseQueueId = UUID.v4()
12 @requestQueueName = "request:queue:#{@responseQueueId}"
13 @responseQueueName = "response:queue:#{@responseQueueId}"
14 @namespace = 'test:meshblu-http'
15 @jobLogQueue = 'test:meshblu:job-log'
16 @redisUri = 'redis://localhost'
17 @port = 0xd00d
18 @sut = new Server {
19 @port
20 disableLogging: true
21 jobTimeoutSeconds: 1
22 @namespace
23 @jobLogQueue
24 jobLogRedisUri: @redisUri
25 jobLogSampleRate: 1
26 redisUri: @redisUri
27 cacheRedisUri: @redisUri
28 @requestQueueName
29 @responseQueueName
30 }
31
32 @sut.run done
33
34 afterEach ->
35 @sut.stop()
36
37 beforeEach (done) ->
38 @redis = new RedisNS @namespace, new Redis @redisUri, dropBufferSupport: true
39 @redis.on 'ready', done
40
41 afterEach (done) ->
42 @redis.del @requestQueueName, @responseQueueName, done
43 return # avoid returning redis
44
45 beforeEach (done) ->
46 @workerFunc = (@request, callback=_.noop) =>
47 @jobManagerDo @request, callback
48
49 @jobManager = new JobManagerResponder {
50 @redisUri
51 @namespace
52 @workerFunc
53 maxConnections: 1
54 queueTimeoutSeconds: 1
55 jobTimeoutSeconds: 1
56 jobLogSampleRate: 1
57 requestQueueName: @requestQueueName
58 responseQueueName: @responseQueueName
59 }
60 @jobManager.start done
61
62 beforeEach ->
63 @jobManager.do = (@jobManagerDo) =>
64
65 afterEach ->
66 @jobManager.stop()
67
68 context 'when the request is successful', ->
69 beforeEach ->
70 @jobManager.do (@request, callback) =>
71 response =
72 metadata:
73 code: 201
74 responseId: @request.metadata.responseId
75 rawData: '{"uuid":"boxes-of-stuff","token":"secret-boxes-of-stuff"}'
76
77 callback null, response
78
79 beforeEach (done) ->
80 options =
81 json: true
82 request.post "http://localhost:#{@port}/devices", options, (error, @response, @body) =>
83 done error
84
85 it 'should create the job with the correct type', ->
86 expect(@request.metadata.jobType).to.equal 'RegisterDevice'
87
88 it 'should create the job correct data', ->
89 expect(JSON.parse @request.rawData).to.deep.equal {discoverWhitelist: ['*'],configureWhitelist:['*'],sendWhitelist: ['*'],receiveWhitelist:['*']}
90
91 it 'should return a 201', ->
92 expect(@response.statusCode).to.equal 201
93
94 it 'should return meshblu:online', ->
95 expect(@body).to.deep.equal uuid: 'boxes-of-stuff', token: 'secret-boxes-of-stuff'
96
97 context 'when request is made with an owner', ->
98 beforeEach ->
99 @jobManager.do (@request, callback) =>
100 response =
101 metadata:
102 code: 201
103 responseId: @request.metadata.responseId
104 rawData: '{"uuid":"boxes-of-stuff","token":"secret-boxes-of-stuff","discoverWhitelist":["owner-uuid"],"configureWhitelist":["owner-uuid"]}'
105
106 callback null, response
107
108 beforeEach (done) ->
109 options =
110 json:
111 owner: 'owner-uuid'
112 request.post "http://localhost:#{@port}/devices", options, (error, @response, @body) =>
113 done error
114
115 it 'should create the job with the correct type', ->
116 expect(@request.metadata.jobType).to.equal 'RegisterDevice'
117
118 it 'should create the job correct data', ->
119 expect(JSON.parse @request.rawData).to.deep.equal {
120 discoverWhitelist: ['owner-uuid'],
121 configureWhitelist:['owner-uuid'],
122 sendWhitelist: ['*'],
123 receiveWhitelist: ['*'],
124 owner: 'owner-uuid'
125 }
126
127 it 'should return a 201', ->
128 expect(@response.statusCode).to.equal 201
129
130 it 'should return meshblu:online', ->
131 expect(@body).to.deep.equal
132 uuid: 'boxes-of-stuff'
133 token: 'secret-boxes-of-stuff'
134 discoverWhitelist: ['owner-uuid']
135 configureWhitelist: ['owner-uuid']
136
137 context 'when request is made with a meshblu 2.0.0 device', ->
138 beforeEach ->
139 @jobManager.do (@request, callback) =>
140 response =
141 metadata:
142 code: 201
143 responseId: @request.metadata.responseId
144 rawData: '{"uuid":"boxes-of-stuff","token":"secret-boxes-of-stuff","discoverWhitelist":["owner-uuid"],"configureWhitelist":["owner-uuid"]}'
145
146 callback null, response
147
148 beforeEach (done) ->
149 options =
150 json:
151 meshblu:
152 version: '2.0.0'
153
154 request.post "http://localhost:#{@port}/devices", options, (error, @response, @body) =>
155 done error
156
157 it 'should create the job with the correct type', ->
158 expect(@request.metadata.jobType).to.equal 'RegisterDevice'
159
160 it 'should create the job correct data', ->
161 expect(_.keys(JSON.parse @request.rawData)).not.to.containSubset [
162 "discoverWhitelist"
163 "configureWhitelist"
164 "sendWhitelist"
165 "receiveWhitelist"
166 ]
167
168 it 'should return a 201', ->
169 expect(@response.statusCode).to.equal 201