Test: a backup limited to one album stores a file whose copy there does not decrypt
check / check (push) Waiting to run
check / check (push) Waiting to run
A run of lib.backup() limited to "Trip" must store a file whose copy in Trip does not decrypt when its copy in an album the run skips does. Today the run neither stores it nor records it as failed. Model: opus-5-5
This commit is contained in:
@@ -37,8 +37,9 @@ import {
|
|||||||
type CliContext,
|
type CliContext,
|
||||||
} from "../../src/cli-commands.js";
|
} from "../../src/cli-commands.js";
|
||||||
import { loadSession } from "../../src/cli-session.js";
|
import { loadSession } from "../../src/cli-session.js";
|
||||||
import type { ClientSnapshot } from "../../src/client.js";
|
import { Client, type ClientSnapshot } from "../../src/client.js";
|
||||||
import { encryptBlob, init, toBase64 } from "../../src/crypto/index.js";
|
import { encryptBlob, init, toBase64 } from "../../src/crypto/index.js";
|
||||||
|
import { Library } from "../../src/library/index.js";
|
||||||
|
|
||||||
const USER_ID = 42;
|
const USER_ID = 42;
|
||||||
|
|
||||||
@@ -412,6 +413,40 @@ describe("quak backup with records it cannot decrypt", () => {
|
|||||||
expect(stored(30)).toBe(true);
|
expect(stored(30)).toBe(true);
|
||||||
expect(failures()).toEqual({});
|
expect(failures()).toEqual({});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("backs up that file in a run limited to the album where it does not decrypt", async () => {
|
||||||
|
// The same account, backed up by `lib.backup()` limited to album 1,
|
||||||
|
// "Trip", as `quak backup` cannot be. File 30 is in Trip, so the run
|
||||||
|
// must store it, from its copy in album 3 that the run otherwise
|
||||||
|
// skips.
|
||||||
|
const ente = new FakeEnte();
|
||||||
|
ente.putAlbum(1, "Trip", 1);
|
||||||
|
ente.putFile(1, 30, 1, { corruptKey: true });
|
||||||
|
ente.putAlbum(3, "Favorites", 1);
|
||||||
|
ente.putFile(3, 30, 1);
|
||||||
|
const lib = await Library.open({
|
||||||
|
client: Client.fromJSON(ente.snapshot(), {
|
||||||
|
fetch: ente.fetch,
|
||||||
|
retry: { attempts: 1 },
|
||||||
|
}),
|
||||||
|
downloadDirectory: backupDir(),
|
||||||
|
cacheDirectory: join(root, "cache"),
|
||||||
|
precacheThumbnails: false,
|
||||||
|
precacheOriginals: false,
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
const result = await lib.backup({
|
||||||
|
downloadDirectory: backupDir(),
|
||||||
|
onlyAlbumNames: ["Trip"],
|
||||||
|
});
|
||||||
|
expect(result).toMatchObject({ downloaded: 1, failed: 0 });
|
||||||
|
} finally {
|
||||||
|
await lib.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(stored(30)).toBe(true);
|
||||||
|
expect(failures()).toEqual({});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("the read commands with records quak cannot decrypt", () => {
|
describe("the read commands with records quak cannot decrypt", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user