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+ } ) ;
0 commit comments