Sync telesrv 4c0e2d9 (feat: complete official star gift lifecycle and admin tooling). Public adjustments: skipped private docs/deploy-nginx/README source changes, kept iamxvbaba/td public dependency, replaced local/private sample IP and orange seed label.
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package stargifts_test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"telesrv/internal/app/stargifts"
|
|
"telesrv/internal/officialgifts"
|
|
)
|
|
|
|
// This opt-in test is run by the official import audit. It validates every distinct base,
|
|
// model and pattern document with the trusted official animation policy, including the
|
|
// small set of Telegram-authored expression animations.
|
|
func TestConfiguredOfficialSnapshotAnimations(t *testing.T) {
|
|
root := os.Getenv("TELESRV_TEST_OFFICIAL_GIFTS_DIR")
|
|
if root == "" {
|
|
t.Skip("TELESRV_TEST_OFFICIAL_GIFTS_DIR is not set")
|
|
}
|
|
catalog := officialgifts.New(root)
|
|
items, err := catalog.List(context.Background())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
service := &stargifts.Service{}
|
|
seen := map[int64]struct{}{}
|
|
validate := func(document officialgifts.Document) {
|
|
t.Helper()
|
|
if _, ok := seen[document.ID]; ok {
|
|
return
|
|
}
|
|
seen[document.ID] = struct{}{}
|
|
if _, err := service.PrepareOfficialAnimation(document.FileName, document.Data); err != nil {
|
|
t.Fatalf("document %d (%s): %v", document.ID, document.Path, err)
|
|
}
|
|
}
|
|
for _, item := range items {
|
|
bundle, err := catalog.Bundle(context.Background(), item.ID, item.ModelCount+item.PatternCount+item.BackdropCount > 0)
|
|
if err != nil {
|
|
t.Fatalf("gift %d: %v", item.ID, err)
|
|
}
|
|
validate(bundle.BaseDocument)
|
|
if bundle.Collectible == nil {
|
|
continue
|
|
}
|
|
for _, model := range bundle.Collectible.Models {
|
|
validate(model.Document)
|
|
}
|
|
for _, pattern := range bundle.Collectible.Patterns {
|
|
validate(pattern.Document)
|
|
}
|
|
}
|
|
if len(seen) != 8333 {
|
|
t.Fatalf("validated %d documents, want 8333", len(seen))
|
|
}
|
|
}
|