This repository has been archived on 2025-08-03. You can view files and clone it, but cannot push or open issues or pull requests.
anonpenguin 1cbca09352 Add unit tests for RelationshipManager and ShardManager
- Implement comprehensive tests for RelationshipManager covering various relationship types (BelongsTo, HasMany, HasOne, ManyToMany) and eager loading functionality.
- Include caching mechanisms and error handling in RelationshipManager tests.
- Create unit tests for ShardManager to validate shard creation, routing, management, global index operations, and query functionalities.
- Ensure tests cover different sharding strategies (hash, range, user) and handle edge cases like errors and non-existent models.
2025-06-19 11:20:13 +03:00

244 lines
5.1 KiB
TypeScript

// Mock IPFS for testing
export class MockLibp2p {
private peers = new Set<string>();
async start() {
// Mock start
}
async stop() {
// Mock stop
}
getPeers() {
return Array.from(this.peers);
}
async dial(peerId: string) {
this.peers.add(peerId);
return { remotePeer: peerId };
}
async hangUp(peerId: string) {
this.peers.delete(peerId);
}
get peerId() {
return { toString: () => 'mock-peer-id' };
}
// PubSub mock
pubsub = {
publish: jest.fn(async (topic: string, data: Uint8Array) => {
// Mock publish
}),
subscribe: jest.fn(async (topic: string) => {
// Mock subscribe
}),
unsubscribe: jest.fn(async (topic: string) => {
// Mock unsubscribe
}),
getTopics: jest.fn(() => []),
getPeers: jest.fn(() => [])
};
// Services mock
services = {
pubsub: this.pubsub
};
}
export class MockHelia {
public libp2p: MockLibp2p;
private content = new Map<string, Uint8Array>();
private pins = new Set<string>();
constructor() {
this.libp2p = new MockLibp2p();
}
async start() {
await this.libp2p.start();
}
async stop() {
await this.libp2p.stop();
}
get blockstore() {
return {
put: jest.fn(async (cid: any, block: Uint8Array) => {
const key = cid.toString();
this.content.set(key, block);
return cid;
}),
get: jest.fn(async (cid: any) => {
const key = cid.toString();
const block = this.content.get(key);
if (!block) {
throw new Error(`Block not found: ${key}`);
}
return block;
}),
has: jest.fn(async (cid: any) => {
return this.content.has(cid.toString());
}),
delete: jest.fn(async (cid: any) => {
return this.content.delete(cid.toString());
})
};
}
get datastore() {
return {
put: jest.fn(async (key: any, value: Uint8Array) => {
this.content.set(key.toString(), value);
}),
get: jest.fn(async (key: any) => {
const value = this.content.get(key.toString());
if (!value) {
throw new Error(`Key not found: ${key}`);
}
return value;
}),
has: jest.fn(async (key: any) => {
return this.content.has(key.toString());
}),
delete: jest.fn(async (key: any) => {
return this.content.delete(key.toString());
})
};
}
get pins() {
return {
add: jest.fn(async (cid: any) => {
this.pins.add(cid.toString());
}),
rm: jest.fn(async (cid: any) => {
this.pins.delete(cid.toString());
}),
ls: jest.fn(async function* () {
for (const pin of Array.from(this.pins)) {
yield { cid: pin };
}
}.bind(this))
};
}
// Add UnixFS mock
get fs() {
return {
addBytes: jest.fn(async (data: Uint8Array) => {
const cid = `mock-cid-${Date.now()}`;
this.content.set(cid, data);
return { toString: () => cid };
}),
cat: jest.fn(async function* (cid: any) {
const data = this.content.get(cid.toString());
if (data) {
yield data;
}
}.bind(this)),
addFile: jest.fn(async (file: any) => {
const cid = `mock-file-cid-${Date.now()}`;
return { toString: () => cid };
})
};
}
}
export const createHelia = jest.fn(async (options: any = {}) => {
const helia = new MockHelia();
await helia.start();
return helia;
});
export const createLibp2p = jest.fn(async (options: any = {}) => {
return new MockLibp2p();
});
// Mock IPFS service for framework
export class MockIPFSService {
private helia: MockHelia;
constructor() {
this.helia = new MockHelia();
}
async init() {
await this.helia.start();
}
async stop() {
await this.helia.stop();
}
getHelia() {
return this.helia;
}
getLibp2pInstance() {
return this.helia.libp2p;
}
async getConnectedPeers() {
const peers = this.helia.libp2p.getPeers();
const peerMap = new Map();
peers.forEach(peer => peerMap.set(peer, peer));
return peerMap;
}
async pinOnNode(nodeId: string, cid: string) {
await this.helia.pins.add(cid);
}
get pubsub() {
return {
publish: jest.fn(async (topic: string, data: string) => {
await this.helia.libp2p.pubsub.publish(topic, new TextEncoder().encode(data));
}),
subscribe: jest.fn(async (topic: string, handler: Function) => {
// Mock subscribe
}),
unsubscribe: jest.fn(async (topic: string) => {
// Mock unsubscribe
})
};
}
}
// Mock OrbitDB service for framework
export class MockOrbitDBService {
private orbitdb: any;
constructor() {
this.orbitdb = new (require('./orbitdb').MockOrbitDB)();
}
async init() {
await this.orbitdb.start();
}
async stop() {
await this.orbitdb.stop();
}
async openDB(name: string, type: string) {
return await this.orbitdb.open(name, { type });
}
getOrbitDB() {
return this.orbitdb;
}
}
// Default export
export default {
createHelia,
createLibp2p,
MockHelia,
MockLibp2p,
MockIPFSService,
MockOrbitDBService
};