github.com/status-im/status-go@v1.1.0/multiaccounts/settings/columns_test.go (about) 1 package settings 2 3 import ( 4 "encoding/json" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/status-im/status-go/protocol/protobuf" 11 ) 12 13 func TestSyncSettingField_MarshalJSON(t *testing.T) { 14 cs := []struct { 15 Field SyncSettingField 16 Expected []byte 17 }{ 18 { 19 Field: SyncSettingField{ 20 Currency, 21 "eth", 22 }, 23 Expected: []byte("{\"name\":\"currency\",\"value\":\"eth\"}"), 24 }, 25 { 26 Field: SyncSettingField{ 27 ProfilePicturesShowTo, 28 ProfilePicturesShowToNone, 29 }, 30 Expected: []byte("{\"name\":\"profile-pictures-show-to\",\"value\":3}"), 31 }, 32 { 33 Field: SyncSettingField{ 34 MessagesFromContactsOnly, 35 false, 36 }, 37 Expected: []byte("{\"name\":\"messages-from-contacts-only\",\"value\":false}"), 38 }, 39 } 40 41 for _, c := range cs { 42 js, err := json.Marshal(c.Field) 43 require.NoError(t, err) 44 require.Equal(t, c.Expected, js) 45 } 46 } 47 48 func TestJSONEncoding(t *testing.T) { 49 settings := Settings{ 50 PublicKey: "0x04deaafa03e3a646e54a36ec3f6968c1d3686847d88420f00c0ab6ee517ee1893398fca28aacd2af74f2654738c21d10bad3d88dc64201ebe0de5cf1e313970d3d", 51 } 52 encoded, err := json.Marshal(settings) 53 require.NoError(t, err) 54 55 require.True(t, strings.Contains(string(encoded), "\"compressedKey\":\"zQ3shudJrBctPznsRLvbsCtvZFTdi3b34uzYDuqE9Wq9m9T1C\"")) 56 require.True(t, strings.Contains(string(encoded), "\"emojiHash\"")) 57 } 58 59 // TestGetFieldFromProtobufType checks if all the protobuf.SyncSetting_Type_value are assigned to a SettingField 60 func TestGetFieldFromProtobufType(t *testing.T) { 61 for _, sst := range protobuf.SyncSetting_Type_value { 62 _, err := GetFieldFromProtobufType(protobuf.SyncSetting_Type(sst)) 63 if sst == 0 { 64 require.Error(t, err, "do not have a SettingField for the unknown type") 65 continue 66 } 67 require.NoError(t, err) 68 } 69 } 70 71 func TestValueHandler(t *testing.T) { 72 boolSetting := SettingField{ 73 valueHandler: BoolHandler, 74 } 75 76 boolValue := true 77 require.NotNil(t, boolSetting.ValueHandler()) 78 handledBoolValue, err := boolSetting.ValueHandler()(boolValue) 79 require.NoError(t, err) 80 require.True(t, boolValue == handledBoolValue) 81 82 // Incorrect value should be return error 83 int64Value := int64(5) 84 handledInt64Value, err := boolSetting.ValueHandler()(int64Value) 85 require.Error(t, err) 86 require.True(t, handledInt64Value == int64Value) 87 } 88 89 func TestValueCastHandler(t *testing.T) { 90 int64Setting := SettingField{ 91 valueCastHandler: Float64ToInt64Handler, 92 } 93 94 float64Value := float64(5) 95 96 require.NotNil(t, int64Setting.ValueCastHandler()) 97 handledInt64Value, err := int64Setting.ValueCastHandler()(float64Value) 98 require.NoError(t, err) 99 require.True(t, handledInt64Value == int64(5)) 100 }