aboutsummaryrefslogtreecommitdiffstats
path: root/skate/schema_test.go
diff options
context:
space:
mode:
authorMartin Czygan <martin.czygan@gmail.com>2021-04-27 21:37:47 +0200
committerMartin Czygan <martin.czygan@gmail.com>2021-04-27 21:37:47 +0200
commit47751477adae4260b8fde62abfea883a6cd31cd2 (patch)
treed137c333fa9ec7133301377a17ac74012ef2ce37 /skate/schema_test.go
parentf001a9df685bf52fdedc4da979835bb51405bd8c (diff)
downloadrefcat-47751477adae4260b8fde62abfea883a6cd31cd2.tar.gz
refcat-47751477adae4260b8fde62abfea883a6cd31cd2.zip
wip: ol conversion and tests
Diffstat (limited to 'skate/schema_test.go')
-rw-r--r--skate/schema_test.go147
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
+}