mirror of https://github.com/usememos/memos
chore: simplify update user settings
parent
d86756f104
commit
76ca258f23
@ -1,146 +0,0 @@
|
|||||||
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)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue