@@ -1313,6 +1313,64 @@ describe('Shard', () => {
1313
1313
}
1314
1314
} ) ;
1315
1315
} ) ;
1316
+ describe ( 'collection.stats()' , ( ) => {
1317
+ let db : Database ;
1318
+ let hasTotalSize : boolean ;
1319
+ const dbName = 'shard-stats-test' ;
1320
+ const ns = `${ dbName } .test` ;
1321
+
1322
+ beforeEach ( async ( ) => {
1323
+ db = sh . _database . getSiblingDB ( dbName ) ;
1324
+ await db . getCollection ( 'test' ) . insertOne ( { key : 1 } ) ;
1325
+ await db . getCollection ( 'test' ) . createIndex ( { key : 1 } ) ;
1326
+ hasTotalSize = ! ( await db . version ( ) ) . match ( / ^ 4 \. [ 0 1 2 3 ] \. / ) ;
1327
+ } ) ;
1328
+ afterEach ( async ( ) => {
1329
+ await db . dropDatabase ( ) ;
1330
+ } ) ;
1331
+ context ( 'unsharded collections' , ( ) => {
1332
+ it ( 'works without indexDetails' , async ( ) => {
1333
+ const result = await db . getCollection ( 'test' ) . stats ( ) ;
1334
+ expect ( result . sharded ) . to . equal ( false ) ;
1335
+ expect ( result . count ) . to . equal ( 1 ) ;
1336
+ if ( hasTotalSize ) {
1337
+ expect ( result . shards [ result . primary ] . totalSize ) . to . be . a ( 'number' ) ;
1338
+ }
1339
+ expect ( result . shards [ result . primary ] . indexDetails ) . to . equal ( undefined ) ;
1340
+ } ) ;
1341
+ it ( 'works with indexDetails' , async ( ) => {
1342
+ const result = await db . getCollection ( 'test' ) . stats ( { indexDetails : true } ) ;
1343
+ expect ( result . shards [ result . primary ] . indexDetails . _id_ . metadata . formatVersion ) . to . be . a ( 'number' ) ;
1344
+ } ) ;
1345
+ } ) ;
1346
+ context ( 'sharded collections' , ( ) => {
1347
+ beforeEach ( async ( ) => {
1348
+ expect ( ( await sh . enableSharding ( dbName ) ) . ok ) . to . equal ( 1 ) ;
1349
+ expect ( ( await sh . shardCollection ( ns , { key : 1 } ) ) . collectionsharded ) . to . equal ( ns ) ;
1350
+ } ) ;
1351
+ it ( 'works without indexDetails' , async ( ) => {
1352
+ const result = await db . getCollection ( 'test' ) . stats ( ) ;
1353
+ expect ( result . sharded ) . to . equal ( true ) ;
1354
+ expect ( result . count ) . to . equal ( 1 ) ;
1355
+ expect ( result . primary ) . to . equal ( undefined ) ;
1356
+ for ( const shard of Object . values ( result . shards ) as any [ ] ) {
1357
+ if ( hasTotalSize ) {
1358
+ expect ( shard . totalSize ) . to . be . a ( 'number' ) ;
1359
+ }
1360
+ expect ( shard . indexDetails ) . to . equal ( undefined ) ;
1361
+ }
1362
+ } ) ;
1363
+ it ( 'works with indexDetails' , async ( ) => {
1364
+ const result = await db . getCollection ( 'test' ) . stats ( { indexDetails : true } ) ;
1365
+ for ( const shard of Object . values ( result . shards ) as any [ ] ) {
1366
+ if ( hasTotalSize ) {
1367
+ expect ( shard . totalSize ) . to . be . a ( 'number' ) ;
1368
+ }
1369
+ expect ( shard . indexDetails . _id_ . metadata . formatVersion ) . to . be . a ( 'number' ) ;
1370
+ }
1371
+ } ) ;
1372
+ } ) ;
1373
+ } ) ;
1316
1374
describe ( 'collection.isCapped' , ( ) => {
1317
1375
it ( 'returns true for config.changelog' , async ( ) => {
1318
1376
const ret = await sh . _database . getSiblingDB ( 'config' ) . getCollection ( 'changelog' ) . isCapped ( ) ;
0 commit comments