75 lines
2.5 KiB
Go
75 lines
2.5 KiB
Go
package useridinput
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
userv1 "hyapp.local/api/proto/user/v1"
|
|
"hyapp/pkg/xerr"
|
|
)
|
|
|
|
type fakeDisplayResolver struct {
|
|
userID int64
|
|
err error
|
|
last *userv1.ResolveDisplayUserIDRequest
|
|
}
|
|
|
|
func (f *fakeDisplayResolver) ResolveDisplayUserID(_ context.Context, req *userv1.ResolveDisplayUserIDRequest) (*userv1.ResolveDisplayUserIDResponse, error) {
|
|
f.last = req
|
|
if f.err != nil {
|
|
return nil, f.err
|
|
}
|
|
return &userv1.ResolveDisplayUserIDResponse{Identity: &userv1.UserIdentity{
|
|
UserId: f.userID,
|
|
DisplayUserId: req.GetDisplayUserId(),
|
|
Status: "active",
|
|
AppCode: req.GetMeta().GetAppCode(),
|
|
}}, nil
|
|
}
|
|
|
|
func TestResolvePrefersActiveDisplayIDBeforeNumericUserID(t *testing.T) {
|
|
resolver := &fakeDisplayResolver{userID: 900001}
|
|
userID, err := Resolve(context.Background(), resolver, &userv1.RequestMeta{AppCode: "lalu"}, "123456")
|
|
if err != nil {
|
|
t.Fatalf("Resolve failed: %v", err)
|
|
}
|
|
if userID != 900001 {
|
|
t.Fatalf("active display id should win over numeric fallback, got %d", userID)
|
|
}
|
|
if resolver.last == nil || resolver.last.GetDisplayUserId() != "123456" {
|
|
t.Fatalf("display resolver was not called first: %+v", resolver.last)
|
|
}
|
|
}
|
|
|
|
func TestResolveFallsBackToNumericUserIDWhenDisplayIDNotFound(t *testing.T) {
|
|
resolver := &fakeDisplayResolver{err: xerr.New(xerr.DisplayUserIDNotFound, "not found")}
|
|
userID, err := Resolve(context.Background(), resolver, &userv1.RequestMeta{AppCode: "lalu"}, "123456")
|
|
if err != nil {
|
|
t.Fatalf("Resolve failed: %v", err)
|
|
}
|
|
if userID != 123456 {
|
|
t.Fatalf("numeric user id fallback mismatch: got %d", userID)
|
|
}
|
|
}
|
|
|
|
func TestResolveKeepsPrettyDisplayIDOnDisplayResolver(t *testing.T) {
|
|
resolver := &fakeDisplayResolver{userID: 123456}
|
|
userID, err := Resolve(context.Background(), resolver, &userv1.RequestMeta{AppCode: "lalu"}, "1111cc1111")
|
|
if err != nil {
|
|
t.Fatalf("Resolve failed: %v", err)
|
|
}
|
|
if userID != 123456 {
|
|
t.Fatalf("pretty display id resolve mismatch: got %d", userID)
|
|
}
|
|
if resolver.last == nil || resolver.last.GetDisplayUserId() != "1111cc1111" {
|
|
t.Fatalf("pretty display id was not passed through: %+v", resolver.last)
|
|
}
|
|
}
|
|
|
|
func TestResolveDoesNotHideNonNotFoundErrors(t *testing.T) {
|
|
resolver := &fakeDisplayResolver{err: xerr.New(xerr.Unavailable, "user-service unavailable")}
|
|
if _, err := Resolve(context.Background(), resolver, &userv1.RequestMeta{AppCode: "lalu"}, "123456"); !xerr.IsCode(err, xerr.Unavailable) {
|
|
t.Fatalf("non-not-found error should pass through, got %v", err)
|
|
}
|
|
}
|