mirror of
https://github.com/gotson/komga.git
synced 2026-05-08 21:00:16 +02:00
test: inline xml and json files for better readability
This commit is contained in:
parent
7255caabae
commit
867f89514d
16 changed files with 301 additions and 271 deletions
|
|
@ -4,7 +4,6 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper
|
|||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.springframework.core.io.ClassPathResource
|
||||
|
||||
class ComicInfoTest {
|
||||
|
||||
|
|
@ -12,8 +11,47 @@ class ComicInfoTest {
|
|||
|
||||
@Test
|
||||
fun `given valid xml file when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("comicrack/ComicInfo.xml")
|
||||
val comicInfo = mapper.readValue<ComicInfo>(file.url)
|
||||
// language=XML
|
||||
val xml = """
|
||||
<?xml version="1.0"?>
|
||||
<ComicInfo>
|
||||
<Title>v01 - Preludes & Nocturnes - 30th Anniversary Edition</Title>
|
||||
<Series>Sandman</Series>
|
||||
<Web>https://www.comixology.com/Sandman/digital-comic/727888</Web>
|
||||
<Summary>Neil Gaiman's seminal series, THE SANDMAN, celebrates its 30th anniversary with an all-new edition of THE
|
||||
SANDMAN VOL. 1: PRELUDES & NOCTURNES!
|
||||
|
||||
New York Times best-selling author Neil Gaiman's transcendent series THE SANDMAN is often hailed as the
|
||||
definitive Vertigo title and one of the finest achievements in graphic storytelling. Gaiman created an
|
||||
unforgettable tale of the forces that exist beyond life and death by weaving ancient mythology, folklore and
|
||||
fairy tales with his own distinct narrative vision.
|
||||
|
||||
In PRELUDES & NOCTURNES, an occultist attempting to capture Death to bargain for eternal life traps her
|
||||
younger brother Dream instead. After his 70 year imprisonment and eventual escape, Dream, also known as
|
||||
Morpheus, goes on a quest for his lost objects of power. On his arduous journey Morpheus encounters Lucifer,
|
||||
John Constantine, and an all-powerful madman.
|
||||
|
||||
This book also includes the story "The Sound of Her Wings," which introduces us to the pragmatic and perky goth
|
||||
girl Death.
|
||||
|
||||
Collects THE SANDMAN #1-8.</Summary>
|
||||
<Notes>Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]</Notes>
|
||||
<Translator>The translator</Translator>
|
||||
<Publisher>DC</Publisher>
|
||||
<Imprint>Vertigo</Imprint>
|
||||
<Count>10</Count>
|
||||
<Genre>Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama</Genre>
|
||||
<Tags>dark, Occult</Tags>
|
||||
<PageCount>237</PageCount>
|
||||
<LanguageISO>en</LanguageISO>
|
||||
<AgeRating>Mature 17+</AgeRating>
|
||||
<BlackAndWhite>No</BlackAndWhite>
|
||||
<Manga>No</Manga>
|
||||
<SeriesGroup>Sandman</SeriesGroup>
|
||||
<ScanInformation></ScanInformation>
|
||||
</ComicInfo>
|
||||
""".trimIndent()
|
||||
val comicInfo = mapper.readValue<ComicInfo>(xml)
|
||||
|
||||
with(comicInfo) {
|
||||
assertThat(title).isEqualTo("v01 - Preludes & Nocturnes - 30th Anniversary Edition")
|
||||
|
|
@ -39,8 +77,48 @@ class ComicInfoTest {
|
|||
|
||||
@Test
|
||||
fun `given another valid xml file when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("comicrack/ComicInfo2.xml")
|
||||
val comicInfo = mapper.readValue<ComicInfo>(file.url)
|
||||
// language=XML
|
||||
val xml = """
|
||||
<?xml version="1.0"?>
|
||||
<ComicInfo>
|
||||
<Title>v01 - Preludes & Nocturnes - 30th Anniversary Edition</Title>
|
||||
<Series>Sandman</Series>
|
||||
<Web>https://www.comixology.com/Sandman/digital-comic/727888</Web>
|
||||
<Summary>Neil Gaiman's seminal series, THE SANDMAN, celebrates its 30th anniversary with an all-new edition of THE
|
||||
SANDMAN VOL. 1: PRELUDES & NOCTURNES!
|
||||
|
||||
New York Times best-selling author Neil Gaiman's transcendent series THE SANDMAN is often hailed as the
|
||||
definitive Vertigo title and one of the finest achievements in graphic storytelling. Gaiman created an
|
||||
unforgettable tale of the forces that exist beyond life and death by weaving ancient mythology, folklore and
|
||||
fairy tales with his own distinct narrative vision.
|
||||
|
||||
In PRELUDES & NOCTURNES, an occultist attempting to capture Death to bargain for eternal life traps her
|
||||
younger brother Dream instead. After his 70 year imprisonment and eventual escape, Dream, also known as
|
||||
Morpheus, goes on a quest for his lost objects of power. On his arduous journey Morpheus encounters Lucifer,
|
||||
John Constantine, and an all-powerful madman.
|
||||
|
||||
This book also includes the story "The Sound of Her Wings," which introduces us to the pragmatic and perky goth
|
||||
girl Death.
|
||||
|
||||
Collects THE SANDMAN #1-8.
|
||||
</Summary>
|
||||
<Notes>Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]</Notes>
|
||||
<Publisher>DC</Publisher>
|
||||
<Imprint>Vertigo</Imprint>
|
||||
<Genre>Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama</Genre>
|
||||
<PageCount>237</PageCount>
|
||||
<LanguageISO>en</LanguageISO>
|
||||
<AgeRating>MA15+</AgeRating>
|
||||
<BlackAndWhite>No</BlackAndWhite>
|
||||
<Year>2018</Year>
|
||||
<Month>10</Month>
|
||||
<Day>30</Day>
|
||||
<Manga>No</Manga>
|
||||
<SeriesGroup>Sandman</SeriesGroup>
|
||||
<ScanInformation></ScanInformation>
|
||||
</ComicInfo>
|
||||
""".trimIndent()
|
||||
val comicInfo = mapper.readValue<ComicInfo>(xml)
|
||||
|
||||
with(comicInfo) {
|
||||
assertThat(title).isEqualTo("v01 - Preludes & Nocturnes - 30th Anniversary Edition")
|
||||
|
|
@ -67,8 +145,16 @@ class ComicInfoTest {
|
|||
|
||||
@Test
|
||||
fun `given incorrect enum values when deserializing then it is ignored`() {
|
||||
val file = ClassPathResource("comicrack/InvalidEnumValues.xml")
|
||||
val comicInfo = mapper.readValue<ComicInfo>(file.url)
|
||||
// language=XML
|
||||
val xml = """
|
||||
<?xml version="1.0"?>
|
||||
<ComicInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<AgeRating>Non existent</AgeRating>
|
||||
<BlackAndWhite>Non existent</BlackAndWhite>
|
||||
<Manga>Non existent</Manga>
|
||||
</ComicInfo>
|
||||
""".trimIndent()
|
||||
val comicInfo = mapper.readValue<ComicInfo>(xml)
|
||||
|
||||
with(comicInfo) {
|
||||
assertThat(ageRating).isNull()
|
||||
|
|
@ -79,8 +165,15 @@ class ComicInfoTest {
|
|||
|
||||
@Test
|
||||
fun `given valid xml file with StoryArc fields when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("comicrack/ComicInfo_StoryArc.xml")
|
||||
val comicInfo = mapper.readValue<ComicInfo>(file.url)
|
||||
// language=XML
|
||||
val xml = """
|
||||
<?xml version="1.0"?>
|
||||
<ComicInfo>
|
||||
<StoryArc>Arc</StoryArc>
|
||||
<StoryArcNumber>2</StoryArcNumber>
|
||||
</ComicInfo>
|
||||
""".trimIndent()
|
||||
val comicInfo = mapper.readValue<ComicInfo>(xml)
|
||||
|
||||
with(comicInfo) {
|
||||
assertThat(storyArc).isEqualTo("Arc")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper
|
|||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.springframework.core.io.ClassPathResource
|
||||
|
||||
class ReadingListTest {
|
||||
|
||||
|
|
@ -12,8 +11,29 @@ class ReadingListTest {
|
|||
|
||||
@Test
|
||||
fun `given valid xml file when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("comicrack/ReadingList.xml")
|
||||
val readingList = mapper.readValue<ReadingList>(file.url)
|
||||
// language=XML
|
||||
val cbl = """
|
||||
<?xml version="1.0"?>
|
||||
<ReadingList>
|
||||
<Name>Civil War</Name>
|
||||
<Books>
|
||||
<Book Series="Civil War" Number="1" Volume="2006" Year="2006">
|
||||
<Id>1b21c8c4-e8d7-44f6-992d-97d24ce8123e</Id>
|
||||
<FileName>Civil War Vol.2006 #01 (July, 2006)</FileName>
|
||||
</Book>
|
||||
<Book Series="Wolverine" Number="42" Volume="2003" Year="2006">
|
||||
<Id>29a69cbf-af64-471d-889c-8fc0f0080f7c</Id>
|
||||
<FileName>Wolverine Vol.2003 #42 (July, 2006)</FileName>
|
||||
</Book>
|
||||
<Book Series="X-Factor" Number="HS" Volume="2006" Year="2006">
|
||||
<Id>ec70e585-5a80-428c-a67e-fd22b668449b</Id>
|
||||
<FileName>X-Factor Vol.2006 #08 (August, 2006)</FileName>
|
||||
</Book>
|
||||
</Books>
|
||||
<Matchers />
|
||||
</ReadingList>
|
||||
""".trimIndent()
|
||||
val readingList = mapper.readValue<ReadingList>(cbl)
|
||||
|
||||
with(readingList) {
|
||||
assertThat(name).isEqualTo("Civil War")
|
||||
|
|
@ -47,9 +67,23 @@ class ReadingListTest {
|
|||
|
||||
@Test
|
||||
fun `given valid xml file for smart list when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("comicrack/ReadingList_SmartList.xml")
|
||||
val mapper = XmlMapper()
|
||||
val readingList = mapper.readValue<ReadingList>(file.url)
|
||||
// language=XML
|
||||
val cbl = """
|
||||
<?xml version="1.0"?>
|
||||
<ReadingList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Name>Golden Age</Name>
|
||||
<Books />
|
||||
<Matchers>
|
||||
<ComicBookMatcher xsi:type="ComicBookSeriesMatcher" MatchOperator="4">
|
||||
<MatchValue>Marvel Masterworks</MatchValue>
|
||||
</ComicBookMatcher>
|
||||
<ComicBookMatcher xsi:type="ComicBookSeriesMatcher" MatchOperator="1">
|
||||
<MatchValue>Golden Age</MatchValue>
|
||||
</ComicBookMatcher>
|
||||
</Matchers>
|
||||
</ReadingList>
|
||||
""".trimIndent()
|
||||
val readingList = mapper.readValue<ReadingList>(cbl)
|
||||
|
||||
with(readingList) {
|
||||
assertThat(name).isEqualTo("Golden Age")
|
||||
|
|
|
|||
|
|
@ -10,9 +10,12 @@ import org.gotson.komga.infrastructure.metadata.mylar.dto.AgeRating
|
|||
import org.gotson.komga.infrastructure.metadata.mylar.dto.MylarMetadata
|
||||
import org.gotson.komga.infrastructure.metadata.mylar.dto.Series
|
||||
import org.gotson.komga.infrastructure.metadata.mylar.dto.Status
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.springframework.core.io.ClassPathResource
|
||||
import org.junit.jupiter.api.io.TempDir
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
|
||||
class MylarSeriesProviderTest {
|
||||
|
||||
|
|
@ -20,7 +23,13 @@ class MylarSeriesProviderTest {
|
|||
|
||||
private val mylarSeriesProvider = MylarSeriesProvider(mockMapper)
|
||||
|
||||
private val series = makeSeries("series", url = ClassPathResource("mylar").url)
|
||||
private lateinit var series: org.gotson.komga.domain.model.Series
|
||||
|
||||
@BeforeAll
|
||||
fun setupSeries(@TempDir dir: Path) {
|
||||
Files.createFile(dir.resolve("series.json"))
|
||||
series = makeSeries("series", url = dir.toUri().toURL())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given seriesJson when getting series metadata then metadata patch is valid`() {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import org.junit.jupiter.api.Test
|
|||
import org.junit.jupiter.api.extension.ExtendWith
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.core.io.ClassPathResource
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension
|
||||
|
||||
@ExtendWith(SpringExtension::class)
|
||||
|
|
@ -21,8 +20,31 @@ class SeriesTest(
|
|||
|
||||
@Test
|
||||
fun `given valid json file when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("mylar/series.json")
|
||||
val seriesJson = mapper.readValue<Series>(file.url)
|
||||
// language=JSON
|
||||
val json = """
|
||||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "DC Comics",
|
||||
"imprint": null,
|
||||
"name": "American Vampire 1976",
|
||||
"cid": 130865,
|
||||
"year": 2020,
|
||||
"description_text": "Nine issue mini-series, the closing chapter of American Vampire",
|
||||
"description_formatted": "Nine issue mini-series, the closing chapter of American Vampire",
|
||||
"volume": null,
|
||||
"booktype": "Print",
|
||||
"age_rating": "Adult",
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine.gamespot.com/a/uploads/scale_large/6/67663/7603293-01.jpg",
|
||||
"total_issues": 9,
|
||||
"publication_run": "December 2020 - Present",
|
||||
"status": "Continuing"
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
val seriesJson = mapper.readValue<Series>(json)
|
||||
|
||||
assertThat(seriesJson.metadata).isNotNull
|
||||
with(seriesJson.metadata) {
|
||||
|
|
@ -46,8 +68,31 @@ class SeriesTest(
|
|||
|
||||
@Test
|
||||
fun `given another valid json file when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("mylar/series1.json")
|
||||
val seriesJson = mapper.readValue<Series>(file.url)
|
||||
// language=JSON
|
||||
val json = """
|
||||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "IDW Publishing",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"year": 2019,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
val seriesJson = mapper.readValue<Series>(json)
|
||||
|
||||
assertThat(seriesJson.metadata).isNotNull
|
||||
with(seriesJson.metadata) {
|
||||
|
|
@ -71,8 +116,31 @@ class SeriesTest(
|
|||
|
||||
@Test
|
||||
fun `given yet another valid json file when deserializing then properties are available`() {
|
||||
val file = ClassPathResource("mylar/series-gh961.json")
|
||||
val seriesJson = mapper.readValue<Series>(file.url)
|
||||
// language=JSON
|
||||
val json = """
|
||||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "Kodansha Comics USA",
|
||||
"imprint": null,
|
||||
"name": "Vinland Saga",
|
||||
"comicid": 69157,
|
||||
"year": 2013,
|
||||
"description_text": "English translation of Vinland Saga (ヴィンランド・サガ).Vinland Saga is the first series from Kodansha Comics USA to be released in hardcovers, each collection collects and translates two volumes of the original Japanese manga",
|
||||
"description_formatted": "English translation of Vinland Saga (ヴィンランド・サガ).Vinland Saga is the first series from Kodansha Comics USA to be released in hardcovers, each collection collects and translates two volumes of the original Japanese manga",
|
||||
"volume": null,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine.gamespot.com/a/uploads/scale_large/6/67663/3439178-01.jpg",
|
||||
"total_issues": 12,
|
||||
"publication_run": "November 2013 - December 2021",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
val seriesJson = mapper.readValue<Series>(json)
|
||||
|
||||
assertThat(seriesJson.metadata).isNotNull
|
||||
with(seriesJson.metadata) {
|
||||
|
|
@ -96,24 +164,91 @@ class SeriesTest(
|
|||
|
||||
@Test
|
||||
fun `given invalid json file missing year when deserializing then it fails`() {
|
||||
val file = ClassPathResource("mylar/series-missing-year.json")
|
||||
val thrown = catchThrowable { mapper.readValue<Series>(file.url) }
|
||||
// language=JSON
|
||||
val json = """
|
||||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "IDW Publishing",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
val thrown = catchThrowable { mapper.readValue<Series>(json) }
|
||||
|
||||
assertThat(thrown).isInstanceOf(MismatchedInputException::class.java)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given invalid json file missing publisher when deserializing then it fails`() {
|
||||
val file = ClassPathResource("mylar/series-missing-publisher.json")
|
||||
val thrown = catchThrowable { mapper.readValue<Series>(file.url) }
|
||||
// language=JSON
|
||||
val json = """
|
||||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"year": 2019,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
val thrown = catchThrowable { mapper.readValue<Series>(json) }
|
||||
|
||||
assertThat(thrown).isInstanceOf(MissingKotlinParameterException::class.java)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given invalid json file missing status when deserializing then it fails`() {
|
||||
val file = ClassPathResource("mylar/series-missing-status.json")
|
||||
val thrown = catchThrowable { mapper.readValue<Series>(file.url) }
|
||||
// language=JSON
|
||||
val json = """
|
||||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "IDW Publishing",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"year": 2019,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present"
|
||||
}
|
||||
}
|
||||
|
||||
""".trimIndent()
|
||||
val thrown = catchThrowable { mapper.readValue<Series>(json) }
|
||||
|
||||
assertThat(thrown).isInstanceOf(MissingKotlinParameterException::class.java)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,37 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<ComicInfo>
|
||||
<Title>v01 - Preludes & Nocturnes - 30th Anniversary Edition</Title>
|
||||
<Series>Sandman</Series>
|
||||
<Web>https://www.comixology.com/Sandman/digital-comic/727888</Web>
|
||||
<Summary>Neil Gaiman's seminal series, THE SANDMAN, celebrates its 30th anniversary with an all-new edition of THE
|
||||
SANDMAN VOL. 1: PRELUDES & NOCTURNES!
|
||||
|
||||
New York Times best-selling author Neil Gaiman's transcendent series THE SANDMAN is often hailed as the
|
||||
definitive Vertigo title and one of the finest achievements in graphic storytelling. Gaiman created an
|
||||
unforgettable tale of the forces that exist beyond life and death by weaving ancient mythology, folklore and
|
||||
fairy tales with his own distinct narrative vision.
|
||||
|
||||
In PRELUDES & NOCTURNES, an occultist attempting to capture Death to bargain for eternal life traps her
|
||||
younger brother Dream instead. After his 70 year imprisonment and eventual escape, Dream, also known as
|
||||
Morpheus, goes on a quest for his lost objects of power. On his arduous journey Morpheus encounters Lucifer,
|
||||
John Constantine, and an all-powerful madman.
|
||||
|
||||
This book also includes the story "The Sound of Her Wings," which introduces us to the pragmatic and perky goth
|
||||
girl Death.
|
||||
|
||||
Collects THE SANDMAN #1-8.</Summary>
|
||||
<Notes>Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]</Notes>
|
||||
<Translator>The translator</Translator>
|
||||
<Publisher>DC</Publisher>
|
||||
<Imprint>Vertigo</Imprint>
|
||||
<Count>10</Count>
|
||||
<Genre>Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama</Genre>
|
||||
<Tags>dark, Occult</Tags>
|
||||
<PageCount>237</PageCount>
|
||||
<LanguageISO>en</LanguageISO>
|
||||
<AgeRating>Mature 17+</AgeRating>
|
||||
<BlackAndWhite>No</BlackAndWhite>
|
||||
<Manga>No</Manga>
|
||||
<SeriesGroup>Sandman</SeriesGroup>
|
||||
<ScanInformation></ScanInformation>
|
||||
</ComicInfo>
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<ComicInfo>
|
||||
<Title>v01 - Preludes & Nocturnes - 30th Anniversary Edition</Title>
|
||||
<Series>Sandman</Series>
|
||||
<Web>https://www.comixology.com/Sandman/digital-comic/727888</Web>
|
||||
<Summary>Neil Gaiman's seminal series, THE SANDMAN, celebrates its 30th anniversary with an all-new edition of THE
|
||||
SANDMAN VOL. 1: PRELUDES & NOCTURNES!
|
||||
|
||||
New York Times best-selling author Neil Gaiman's transcendent series THE SANDMAN is often hailed as the
|
||||
definitive Vertigo title and one of the finest achievements in graphic storytelling. Gaiman created an
|
||||
unforgettable tale of the forces that exist beyond life and death by weaving ancient mythology, folklore and
|
||||
fairy tales with his own distinct narrative vision.
|
||||
|
||||
In PRELUDES & NOCTURNES, an occultist attempting to capture Death to bargain for eternal life traps her
|
||||
younger brother Dream instead. After his 70 year imprisonment and eventual escape, Dream, also known as
|
||||
Morpheus, goes on a quest for his lost objects of power. On his arduous journey Morpheus encounters Lucifer,
|
||||
John Constantine, and an all-powerful madman.
|
||||
|
||||
This book also includes the story "The Sound of Her Wings," which introduces us to the pragmatic and perky goth
|
||||
girl Death.
|
||||
|
||||
Collects THE SANDMAN #1-8.
|
||||
</Summary>
|
||||
<Notes>Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]</Notes>
|
||||
<Publisher>DC</Publisher>
|
||||
<Imprint>Vertigo</Imprint>
|
||||
<Genre>Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama</Genre>
|
||||
<PageCount>237</PageCount>
|
||||
<LanguageISO>en</LanguageISO>
|
||||
<AgeRating>MA15+</AgeRating>
|
||||
<BlackAndWhite>No</BlackAndWhite>
|
||||
<Year>2018</Year>
|
||||
<Month>10</Month>
|
||||
<Day>30</Day>
|
||||
<Manga>No</Manga>
|
||||
<SeriesGroup>Sandman</SeriesGroup>
|
||||
<ScanInformation></ScanInformation>
|
||||
</ComicInfo>
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<ComicInfo>
|
||||
<StoryArc>Arc</StoryArc>
|
||||
<StoryArcNumber>2</StoryArcNumber>
|
||||
</ComicInfo>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<ComicInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<AgeRating>Non existent</AgeRating>
|
||||
<BlackAndWhite>Non existent</BlackAndWhite>
|
||||
<Manga>Non existent</Manga>
|
||||
</ComicInfo>
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<ReadingList>
|
||||
<Name>Civil War</Name>
|
||||
<Books>
|
||||
<Book Series="Civil War" Number="1" Volume="2006" Year="2006">
|
||||
<Id>1b21c8c4-e8d7-44f6-992d-97d24ce8123e</Id>
|
||||
<FileName>Civil War Vol.2006 #01 (July, 2006)</FileName>
|
||||
</Book>
|
||||
<Book Series="Wolverine" Number="42" Volume="2003" Year="2006">
|
||||
<Id>29a69cbf-af64-471d-889c-8fc0f0080f7c</Id>
|
||||
<FileName>Wolverine Vol.2003 #42 (July, 2006)</FileName>
|
||||
</Book>
|
||||
<Book Series="X-Factor" Number="HS" Volume="2006" Year="2006">
|
||||
<Id>ec70e585-5a80-428c-a67e-fd22b668449b</Id>
|
||||
<FileName>X-Factor Vol.2006 #08 (August, 2006)</FileName>
|
||||
</Book>
|
||||
</Books>
|
||||
<Matchers />
|
||||
</ReadingList>
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<ReadingList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Name>Golden Age</Name>
|
||||
<Books />
|
||||
<Matchers>
|
||||
<ComicBookMatcher xsi:type="ComicBookSeriesMatcher" MatchOperator="4">
|
||||
<MatchValue>Marvel Masterworks</MatchValue>
|
||||
</ComicBookMatcher>
|
||||
<ComicBookMatcher xsi:type="ComicBookSeriesMatcher" MatchOperator="1">
|
||||
<MatchValue>Golden Age</MatchValue>
|
||||
</ComicBookMatcher>
|
||||
</Matchers>
|
||||
</ReadingList>
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "Kodansha Comics USA",
|
||||
"imprint": null,
|
||||
"name": "Vinland Saga",
|
||||
"comicid": 69157,
|
||||
"year": 2013,
|
||||
"description_text": "English translation of Vinland Saga (ヴィンランド・サガ).Vinland Saga is the first series from Kodansha Comics USA to be released in hardcovers, each collection collects and translates two volumes of the original Japanese manga",
|
||||
"description_formatted": "English translation of Vinland Saga (ヴィンランド・サガ).Vinland Saga is the first series from Kodansha Comics USA to be released in hardcovers, each collection collects and translates two volumes of the original Japanese manga",
|
||||
"volume": null,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine.gamespot.com/a/uploads/scale_large/6/67663/3439178-01.jpg",
|
||||
"total_issues": 12,
|
||||
"publication_run": "November 2013 - December 2021",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"year": 2019,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "IDW Publishing",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"year": 2019,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "IDW Publishing",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "DC Comics",
|
||||
"imprint": null,
|
||||
"name": "American Vampire 1976",
|
||||
"cid": 130865,
|
||||
"year": 2020,
|
||||
"description_text": "Nine issue mini-series, the closing chapter of American Vampire",
|
||||
"description_formatted": "Nine issue mini-series, the closing chapter of American Vampire",
|
||||
"volume": null,
|
||||
"booktype": "Print",
|
||||
"age_rating": "Adult",
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine.gamespot.com/a/uploads/scale_large/6/67663/7603293-01.jpg",
|
||||
"total_issues": 9,
|
||||
"publication_run": "December 2020 - Present",
|
||||
"status": "Continuing"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"version": "1.0.1",
|
||||
"metadata": {
|
||||
"type": "comicSeries",
|
||||
"publisher": "IDW Publishing",
|
||||
"imprint": null,
|
||||
"name": "Usagi Yojimbo",
|
||||
"comicid": 119731,
|
||||
"year": 2019,
|
||||
"description_text": null,
|
||||
"description_formatted": null,
|
||||
"volume": 4,
|
||||
"booktype": "Print",
|
||||
"age_rating": null,
|
||||
"collects": null,
|
||||
"ComicImage": "https://comicvine1.cbsistatic.com/uploads/scale_large/6/67663/6974029-01a.jpg",
|
||||
"total_issues": 20,
|
||||
"publication_run": "June 2019 - Present",
|
||||
"status": "Ended"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue