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  }