mirror of
https://github.com/yusing/godoxy.git
synced 2026-01-11 14:20:32 +01:00
Split the monolithic `internal/homepage` icons functionality into a structured package hierarchy: - `internal/homepage/icons/` - Core types (URL, Key, Meta, Provider, Source, Variant) - `internal/homepage/icons/fetch/` - Icon fetching logic (content.go, fetch.go, route.go) - `internal/homepage/icons/list/` - Icon listing and search (list_icons.go, list_icons_test.go) Moved icon-related code from `internal/homepage/`: - `icon_url.go` → `icons/url.go` (+ url_test.go) - `content.go` → `icons/fetch/content.go` - `route.go` → `icons/fetch/route.go` - `list_icons.go` → `icons/list/list_icons.go` (+ list_icons_test.go) Updated all consumers to use the new package structure: - `cmd/main.go` - `internal/api/v1/favicon.go` - `internal/api/v1/icons.go` - `internal/idlewatcher/handle_http.go` - `internal/route/route.go`
186 lines
3.5 KiB
Go
186 lines
3.5 KiB
Go
package iconlist_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
. "github.com/yusing/godoxy/internal/homepage/icons"
|
|
. "github.com/yusing/godoxy/internal/homepage/icons/list"
|
|
)
|
|
|
|
const walkxcodeIcons = `{
|
|
"png": [
|
|
"app1.png",
|
|
"app1-light.png",
|
|
"app2.png",
|
|
"karakeep.png",
|
|
"karakeep-dark.png"
|
|
],
|
|
"svg": [
|
|
"app1.svg",
|
|
"app1-light.svg",
|
|
"karakeep.svg",
|
|
"karakeep-dark.svg"
|
|
],
|
|
"webp": [
|
|
"app1.webp",
|
|
"app1-light.webp",
|
|
"app2.webp",
|
|
"karakeep.webp",
|
|
"karakeep-dark.webp"
|
|
]
|
|
}`
|
|
|
|
const selfhstIcons = `[
|
|
{
|
|
"Name": "2FAuth",
|
|
"Reference": "2fauth",
|
|
"SVG": "Yes",
|
|
"PNG": "Yes",
|
|
"WebP": "Yes",
|
|
"Light": "Yes",
|
|
"Dark": "Yes",
|
|
"Category": "Self-Hosted",
|
|
"Tags": "",
|
|
"CreatedAt": "2024-08-16 00:27:23+00:00"
|
|
},
|
|
{
|
|
"Name": "Dittofeed",
|
|
"Reference": "dittofeed",
|
|
"SVG": "No",
|
|
"PNG": "Yes",
|
|
"WebP": "Yes",
|
|
"Light": "No",
|
|
"Dark": "No",
|
|
"Category": "Self-Hosted",
|
|
"Tags": "",
|
|
"CreatedAt": "2024-08-22 11:33:37+00:00"
|
|
},
|
|
{
|
|
"Name": "Ars Technica",
|
|
"Reference": "ars-technica",
|
|
"SVG": "Yes",
|
|
"PNG": "Yes",
|
|
"WebP": "Yes",
|
|
"Light": "Yes",
|
|
"Dark": "Yes",
|
|
"Category": "Other",
|
|
"Tags": "News",
|
|
"CreatedAt": "2025-04-09 11:15:01+00:00"
|
|
}
|
|
]`
|
|
|
|
type testCases struct {
|
|
Key Key
|
|
Meta
|
|
}
|
|
|
|
func runTests(t *testing.T, iconsCache IconMap, test []testCases) {
|
|
t.Helper()
|
|
|
|
for _, item := range test {
|
|
icon, ok := iconsCache[item.Key]
|
|
if !ok {
|
|
t.Fatalf("icon %s not found", item.Key)
|
|
}
|
|
if icon.PNG != item.PNG || icon.SVG != item.SVG || icon.WebP != item.WebP {
|
|
t.Fatalf("icon %s file format mismatch", item.Key)
|
|
}
|
|
if icon.Light != item.Light || icon.Dark != item.Dark {
|
|
t.Fatalf("icon %s variant mismatch", item.Key)
|
|
}
|
|
if icon.DisplayName != item.DisplayName {
|
|
t.Fatalf("icon %s display name mismatch, expect %s, got %s", item.Key, item.DisplayName, icon.DisplayName)
|
|
}
|
|
if icon.Tag != item.Tag {
|
|
t.Fatalf("icon %s tag mismatch, expect %s, got %s", item.Key, item.Tag, icon.Tag)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestListWalkxCodeIcons(t *testing.T) {
|
|
t.Cleanup(TestClearIconsCache)
|
|
|
|
MockHTTPGet([]byte(walkxcodeIcons))
|
|
m := make(IconMap)
|
|
if err := UpdateWalkxCodeIcons(m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(m) != 3 {
|
|
t.Fatalf("expect 3 icons, got %d", len(m))
|
|
}
|
|
test := []testCases{
|
|
{
|
|
Key: NewKey(SourceWalkXCode, "app1"),
|
|
Meta: Meta{
|
|
SVG: true,
|
|
PNG: true,
|
|
WebP: true,
|
|
Light: true,
|
|
},
|
|
},
|
|
{
|
|
Key: NewKey(SourceWalkXCode, "app2"),
|
|
Meta: Meta{
|
|
PNG: true,
|
|
WebP: true,
|
|
},
|
|
},
|
|
{
|
|
Key: NewKey(SourceWalkXCode, "karakeep"),
|
|
Meta: Meta{
|
|
SVG: true,
|
|
PNG: true,
|
|
WebP: true,
|
|
Dark: true,
|
|
},
|
|
},
|
|
}
|
|
runTests(t, m, test)
|
|
}
|
|
|
|
func TestListSelfhstIcons(t *testing.T) {
|
|
t.Cleanup(TestClearIconsCache)
|
|
MockHTTPGet([]byte(selfhstIcons))
|
|
m := make(IconMap)
|
|
if err := UpdateSelfhstIcons(m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(m) != 3 {
|
|
t.Fatalf("expect 3 icons, got %d", len(m))
|
|
}
|
|
test := []testCases{
|
|
{
|
|
Key: NewKey(SourceSelfhSt, "2fauth"),
|
|
Meta: Meta{
|
|
SVG: true,
|
|
PNG: true,
|
|
WebP: true,
|
|
Light: true,
|
|
Dark: true,
|
|
DisplayName: "2FAuth",
|
|
},
|
|
},
|
|
{
|
|
Key: NewKey(SourceSelfhSt, "dittofeed"),
|
|
Meta: Meta{
|
|
PNG: true,
|
|
WebP: true,
|
|
DisplayName: "Dittofeed",
|
|
},
|
|
},
|
|
{
|
|
Key: NewKey(SourceSelfhSt, "ars-technica"),
|
|
Meta: Meta{
|
|
SVG: true,
|
|
PNG: true,
|
|
WebP: true,
|
|
Light: true,
|
|
Dark: true,
|
|
DisplayName: "Ars Technica",
|
|
Tag: "News",
|
|
},
|
|
},
|
|
}
|
|
runTests(t, m, test)
|
|
}
|