diff options
author | Martin Czygan <martin.czygan@gmail.com> | 2021-04-27 21:37:47 +0200 |
---|---|---|
committer | Martin Czygan <martin.czygan@gmail.com> | 2021-04-27 21:37:47 +0200 |
commit | 47751477adae4260b8fde62abfea883a6cd31cd2 (patch) | |
tree | d137c333fa9ec7133301377a17ac74012ef2ce37 /skate/schema_test.go | |
parent | f001a9df685bf52fdedc4da979835bb51405bd8c (diff) | |
download | refcat-47751477adae4260b8fde62abfea883a6cd31cd2.tar.gz refcat-47751477adae4260b8fde62abfea883a6cd31cd2.zip |
wip: ol conversion and tests
Diffstat (limited to 'skate/schema_test.go')
-rw-r--r-- | skate/schema_test.go | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/skate/schema_test.go b/skate/schema_test.go new file mode 100644 index 0000000..6a95115 --- /dev/null +++ b/skate/schema_test.go @@ -0,0 +1,147 @@ +package skate + +import ( + "encoding/json" + "fmt" + "reflect" + "testing" + + "github.com/nsf/jsondiff" +) + +func TestOpenLibraryToRelease(t *testing.T) { + var cases = []struct { + work OpenLibraryWork + release Release + err error + }{ + { + work: OpenLibraryWork{}, + release: Release{ + ExtIDs: struct { + Arxiv string `json:"arxiv,omitempty"` + Core string `json:"core,omitempty"` + DOI string `json:"doi,omitempty"` + ISBN []string `json:"isbn,omitempty"` + Jstor string `json:"jstor,omitempty"` + OLID string `json:"olid,omitempty"` + PMCID string `json:"pmcid,omitempty"` + PMID string `json:"pmid,omitempty"` + WikidataQID string `json:"wikidata_qid,omitempty"` + }{}, + }, + err: nil, + }, + { + work: OpenLibraryWork{ + Title: "Hello World", + Isbn: []string{ + "2844273386", + "9782844273383", + }, + }, + release: Release{ + ExtIDs: struct { + Arxiv string `json:"arxiv,omitempty"` + Core string `json:"core,omitempty"` + DOI string `json:"doi,omitempty"` + ISBN []string `json:"isbn,omitempty"` + Jstor string `json:"jstor,omitempty"` + OLID string `json:"olid,omitempty"` + PMCID string `json:"pmcid,omitempty"` + PMID string `json:"pmid,omitempty"` + WikidataQID string `json:"wikidata_qid,omitempty"` + }{ + ISBN: []string{"9782844273383"}, + }, + Title: "Hello World", + }, + err: nil, + }, + { + work: OpenLibraryWork{ + Key: "/works/OL10000003W", + Title: "Hello World", + Isbn: []string{ + "2844273386", + "9782844273383", + }, + HasFulltext: false, + }, + release: Release{ + ExtIDs: struct { + Arxiv string `json:"arxiv,omitempty"` + Core string `json:"core,omitempty"` + DOI string `json:"doi,omitempty"` + ISBN []string `json:"isbn,omitempty"` + Jstor string `json:"jstor,omitempty"` + OLID string `json:"olid,omitempty"` + PMCID string `json:"pmcid,omitempty"` + PMID string `json:"pmid,omitempty"` + WikidataQID string `json:"wikidata_qid,omitempty"` + }{ + ISBN: []string{"9782844273383"}, + OLID: "OL10000003W", + }, + Title: "Hello World", + Extra: struct { + ContainerName string `json:"container_name,omitempty"` + SubtitleValue interface{} `json:"subtitle,omitempty"` // []str or str + Crossref struct { + Type string `json:"type,omitempty"` + } `json:"crossref,omitempty"` + DataCite struct { + MetadataVersion int `json:"metadataVersion,omitempty"` + Relations []DataCiteRelation `json:"relations,omitempty"` + } `json:"datacite,omitempty"` + Skate struct { + // Mark as converted (e.g. by setting status to "ref") + Status string `json:"status,omitempty"` + // Carry the ref index and key around. + Ref struct { + Index int64 `json:"index,omitempty"` + Key string `json:"key,omitempty"` + Locator string `json:"locator,omitempty"` + } `json:"ref,omitempty"` + ResearchGate struct { + URL string `json:"url,omitempty"` + } `json:"rg,omitempty"` + } `json:"skate,omitempty"` + OpenLibrary struct { + HasFulltext bool `json:"has_fulltext,omitempty"` + } `json:"ol,omitempty"` + }{ + OpenLibrary: struct { + HasFulltext bool `json:"has_fulltext,omitempty"` + }{ + HasFulltext: false, + }, + }, + }, + err: nil, + }, + } + for _, c := range cases { + r, err := OpenLibraryToRelease(&c.work) + if err != nil { + t.Fatalf("got %v, want %v", err, c.err) + } + if !reflect.DeepEqual(r, &c.release) { + t.Fatalf(prettyStructDiff(r, &c.release)) + } + } +} + +func prettyStructDiff(s, t interface{}) string { + b, err := json.MarshalIndent(s, "", " ") + if err != nil { + return fmt.Sprintf("diff failed: %v", err) + } + c, err := json.MarshalIndent(t, "", " ") + if err != nil { + return fmt.Sprintf("diff failed: %v", err) + } + opts := jsondiff.DefaultConsoleOptions() + _, d := jsondiff.Compare(b, c, &opts) + return d +} |