Skip to content

Commit f5cefbb

Browse files
Jake ChampionJakeChampion
authored andcommitted
add tests for KVStore.prototype.delete
1 parent 0716bd4 commit f5cefbb

File tree

1 file changed

+182
-1
lines changed
  • integration-tests/js-compute/fixtures/app/src

1 file changed

+182
-1
lines changed

integration-tests/js-compute/fixtures/app/src/kv-store.js

Lines changed: 182 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ import { routes } from "./routes.js";
9595
return pass()
9696
});
9797
}
98+
9899
// KVStore put method
99100
{
100101

@@ -485,6 +486,158 @@ import { routes } from "./routes.js";
485486
});
486487
}
487488

489+
// KVStore delete method
490+
{
491+
routes.set("/kv-store/delete/called-as-constructor", async () => {
492+
let error = assertThrows(() => {
493+
new KVStore.prototype.delete('1')
494+
}, TypeError, `KVStore.prototype.delete is not a constructor`)
495+
if (error) { return error }
496+
return pass()
497+
});
498+
routes.set("/kv-store/delete/called-unbound", async () => {
499+
let error = await assertRejects(async () => {
500+
await KVStore.prototype.delete.call(undefined, '1')
501+
}, TypeError, "Method delete called on receiver that's not an instance of KVStore")
502+
if (error) { return error }
503+
return pass()
504+
});
505+
// https://tc39.es/ecma262/#sec-tostring
506+
routes.set("/kv-store/delete/key-parameter-calls-7.1.17-ToString", async () => {
507+
let sentinel;
508+
const test = async () => {
509+
sentinel = Symbol();
510+
const key = {
511+
toString() {
512+
throw sentinel;
513+
}
514+
}
515+
const store = createValidStore()
516+
await store.delete(key)
517+
}
518+
let error = await assertRejects(test)
519+
if (error) { return error }
520+
try {
521+
await test()
522+
} catch (thrownError) {
523+
let error = assert(thrownError, sentinel, 'thrownError === sentinel')
524+
if (error) { return error }
525+
}
526+
error = await assertRejects(async () => {
527+
const store = createValidStore()
528+
await store.delete(Symbol())
529+
}, TypeError, `can't convert symbol to string`)
530+
if (error) { return error }
531+
return pass()
532+
});
533+
routes.set("/kv-store/delete/key-parameter-not-supplied", async () => {
534+
let error = await assertRejects(async () => {
535+
const store = createValidStore()
536+
await store.delete()
537+
}, TypeError, `delete: At least 1 argument required, but only 0 passed`)
538+
if (error) { return error }
539+
return pass()
540+
});
541+
routes.set("/kv-store/delete/key-parameter-empty-string", async () => {
542+
let error = await assertRejects(async () => {
543+
const store = createValidStore()
544+
await store.delete('')
545+
}, TypeError, `KVStore key can not be an empty string`)
546+
if (error) { return error }
547+
return pass()
548+
});
549+
routes.set("/kv-store/delete/key-parameter-1024-character-string", async () => {
550+
let error = await assertResolves(async () => {
551+
const store = createValidStore()
552+
const key = 'a'.repeat(1024)
553+
await store.delete(key)
554+
})
555+
if (error) { return error }
556+
return pass()
557+
});
558+
routes.set("/kv-store/delete/key-parameter-1025-character-string", async () => {
559+
let error = await assertRejects(async () => {
560+
const store = createValidStore()
561+
const key = 'a'.repeat(1025)
562+
await store.delete(key)
563+
}, TypeError, `KVStore key can not be more than 1024 characters`)
564+
if (error) { return error }
565+
return pass()
566+
});
567+
routes.set("/kv-store/delete/key-parameter-containing-newline", async () => {
568+
let error = await assertRejects(async () => {
569+
let store = createValidStore()
570+
await store.delete('\n')
571+
}, TypeError, `KVStore key can not contain newline character`)
572+
if (error) { return error }
573+
return pass()
574+
});
575+
routes.set("/kv-store/delete/key-parameter-containing-carriage-return", async () => {
576+
let error = await assertRejects(async () => {
577+
let store = createValidStore()
578+
await store.delete('\r')
579+
}, TypeError, `KVStore key can not contain carriage return character`)
580+
if (error) { return error }
581+
return pass()
582+
});
583+
routes.set("/kv-store/delete/key-parameter-starting-with-well-known-acme-challenge", async () => {
584+
let error = await assertRejects(async () => {
585+
let store = createValidStore()
586+
await store.delete('.well-known/acme-challenge/')
587+
}, TypeError, `KVStore key can not start with .well-known/acme-challenge/`)
588+
if (error) { return error }
589+
return pass()
590+
});
591+
routes.set("/kv-store/delete/key-parameter-single-dot", async () => {
592+
let error = await assertRejects(async () => {
593+
let store = createValidStore()
594+
await store.delete('.')
595+
}, TypeError, `KVStore key can not be '.' or '..'`)
596+
if (error) { return error }
597+
return pass()
598+
});
599+
routes.set("/kv-store/delete/key-parameter-double-dot", async () => {
600+
let error = await assertRejects(async () => {
601+
let store = createValidStore()
602+
await store.delete('..')
603+
}, TypeError, `KVStore key can not be '.' or '..'`)
604+
if (error) { return error }
605+
return pass()
606+
});
607+
routes.set("/kv-store/delete/key-parameter-containing-special-characters", async () => {
608+
const specialCharacters = ['[', ']', '*', '?', '#'];
609+
for (const character of specialCharacters) {
610+
let error = await assertRejects(async () => {
611+
let store = createValidStore()
612+
await store.delete(character)
613+
}, TypeError, `KVStore key can not contain ${character} character`)
614+
if (error) { return error }
615+
}
616+
return pass()
617+
});
618+
routes.set("/kv-store/delete/key-does-not-exist-returns-undefined", async () => {
619+
let store = createValidStore()
620+
let result = store.delete(Math.random())
621+
let error = assert(result instanceof Promise, true, `store.delete(Math.random()) instanceof Promise`)
622+
if (error) { return error }
623+
error = assert(await result, undefined, `await store.delete(Math.random())`)
624+
if (error) { return error }
625+
return pass()
626+
});
627+
routes.set("/kv-store/delete/key-exists", async () => {
628+
let store = createValidStore()
629+
let key = `key-exists-${Math.random()}`;
630+
await store.put(key, 'hello')
631+
let result = store.delete(key)
632+
let error = assert(result instanceof Promise, true, `store.delete(key) instanceof Promise`)
633+
if (error) { return error }
634+
result = await result
635+
error = assert(result, undefined, `(await store.delete(key) === undefined)`)
636+
if (error) { return error }
637+
return pass()
638+
});
639+
}
640+
488641
// KVStore get method
489642
{
490643
routes.set("/kv-store/get/called-as-constructor", async () => {
@@ -646,6 +799,7 @@ import { routes } from "./routes.js";
646799
});
647800
}
648801
}
802+
649803
// KVStoreEntry
650804
{
651805
routes.set("/kv-store-entry/interface", async () => {
@@ -931,7 +1085,7 @@ async function kvStoreInterfaceTests() {
9311085
if (error) { return error }
9321086

9331087
actual = Reflect.ownKeys(KVStore.prototype)
934-
expected = ["constructor", "get", "put"]
1088+
expected = ["constructor", "delete", "get", "put"]
9351089
error = assert(actual, expected, `Reflect.ownKeys(KVStore.prototype)`)
9361090
if (error) { return error }
9371091

@@ -940,6 +1094,11 @@ async function kvStoreInterfaceTests() {
9401094
error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(KVStore.prototype, 'constructor')`)
9411095
if (error) { return error }
9421096

1097+
actual = Reflect.getOwnPropertyDescriptor(KVStore.prototype, 'delete')
1098+
expected = { "writable": true, "enumerable": true, "configurable": true, value: KVStore.prototype.delete }
1099+
error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(KVStore.prototype, 'delete')`)
1100+
if (error) { return error }
1101+
9431102
actual = Reflect.getOwnPropertyDescriptor(KVStore.prototype, 'get')
9441103
expected = { "writable": true, "enumerable": true, "configurable": true, value: KVStore.prototype.get }
9451104
error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(KVStore.prototype, 'get')`)
@@ -952,6 +1111,8 @@ async function kvStoreInterfaceTests() {
9521111

9531112
error = assert(typeof KVStore.prototype.constructor, 'function', `typeof KVStore.prototype.constructor`)
9541113
if (error) { return error }
1114+
error = assert(typeof KVStore.prototype.delete, 'function', `typeof KVStore.prototype.delete`)
1115+
if (error) { return error }
9551116
error = assert(typeof KVStore.prototype.get, 'function', `typeof KVStore.prototype.get`)
9561117
if (error) { return error }
9571118
error = assert(typeof KVStore.prototype.put, 'function', `typeof KVStore.prototype.put`)
@@ -977,6 +1138,26 @@ async function kvStoreInterfaceTests() {
9771138
error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(KVStore.prototype.constructor, 'name')`)
9781139
if (error) { return error }
9791140

1141+
actual = Reflect.getOwnPropertyDescriptor(KVStore.prototype.delete, 'length')
1142+
expected = {
1143+
"value": 1,
1144+
"writable": false,
1145+
"enumerable": false,
1146+
"configurable": true
1147+
}
1148+
error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(KVStore.prototype.delete, 'length')`)
1149+
if (error) { return error }
1150+
1151+
actual = Reflect.getOwnPropertyDescriptor(KVStore.prototype.delete, 'name')
1152+
expected = {
1153+
"value": "delete",
1154+
"writable": false,
1155+
"enumerable": false,
1156+
"configurable": true
1157+
}
1158+
error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(KVStore.prototype.delete, 'name')`)
1159+
if (error) { return error }
1160+
9801161
actual = Reflect.getOwnPropertyDescriptor(KVStore.prototype.get, 'length')
9811162
expected = {
9821163
"value": 1,

0 commit comments

Comments
 (0)