@substrat-run/contract-tests 0.147.0 → 0.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bind-module.d.ts +4 -0
- package/dist/bind-module.d.ts.map +1 -1
- package/dist/capability-expiry-suite.d.ts.map +1 -1
- package/dist/capability-expiry-suite.js +6 -4
- package/dist/capability-expiry-suite.js.map +1 -1
- package/dist/counter-runner.d.ts +22 -0
- package/dist/counter-runner.d.ts.map +1 -0
- package/dist/counter-runner.js +96 -0
- package/dist/counter-runner.js.map +1 -0
- package/dist/derived-module.d.ts +4 -0
- package/dist/derived-module.d.ts.map +1 -1
- package/dist/directory-restore-suite.d.ts.map +1 -1
- package/dist/directory-restore-suite.js +66 -2
- package/dist/directory-restore-suite.js.map +1 -1
- package/dist/directory-shapes.d.ts +6 -0
- package/dist/directory-shapes.d.ts.map +1 -1
- package/dist/directory-shapes.js +42 -0
- package/dist/directory-shapes.js.map +1 -1
- package/dist/entity-state-module.d.ts +8 -0
- package/dist/entity-state-module.d.ts.map +1 -1
- package/dist/entity-state-module.js +3 -0
- package/dist/entity-state-module.js.map +1 -1
- package/dist/entity-trash-module.d.ts +4 -0
- package/dist/entity-trash-module.d.ts.map +1 -1
- package/dist/entity-trash-suite.d.ts.map +1 -1
- package/dist/entity-trash-suite.js +20 -0
- package/dist/entity-trash-suite.js.map +1 -1
- package/dist/erasure-module.d.ts +4 -0
- package/dist/erasure-module.d.ts.map +1 -1
- package/dist/held-migrations.d.ts +27 -0
- package/dist/held-migrations.d.ts.map +1 -0
- package/dist/held-migrations.js +39 -0
- package/dist/held-migrations.js.map +1 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/migration-fence-suite.d.ts +3 -0
- package/dist/migration-fence-suite.d.ts.map +1 -0
- package/dist/migration-fence-suite.js +173 -0
- package/dist/migration-fence-suite.js.map +1 -0
- package/dist/migration-fence.d.ts +42 -0
- package/dist/migration-fence.d.ts.map +1 -0
- package/dist/migration-fence.js +66 -0
- package/dist/migration-fence.js.map +1 -0
- package/dist/modules.d.ts +126 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +23 -0
- package/dist/modules.js.map +1 -1
- package/dist/orphan-sweep-suite.d.ts +23 -0
- package/dist/orphan-sweep-suite.d.ts.map +1 -0
- package/dist/orphan-sweep-suite.js +411 -0
- package/dist/orphan-sweep-suite.js.map +1 -0
- package/dist/permission-suite.d.ts.map +1 -1
- package/dist/permission-suite.js +19 -0
- package/dist/permission-suite.js.map +1 -1
- package/dist/scope-host-suite.d.ts.map +1 -1
- package/dist/scope-host-suite.js +465 -10
- package/dist/scope-host-suite.js.map +1 -1
- package/dist/scope-store-runner-suite.d.ts +46 -0
- package/dist/scope-store-runner-suite.d.ts.map +1 -0
- package/dist/scope-store-runner-suite.js +187 -0
- package/dist/scope-store-runner-suite.js.map +1 -0
- package/dist/scope-store-suite.d.ts.map +1 -1
- package/dist/scope-store-suite.js +55 -103
- package/dist/scope-store-suite.js.map +1 -1
- package/dist/stamps-module.d.ts +4 -0
- package/dist/stamps-module.d.ts.map +1 -1
- package/dist/store-driver-release-suite.d.ts +12 -0
- package/dist/store-driver-release-suite.d.ts.map +1 -0
- package/dist/store-driver-release-suite.js +561 -0
- package/dist/store-driver-release-suite.js.map +1 -0
- package/dist/upload-link-module.d.ts +172 -0
- package/dist/upload-link-module.d.ts.map +1 -0
- package/dist/upload-link-module.js +157 -0
- package/dist/upload-link-module.js.map +1 -0
- package/dist/upload-link-replay-suite.d.ts +3 -0
- package/dist/upload-link-replay-suite.d.ts.map +1 -0
- package/dist/upload-link-replay-suite.js +291 -0
- package/dist/upload-link-replay-suite.js.map +1 -0
- package/dist/upload-link-suite.d.ts +3 -0
- package/dist/upload-link-suite.d.ts.map +1 -0
- package/dist/upload-link-suite.js +485 -0
- package/dist/upload-link-suite.js.map +1 -0
- package/dist/vertical-events-suite.d.ts +8 -0
- package/dist/vertical-events-suite.d.ts.map +1 -1
- package/dist/vertical-events-suite.js +46 -4
- package/dist/vertical-events-suite.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract suite for replaying an upload-link redemption (#2315): a redeemer whose reply was lost
|
|
3
|
+
* retries with the same `Idempotency-Key` and gets the stored file back, while single use holds for
|
|
4
|
+
* everyone else.
|
|
5
|
+
*
|
|
6
|
+
* What it pins:
|
|
7
|
+
*
|
|
8
|
+
* 1. **The replay.** A redemption carrying a key records it; a retry of the same link with the same
|
|
9
|
+
* key and the same bytes answers the same record with `replayed: true`, and writes nothing: no
|
|
10
|
+
* bytes, no row, no event. A link redeemed without a key, or a fresh redemption with one, has no
|
|
11
|
+
* `replayed` flag.
|
|
12
|
+
* 2. **The bytes are judged.** A replay whose bytes differ, in content or size, is
|
|
13
|
+
* `upload_link_replay_mismatch`, and stores nothing.
|
|
14
|
+
* 3. **Nobody else gets in.** No key, another key, the right key on another link, and the right
|
|
15
|
+
* key after the attachment was removed: each is the same `upload_link_gone`, the same error
|
|
16
|
+
* down to its message, so a holder of the secret without the key learns nothing. A key is not
|
|
17
|
+
* an authority on a link it did not spend: on a pending link it is an ordinary redemption. A
|
|
18
|
+
* wrong path is still the wrong-target 404, key or not.
|
|
19
|
+
* 4. **The race.** A retry that inspects the link while the first request is between its bytes
|
|
20
|
+
* and its row, then loses the spend, has ITS bytes removed, not the first's, and is answered
|
|
21
|
+
* as the replay. A retry under another key in the same interleaving is gone, and the first's
|
|
22
|
+
* bytes survive that too.
|
|
23
|
+
* 5. **The sweep (#2314).** A redemption whose id the orphan sweep condemned commits nothing and
|
|
24
|
+
* spends nothing, so a retry with its key stores the file anew under a new id: nothing comes back
|
|
25
|
+
* from the condemned id.
|
|
26
|
+
* 6. **The window.** A spent link is replayed past its own expiry. (The far end of the window, the
|
|
27
|
+
* expiry plus `UPLOAD_LINK_REPLAY_GRACE_SECONDS`, needs a clock a Durable Object does not take
|
|
28
|
+
* (#956); the kernel's `upload-link-replay.test.ts` and the route's test hold it on SQLite.)
|
|
29
|
+
* 7. **The key's shape.** A malformed key is `validation_failed`, before the link is looked up.
|
|
30
|
+
*/
|
|
31
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
32
|
+
import { errorCodeOf, platformActorId, principalId, scopeId, tenantId, } from '@substrat-run/contracts';
|
|
33
|
+
import { ATTACHMENT_CONDEMNED, ORPHAN_SWEEP_GRACE_MS, UPLOAD_LINK_GONE, UPLOAD_LINK_REPLAY_MISMATCH, UPLOAD_LINK_WRONG_TARGET, attachmentBlobKey, ulid, } from '@substrat-run/kernel';
|
|
34
|
+
import { UPL_READ, UPL_WRITE, uploadLinkMod } from './upload-link-module.js';
|
|
35
|
+
const DAY = 86_400_000;
|
|
36
|
+
const bytes = (s) => new TextEncoder().encode(s);
|
|
37
|
+
const text = (b) => new TextDecoder().decode(b);
|
|
38
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
39
|
+
const refusal = (p) => p.then(() => undefined, (e) => e);
|
|
40
|
+
const reasonOf = (e) => {
|
|
41
|
+
const r = e?.extensions?.reason;
|
|
42
|
+
return typeof r === 'string' ? r : undefined;
|
|
43
|
+
};
|
|
44
|
+
/** Everything a caller can read off a refusal. */
|
|
45
|
+
const shapeOf = (e) => ({
|
|
46
|
+
code: errorCodeOf(e),
|
|
47
|
+
message: e.message,
|
|
48
|
+
extensions: e.extensions,
|
|
49
|
+
});
|
|
50
|
+
export function uploadLinkReplayContractSuite(adapterName, makeFixture) {
|
|
51
|
+
describe(`upload-link replay (#2315): ${adapterName}`, () => {
|
|
52
|
+
let fixture;
|
|
53
|
+
let host;
|
|
54
|
+
let store;
|
|
55
|
+
const t1 = tenantId.parse(ulid());
|
|
56
|
+
const s1 = scopeId.parse(ulid());
|
|
57
|
+
const alice = principalId.parse(ulid());
|
|
58
|
+
const staff = platformActorId.parse(ulid());
|
|
59
|
+
let n = 0;
|
|
60
|
+
const udoc = () => ({ entityType: 'udoc', entityId: `doc-${++n}` });
|
|
61
|
+
const key = () => `key-${ulid()}`;
|
|
62
|
+
const as = () => host.getScope(alice, t1, s1);
|
|
63
|
+
const mint = async (input) => (await as()).invoke('upl/mint', input);
|
|
64
|
+
const redeem = (m, entity, over = {}) => {
|
|
65
|
+
if (!host.redeemUploadLink)
|
|
66
|
+
throw new Error('host has no redeemUploadLink');
|
|
67
|
+
return host.redeemUploadLink(t1, s1, m.secret, {
|
|
68
|
+
entity,
|
|
69
|
+
filename: 'a.txt',
|
|
70
|
+
contentType: 'text/plain',
|
|
71
|
+
body: bytes('hello'),
|
|
72
|
+
...over,
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const files = () => host.attachments(alice, t1, s1);
|
|
76
|
+
const filesOf = async (entity) => (await files()).list(entity);
|
|
77
|
+
const keys = async () => (await store.list(`scope/${s1}/att/`)).filter((k) => k.startsWith(`scope/${s1}/att/`)).sort();
|
|
78
|
+
const eventCount = async () => (await (await as()).invoke('upl/events')).length;
|
|
79
|
+
beforeAll(async () => {
|
|
80
|
+
fixture = await makeFixture();
|
|
81
|
+
host = fixture.host;
|
|
82
|
+
host.registerModule(uploadLinkMod);
|
|
83
|
+
await host.admin.createTenant(staff, { id: t1, slug: `uplr-${t1.toLowerCase()}`, name: 'Upload-link replay' });
|
|
84
|
+
await host.admin.grantEntitlement(staff, t1, 'upl');
|
|
85
|
+
await host.provisionScope(staff, { tenantId: t1, scopeId: s1, vertical: 'uplr-vertical' });
|
|
86
|
+
await host.admin.activateScope(staff, t1, s1);
|
|
87
|
+
await host.provisionBlobStore(staff, { tenantId: t1, vertical: 'uplr-vertical', binding: 'ATTACHMENTS' });
|
|
88
|
+
await host.admin.defineRole(staff, t1, { key: 'owner', permissions: [UPL_READ, UPL_WRITE], source: 'vertical' });
|
|
89
|
+
await host.admin.assignRole(staff, { principalId: alice, roleKey: 'owner', node: { tenantId: t1, scopeId: null } });
|
|
90
|
+
await files();
|
|
91
|
+
store = await fixture.blobs(t1);
|
|
92
|
+
});
|
|
93
|
+
afterAll(async () => {
|
|
94
|
+
fixture.afterPut(null);
|
|
95
|
+
await fixture.cleanup();
|
|
96
|
+
});
|
|
97
|
+
describe('the replay', () => {
|
|
98
|
+
it('the same key and the same bytes answer the stored record, replayed, and write nothing', async () => {
|
|
99
|
+
const target = udoc();
|
|
100
|
+
const k = key();
|
|
101
|
+
const minted = await mint({ entity: target });
|
|
102
|
+
const first = await redeem(minted, target, { idempotencyKey: k });
|
|
103
|
+
expect(first.replayed).toBeUndefined();
|
|
104
|
+
const before = { keys: await keys(), events: await eventCount() };
|
|
105
|
+
const again = await redeem(minted, target, { idempotencyKey: k });
|
|
106
|
+
expect(again).toEqual({ ...first, replayed: true });
|
|
107
|
+
// A third time is the same answer: a replay spends nothing either.
|
|
108
|
+
expect(await redeem(minted, target, { idempotencyKey: k })).toEqual({ ...first, replayed: true });
|
|
109
|
+
expect({ keys: await keys(), events: await eventCount() }).toEqual(before);
|
|
110
|
+
expect((await filesOf(target)).map((r) => r.id)).toEqual([first.id]);
|
|
111
|
+
const opened = await (await files()).open(first.id);
|
|
112
|
+
expect(text(opened.body)).toBe('hello');
|
|
113
|
+
});
|
|
114
|
+
it('a link redeemed without a key answers no replayed flag, and nothing can replay it', async () => {
|
|
115
|
+
const target = udoc();
|
|
116
|
+
const minted = await mint({ entity: target });
|
|
117
|
+
const first = await redeem(minted, target);
|
|
118
|
+
expect(first.replayed).toBeUndefined();
|
|
119
|
+
expect(reasonOf(await refusal(redeem(minted, target, { idempotencyKey: key() })))).toBe(UPLOAD_LINK_GONE);
|
|
120
|
+
});
|
|
121
|
+
it('other bytes under the same key are a mismatch, by content and by size, and store nothing', async () => {
|
|
122
|
+
const target = udoc();
|
|
123
|
+
const k = key();
|
|
124
|
+
const minted = await mint({ entity: target });
|
|
125
|
+
await redeem(minted, target, { idempotencyKey: k });
|
|
126
|
+
const before = await keys();
|
|
127
|
+
for (const body of [bytes('hellp'), bytes('hello!')]) {
|
|
128
|
+
const err = await refusal(redeem(minted, target, { idempotencyKey: k, body }));
|
|
129
|
+
expect(errorCodeOf(err)).toBe('conflict');
|
|
130
|
+
expect(reasonOf(err)).toBe(UPLOAD_LINK_REPLAY_MISMATCH);
|
|
131
|
+
}
|
|
132
|
+
expect(await keys()).toEqual(before);
|
|
133
|
+
expect(await filesOf(target)).toHaveLength(1);
|
|
134
|
+
});
|
|
135
|
+
it('replays past the link’s own expiry', async () => {
|
|
136
|
+
const target = udoc();
|
|
137
|
+
const k = key();
|
|
138
|
+
const minted = await mint({ entity: target, ttlSeconds: 1 });
|
|
139
|
+
const first = await redeem(minted, target, { idempotencyKey: k });
|
|
140
|
+
await sleep(1300);
|
|
141
|
+
expect(await redeem(minted, target, { idempotencyKey: k })).toEqual({ ...first, replayed: true });
|
|
142
|
+
// ...and without the key, the expired, spent link is gone as ever.
|
|
143
|
+
expect(reasonOf(await refusal(redeem(minted, target)))).toBe(UPLOAD_LINK_GONE);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe('nobody else gets in', () => {
|
|
147
|
+
it('no key, another key, the key on another link, and the key after removal are the same refusal', async () => {
|
|
148
|
+
const target = udoc();
|
|
149
|
+
const k = key();
|
|
150
|
+
const minted = await mint({ entity: target });
|
|
151
|
+
const first = await redeem(minted, target, { idempotencyKey: k });
|
|
152
|
+
const other = await mint({ entity: target });
|
|
153
|
+
await redeem(other, target, { idempotencyKey: key(), body: bytes('other') });
|
|
154
|
+
const noKey = await refusal(redeem(minted, target));
|
|
155
|
+
const wrongKey = await refusal(redeem(minted, target, { idempotencyKey: key() }));
|
|
156
|
+
const otherLink = await refusal(redeem(other, target, { idempotencyKey: k, body: bytes('other') }));
|
|
157
|
+
// The inspect the route makes first answers alike.
|
|
158
|
+
const inspected = await refusal(host.inspectUploadLink(t1, s1, minted.secret, target, key()));
|
|
159
|
+
await (await files()).remove(first.id);
|
|
160
|
+
const removed = await refusal(redeem(minted, target, { idempotencyKey: k }));
|
|
161
|
+
expect(reasonOf(noKey)).toBe(UPLOAD_LINK_GONE);
|
|
162
|
+
for (const e of [wrongKey, otherLink, inspected, removed])
|
|
163
|
+
expect(shapeOf(e)).toEqual(shapeOf(noKey));
|
|
164
|
+
});
|
|
165
|
+
it('a key is no authority on a link it did not spend: on a pending link it is an ordinary redemption', async () => {
|
|
166
|
+
const target = udoc();
|
|
167
|
+
const k = key();
|
|
168
|
+
const spent = await mint({ entity: target });
|
|
169
|
+
const first = await redeem(spent, target, { idempotencyKey: k });
|
|
170
|
+
const pending = await mint({ entity: target });
|
|
171
|
+
const second = await redeem(pending, target, { idempotencyKey: k });
|
|
172
|
+
expect(second.replayed).toBeUndefined();
|
|
173
|
+
expect(second.id).not.toBe(first.id);
|
|
174
|
+
expect(await filesOf(target)).toHaveLength(2);
|
|
175
|
+
});
|
|
176
|
+
it('a wrong path is the wrong-target refusal, with the right key or without', async () => {
|
|
177
|
+
const target = udoc();
|
|
178
|
+
const k = key();
|
|
179
|
+
const minted = await mint({ entity: target });
|
|
180
|
+
await redeem(minted, target, { idempotencyKey: k });
|
|
181
|
+
const elsewhere = udoc();
|
|
182
|
+
const withKey = await refusal(redeem(minted, elsewhere, { idempotencyKey: k }));
|
|
183
|
+
expect(errorCodeOf(withKey)).toBe('not_found');
|
|
184
|
+
expect(reasonOf(withKey)).toBe(UPLOAD_LINK_WRONG_TARGET);
|
|
185
|
+
expect(shapeOf(withKey)).toEqual(shapeOf(await refusal(redeem(minted, elsewhere))));
|
|
186
|
+
});
|
|
187
|
+
it('a malformed key is validation_failed, before the link is looked up', async () => {
|
|
188
|
+
const target = udoc();
|
|
189
|
+
const minted = await mint({ entity: target });
|
|
190
|
+
for (const bad of ['short', 'has a space in it ok', 'x'.repeat(256), 'tab\there-and-more']) {
|
|
191
|
+
expect(errorCodeOf(await refusal(redeem(minted, target, { idempotencyKey: bad })))).toBe('validation_failed');
|
|
192
|
+
}
|
|
193
|
+
// Nothing was spent by any of them.
|
|
194
|
+
expect((await redeem(minted, target, { idempotencyKey: key() })).replayed).toBeUndefined();
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
describe('the race', () => {
|
|
198
|
+
/** Hold every put to this scope until released, in the order they land. */
|
|
199
|
+
const holdPuts = () => {
|
|
200
|
+
const landed = [];
|
|
201
|
+
const gates = new Map();
|
|
202
|
+
const waiters = [];
|
|
203
|
+
fixture.afterPut(async (k) => {
|
|
204
|
+
if (!k.startsWith(`scope/${s1}/att/`))
|
|
205
|
+
return;
|
|
206
|
+
landed.push(k);
|
|
207
|
+
for (const w of waiters.splice(0))
|
|
208
|
+
w();
|
|
209
|
+
await new Promise((r) => gates.set(k, r));
|
|
210
|
+
});
|
|
211
|
+
const landedCount = async (count) => {
|
|
212
|
+
while (landed.length < count)
|
|
213
|
+
await new Promise((r) => waiters.push(r));
|
|
214
|
+
return [...landed];
|
|
215
|
+
};
|
|
216
|
+
return { landedCount, release: (k) => gates.get(k)() };
|
|
217
|
+
};
|
|
218
|
+
it.each([
|
|
219
|
+
['the same key', true],
|
|
220
|
+
['another key', false],
|
|
221
|
+
])('a retry under %s that lost the spend removes only its own bytes', async (_label, sameKey) => {
|
|
222
|
+
const target = udoc();
|
|
223
|
+
const k = key();
|
|
224
|
+
const minted = await mint({ entity: target });
|
|
225
|
+
const hold = holdPuts();
|
|
226
|
+
try {
|
|
227
|
+
const firstCall = redeem(minted, target, { idempotencyKey: k });
|
|
228
|
+
const [firstKey] = await hold.landedCount(1);
|
|
229
|
+
// The retry inspects the link while the first request is still between its bytes and its row.
|
|
230
|
+
const secondCall = redeem(minted, target, { idempotencyKey: sameKey ? k : key() }).then((r) => r, (e) => e);
|
|
231
|
+
const [, secondKey] = await hold.landedCount(2);
|
|
232
|
+
expect(secondKey).not.toBe(firstKey);
|
|
233
|
+
hold.release(firstKey);
|
|
234
|
+
const first = await firstCall;
|
|
235
|
+
hold.release(secondKey);
|
|
236
|
+
const second = await secondCall;
|
|
237
|
+
if (sameKey)
|
|
238
|
+
expect(second).toEqual({ ...first, replayed: true });
|
|
239
|
+
else
|
|
240
|
+
expect(reasonOf(second)).toBe(UPLOAD_LINK_GONE);
|
|
241
|
+
// The property: the first request's bytes survive, the loser's are gone.
|
|
242
|
+
expect(text((await store.get(firstKey)).body)).toBe('hello');
|
|
243
|
+
expect(await store.get(secondKey)).toBeNull();
|
|
244
|
+
expect((await filesOf(target)).map((r) => r.id)).toEqual([first.id]);
|
|
245
|
+
}
|
|
246
|
+
finally {
|
|
247
|
+
fixture.afterPut(null);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
describe('the orphan sweep (#2314)', () => {
|
|
252
|
+
it('a condemned redemption spends nothing, and a retry with its key stores the file anew', async () => {
|
|
253
|
+
const target = udoc();
|
|
254
|
+
const k = key();
|
|
255
|
+
const minted = await mint({ entity: target });
|
|
256
|
+
let release;
|
|
257
|
+
const held = new Promise((r) => (release = r));
|
|
258
|
+
let landed;
|
|
259
|
+
const putLanded = new Promise((r) => (landed = r));
|
|
260
|
+
fixture.afterPut(async (put) => {
|
|
261
|
+
if (!put.startsWith(`scope/${s1}/att/`))
|
|
262
|
+
return;
|
|
263
|
+
fixture.afterPut(null);
|
|
264
|
+
landed(put);
|
|
265
|
+
await held;
|
|
266
|
+
});
|
|
267
|
+
const redeeming = refusal(redeem(minted, target, { idempotencyKey: k }));
|
|
268
|
+
const condemnedKey = await putLanded;
|
|
269
|
+
if (!host.sweepOrphanAttachments)
|
|
270
|
+
throw new Error('host has no sweepOrphanAttachments');
|
|
271
|
+
fixture.clockAhead(ORPHAN_SWEEP_GRACE_MS + DAY);
|
|
272
|
+
try {
|
|
273
|
+
const report = await host.sweepOrphanAttachments(t1, s1, { copiesSettled: true });
|
|
274
|
+
expect(report.keys).toContain(condemnedKey);
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
fixture.clockAhead(0);
|
|
278
|
+
}
|
|
279
|
+
release();
|
|
280
|
+
expect(reasonOf(await redeeming)).toBe(ATTACHMENT_CONDEMNED);
|
|
281
|
+
const retried = await redeem(minted, target, { idempotencyKey: k });
|
|
282
|
+
expect(retried.replayed).toBeUndefined();
|
|
283
|
+
expect(attachmentBlobKey(s1, retried.id)).not.toBe(condemnedKey);
|
|
284
|
+
expect((await filesOf(target)).map((r) => r.id)).toEqual([retried.id]);
|
|
285
|
+
expect(await store.get(attachmentBlobKey(s1, retried.id))).not.toBeNull();
|
|
286
|
+
expect(await redeem(minted, target, { idempotencyKey: k })).toEqual({ ...retried, replayed: true });
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=upload-link-replay-suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-link-replay-suite.js","sourceRoot":"","sources":["../src/upload-link-replay-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-link-suite.d.ts","sourceRoot":"","sources":["../src/upload-link-suite.ts"],"names":[],"mappings":"AAgEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA2B9D,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,CAyeN"}
|