fix(plugins): preserve unavailable release failures

This commit is contained in:
2026-09-01 23:59:36 +08:00
parent 2c5b60ea78
commit 93e3143573
3 changed files with 165 additions and 0 deletions

View File

@@ -122,6 +122,33 @@ describe('MarketplaceHostedAdmissionResolver', () => {
expect(error).toMatchObject({ code: 'plugin_runtime_stale', status: 409, retryable: false });
});
it.each([
'plugin_release_not_ready',
'plugin_client_incompatible',
])('preserves an explicit unavailable Release as plugin_release_unavailable (%s)', async (reason) => {
const marketplace = {
resolve: vi.fn(async () => resolved({
action: 'unavailable',
releaseAdmissionId: null,
reason,
})),
} as unknown as Pick<MarketplacePackageClientPort, 'resolve'>;
const unavailableResolver = new MarketplaceHostedAdmissionResolver({
packageStore: { getInstalledRelease: vi.fn(async () => installed()) } as unknown as Pick<PluginPackageStore, 'getInstalledRelease'>,
marketplace,
makeloreVersion: '1.2.4',
});
await expect(unavailableResolver.resolve({
pluginId: PLUGIN_ID,
workerSnapshot: { requestId: REQUEST_ID, pluginReleaseId: RELEASE_ID },
})).rejects.toMatchObject({
code: 'plugin_release_unavailable',
status: 409,
retryable: false,
});
});
it('projects an account change as a typed non-retryable worker failure', async () => {
const { resolver, resolve } = resolverFixture();
resolve.mockRejectedValueOnce({ code: 'marketplace_account_changed' });