@magiceden/magiceden-sdk
Version:
A TypeScript SDK for interacting with Magic Eden's API across multiple chains.
195 lines (194 loc) • 10 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const solana_1 = require("../../mappers/nft/solana");
const chains_1 = require("../../types/chains");
const protocol_1 = require("../../types/protocol");
const shared_1 = require("../../types/services/nft/shared");
describe('SolanaApiMappers V4', () => {
describe('createLaunchpadRequest', () => {
it('should correctly map create launchpad parameters', () => {
const params = {
chain: chains_1.Blockchain.SOLANA,
protocol: protocol_1.SolProtocolType.METAPLEX_CORE,
creator: 'creatorAddress123',
social: {
discordUrl: 'https://discord.com/test',
externalUrl: 'https://example.com',
twitterUsername: 'testuser',
},
name: 'Test Collection',
symbol: 'TEST',
imageUrl: 'https://example.com/image.png',
description: 'Test description',
royaltyBps: 500,
royaltyRecipients: [
{ address: 'recipient1', share: 60 },
{ address: 'recipient2', share: 40 },
],
payoutRecipient: 'payoutAddress123',
nftMetadataUrl: 'https://example.com/metadata.json',
tokenImageUrl: 'https://example.com/token.png',
mintStages: {
stages: [
{
kind: shared_1.MintStageKind.Public,
price: {
currency: { chain: chains_1.Blockchain.SOLANA, assetId: 'So11111111111111111111111111111111111111112' },
raw: '1000000000',
},
startTime: '2023-01-01T00:00:00Z',
endTime: '2023-01-02T00:00:00Z',
walletLimit: 5,
maxSupply: 100,
},
],
maxSupply: 100,
},
isOpenEdition: false,
};
const result = solana_1.SolanaApiMappers.v4.createLaunchpadRequest(params);
// Verify the result is a valid V4CreateLaunchpadRequest
expect(result).toBeDefined();
// Verify required Solana-specific properties
expect(result.chain).toBe(chains_1.Blockchain.SOLANA);
expect(result.protocol).toBe(protocol_1.SolProtocolType.METAPLEX_CORE);
expect(result.creator).toBe('creatorAddress123');
expect(result.social?.discordUrl).toBe('https://discord.com/test');
expect(result.social?.externalUrl).toBe('https://example.com');
expect(result.social?.twitterUsername).toBe('testuser');
expect(result.name).toBe('Test Collection');
expect(result.symbol).toBe('TEST');
expect(result.imageUrl).toBe('https://example.com/image.png');
expect(result.description).toBe('Test description');
expect(result.royaltyBps).toBe(500);
expect(result.royaltyRecipients).toHaveLength(2);
expect(result.payoutRecipient).toBe('payoutAddress123');
expect(result.nftMetadataUrl).toBe('https://example.com/metadata.json');
expect(result.tokenImageUrl).toBe('https://example.com/token.png');
expect(result.isOpenEdition).toBe(false);
// Verify mint stages
expect(result.mintStages).toBeDefined();
expect(result.mintStages.stages).toHaveLength(1);
expect(result.mintStages.stages[0].kind).toBe(shared_1.MintStageKind.Public);
expect(result.mintStages.stages[0].price.currency).toBe('SOL');
expect(result.mintStages.stages[0].price.raw).toBe('1000000000');
expect(result.mintStages.maxSupply).toBe(100);
});
});
describe('updateLaunchpadRequest', () => {
it('should correctly map update launchpad parameters', () => {
const params = {
chain: chains_1.Blockchain.SOLANA,
protocol: protocol_1.SolProtocolType.METAPLEX_CORE,
collectionId: 'collectionAddress123',
owner: 'ownerAddress123',
social: {
discordUrl: 'https://discord.com/test',
externalUrl: 'https://example.com',
twitterUsername: 'testuser',
},
name: 'Updated Collection',
imageUrl: 'https://example.com/updated-image.png',
description: 'Updated description',
royaltyBps: 700,
royaltyRecipients: [
{ address: 'recipient1', share: 70 },
{ address: 'recipient2', share: 30 },
],
payoutRecipient: 'updatedPayoutAddress123',
candyMachineId: 'candyMachineId123',
symbol: 'TEST',
newSymbol: 'UPDT',
externalLink: 'https://example.com/external',
payer: 'payerAddress123',
};
const result = solana_1.SolanaApiMappers.v4.updateLaunchpadRequest(params);
// Verify the result is a valid V4UpdateLaunchpadRequest
expect(result).toBeDefined();
// Verify chain and protocol
expect(result.chain).toBe(chains_1.Blockchain.SOLANA);
expect(result.protocol).toBe(protocol_1.SolProtocolType.METAPLEX_CORE);
// Verify collection and owner identifiers
expect(result.collectionId).toBe('collectionAddress123');
expect(result.owner).toBe('ownerAddress123');
// Verify social media links
expect(result.social?.discordUrl).toBe('https://discord.com/test');
expect(result.social?.externalUrl).toBe('https://example.com');
expect(result.social?.twitterUsername).toBe('testuser');
// Verify metadata updates
expect(result.name).toBe('Updated Collection');
expect(result.imageUrl).toBe('https://example.com/updated-image.png');
expect(result.description).toBe('Updated description');
expect(result.externalLink).toBe('https://example.com/external');
// Verify royalty updates
expect(result.royaltyBps).toBe(700);
expect(result.royaltyRecipients).toHaveLength(2);
expect(result.royaltyRecipients[0].address).toBe('recipient1');
expect(result.royaltyRecipients[0].share).toBe(70);
expect(result.royaltyRecipients[1].address).toBe('recipient2');
expect(result.royaltyRecipients[1].share).toBe(30);
// Verify payout recipient
expect(result.payoutRecipient).toBe('updatedPayoutAddress123');
// Verify Solana-specific properties
expect(result.candyMachineId).toBe('candyMachineId123');
expect(result.symbol).toBe('TEST');
expect(result.newSymbol).toBe('UPDT');
expect(result.payer).toBe('payerAddress123');
// Verify authorization
expect(result.authorization).toBeDefined();
expect(result.authorization.signature).toBe('signature123');
expect(result.authorization.signer).toBe('signerAddress123');
expect(result.authorization.timestamp).toBe('timestamp123');
});
});
describe('mintRequest', () => {
it('should correctly map mint parameters', () => {
const params = {
chain: chains_1.Blockchain.SOLANA,
collectionId: 'collectionId123',
nftAmount: 3,
stageId: 'stage1',
kind: shared_1.MintStageKind.Public,
candyMachineId: 'candyMachineId123',
symbol: 'TEST',
recipient: 'recipientAddress123',
};
const result = solana_1.SolanaApiMappers.v4.mintRequest('walletAddress123', params);
// Verify the result is a valid V4MintRequest
expect(result).toBeDefined();
// Verify required Solana-specific properties
expect(result.collectionId).toBe('collectionId123');
expect(result.wallet).toBe('walletAddress123');
expect(result.nftAmount).toBe(3);
expect(result.stageId).toBe('stage1');
expect(result.kind).toBe(shared_1.MintStageKind.Public);
expect(result.candyMachineId).toBe('candyMachineId123');
expect(result.symbol).toBe('TEST');
expect(result.payer).toBe('payerAddress123');
expect(result.recipient).toBe('recipientAddress123');
});
it('should handle optional parameters', () => {
const params = {
chain: chains_1.Blockchain.SOLANA,
collectionId: 'collectionId123',
nftAmount: 1,
kind: shared_1.MintStageKind.Public,
candyMachineId: 'candyMachineId123',
symbol: 'TEST',
recipient: 'recipientAddress123',
};
const result = solana_1.SolanaApiMappers.v4.mintRequest('walletAddress123', params);
// Verify required properties
expect(result.collectionId).toBe('collectionId123');
expect(result.wallet).toBe('walletAddress123');
expect(result.nftAmount).toBe(1);
expect(result.kind).toBe(shared_1.MintStageKind.Public);
expect(result.candyMachineId).toBe('candyMachineId123');
expect(result.symbol).toBe('TEST');
expect(result.payer).toBe('payerAddress123');
// Verify optional properties are undefined
expect(result.stageId).toBeUndefined();
expect(result.recipient).toBeUndefined();
});
});
});