deckhearth/test/lib/card-import-lorcana-bulk.test.js

67 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

import { describe, expect, it } from 'vitest';
import { mapLorcanaCard } from '../../lib/card-import/lorcana-bulk.js';
describe('mapLorcanaCard', () => {
it('maps Lorcana bulk API fields to cards table shape', () => {
const mapped = mapLorcanaCard({
Unique_ID: 'TFC-001',
Name: 'Ariel - On Human Legs',
Set_Name: 'The First Chapter',
Set_ID: 'TFC',
Card_Num: 1,
Rarity: 'Uncommon',
Cost: 4,
Type: 'Character',
Color: 'Amber, Sapphire',
Classifications: 'Storyborn, Hero',
Body_Text: 'Voiceless: This character cannot {e} to sing songs.',
Strength: 3,
Willpower: 4,
Image: 'https://lorcana-api.com/images/ariel/on_human_legs/ariel-on_human_legs-large.png',
Artist: 'Koni',
Flavor_Text: '...',
Lore: 2,
Inkable: true,
Abilities: 'Shift 3',
});
expect(mapped).toEqual({
scryfallId: 'TFC-001',
name: 'Ariel - On Human Legs',
setName: 'The First Chapter',
setCode: 'TFC',
cardNumber: '1',
rarity: 'Uncommon',
manaCost: '4',
cmc: 4,
cardType: 'Character',
colors: JSON.stringify(['Amber', 'Sapphire']),
colorIdentity: JSON.stringify(['Amber', 'Sapphire']),
oracleText: 'Voiceless: This character cannot {e} to sing songs.',
power: '3',
toughness: '4',
imageUrl: 'https://lorcana-api.com/images/ariel/on_human_legs/ariel-on_human_legs-large.png',
stockImageUrl: 'https://lorcana-api.com/images/ariel/on_human_legs/ariel-on_human_legs-large.png',
flavorText: '...',
artist: 'Koni',
edhrecRank: 2,
keywords: JSON.stringify(['Storyborn', 'Hero', 'Shift 3', 'Inkable']),
});
});
it('omits Inkable keyword when card is not inkable', () => {
const mapped = mapLorcanaCard({
Unique_ID: 'ARI-001',
Name: 'Rhino - Motivational Speaker',
Set_Name: 'Archazia\'s Island',
Set_ID: 'ARI',
Card_Num: 1,
Inkable: false,
Classifications: 'Storyborn, Ally',
});
expect(JSON.parse(mapped.keywords)).toEqual(['Storyborn', 'Ally']);
});
});