109 lines
3.1 KiB
Go
109 lines
3.1 KiB
Go
|
|
package collect
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/host-uk/core/pkg/io"
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestPapersCollector_Name_Good(t *testing.T) {
|
||
|
|
p := &PapersCollector{Source: PaperSourceIACR}
|
||
|
|
assert.Equal(t, "papers:iacr", p.Name())
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPapersCollector_Name_Good_ArXiv(t *testing.T) {
|
||
|
|
p := &PapersCollector{Source: PaperSourceArXiv}
|
||
|
|
assert.Equal(t, "papers:arxiv", p.Name())
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPapersCollector_Name_Good_All(t *testing.T) {
|
||
|
|
p := &PapersCollector{Source: PaperSourceAll}
|
||
|
|
assert.Equal(t, "papers:all", p.Name())
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPapersCollector_Collect_Bad_NoQuery(t *testing.T) {
|
||
|
|
m := io.NewMockMedium()
|
||
|
|
cfg := NewConfigWithMedium(m, "/output")
|
||
|
|
|
||
|
|
p := &PapersCollector{Source: PaperSourceIACR}
|
||
|
|
_, err := p.Collect(context.Background(), cfg)
|
||
|
|
assert.Error(t, err)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPapersCollector_Collect_Bad_UnknownSource(t *testing.T) {
|
||
|
|
m := io.NewMockMedium()
|
||
|
|
cfg := NewConfigWithMedium(m, "/output")
|
||
|
|
|
||
|
|
p := &PapersCollector{Source: "unknown", Query: "test"}
|
||
|
|
_, err := p.Collect(context.Background(), cfg)
|
||
|
|
assert.Error(t, err)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPapersCollector_Collect_Good_DryRun(t *testing.T) {
|
||
|
|
m := io.NewMockMedium()
|
||
|
|
cfg := NewConfigWithMedium(m, "/output")
|
||
|
|
cfg.DryRun = true
|
||
|
|
|
||
|
|
p := &PapersCollector{Source: PaperSourceAll, Query: "cryptography"}
|
||
|
|
result, err := p.Collect(context.Background(), cfg)
|
||
|
|
|
||
|
|
assert.NoError(t, err)
|
||
|
|
assert.Equal(t, 0, result.Items)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestFormatPaperMarkdown_Good(t *testing.T) {
|
||
|
|
md := FormatPaperMarkdown(
|
||
|
|
"Zero-Knowledge Proofs Revisited",
|
||
|
|
[]string{"Alice", "Bob"},
|
||
|
|
"2025-01-15",
|
||
|
|
"https://eprint.iacr.org/2025/001",
|
||
|
|
"iacr",
|
||
|
|
"We present a new construction for zero-knowledge proofs.",
|
||
|
|
)
|
||
|
|
|
||
|
|
assert.Contains(t, md, "# Zero-Knowledge Proofs Revisited")
|
||
|
|
assert.Contains(t, md, "**Authors:** Alice, Bob")
|
||
|
|
assert.Contains(t, md, "**Published:** 2025-01-15")
|
||
|
|
assert.Contains(t, md, "**URL:** https://eprint.iacr.org/2025/001")
|
||
|
|
assert.Contains(t, md, "**Source:** iacr")
|
||
|
|
assert.Contains(t, md, "## Abstract")
|
||
|
|
assert.Contains(t, md, "zero-knowledge proofs")
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestFormatPaperMarkdown_Good_Minimal(t *testing.T) {
|
||
|
|
md := FormatPaperMarkdown("Title Only", nil, "", "", "", "")
|
||
|
|
|
||
|
|
assert.Contains(t, md, "# Title Only")
|
||
|
|
assert.NotContains(t, md, "**Authors:**")
|
||
|
|
assert.NotContains(t, md, "## Abstract")
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestArxivEntryToPaper_Good(t *testing.T) {
|
||
|
|
entry := arxivEntry{
|
||
|
|
ID: "http://arxiv.org/abs/2501.12345v1",
|
||
|
|
Title: " A Great Paper ",
|
||
|
|
Summary: " This paper presents... ",
|
||
|
|
Published: "2025-01-15T00:00:00Z",
|
||
|
|
Authors: []arxivAuthor{
|
||
|
|
{Name: "Alice"},
|
||
|
|
{Name: "Bob"},
|
||
|
|
},
|
||
|
|
Links: []arxivLink{
|
||
|
|
{Href: "http://arxiv.org/abs/2501.12345v1", Rel: "alternate"},
|
||
|
|
{Href: "http://arxiv.org/pdf/2501.12345v1", Rel: "related", Type: "application/pdf"},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
ppr := arxivEntryToPaper(entry)
|
||
|
|
|
||
|
|
assert.Equal(t, "2501.12345v1", ppr.ID)
|
||
|
|
assert.Equal(t, "A Great Paper", ppr.Title)
|
||
|
|
assert.Equal(t, "This paper presents...", ppr.Abstract)
|
||
|
|
assert.Equal(t, "2025-01-15T00:00:00Z", ppr.Date)
|
||
|
|
assert.Equal(t, []string{"Alice", "Bob"}, ppr.Authors)
|
||
|
|
assert.Equal(t, "http://arxiv.org/abs/2501.12345v1", ppr.URL)
|
||
|
|
assert.Equal(t, "arxiv", ppr.Source)
|
||
|
|
}
|