UNPKG

5.3 kBJavaScriptView Raw
1var levelup = require('levelup');
2var path = require('path');
3var memdown = require('memdown');
4var Runtime = require('../zetta_runtime');
5var Scientist = require('zetta-scientist');
6var assert = require('assert');
7var util = require('util');
8var Device = Runtime.Device;
9var DeviceRegistry = require('../lib/device_registry');
10var Query = require('calypso').Query;
11
12function TestDriver() {
13 Device.call(this);
14 this.foo = 'fooData';
15 this.bar = 'barData';
16 this.id = '123456789';
17}
18util.inherits(TestDriver, Device);
19
20TestDriver.prototype.init = function(config) {
21 config
22 .name('Test')
23 .type('test')
24 .state('ready');
25};
26
27var dbPath = path.join(__dirname, './.registry');
28
29describe('DeviceRegistry', function() {
30 var db = null;
31 var machine = null;
32 var opts = null;
33
34 beforeEach(function(done) {
35 db = levelup(dbPath, { db: memdown });
36 machine = Scientist.create(TestDriver);
37 Scientist.init(machine);
38 opts = { db: db, collection: 'devices' };
39 done();
40 });
41
42 it('should call the callback on close', function(done) {
43 var reg = new DeviceRegistry(opts);
44 reg.close(function() {
45 assert.equal(arguments.length, 0);
46 done();
47 });
48 });
49
50 it('should save a configured device to the database.', function(done) {
51 var reg = new DeviceRegistry(opts);
52 reg.save(machine, function(err) {
53 assert.ok(!err);
54 reg.close();
55 done();
56 });
57 });
58
59 describe('#find', function() {
60 it('should find a device by it\'s id.', function(done) {
61 var reg = new DeviceRegistry(opts);
62 reg.save(machine, function(err) {
63 if(!err) {
64 reg.get('123456789', function(err, value) {
65 assert.ok(!err);
66 assert.ok(value);
67 var data = value;
68 assert.equal(data.name, 'Test');
69 assert.equal(data.type, 'test');
70 assert.equal(data.id, '123456789');
71 reg.close();
72 done();
73 });
74 }
75 });
76 });
77
78 it('should have a callback return results in the callback of find.', function(done) {
79 var reg = new DeviceRegistry(opts);
80 reg.save(machine, function(err) {
81 if(!err) {
82 reg.find({ type: 'test' }, function(err, results) {
83 assert.ok(!err);
84 assert.ok(results);
85 assert.equal(results.length, 1);
86 var firstResult = results[0];
87 assert.equal(firstResult.type, 'test');
88 assert.equal(firstResult.name, 'Test');
89 assert.equal(firstResult.id, '123456789');
90 reg.close();
91 done();
92 });
93 }
94 });
95 });
96
97 it('should return no results in the callback of find with a query that does not match.', function(done) {
98 var reg = new DeviceRegistry(opts);
99 reg.save(machine, function(err) {
100 if(!err) {
101 reg.find({ type: 'foobar' }, function(err, results) {
102 assert.ok(!err);
103 assert.ok(results);
104 assert.equal(results.length, 0);
105 reg.close();
106 done();
107 });
108 }
109 });
110 });
111
112 it('should return results with a query language query', function(done) {
113 var reg = new DeviceRegistry(opts);
114 reg.save(machine, function(err) {
115 if(!err) {
116 reg.find('where type="test"', function(err, results) {
117 assert.ok(!err);
118 assert.ok(results);
119 assert.equal(results.length, 1);
120 var firstResult = results[0];
121 assert.equal(firstResult.type, 'test');
122 assert.equal(firstResult.name, 'Test');
123 assert.equal(firstResult.id, '123456789');
124 reg.close();
125 done();
126 });
127 }
128 });
129 });
130
131 it('should return results with a Query object', function(done) {
132 var reg = new DeviceRegistry(opts);
133 reg.save(machine, function(err) {
134 if(!err) {
135 var query = Query.of('devices')
136 .where('type', { eq: 'test' });
137
138 reg.find(query, function(err, results) {
139 assert.ok(!err);
140 assert.ok(results);
141 assert.equal(results.length, 1);
142 var firstResult = results[0];
143 assert.equal(firstResult.type, 'test');
144 assert.equal(firstResult.name, 'Test');
145 assert.equal(firstResult.id, '123456789');
146 reg.close();
147 done();
148 });
149 }
150 });
151 });
152
153 it('should return results with a parameterized Query object', function(done) {
154 var reg = new DeviceRegistry(opts);
155 reg.save(machine, function(err) {
156 if(!err) {
157 var query = Query.of('devices')
158 .ql('where type=@type')
159 .params({ type: 'test' });
160
161 reg.find(query, function(err, results) {
162 assert.ok(!err);
163 assert.ok(results);
164 assert.equal(results.length, 1);
165 var firstResult = results[0];
166 assert.equal(firstResult.type, 'test');
167 assert.equal(firstResult.name, 'Test');
168 assert.equal(firstResult.id, '123456789');
169 reg.close();
170 done();
171 });
172 }
173 });
174 });
175 });
176});