@@ -4,9 +4,10 @@ import path from 'path'
4
4
import { fileURLToPath } from 'url'
5
5
6
6
import type { NextRESTClient } from '../helpers/NextRESTClient.js'
7
- import type { Orderable , OrderableJoin } from './payload-types.js'
7
+ import type { Draft , Orderable , OrderableJoin } from './payload-types.js'
8
8
9
9
import { initPayloadInt } from '../helpers/initPayloadInt.js'
10
+ import { draftsSlug } from './collections/Drafts/index.js'
10
11
import { orderableSlug } from './collections/Orderable/index.js'
11
12
import { orderableJoinSlug } from './collections/OrderableJoin/index.js'
12
13
@@ -330,6 +331,121 @@ describe('Sort', () => {
330
331
} )
331
332
} )
332
333
334
+ describe ( 'Orderable' , ( ) => {
335
+ let orderable1 : Orderable
336
+ let orderable2 : Orderable
337
+ let orderableDraft1 : Draft
338
+ let orderableDraft2 : Draft
339
+ beforeAll ( async ( ) => {
340
+ orderable1 = await payload . create ( {
341
+ collection : orderableSlug ,
342
+ data : {
343
+ title : 'Orderable 1' ,
344
+ } ,
345
+ } )
346
+ orderable2 = await payload . create ( {
347
+ collection : orderableSlug ,
348
+ data : {
349
+ title : 'Orderable 2' ,
350
+ } ,
351
+ } )
352
+ orderableDraft1 = await payload . create ( {
353
+ collection : draftsSlug ,
354
+ data : {
355
+ text : 'Orderable 1' ,
356
+ _status : 'draft' ,
357
+ } ,
358
+ } )
359
+ orderableDraft2 = await payload . create ( {
360
+ collection : draftsSlug ,
361
+ data : {
362
+ text : 'Orderable 2' ,
363
+ _status : 'draft' ,
364
+ } ,
365
+ } )
366
+ } )
367
+
368
+ it ( 'should set order by default' , async ( ) => {
369
+ const ordered = await payload . find ( {
370
+ collection : orderableSlug ,
371
+ where : {
372
+ title : {
373
+ contains : 'Orderable ' ,
374
+ } ,
375
+ } ,
376
+ } )
377
+
378
+ expect ( orderable1 . _order ) . toBeDefined ( )
379
+ expect ( orderable2 . _order ) . toBeDefined ( )
380
+ expect ( parseInt ( orderable1 . _order , 16 ) ) . toBeLessThan ( parseInt ( orderable2 . _order , 16 ) )
381
+ expect ( ordered . docs [ 0 ] . id ) . toStrictEqual ( orderable1 . id )
382
+ expect ( ordered . docs [ 1 ] . id ) . toStrictEqual ( orderable2 . id )
383
+ } )
384
+
385
+ it ( 'should allow reordering with REST API' , async ( ) => {
386
+ const res = await restClient . POST ( '/reorder' , {
387
+ body : JSON . stringify ( {
388
+ collectionSlug : orderableSlug ,
389
+ docsToMove : [ orderable1 . id ] ,
390
+ newKeyWillBe : 'greater' ,
391
+ orderableFieldName : '_order' ,
392
+ target : {
393
+ id : orderable2 . id ,
394
+ key : orderable2 . _order ,
395
+ } ,
396
+ } ) ,
397
+ } )
398
+
399
+ expect ( res . status ) . toStrictEqual ( 200 )
400
+
401
+ const ordered = await payload . find ( {
402
+ collection : 'orderable' ,
403
+ where : {
404
+ title : {
405
+ contains : 'Orderable ' ,
406
+ } ,
407
+ } ,
408
+ } )
409
+
410
+ expect ( parseInt ( ordered . docs [ 0 ] . _order , 16 ) ) . toBeLessThan (
411
+ parseInt ( ordered . docs [ 1 ] . _order , 16 ) ,
412
+ )
413
+ } )
414
+
415
+ it ( 'should allow reordering with REST API with drafts enabled' , async ( ) => {
416
+ const res = await restClient . POST ( '/reorder' , {
417
+ body : JSON . stringify ( {
418
+ collectionSlug : draftsSlug ,
419
+ docsToMove : [ orderableDraft1 . id ] ,
420
+ newKeyWillBe : 'greater' ,
421
+ orderableFieldName : '_order' ,
422
+ target : {
423
+ id : orderableDraft2 . id ,
424
+ key : orderableDraft2 . _order ,
425
+ } ,
426
+ } ) ,
427
+ } )
428
+
429
+ expect ( res . status ) . toStrictEqual ( 200 )
430
+
431
+ const ordered = await payload . find ( {
432
+ collection : draftsSlug ,
433
+ draft : true ,
434
+ where : {
435
+ text : {
436
+ contains : 'Orderable ' ,
437
+ } ,
438
+ } ,
439
+ } )
440
+
441
+ expect ( ordered . docs ) . toHaveLength ( 2 )
442
+
443
+ expect ( parseInt ( ordered . docs [ 0 ] . _order , 16 ) ) . toBeLessThan (
444
+ parseInt ( ordered . docs [ 1 ] . _order , 16 ) ,
445
+ )
446
+ } )
447
+ } )
448
+
333
449
describe ( 'Orderable join' , ( ) => {
334
450
let related : OrderableJoin
335
451
let orderable1 : Orderable
0 commit comments