Scryfall small images download (#12282)

- Add new option for downloading small images from scryfall

- Refactor/simplify CardImageUrls

---------

Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
This commit is contained in:
tiera3 2024-06-01 15:09:02 +10:00 committed by GitHub
parent af59ff2c5c
commit f253777f7c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 122 additions and 75 deletions

View file

@ -6,6 +6,7 @@ import org.junit.Test;
import org.mage.plugins.card.dl.sources.CardImageSource;
import org.mage.plugins.card.dl.sources.CardImageUrls;
import org.mage.plugins.card.dl.sources.ScryfallImageSource;
import org.mage.plugins.card.dl.sources.ScryfallImageSourceSmall;
import org.mage.plugins.card.images.CardDownloadData;
/**
@ -15,25 +16,25 @@ public class ScryfallImagesDownloadTest {
@Test
public void test_Cards_DownloadLinks() throws Exception {
CardImageSource imageSource = ScryfallImageSource.instance;
CardImageSource imageSource = ScryfallImageSource.getInstance();
// normal card
CardImageUrls urls = imageSource.generateCardUrl(new CardDownloadData("Grizzly Bears", "10E", "268", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/10e/268/en?format=image", urls.baseUrl);
Assert.assertEquals("https://api.scryfall.com/cards/10e/268/en?format=image", urls.getBaseUrl());
// various card
urls = imageSource.generateCardUrl(new CardDownloadData("Grizzly Bears", "30A", "195", true, 1));
Assert.assertEquals("https://api.scryfall.com/cards/30a/195/en?format=image", urls.baseUrl);
Assert.assertEquals("https://api.scryfall.com/cards/30a/195/en?format=image", urls.getBaseUrl());
urls = imageSource.generateCardUrl(new CardDownloadData("Grizzly Bears", "30A", "492", true, 2));
Assert.assertEquals("https://api.scryfall.com/cards/30a/492/en?format=image", urls.baseUrl);
Assert.assertEquals("https://api.scryfall.com/cards/30a/492/en?format=image", urls.getBaseUrl());
// api link
urls = imageSource.generateCardUrl(new CardDownloadData("Ajani, the Greathearted", "WAR", "184*", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/war/184★/en?format=image", urls.baseUrl);
Assert.assertEquals("https://api.scryfall.com/cards/war/184★/en?format=image", urls.getBaseUrl());
// direct api link
urls = imageSource.generateCardUrl(new CardDownloadData("Command Tower", "REX", "26b", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/rex/26/en?format=image&face=back", urls.baseUrl);
Assert.assertEquals("https://api.scryfall.com/cards/rex/26/en?format=image&face=back", urls.getBaseUrl());
// the one ring
Assert.assertTrue("LTR must use The One Ring with 001 number, not 0", TheLordOfTheRingsTalesOfMiddleEarth.getInstance().getSetCardInfo()
@ -42,6 +43,37 @@ public class ScryfallImagesDownloadTest {
.anyMatch(c -> c.getCardNumber().equals("001"))
);
urls = imageSource.generateCardUrl(new CardDownloadData("The One Ring", "LTR", "001", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/ltr/0/en?format=image", urls.baseUrl);
Assert.assertEquals("https://api.scryfall.com/cards/ltr/0/en?format=image", urls.getBaseUrl());
// added same tests for small images
CardImageSource imageSourceSmall = ScryfallImageSourceSmall.getInstance();
// normal card
urls = imageSourceSmall.generateCardUrl(new CardDownloadData("Grizzly Bears", "10E", "268", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/10e/268/en?format=image&version=small", urls.getBaseUrl());
// various card
urls = imageSourceSmall.generateCardUrl(new CardDownloadData("Grizzly Bears", "30A", "195", true, 1));
Assert.assertEquals("https://api.scryfall.com/cards/30a/195/en?format=image&version=small", urls.getBaseUrl());
urls = imageSourceSmall.generateCardUrl(new CardDownloadData("Grizzly Bears", "30A", "492", true, 2));
Assert.assertEquals("https://api.scryfall.com/cards/30a/492/en?format=image&version=small", urls.getBaseUrl());
// api link
urls = imageSourceSmall.generateCardUrl(new CardDownloadData("Ajani, the Greathearted", "WAR", "184*", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/war/184★/en?format=image&version=small", urls.getBaseUrl());
// direct api link
urls = imageSourceSmall.generateCardUrl(new CardDownloadData("Command Tower", "REX", "26b", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/rex/26/en?format=image&version=small&face=back", urls.getBaseUrl());
// the one ring
Assert.assertTrue("LTR must use The One Ring with 001 number, not 0", TheLordOfTheRingsTalesOfMiddleEarth.getInstance().getSetCardInfo()
.stream()
.filter(c -> c.getName().equals("The One Ring"))
.anyMatch(c -> c.getCardNumber().equals("001"))
);
urls = imageSourceSmall.generateCardUrl(new CardDownloadData("The One Ring", "LTR", "001", false, 0));
Assert.assertEquals("https://api.scryfall.com/cards/ltr/0/en?format=image&version=small", urls.getBaseUrl());
}
}