1 | var levelup = require('levelup');
|
2 | var path = require('path');
|
3 | var memdown = require('memdown');
|
4 | var Runtime = require('../zetta_runtime');
|
5 | var Scientist = require('zetta-scientist');
|
6 | var assert = require('assert');
|
7 | var util = require('util');
|
8 | var Device = Runtime.Device;
|
9 | var DeviceRegistry = require('../lib/device_registry');
|
10 | var Query = require('calypso').Query;
|
11 |
|
12 | function TestDriver() {
|
13 | Device.call(this);
|
14 | this.foo = 'fooData';
|
15 | this.bar = 'barData';
|
16 | this.id = '123456789';
|
17 | }
|
18 | util.inherits(TestDriver, Device);
|
19 |
|
20 | TestDriver.prototype.init = function(config) {
|
21 | config
|
22 | .name('Test')
|
23 | .type('test')
|
24 | .state('ready');
|
25 | };
|
26 |
|
27 | var dbPath = path.join(__dirname, './.registry');
|
28 |
|
29 | describe('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 | });
|