@wearesage/schema
Version:
A flexible schema definition and validation system for TypeScript with multi-database support
79 lines (64 loc) • 2.45 kB
text/typescript
import "reflect-metadata";
import {
DefaultRegistryProvider,
getRegistryProvider,
setRegistryProvider,
resetRegistryProvider,
getRegistry,
IRegistryProvider
} from "../../core/RegistryProvider";
import { MetadataRegistry } from "../../core/MetadataRegistry";
describe("RegistryProvider", () => {
// Restore default provider after each test
afterEach(() => {
resetRegistryProvider();
});
test("should provide shared registry instance via default provider", () => {
// Get registry from default provider
const registry = getRegistry();
// Should return an instance of MetadataRegistry
expect(registry).toBeInstanceOf(MetadataRegistry);
// Get registry again - should be same instance
const registry2 = getRegistry();
expect(registry2).toBe(registry);
});
test("should allow setting a custom provider", () => {
// Create a custom provider
class CustomProvider implements IRegistryProvider {
private customRegistry = new MetadataRegistry();
getRegistry(): MetadataRegistry {
return this.customRegistry;
}
}
// Set custom provider
const customProvider = new CustomProvider();
setRegistryProvider(customProvider);
// Get registry via provider
const registry = getRegistry();
// Should be the custom registry
expect(registry).toBe(customProvider.getRegistry());
});
test("should reset to default provider", () => {
// Create and set a custom provider
class CustomProvider implements IRegistryProvider {
getRegistry(): MetadataRegistry {
return new MetadataRegistry();
}
}
setRegistryProvider(new CustomProvider());
// Reset to default provider
resetRegistryProvider();
// Get provider - should be DefaultRegistryProvider
const provider = getRegistryProvider();
expect(provider).toBeInstanceOf(DefaultRegistryProvider);
});
test("DefaultRegistryProvider should use shared registry", () => {
// Create two instances of DefaultRegistryProvider
const provider1 = new DefaultRegistryProvider();
const provider2 = new DefaultRegistryProvider();
// Both should return the same registry instance
expect(provider1.getRegistry()).toBe(provider2.getRegistry());
// Registry from provider should be the same as from getRegistry()
expect(provider1.getRegistry()).toBe(getRegistry());
});
});