Extract functions for service worker usage, and add initial MSC3916 playwright test (when supported) (#12414)
* Send user credentials to service worker for MSC3916 authentication * appease linter * Add initial test The test fails, seemingly because the service worker isn't being installed or because the network mock can't reach that far. * Remove unsafe access token code * Split out base IDB operations to avoid importing `document` in serviceworkers * Use safe crypto access for service workers * Fix tests/unsafe access * Remove backwards compatibility layer & appease linter * Add docs * Fix tests * Appease the linter * Iterate tests * Factor out pickle key handling for service workers * Enable everything we can about service workers * Appease the linter * Add docs * Rename win32 image to linux in hopes of it just working * Use actual image * Apply suggestions from code review Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Improve documentation * Document `??` not working * Try to appease the tests * Add some notes --------- Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
This commit is contained in:
parent
374cee9080
commit
d25d529e86
12 changed files with 435 additions and 176 deletions
55
test/utils/StorageAccess-test.ts
Normal file
55
test/utils/StorageAccess-test.ts
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
Copyright 2024 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import "core-js/stable/structured-clone"; // for idb access
|
||||
import "fake-indexeddb/auto";
|
||||
|
||||
import { idbDelete, idbLoad, idbSave } from "../../src/utils/StorageAccess";
|
||||
|
||||
const NONEXISTENT_TABLE = "this_is_not_a_table_we_use_ever_and_so_we_can_use_it_in_tests";
|
||||
const KNOWN_TABLES = ["account", "pickleKey"];
|
||||
|
||||
describe("StorageAccess", () => {
|
||||
it.each(KNOWN_TABLES)("should save, load, and delete from known table '%s'", async (tableName: string) => {
|
||||
const key = ["a", "b"];
|
||||
const data = { hello: "world" };
|
||||
|
||||
// Should start undefined
|
||||
let loaded = await idbLoad(tableName, key);
|
||||
expect(loaded).toBeUndefined();
|
||||
|
||||
// ... then define a value
|
||||
await idbSave(tableName, key, data);
|
||||
|
||||
// ... then check that value
|
||||
loaded = await idbLoad(tableName, key);
|
||||
expect(loaded).toEqual(data);
|
||||
|
||||
// ... then set it back to undefined
|
||||
await idbDelete(tableName, key);
|
||||
|
||||
// ... which we then check again
|
||||
loaded = await idbLoad(tableName, key);
|
||||
expect(loaded).toBeUndefined();
|
||||
});
|
||||
|
||||
it("should fail to save, load, and delete from a non-existent table", async () => {
|
||||
// Regardless of validity on the key/data, or write order, these should all fail.
|
||||
await expect(() => idbSave(NONEXISTENT_TABLE, "whatever", "value")).rejects.toThrow();
|
||||
await expect(() => idbLoad(NONEXISTENT_TABLE, "whatever")).rejects.toThrow();
|
||||
await expect(() => idbDelete(NONEXISTENT_TABLE, "whatever")).rejects.toThrow();
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue