filecoin-pin
Version:
IPFS Pinning Service API implementation that pins to Filecoin's PDP service
76 lines • 3.63 kB
JavaScript
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { FilecoinPinStore } from '../../filecoin-pin-store.js';
import { createConfig } from '../../config.js';
import { createLogger } from '../../logger.js';
import { createHelia } from 'helia';
import { CID } from 'multiformats/cid';
import { sha256 } from 'multiformats/hashes/sha2';
import * as raw from 'multiformats/codecs/raw';
import { rm } from 'node:fs/promises';
import { existsSync } from 'node:fs';
import { MockSynapse } from '../mocks/synapse-mocks.js';
// Mock the Synapse SDK
vi.mock('@filoz/synapse-sdk', async () => await import('../mocks/synapse-sdk.js'));
describe('Simple Pin Test', () => {
let pinStore;
let contentOriginHelia;
let testCID;
let testBlock;
const testOutputDir = './test-simple-car-output';
beforeEach(async () => {
// Create test data
testBlock = new TextEncoder().encode('Simple test block');
const hash = await sha256.digest(testBlock);
testCID = CID.create(1, raw.code, hash);
// Create test config with test private key
const config = {
...createConfig(),
carStoragePath: testOutputDir,
privateKey: '0x0000000000000000000000000000000000000000000000000000000000000001' // Fake test key
};
const logger = createLogger(config);
// Create a Helia node to serve content
contentOriginHelia = await createHelia();
await contentOriginHelia.blockstore.put(testCID, testBlock);
// Create mock Synapse service
const mockSynapse = new MockSynapse();
const mockStorage = await mockSynapse.createStorage();
const synapseService = { synapse: mockSynapse, storage: mockStorage };
// Create Filecoin pin store with mock Synapse
pinStore = new FilecoinPinStore({
config,
logger,
synapseService
});
await pinStore.start();
});
afterEach(async () => {
await pinStore.stop();
if (contentOriginHelia != null) {
await contentOriginHelia.stop();
}
if (existsSync(testOutputDir)) {
await rm(testOutputDir, { recursive: true, force: true });
}
});
it('should pin content and create CAR file', async () => {
// Get origin multiaddr
const originAddrs = contentOriginHelia.libp2p.getMultiaddrs();
const origins = originAddrs.map((addr) => addr.toString());
console.log('Test: Creating pin with origins:', origins);
console.log('Test: Number of origins:', origins.length);
const pinResult = await pinStore.pin({ id: 'test-user', name: 'Test User' }, testCID, { name: 'Simple Test', origins });
console.log('Test: Pin created:', pinResult.id, pinResult.status);
// Wait for background processing - increased timeout to allow for block fetch
await new Promise(resolve => setTimeout(resolve, 15000));
// Check final status
const finalStatus = await pinStore.get({ id: 'test-user', name: 'Test User' }, pinResult.id);
console.log('Test: Final status:', finalStatus?.status);
console.log('Test: CAR file path:', finalStatus?.filecoin?.carFilePath);
console.log('Test: CAR file exists:', existsSync(finalStatus?.filecoin?.carFilePath ?? ''));
expect(finalStatus?.status).toBe('pinned');
expect(finalStatus?.filecoin?.carFilePath).toBeDefined();
expect(existsSync(finalStatus?.filecoin?.carFilePath ?? '')).toBe(true);
}, 30000);
});
//# sourceMappingURL=simple-pin.test.js.map