owpengram-server/internal/rpc/help_app_update_test.go
2026-09-01 12:06:31 +03:00

66 lines
2.3 KiB
Go

package rpc
import (
"context"
"errors"
"testing"
"go.uber.org/zap"
"github.com/iamxvbaba/td/clock"
"github.com/iamxvbaba/td/tg"
"telesrv/internal/updatecdn"
)
type fakeAppUpdateResolver struct {
request updatecdn.ResolveRequest
result *updatecdn.ResolvedUpdate
err error
}
func (f *fakeAppUpdateResolver) Resolve(_ context.Context, req updatecdn.ResolveRequest) (*updatecdn.ResolvedUpdate, error) {
f.request = req
return f.result, f.err
}
func TestHelpGetAppUpdateUsesClientPlatformVersionSourceAndLanguage(t *testing.T) {
resolver := &fakeAppUpdateResolver{result: &updatecdn.ResolvedUpdate{
ID: 91, Version: "12.9.1", Text: "Новая версия", URL: "https://updates.example/app.apk", CanNotSkip: true,
}}
router := New(Config{PublicBaseURL: "https://telesrv.example"}, Deps{AppUpdates: resolver}, zap.NewNop(), clock.System)
ctx := WithClientInfo(WithUserID(context.Background(), 1000000001), ClientInfo{
Type: ClientTypeAndroid, AppVersion: "12.9.0 (500)", LangCode: "ru", SystemLangCode: "en",
})
result, err := router.onHelpGetAppUpdate(ctx, "com.example.store")
if err != nil {
t.Fatal(err)
}
update, ok := result.(*tg.HelpAppUpdate)
if !ok {
t.Fatalf("result = %T, want *tg.HelpAppUpdate", result)
}
if update.ID != 91 || update.Version != "12.9.1" || update.Text != "Новая версия" || !update.GetCanNotSkip() {
t.Fatalf("update = %#v", update)
}
if got, ok := update.GetURL(); !ok || got != "https://updates.example/app.apk" {
t.Fatalf("url = %q, %v", got, ok)
}
if resolver.request.Platform != "android" || resolver.request.Version != "12.9.0 (500)" ||
resolver.request.Source != "com.example.store" || resolver.request.LangCode != "ru" {
t.Fatalf("resolve request = %#v", resolver.request)
}
}
func TestHelpGetAppUpdateFailsClosedWithoutRPCError(t *testing.T) {
resolver := &fakeAppUpdateResolver{err: errors.New("service unavailable")}
router := New(Config{PublicBaseURL: "https://telesrv.example"}, Deps{AppUpdates: resolver}, zap.NewNop(), clock.System)
ctx := WithClientInfo(WithUserID(context.Background(), 1000000001), ClientInfo{Type: ClientTypeIOS, AppVersion: "12.9.0"})
result, err := router.onHelpGetAppUpdate(ctx, "")
if err != nil {
t.Fatal(err)
}
if _, ok := result.(*tg.HelpNoAppUpdate); !ok {
t.Fatalf("result = %T, want *tg.HelpNoAppUpdate", result)
}
}