Skip to content

Commit ba32a83

Browse files
committed
Added tests.
1 parent 6fd1aa2 commit ba32a83

File tree

3 files changed

+226
-1
lines changed

3 files changed

+226
-1
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
"debug": "^2.6.3"
2727
},
2828
"devDependencies": {
29-
"eslint": "^3.18.0"
29+
"eslint": "^3.18.0",
30+
"mocha": "^3.2.0"
3031
},
3132
"scripts": {
33+
"test": "mocha --bail --check-leaks test",
3234
"lint": "eslint index.js"
3335
},
3436
"eslintConfig": {

test/apicalls.js

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
'use strict';
2+
3+
const scjs = require('../');
4+
const assert = require('assert');
5+
const fs = require('fs');
6+
const os = require('os');
7+
const path = require('path');
8+
9+
const tmpfile = "_scjs_test_file_.tst";
10+
const tmpsize = 10000002;
11+
12+
describe("API", function () {
13+
let conn;
14+
let cm;
15+
let tmp;
16+
let plrids;
17+
let upitem1, upitem2;
18+
19+
before(function (done) {
20+
fs.readFile('./test/connection.json', 'utf8', (err, data) => {
21+
if (err) return done(err);
22+
conn = JSON.parse(data);
23+
cm = new scjs.ConManager(conn.baseurl);
24+
25+
fs.mkdtemp(path.join(os.tmpdir(), 'scjs-'), (err, folder) => {
26+
if (err) return done(err);
27+
fs.open(path.join(folder, tmpfile), 'w+', (err, fd) => {
28+
if (err) return done(err);
29+
fs.ftruncate(fd, tmpsize, (err) => {
30+
if (err) return done(err);
31+
fs.write(fd, 'start', 0, (err) => {
32+
if (err) return done(err);
33+
fs.write(fd, 'middle', tmpsize/2, (err) => {
34+
if (err) return done(err);
35+
fs.write(fd, 'end', tmpsize-3, (err) => {
36+
if (err) return done(err);
37+
fs.close(fd, () => {
38+
tmp = folder;
39+
return done();
40+
});
41+
});
42+
});
43+
});
44+
});
45+
});
46+
});
47+
});
48+
});
49+
50+
after(function (done) {
51+
if (tmp) {
52+
let files = fs.readdirSync(tmp);
53+
files.forEach((file) => {
54+
fs.unlinkSync(path.join(tmp, file));
55+
});
56+
fs.rmdirSync(tmp);
57+
}
58+
return done();
59+
});
60+
61+
describe("login()", function () {
62+
it('should return token', function () {
63+
return cm.login(conn.username, conn.password).then((resp) => {
64+
assert.deepStrictEqual(resp, cm.login_response);
65+
assert.ok(cm._token);
66+
});
67+
});
68+
});
69+
70+
describe("get('players')", function () {
71+
it('should get a list of Players', function () {
72+
return cm.get('players').then((players) => {
73+
assert.ok(players.list);
74+
plrids = players.list.map(player => player.id);
75+
return Promise.resolve(plrids);
76+
});
77+
});
78+
});
79+
80+
describe("post('storage')", function () {
81+
it('should get heartbeat of Players', function () {
82+
return cm.post('storage', { 'ids': plrids }).then((uuid) => {
83+
return cm.get(`players/${uuid.value}/states`).then((states) => {
84+
assert.ok(states.states.every(x => plrids.indexOf(x.id) !== -1));
85+
});
86+
});
87+
});
88+
});
89+
90+
describe("upload(file)", function () {
91+
it('should upload testfile', function () {
92+
this.timeout(0);
93+
return cm.upload(path.join(tmp, tmpfile)).then((item) => {
94+
assert.ok(item.mediaId);
95+
upitem1 = item;
96+
return Promise.resolve(upitem1);
97+
});
98+
});
99+
});
100+
101+
describe("put('media/{file.mediaId}')", function () {
102+
it('should add a description', function () {
103+
return cm.put(`media/${upitem1.mediaId}`, { 'id': upitem1.mediaId, 'description': 'Test' });
104+
});
105+
});
106+
107+
describe("get('media/{file.mediaId}', {'fields': 'id,description,length,downloadPath'})", function () {
108+
before(function () {
109+
return cm.get(`media/${upitem1.mediaId}`, { 'fields': 'id,description,length,downloadPath' }).then((item) => {
110+
upitem1 = item;
111+
return Promise.resolve(upitem1);
112+
});
113+
});
114+
115+
it('should be same size as original file', function (done) {
116+
assert.strictEqual(upitem1.length, tmpsize);
117+
return done();
118+
});
119+
it('should have the description "Test"', function (done) {
120+
assert.strictEqual(upitem1.description, 'Test');
121+
return done();
122+
});
123+
it('should not have the name field', function (done) {
124+
assert.strictEqual(upitem1.name, undefined);
125+
return done();
126+
});
127+
});
128+
129+
describe("uploadStream(downloadStream(media.downloadPath))", function () {
130+
it('should pipe testfile', function () {
131+
this.timeout(0);
132+
return cm.uploadStream(cm.downloadStream(upitem1.downloadPath), `_new${tmpfile}`).then((item) => {
133+
assert.ok(item.mediaId);
134+
upitem2 = item;
135+
return Promise.resolve(upitem2);
136+
});
137+
});
138+
});
139+
140+
describe("download(media.downloadPath)", function () {
141+
let buf = Buffer.allocUnsafe(8);
142+
143+
before(function () {
144+
return cm.get(`media/${upitem2.mediaId}`).then((item) => {
145+
upitem2 = item;
146+
return Promise.resolve(upitem2);
147+
});
148+
});
149+
150+
it('should download testfile', function () {
151+
this.timeout(0);
152+
return cm.download(upitem2.downloadPath, path.join(tmp, `_new${tmpfile}`));
153+
});
154+
it('should be same size as original file', function (done) {
155+
fs.stat(path.join(tmp, `_new${tmpfile}`), (err, stats) => {
156+
if (err) return done(err);
157+
assert.strictEqual(stats.size, tmpsize);
158+
return done();
159+
});
160+
});
161+
it('should have "start" at the beginning', function (done) {
162+
fs.open(path.join(tmp, `_new${tmpfile}`), 'r', (err, fd) => {
163+
if (err) return done(err);
164+
fs.read(fd, buf, 0, 5, 0, (err, bytesRead, buffer) => {
165+
if (err) return done(err);
166+
assert.strictEqual(buffer.toString('utf8', 0, 5), 'start');
167+
fs.close(fd, () => {
168+
return done();
169+
});
170+
});
171+
});
172+
});
173+
it('should have "middle" at the middle', function (done) {
174+
fs.open(path.join(tmp, `_new${tmpfile}`), 'r', (err, fd) => {
175+
if (err) return done(err);
176+
fs.read(fd, buf, 0, 6, tmpsize/2, (err, bytesRead, buffer) => {
177+
if (err) return done(err);
178+
assert.strictEqual(buffer.toString('utf8', 0, 6), 'middle');
179+
fs.close(fd, () => {
180+
return done();
181+
});
182+
});
183+
});
184+
});
185+
it('should have "end" at the end', function (done) {
186+
fs.open(path.join(tmp, `_new${tmpfile}`), 'r', (err, fd) => {
187+
if (err) return done(err);
188+
fs.read(fd, buf, 0, 3, tmpsize-3, (err, bytesRead, buffer) => {
189+
if (err) return done(err);
190+
assert.strictEqual(buffer.toString('utf8', 0, 3), 'end');
191+
fs.close(fd, () => {
192+
return done();
193+
});
194+
});
195+
});
196+
});
197+
});
198+
199+
describe("delete('media/{media.id}')", function () {
200+
it('should delete testfiles', function () {
201+
return Promise.all([
202+
cm.delete(`media/${upitem1.id}`),
203+
cm.delete(`media/${upitem2.id}`)
204+
]);
205+
});
206+
});
207+
208+
describe("login(baduser, badpass)", function () {
209+
it('should fail', function () {
210+
return cm.login('', '').then((resp) => {
211+
assert.ok(!cm._token);
212+
throw new Error(resp);
213+
}).catch((err) => {
214+
assert.ok(!cm._token);
215+
});
216+
});
217+
});
218+
});

test/connection.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"baseurl": "http://localhost/ContentManager",
3+
"username": "user",
4+
"password": "pass"
5+
}

0 commit comments

Comments
 (0)