@@ -103,7 +103,7 @@ const INITIAL_CALLS_OBJECT = {
103
103
updateDirectory : array <
104
104
{ directoryId : backend . DirectoryId } & backend . UpdateDirectoryRequestBody
105
105
> ( ) ,
106
- deleteAsset : array < { assetId : backend . AssetId } > ( ) ,
106
+ deleteAsset : array < { assetId : backend . AssetId ; force : boolean } > ( ) ,
107
107
undoDeleteAsset : array < { assetId : backend . AssetId } > ( ) ,
108
108
createUser : array < backend . CreateUserRequestBody > ( ) ,
109
109
createUserGroup : array < backend . CreateUserGroupRequestBody > ( ) ,
@@ -283,6 +283,17 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
283
283
return ! alreadyDeleted
284
284
}
285
285
286
+ const forceDeleteAsset = ( assetId : backend . AssetId ) => {
287
+ const hasAsset = assetMap . has ( assetId )
288
+ deletedAssets . delete ( assetId )
289
+ assetMap . delete ( assetId )
290
+ assets . splice (
291
+ assets . findIndex ( ( asset ) => asset . id === assetId ) ,
292
+ 1 ,
293
+ )
294
+ return hasAsset
295
+ }
296
+
286
297
const undeleteAsset = ( assetId : backend . AssetId ) => {
287
298
const wasDeleted = deletedAssets . has ( assetId )
288
299
deletedAssets . delete ( assetId )
@@ -487,7 +498,7 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
487
498
description : rest . description ?? '' ,
488
499
labels : [ ] ,
489
500
parentId : defaultDirectoryId ,
490
- permissions : [ ] ,
501
+ permissions : [ createUserPermission ( defaultUser , permissions . PermissionAction . own ) ] ,
491
502
parentsPath : '' ,
492
503
virtualParentsPath : '' ,
493
504
} ,
@@ -517,6 +528,48 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
517
528
return secret
518
529
}
519
530
531
+ const createDatalink = ( rest : Partial < backend . DatalinkAsset > ) : backend . DatalinkAsset => {
532
+ const datalink = object . merge (
533
+ {
534
+ type : backend . AssetType . datalink ,
535
+ id : backend . DatalinkId ( 'datalink-' + uniqueString . uniqueString ( ) ) ,
536
+ projectState : null ,
537
+ extension : null ,
538
+ title : rest . title ?? '' ,
539
+ modifiedAt : dateTime . toRfc3339 ( new Date ( ) ) ,
540
+ description : rest . description ?? '' ,
541
+ labels : [ ] ,
542
+ parentId : defaultDirectoryId ,
543
+ permissions : [ createUserPermission ( defaultUser , permissions . PermissionAction . own ) ] ,
544
+ parentsPath : '' ,
545
+ virtualParentsPath : '' ,
546
+ } ,
547
+ rest ,
548
+ )
549
+
550
+ Object . defineProperty ( datalink , 'toJSON' , {
551
+ value : function toJSON ( ) {
552
+ const { parentsPath : _ , virtualParentsPath : __ , ...rest } = this
553
+
554
+ return {
555
+ ...rest ,
556
+ parentsPath : this . parentsPath ,
557
+ virtualParentsPath : this . virtualParentsPath ,
558
+ }
559
+ } ,
560
+ } )
561
+
562
+ Object . defineProperty ( datalink , 'parentsPath' , {
563
+ get : ( ) => getParentPath ( datalink . parentId ) ,
564
+ } )
565
+
566
+ Object . defineProperty ( datalink , 'virtualParentsPath' , {
567
+ get : ( ) => getVirtualParentPath ( datalink . parentId , datalink . title ) ,
568
+ } )
569
+
570
+ return datalink
571
+ }
572
+
520
573
const createLabel = ( value : string , color : backend . LChColor ) : backend . Label => ( {
521
574
id : backend . TagId ( 'tag-' + uniqueString . uniqueString ( ) ) ,
522
575
value : backend . LabelName ( value ) ,
@@ -539,6 +592,10 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
539
592
return addAsset ( createSecret ( rest ) )
540
593
}
541
594
595
+ const addDatalink = ( rest : Partial < backend . DatalinkAsset > = { } ) => {
596
+ return addAsset ( createDatalink ( rest ) )
597
+ }
598
+
542
599
const addLabel = ( value : string , color : backend . LChColor ) => {
543
600
const label = createLabel ( value , color )
544
601
labels . push ( label )
@@ -1109,6 +1166,7 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
1109
1166
} )
1110
1167
1111
1168
await delete_ ( remoteBackendPaths . deleteAssetPath ( GLOB_ASSET_ID ) , async ( route , request ) => {
1169
+ const force = new URL ( request . url ( ) ) . searchParams . get ( 'force' ) === 'true'
1112
1170
const maybeId = request . url ( ) . match ( / [ / ] a s s e t s [ / ] ( [ ^ ? ] + ) / ) ?. [ 1 ]
1113
1171
1114
1172
if ( ! maybeId ) return
@@ -1117,9 +1175,13 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
1117
1175
// `DirectoryId` to make TypeScript happy.
1118
1176
const assetId = decodeURIComponent ( maybeId ) as backend . DirectoryId
1119
1177
1120
- called ( 'deleteAsset' , { assetId } )
1178
+ called ( 'deleteAsset' , { assetId, force } )
1121
1179
1122
- deleteAsset ( assetId )
1180
+ if ( force ) {
1181
+ forceDeleteAsset ( assetId )
1182
+ } else {
1183
+ deleteAsset ( assetId )
1184
+ }
1123
1185
1124
1186
await route . fulfill ( { status : HTTP_STATUS_NO_CONTENT } )
1125
1187
} )
@@ -1365,6 +1427,9 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
1365
1427
defaultUser,
1366
1428
defaultUserId,
1367
1429
rootDirectoryId : defaultDirectoryId ,
1430
+ get assetCount ( ) {
1431
+ return assetMap . size
1432
+ } ,
1368
1433
goOffline : ( ) => {
1369
1434
isOnline = false
1370
1435
} ,
@@ -1395,10 +1460,12 @@ async function mockApiInternal({ page, setupAPI }: MockParams) {
1395
1460
createProject,
1396
1461
createFile,
1397
1462
createSecret,
1463
+ createDatalink,
1398
1464
addDirectory,
1399
1465
addProject,
1400
1466
addFile,
1401
1467
addSecret,
1468
+ addDatalink,
1402
1469
createLabel,
1403
1470
addLabel,
1404
1471
setLabels,
0 commit comments