package e2e import ( "context" "path/filepath" "testing" ) // Curve presets live in the user profile: they survive a round trip through // the metadata layer and are never visible to another user. func TestCurvePresetsPersistAndArePrivate(t *testing.T) { ctx := context.Background() st, closeDB := openStack(t, filepath.Join(t.TempDir(), "galo.db"), t.TempDir()) defer closeDB() owner, _, err := st.auth.Register(ctx, "presets@test.local", "", "password123", "Owner") if err != nil { t.Fatalf("register owner: %v", err) } other, _, err := st.auth.Register(ctx, "otherpresets@test.local", "", "password123", "Other") if err != nil { t.Fatalf("register other: %v", err) } raw := []byte(`{"curve_presets":[{"name":"Мой контраст","channels":{"rgb":[{"x":0,"y":0},{"x":1,"y":0.9}],"red":[{"x":0,"y":0},{"x":1,"y":1}],"green":[{"x":0,"y":0},{"x":1,"y":1}],"blue":[{"x":0,"y":0},{"x":1,"y":1}]}}]}`) if err := st.repos.Auth.UpdatePreferences(ctx, owner.ID, raw); err != nil { t.Fatalf("update preferences: %v", err) } got, err := st.repos.Auth.GetUserByID(ctx, owner.ID) if err != nil { t.Fatalf("get owner: %v", err) } presets, ok := got.Preferences["curve_presets"].([]any) if !ok || len(presets) != 1 { t.Fatalf("presets not stored: %+v", got.Preferences) } preset, _ := presets[0].(map[string]any) if preset["name"] != "Мой контраст" { t.Fatalf("preset = %+v", preset) } channels, _ := preset["channels"].(map[string]any) for _, channel := range []string{"rgb", "red", "green", "blue"} { if points, ok := channels[channel].([]any); !ok || len(points) != 2 { t.Fatalf("channel %s = %#v", channel, channels[channel]) } } otherUser, err := st.repos.Auth.GetUserByID(ctx, other.ID) if err != nil { t.Fatalf("get other: %v", err) } if _, ok := otherUser.Preferences["curve_presets"]; ok { t.Fatalf("other user sees presets: %+v", otherUser.Preferences) } }