69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
package usecase
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type qualityFixture struct {
|
|
ID string `json:"id"`
|
|
Intent string `json:"intent"`
|
|
Terms []string `json:"terms"`
|
|
Target int `json:"target"`
|
|
Cases []qualityCandidate `json:"cases"`
|
|
}
|
|
|
|
type qualityCandidate struct {
|
|
URL string `json:"url"`
|
|
Text string `json:"text"`
|
|
Relevant bool `json:"relevant"`
|
|
}
|
|
|
|
func loadQualityFixtures(t *testing.T) []qualityFixture {
|
|
t.Helper()
|
|
raw, err := os.ReadFile(filepath.Join("testdata", "topic_quality_cases.json"))
|
|
require.NoError(t, err)
|
|
var fixtures []qualityFixture
|
|
require.NoError(t, json.Unmarshal(raw, &fixtures))
|
|
require.NotEmpty(t, fixtures)
|
|
return fixtures
|
|
}
|
|
|
|
func TestQualityFixturesCoverRepresentativeIntentSignals(t *testing.T) {
|
|
fixtures := loadQualityFixtures(t)
|
|
require.GreaterOrEqual(t, len(fixtures), 4)
|
|
|
|
for _, fixture := range fixtures {
|
|
require.NotEmpty(t, fixture.ID)
|
|
require.NotEmpty(t, fixture.Intent)
|
|
require.NotEmpty(t, fixture.Terms)
|
|
require.NotEmpty(t, fixture.Cases)
|
|
|
|
for _, candidate := range fixture.Cases {
|
|
require.NotEmpty(t, candidate.URL, fixture.ID)
|
|
require.NotEmpty(t, candidate.Text, fixture.ID)
|
|
got := textMatchesSearchTerm(candidate.Text, fixture.Terms[0])
|
|
require.Equal(t, candidate.Relevant, got, "%s candidate=%q", fixture.ID, candidate.Text)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestQualityFixturesCanonicalizeAliasWithoutHostnameDuplicates(t *testing.T) {
|
|
fixtures := loadQualityFixtures(t)
|
|
var alias *qualityFixture
|
|
for i := range fixtures {
|
|
if fixtures[i].ID == "alias-shortcode" {
|
|
alias = &fixtures[i]
|
|
break
|
|
}
|
|
}
|
|
require.NotNil(t, alias)
|
|
require.Len(t, alias.Cases, 2)
|
|
require.Equal(t, canonicalPostIdentity(alias.Cases[0].URL), canonicalPostIdentity(alias.Cases[1].URL))
|
|
require.Equal(t, "threads-post:SameCode", canonicalPostIdentity(alias.Cases[0].URL))
|
|
}
|