package registerreward import ( "encoding/binary" "testing" "github.com/redis/go-redis/v9" ) func TestParseRegisterRewardEventSupportsJavaSerializedStringValues(t *testing.T) { message := redis.XMessage{ ID: "1777262756108-0", Values: map[string]any{ "eventId": javaSerializedStringForTest("REGISTER_REWARD:LIKEI:2048614597363036161"), "sysOrigin": javaSerializedStringForTest("LIKEI"), "userId": javaSerializedStringForTest("2048614597363036161"), "countryId": javaSerializedStringForTest("1231833351745187842"), "publishedAt": javaSerializedStringForTest("1777262756107"), }, } event, err := parseRegisterRewardEvent(message) if err != nil { t.Fatalf("parseRegisterRewardEvent() error = %v", err) } if event.EventID != "REGISTER_REWARD:LIKEI:2048614597363036161" { t.Fatalf("eventID = %q", event.EventID) } if event.SysOrigin != "LIKEI" { t.Fatalf("sysOrigin = %q", event.SysOrigin) } if event.UserID != 2048614597363036161 { t.Fatalf("userID = %d", event.UserID) } if event.CountryID != 1231833351745187842 { t.Fatalf("countryID = %d", event.CountryID) } } func TestParseRegisterRewardEventStillSupportsPlainStringValues(t *testing.T) { message := redis.XMessage{ ID: "1-0", Values: map[string]any{ "eventId": "REGISTER_REWARD:LIKEI:2048614597363036161", "sysOrigin": "LIKEI", "userId": "2048614597363036161", "countryId": "1231833351745187842", }, } event, err := parseRegisterRewardEvent(message) if err != nil { t.Fatalf("parseRegisterRewardEvent() error = %v", err) } if event.UserID != 2048614597363036161 || event.CountryID != 1231833351745187842 { t.Fatalf("unexpected event: %+v", event) } } func javaSerializedStringForTest(value string) string { payload := []byte(value) result := make([]byte, 7+len(payload)) copy(result[:5], []byte{0xac, 0xed, 0x00, 0x05, 0x74}) binary.BigEndian.PutUint16(result[5:7], uint16(len(payload))) copy(result[7:], payload) return string(result) }