mirror of https://github.com/usememos/memos
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.7 KiB
Go
147 lines
3.7 KiB
Go
package v1
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
v1pb "github.com/usememos/memos/proto/gen/api/v1"
|
|
storepb "github.com/usememos/memos/proto/gen/store"
|
|
)
|
|
|
|
func TestMergeUserSettingWithMask(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
existing *storepb.UserSetting
|
|
incoming *v1pb.UserSetting
|
|
key storepb.UserSetting_Key
|
|
paths []string
|
|
expected *v1pb.UserSetting
|
|
}{
|
|
{
|
|
name: "adds new field without removing existing fields",
|
|
existing: &storepb.UserSetting{
|
|
UserId: 1,
|
|
Key: storepb.UserSetting_GENERAL,
|
|
Value: &storepb.UserSetting_General{
|
|
General: &storepb.GeneralUserSetting{
|
|
MemoVisibility: "PROTECTED",
|
|
},
|
|
},
|
|
},
|
|
incoming: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Appearance: "light",
|
|
},
|
|
},
|
|
},
|
|
key: storepb.UserSetting_GENERAL,
|
|
paths: []string{"appearance"},
|
|
expected: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Appearance: "light",
|
|
MemoVisibility: "PROTECTED",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "adds new field when no existing fields exist",
|
|
existing: &storepb.UserSetting{
|
|
UserId: 1,
|
|
Key: storepb.UserSetting_GENERAL,
|
|
Value: &storepb.UserSetting_General{},
|
|
},
|
|
incoming: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Theme: "whitewall",
|
|
},
|
|
},
|
|
},
|
|
key: storepb.UserSetting_GENERAL,
|
|
paths: []string{"theme"},
|
|
expected: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Theme: "whitewall",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "updates existing field without removing existing fields",
|
|
existing: &storepb.UserSetting{
|
|
UserId: 1,
|
|
Key: storepb.UserSetting_GENERAL,
|
|
Value: &storepb.UserSetting_General{
|
|
General: &storepb.GeneralUserSetting{
|
|
Appearance: "dark",
|
|
MemoVisibility: "PUBLIC",
|
|
},
|
|
},
|
|
},
|
|
incoming: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Appearance: "light",
|
|
},
|
|
},
|
|
},
|
|
key: storepb.UserSetting_GENERAL,
|
|
paths: []string{"appearance"},
|
|
expected: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Appearance: "light",
|
|
MemoVisibility: "PUBLIC",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "updates multiple fields without removing existing fields",
|
|
existing: &storepb.UserSetting{
|
|
UserId: 1,
|
|
Key: storepb.UserSetting_GENERAL,
|
|
Value: &storepb.UserSetting_General{
|
|
General: &storepb.GeneralUserSetting{
|
|
Appearance: "system",
|
|
},
|
|
},
|
|
},
|
|
incoming: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Appearance: "dark",
|
|
Theme: "paper",
|
|
MemoVisibility: "PROTECTED",
|
|
},
|
|
},
|
|
},
|
|
key: storepb.UserSetting_GENERAL,
|
|
paths: []string{"theme", "memoVisibility", "appearance"},
|
|
expected: &v1pb.UserSetting{
|
|
Value: &v1pb.UserSetting_GeneralSetting_{
|
|
GeneralSetting: &v1pb.UserSetting_GeneralSetting{
|
|
Appearance: "dark",
|
|
MemoVisibility: "PROTECTED",
|
|
Theme: "paper",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
actual := mergeUserSettingWithMask(tt.existing, tt.incoming, tt.key, tt.paths)
|
|
|
|
if !reflect.DeepEqual(actual, tt.expected) {
|
|
t.Errorf("expected %v but got %v", tt.expected, actual)
|
|
}
|
|
})
|
|
}
|
|
}
|