github.com/andersfylling/snowflake/v5@v5.0.1/utils_test.go (about) 1 package snowflake 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestParseSnowflakeString(t *testing.T) { 9 // test panic 10 defer func() { 11 if r := recover(); r != nil { 12 t.Error(r) 13 } 14 }() 15 16 id := "435639843545" 17 if ParseSnowflakeString(id).String() != id { 18 t.Errorf("Incorrect string parsing for ID, base 10. Wants %s, got %s", id, ParseSnowflakeString(id).String()) 19 } 20 ParseSnowflakeString("11") 21 ParseSnowflakeString("0") 22 ParseSnowflakeString("") 23 } 24 25 func TestParseSnowflakeStringWithPanicTriggerLetters(t *testing.T) { 26 // test panic 27 defer func() { 28 if r := recover(); r == nil { 29 t.Errorf("ParseID did not panic") 30 } 31 }() 32 33 id := "435639sd843545gf453s" 34 if ParseSnowflakeString(id).String() != id { 35 t.Errorf("Incorrect string parsing for ID, base 10. Wants %s, got %s", id, ParseSnowflakeString(id).String()) 36 } 37 } 38 39 func TestParseSnowflakeStringWithPanicTriggerOverflow(t *testing.T) { 40 // test panic 41 defer func() { 42 if r := recover(); r == nil { 43 t.Errorf("ParseID did not panic") 44 } 45 }() 46 47 id := "184467440737095516151" // string(uint64(0) - 1) + "1" 48 if ParseSnowflakeString(id).String() != id { 49 t.Errorf("Incorrect string parsing for ID, base 10. Wants %s, got %s", id, ParseSnowflakeString(id).String()) 50 } 51 } 52 53 func TestGetSnowflake(t *testing.T) { 54 data := []interface{}{ 55 "348563", 56 int(2345), 57 int(-2345), 58 uint(8345), 59 int8(1), 60 int16(1), 61 int32(1), 62 int64(1), 63 uint8(1), 64 uint16(1), 65 uint32(1), 66 uint64(1), 67 Snowflake(3), 68 Snowflake(246), 69 } 70 for _, v := range data { 71 s, err := GetSnowflake(v) 72 if err != nil || s.IsZero() { 73 t.Error("cannot parse", reflect.TypeOf(v).Name(), "of value", v) 74 } 75 } 76 77 type unknown struct {} 78 s, err := GetSnowflake(unknown{}) 79 if s != 0 { 80 t.Error("snowflake should not have a value") 81 } 82 if err == nil { 83 t.Error("should fail to process a unknown type") 84 } 85 }