mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-20 16:07:11 +08:00
feat(ql3): establish 3.0 incubation baseline
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
const assert = require('node:assert/strict');
|
||||
const { DatabaseSync } = require('node:sqlite');
|
||||
const { test } = require('node:test');
|
||||
|
||||
const {
|
||||
materializedRevisionFixture,
|
||||
registerPluginPackageMaterializedRevisionRepositoryContract,
|
||||
} = require('../../../test/contracts/pluginPackageMaterializedRevisionRepositoryContract.cjs');
|
||||
const {
|
||||
PluginPackageResourceMaterializationUnavailableError,
|
||||
} = require('@qinglong/runtime-core/plugin-package-resource-materialization');
|
||||
const {
|
||||
LocalSqlitePluginPackageMaterializedRevisionRepository,
|
||||
} = require('../dist/plugin-package/pluginPackageMaterializedRevisionRepository');
|
||||
const { migrateLocalSqliteDatabase } = require('../dist/migration/migration');
|
||||
|
||||
async function createRepository(_t, fixture) {
|
||||
const client = new DatabaseSync(':memory:');
|
||||
client.exec('PRAGMA foreign_keys = ON');
|
||||
await migrateLocalSqliteDatabase(client);
|
||||
client
|
||||
.prepare(
|
||||
`INSERT INTO "QingLong3Projects"
|
||||
(id, name, slug, status, version, created_at_ms, updated_at_ms)
|
||||
VALUES (?, ?, ?, 'active', 1, 1, 1)`,
|
||||
)
|
||||
.run(fixture.projectId, fixture.projectId, fixture.projectId);
|
||||
return {
|
||||
client,
|
||||
repository: new LocalSqlitePluginPackageMaterializedRevisionRepository(
|
||||
client,
|
||||
fixture.registry,
|
||||
),
|
||||
close: () => client.close(),
|
||||
};
|
||||
}
|
||||
|
||||
registerPluginPackageMaterializedRevisionRepositoryContract({
|
||||
name: 'SQLite Plugin Package materialized revision repository',
|
||||
namespace: 'sqlite-materialized',
|
||||
profile: 'edge',
|
||||
createRepository,
|
||||
});
|
||||
|
||||
test('fails closed when durable semantic JSON is changed in place', async (t) => {
|
||||
const fixture = materializedRevisionFixture('sqlite-corrupt');
|
||||
const harness = await createRepository(t, fixture);
|
||||
t.after(() => harness.close());
|
||||
await harness.repository.publish(fixture.revision);
|
||||
harness.client.exec('PRAGMA ignore_check_constraints = ON');
|
||||
harness.client
|
||||
.prepare(
|
||||
`UPDATE "QingLong3PluginPackageMaterializedRevisions"
|
||||
SET revision_json =
|
||||
json_set(revision_json, '$.resources[0].value.name', 'Changed')
|
||||
WHERE generation_digest = ?`,
|
||||
)
|
||||
.run(fixture.revision.generation.generationDigest);
|
||||
await assert.rejects(
|
||||
harness.repository.find(fixture.revision.generation.generationDigest),
|
||||
PluginPackageResourceMaterializationUnavailableError,
|
||||
);
|
||||
});
|
||||
|
||||
test('publishes storage only through the explicit subpath', () => {
|
||||
const entrypoint = require('@qinglong/local-sqlite/plugin-package-materialized-revision');
|
||||
assert.equal(
|
||||
entrypoint.LocalSqlitePluginPackageMaterializedRevisionRepository,
|
||||
LocalSqlitePluginPackageMaterializedRevisionRepository,
|
||||
);
|
||||
assert.equal(
|
||||
require('../dist').LocalSqlitePluginPackageMaterializedRevisionRepository,
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user