@@ -21,6 +21,7 @@ import com.mongodb.CursorType
21
21
import com.mongodb.FindIterableImpl
22
22
import com.mongodb.Function
23
23
import com.mongodb.MongoClient
24
+ import com.mongodb.MongoGridFSException
24
25
import com.mongodb.MongoNamespace
25
26
import com.mongodb.TestOperationExecutor
26
27
import com.mongodb.client.gridfs.model.GridFSFile
@@ -150,8 +151,8 @@ class GridFSFindIterableSpecification extends Specification {
150
151
firstResult. getId() == new BsonInt32 (expectedResult. getInteger(' _id' ));
151
152
}
152
153
firstResult. getFilename() == expectedResult. getString(' filename' )
153
- firstResult. getLength() == expectedResult. getLong (' length' )
154
- firstResult. getChunkSize() == expectedResult. getInteger (' chunkSize' )
154
+ firstResult. getLength() == expectedResult. get (' length' )
155
+ firstResult. getChunkSize() == expectedResult. get (' chunkSize' )
155
156
firstResult. getMD5() == expectedResult. getString(' md5' )
156
157
firstResult. getUploadDate() == expectedResult. getDate(' uploadDate' )
157
158
@@ -208,6 +209,66 @@ class GridFSFindIterableSpecification extends Specification {
208
209
cannedResults << [toSpecCannedResults, legacyCannedResults]
209
210
}
210
211
212
+ def ' should handle alternative data for the GridFS file' () {
213
+ given :
214
+ def expectedLength = 123
215
+ def expectedChunkSize = 255
216
+
217
+ def cursor = {
218
+ Stub (BatchCursor ) {
219
+ def count = 0
220
+ def getResult = {
221
+ count++
222
+ count == 1 ? [cannedResults] : null
223
+ }
224
+ next() >> { getResult() }
225
+ hasNext() >> { count == 0 }
226
+ }
227
+ }
228
+ def executor = new TestOperationExecutor ([cursor()]);
229
+ def underlying = new FindIterableImpl (namespace, Document , Document , codecRegistry, readPreference, readConcern, executor,
230
+ new Document (), new FindOptions ())
231
+ def mongoIterable = new GridFSFindIterableImpl (underlying)
232
+
233
+ when :
234
+ def results = mongoIterable. first()
235
+
236
+ then :
237
+ results. getLength() == expectedLength
238
+ results. getChunkSize() == expectedChunkSize
239
+
240
+ where :
241
+ cannedResults << alternativeImplCannedResults
242
+ }
243
+
244
+ def ' should throw if has a value with a decimal' () {
245
+ given :
246
+ def cursor = {
247
+ Stub (BatchCursor ) {
248
+ def count = 0
249
+ def getResult = {
250
+ count++
251
+ count == 1 ? [cannedResults] : null
252
+ }
253
+ next() >> { getResult() }
254
+ hasNext() >> { count == 0 }
255
+ }
256
+ }
257
+ def executor = new TestOperationExecutor ([cursor()]);
258
+ def underlying = new FindIterableImpl (namespace, Document , Document , codecRegistry, readPreference, readConcern, executor,
259
+ new Document (), new FindOptions ())
260
+ def mongoIterable = new GridFSFindIterableImpl (underlying)
261
+
262
+ when :
263
+ mongoIterable. first()
264
+
265
+ then :
266
+ thrown(MongoGridFSException )
267
+
268
+ where :
269
+ cannedResults << invalidFloatCannedResults
270
+ }
271
+
211
272
@Shared
212
273
def toSpecCannedResults = [
213
274
Document . parse(''' { '_id' : { '$oid' : '000000000000000000000001' }, 'filename' : 'File 1',
@@ -234,6 +295,24 @@ class GridFSFindIterableSpecification extends Specification {
234
295
'md5' : 'd41d8cd98f00b204e9800998ecf8427e', 'aliases' : ['File Three', 'Third File'] }''' )
235
296
]
236
297
298
+ @Shared
299
+ def alternativeImplCannedResults = [
300
+ Document . parse(''' { '_id' : 1, 'filename' : 'File 1', 'length' : 123, 'chunkSize' : { '$numberLong' : '255' },
301
+ 'uploadDate' : { '$date' : 1438679434041 }, 'md5' : 'd41d8cd98f00b204e9800998ecf8427e' }''' ),
302
+ Document . parse(''' { '_id' : { '$oid' : '000000000000000000000001' }, 'filename' : 'File 2', 'length' : 123.0,
303
+ 'chunkSize' : 255.0, 'uploadDate' : { '$date' : 1438679434050 },
304
+ 'md5' : 'd41d8cd98f00b204e9800998ecf8427e'}''' )
305
+ ]
306
+
307
+ @Shared
308
+ def invalidFloatCannedResults = [
309
+ Document . parse(''' { '_id' : 1, 'filename' : 'File 1', 'length' : 123.4, 'chunkSize' : 255,
310
+ 'uploadDate' : { '$date' : 1438679434041 }, 'md5' : 'd41d8cd98f00b204e9800998ecf8427e' }''' ),
311
+ Document . parse(''' { '_id' : { '$oid' : '000000000000000000000001' }, 'filename' : 'File 2', 'length' : 123,
312
+ 'chunkSize' : 255.5, 'uploadDate' : { '$date' : 1438679434050 },
313
+ 'md5' : 'd41d8cd98f00b204e9800998ecf8427e'}''' )
314
+ ]
315
+
237
316
@Shared
238
317
mixedResults = [toSpecCannedResults[0 ], legacyCannedResults[1 ], legacyCannedResults[2 ]]
239
318
}
0 commit comments