@@ -374,15 +374,30 @@ module.exports.shouldStoreStreams = function () {
374
374
expect ( getRes1 . get ( 'ETag' ) ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
375
375
const folder = JSON . parse ( getRes1 . _getBuffer ( ) . toString ( ) ) ;
376
376
expect ( folder [ '@context' ] ) . to . equal ( 'http://remotestorage.io/spec/folder-description' ) ;
377
- expect ( folder . items [ 'yellow-red' ] . ETag ) . to . equal ( putRes1 . get ( 'ETag' ) ) ;
377
+ expect ( folder . items [ 'yellow-red' ] . ETag ) . to . equal ( stripQuotes ( putRes1 . get ( 'ETag' ) ) ) ;
378
378
expect ( folder . items [ 'yellow-red' ] [ 'Content-Type' ] ) . to . equal ( 'text/csv' ) ;
379
379
expect ( folder . items [ 'yellow-red' ] [ 'Content-Length' ] ) . to . equal ( content1 . length ) ;
380
380
expect ( Date . now ( ) - new Date ( folder . items [ 'yellow-red' ] [ 'Last-Modified' ] ) ) . to . be . lessThan ( 9_000 ) ;
381
- expect ( folder . items [ 'blue-green' ] . ETag ) . to . equal ( putRes2 . get ( 'ETag' ) ) ;
381
+ expect ( folder . items [ 'blue-green' ] . ETag ) . to . equal ( stripQuotes ( putRes2 . get ( 'ETag' ) ) ) ;
382
382
expect ( folder . items [ 'blue-green' ] [ 'Content-Type' ] ) . to . equal ( 'text/n3' ) ;
383
383
expect ( folder . items [ 'blue-green' ] [ 'Content-Length' ] ) . to . equal ( content2 . length ) ;
384
384
expect ( Date . now ( ) - new Date ( folder . items [ 'blue-green' ] [ 'Last-Modified' ] ) ) . to . be . lessThan ( 9_000 ) ;
385
- expect ( folder . items [ 'subfolder/' ] . ETag ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
385
+ expect ( folder . items [ 'subfolder/' ] . ETag ) . to . match ( / ^ .{ 6 , 128 } $ / ) ;
386
+
387
+ const [ _subfolderReq , subfolderRes ] = await callMiddleware ( this . handler , {
388
+ method : 'GET' ,
389
+ url : `/${ this . userIdStore } /color-category/color-folder/subfolder/`
390
+ } ) ;
391
+ expect ( subfolderRes . statusCode ) . to . equal ( 200 ) ;
392
+ expect ( subfolderRes . get ( 'Content-Type' ) ) . to . equal ( 'application/ld+json' ) ;
393
+ expect ( subfolderRes . get ( 'ETag' ) ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
394
+ expect ( stripQuotes ( subfolderRes . get ( 'ETag' ) ) ) . to . equal ( folder . items [ 'subfolder/' ] . ETag ) ;
395
+ const subfolder = JSON . parse ( subfolderRes . _getBuffer ( ) . toString ( ) ) ;
396
+ expect ( subfolder [ '@context' ] ) . to . equal ( 'http://remotestorage.io/spec/folder-description' ) ;
397
+ expect ( subfolder . items [ 'purple-ultraviolet' ] . ETag ) . to . equal ( stripQuotes ( putRes3 . get ( 'ETag' ) ) ) ;
398
+ expect ( subfolder . items [ 'purple-ultraviolet' ] [ 'Content-Type' ] ) . to . equal ( 'text/plain' ) ;
399
+ expect ( subfolder . items [ 'purple-ultraviolet' ] [ 'Content-Length' ] ) . to . equal ( content3 . length ) ;
400
+ expect ( Date . now ( ) - new Date ( subfolder . items [ 'purple-ultraviolet' ] [ 'Last-Modified' ] ) ) . to . be . lessThan ( 9_000 ) ;
386
401
387
402
const [ _getReq2 , getRes2 ] = await callMiddleware ( this . handler , {
388
403
method : 'GET' ,
@@ -391,6 +406,45 @@ module.exports.shouldStoreStreams = function () {
391
406
} ) ;
392
407
expect ( getRes2 . statusCode ) . to . equal ( 304 ) ;
393
408
expect ( getRes2 . _getBuffer ( ) . toString ( ) ) . to . equal ( '' ) ;
409
+
410
+ const content3changed = 'plum & not visible' ;
411
+ const [ _putReq4 , putRes4 ] = await callMiddleware ( this . handler , {
412
+ method : 'PUT' ,
413
+ url : `/${ this . userIdStore } /color-category/color-folder/subfolder/purple-ultraviolet` ,
414
+ headers : { 'Content-Length' : content3changed . length , 'Content-Type' : 'text/plain' } ,
415
+ body : content3changed
416
+ } ) ;
417
+ expect ( putRes4 . statusCode ) . to . equal ( 200 ) ;
418
+ expect ( putRes4 . get ( 'ETag' ) ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
419
+ expect ( putRes4 . get ( 'ETag' ) ) . not . to . equal ( putRes3 . get ( 'ETag' ) ) ;
420
+ expect ( putRes4 . _getBuffer ( ) . toString ( ) ) . to . equal ( '' ) ;
421
+
422
+ const [ _folderReq2 , folderRes2 ] = await callMiddleware ( this . handler , {
423
+ method : 'GET' ,
424
+ url : `/${ this . userIdStore } /color-category/color-folder/` ,
425
+ headers : { 'If-None-Match' : getRes1 . get ( 'ETag' ) }
426
+ } ) ;
427
+ expect ( folderRes2 . statusCode ) . to . equal ( 200 ) ;
428
+ expect ( folderRes2 . get ( 'ETag' ) ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
429
+ expect ( folderRes2 . get ( 'ETag' ) ) . not . to . equal ( getRes1 . get ( 'ETag' ) ) ;
430
+ const folderChanged = JSON . parse ( folderRes2 . _getBuffer ( ) . toString ( ) ) ;
431
+ expect ( folderChanged . items [ 'yellow-red' ] . ETag ) . to . equal ( stripQuotes ( putRes1 . get ( 'ETag' ) ) ) ;
432
+ expect ( folderChanged . items [ 'blue-green' ] . ETag ) . to . equal ( stripQuotes ( putRes2 . get ( 'ETag' ) ) ) ;
433
+ expect ( folderChanged . items [ 'subfolder/' ] . ETag ) . to . match ( / ^ .{ 6 , 128 } $ / ) ;
434
+ expect ( folderChanged . items [ 'subfolder/' ] . ETag ) . not . to . equal ( folder . items [ 'subfolder/' ] . ETag ) ;
435
+
436
+ const [ _subfolderReq2 , subfolderRes2 ] = await callMiddleware ( this . handler , {
437
+ method : 'GET' ,
438
+ url : `/${ this . userIdStore } /color-category/color-folder/subfolder/`
439
+ } ) ;
440
+ expect ( subfolderRes2 . statusCode ) . to . equal ( 200 ) ;
441
+ expect ( subfolderRes2 . get ( 'ETag' ) ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
442
+ expect ( stripQuotes ( subfolderRes2 . get ( 'ETag' ) ) ) . not . to . equal ( folder . items [ 'subfolder/' ] . ETag ) ;
443
+ expect ( stripQuotes ( subfolderRes2 . get ( 'ETag' ) ) ) . to . equal ( folderChanged . items [ 'subfolder/' ] . ETag ) ;
444
+ const subfolderChanged = JSON . parse ( subfolderRes2 . _getBuffer ( ) . toString ( ) ) ;
445
+ expect ( subfolderChanged . items [ 'purple-ultraviolet' ] . ETag ) . not . to . equal ( stripQuotes ( putRes3 . get ( 'ETag' ) ) ) ;
446
+ expect ( subfolderChanged . items [ 'purple-ultraviolet' ] . ETag ) . to . equal ( stripQuotes ( putRes4 . get ( 'ETag' ) ) ) ;
447
+ expect ( Date . now ( ) - new Date ( subfolderChanged . items [ 'purple-ultraviolet' ] [ 'Last-Modified' ] ) ) . to . be . lessThan ( 9_000 ) ;
394
448
} ) ;
395
449
396
450
it ( 'returns folder when If-None-Match has an old ETag' , async function ( ) {
@@ -415,7 +469,7 @@ module.exports.shouldStoreStreams = function () {
415
469
expect ( getRes . get ( 'ETag' ) ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
416
470
const folder = JSON . parse ( getRes . _getBuffer ( ) . toString ( ) ) ;
417
471
expect ( folder [ '@context' ] ) . to . equal ( 'http://remotestorage.io/spec/folder-description' ) ;
418
- expect ( folder . items . mud . ETag ) . to . equal ( putRes . get ( 'ETag' ) ) ;
472
+ expect ( folder . items . mud . ETag ) . to . equal ( stripQuotes ( putRes . get ( 'ETag' ) ) ) ;
419
473
expect ( folder . items . mud [ 'Content-Type' ] ) . to . equal ( 'text/vnd.qq' ) ;
420
474
expect ( folder . items . mud [ 'Content-Length' ] ) . to . equal ( content . length ) ;
421
475
expect ( Date . now ( ) - new Date ( folder . items . mud [ 'Last-Modified' ] ) ) . to . be . lessThan ( 9_000 ) ;
@@ -853,7 +907,7 @@ module.exports.shouldStoreStreams = function () {
853
907
const folder1 = JSON . parse ( folderRes1 . _getBuffer ( ) . toString ( ) ) ;
854
908
expect ( folder1 . items . qux [ 'Content-Length' ] ) . to . be . equal ( content . length ) ;
855
909
expect ( folder1 . items . qux [ 'Content-Type' ] ) . to . be . equal ( 'text/example' ) ;
856
- expect ( folder1 . items . qux . ETag ) . to . be . equal ( putRes . get ( 'ETag' ) ) ;
910
+ expect ( folder1 . items . qux . ETag ) . to . be . equal ( stripQuotes ( putRes . get ( 'ETag' ) ) ) ;
857
911
expect ( Date . now ( ) - new Date ( folder1 . items . qux [ 'Last-Modified' ] ) ) . to . be . lessThan ( 5000 ) ;
858
912
859
913
const [ _folderReq2 , folderRes2 ] = await callMiddleware ( this . handler , { method : 'GET' , url : `/${ this . userIdStore } /photos/foo/` } ) ;
@@ -863,7 +917,7 @@ module.exports.shouldStoreStreams = function () {
863
917
const folder2 = JSON . parse ( folderRes2 . _getBuffer ( ) . toString ( ) ) ;
864
918
expect ( folder2 . items [ 'bar/' ] [ 'Content-Length' ] ) . to . be . undefined ;
865
919
expect ( folder2 . items [ 'bar/' ] [ 'Content-Type' ] ) . to . be . undefined ;
866
- expect ( folder2 . items [ 'bar/' ] . ETag ) . to . be . equal ( folderRes1 . get ( 'ETag' ) ) ;
920
+ expect ( folder2 . items [ 'bar/' ] . ETag ) . to . be . equal ( stripQuotes ( folderRes1 . get ( 'ETag' ) ) ) ;
867
921
expect ( folder2 . items [ 'bar/' ] [ 'Last-Modified' ] ) . to . be . undefined ;
868
922
869
923
const [ _folderReq3 , folderRes3 ] = await callMiddleware ( this . handler , { method : 'GET' , url : `/${ this . userIdStore } /photos/` } ) ;
@@ -873,7 +927,7 @@ module.exports.shouldStoreStreams = function () {
873
927
const folder3 = JSON . parse ( folderRes3 . _getBuffer ( ) . toString ( ) ) ;
874
928
expect ( folder3 . items [ 'foo/' ] [ 'Content-Length' ] ) . to . be . undefined ;
875
929
expect ( folder3 . items [ 'foo/' ] [ 'Content-Type' ] ) . to . be . undefined ;
876
- expect ( folder3 . items [ 'foo/' ] . ETag ) . to . be . equal ( folderRes2 . get ( 'ETag' ) ) ;
930
+ expect ( folder3 . items [ 'foo/' ] . ETag ) . to . be . equal ( stripQuotes ( folderRes2 . get ( 'ETag' ) ) ) ;
877
931
expect ( folder3 . items [ 'foo/' ] [ 'Last-Modified' ] ) . to . be . undefined ;
878
932
879
933
const [ _folderReq4 , folderRes4 ] = await callMiddleware ( this . handler , { method : 'GET' , url : `/${ this . userIdStore } /` } ) ;
@@ -883,7 +937,7 @@ module.exports.shouldStoreStreams = function () {
883
937
const folder4 = JSON . parse ( folderRes4 . _getBuffer ( ) . toString ( ) ) ;
884
938
expect ( folder4 . items [ 'photos/' ] [ 'Content-Length' ] ) . to . be . undefined ;
885
939
expect ( folder4 . items [ 'photos/' ] [ 'Content-Type' ] ) . to . be . undefined ;
886
- expect ( folder4 . items [ 'photos/' ] . ETag ) . to . be . equal ( folderRes3 . get ( 'ETag' ) ) ;
940
+ expect ( folder4 . items [ 'photos/' ] . ETag ) . to . be . equal ( stripQuotes ( folderRes3 . get ( 'ETag' ) ) ) ;
887
941
expect ( folder4 . items [ 'photos/' ] [ 'Last-Modified' ] ) . to . be . undefined ;
888
942
} ) ;
889
943
@@ -1296,7 +1350,7 @@ module.exports.shouldStoreStreams = function () {
1296
1350
expect ( getRes4 . get ( 'ETag' ) ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
1297
1351
const folder4 = JSON . parse ( getRes4 . _getBuffer ( ) . toString ( ) ) ;
1298
1352
expect ( folder4 [ '@context' ] ) . to . equal ( 'http://remotestorage.io/spec/folder-description' ) ;
1299
- expect ( folder4 . items [ 'europe/' ] . ETag ) . to . match ( / ^ " .{ 6 , 128 } " $ / ) ;
1353
+ expect ( folder4 . items [ 'europe/' ] . ETag ) . to . match ( / ^ .{ 6 , 128 } $ / ) ;
1300
1354
1301
1355
const [ _req2 , res2 , next2 ] = await callMiddleware ( this . handler , {
1302
1356
method : 'DELETE' ,
@@ -1449,3 +1503,7 @@ module.exports.shouldStoreStreams = function () {
1449
1503
} ) ;
1450
1504
} ) ;
1451
1505
} ;
1506
+
1507
+ function stripQuotes ( ETag ) {
1508
+ return ETag . replace ( / ^ " | ^ W \/ " | " $ / g, '' ) ;
1509
+ }
0 commit comments