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