photoprism/internal/config/customize/features_default_test.go
Michael Mayer bc327016ad Metadata: Add Camera Make and Model updates via CLI & API #5663 #5656
Mirror the lens make/model editing surface for cameras: entity UpdateMakeModel/SaveForm, form validation, query, search, the GET/PUT /api/v1/cameras endpoints, and the cameras CLI command, plus a cameras ACL resource and scope.

Also tidy the lens surface for parity: self-validating SaveForm, empty make/model guard, X-Count search header, service-role grant, the empty-id/slug docs, and order cameras before lenses everywhere.
2026-06-15 09:25:44 +00:00

94 lines
2.7 KiB
Go

package customize
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
)
func TestInitDefaultFeatures_DisableList(t *testing.T) {
origEnv, envSet := os.LookupEnv("PHOTOPRISM_DISABLE_FEATURES")
origDefaults := DefaultFeatures
t.Cleanup(func() {
if envSet {
_ = os.Setenv("PHOTOPRISM_DISABLE_FEATURES", origEnv)
} else {
_ = os.Unsetenv("PHOTOPRISM_DISABLE_FEATURES")
}
DefaultFeatures = initDefaultFeatures()
})
_ = os.Setenv("PHOTOPRISM_DISABLE_FEATURES", "Upload, videos share batch-edit labels cameras lenses")
DefaultFeatures = initDefaultFeatures()
assert.False(t, DefaultFeatures.Upload)
assert.False(t, DefaultFeatures.Videos)
assert.False(t, DefaultFeatures.Share)
assert.False(t, DefaultFeatures.BatchEdit)
assert.False(t, DefaultFeatures.Labels)
assert.False(t, DefaultFeatures.Cameras)
assert.False(t, DefaultFeatures.Lenses)
// unaffected feature stays enabled
assert.True(t, DefaultFeatures.Favorites)
// ensure the defaults are not permanently changed
assert.NotEqual(t, origDefaults, FeatureSettings{})
}
func TestInitDefaultFeatures_AppPasswords(t *testing.T) {
origEnv, envSet := os.LookupEnv("PHOTOPRISM_DISABLE_FEATURES")
origDefaults := DefaultFeatures
t.Cleanup(func() {
if envSet {
_ = os.Setenv("PHOTOPRISM_DISABLE_FEATURES", origEnv)
} else {
_ = os.Unsetenv("PHOTOPRISM_DISABLE_FEATURES")
}
DefaultFeatures = origDefaults
})
t.Run("EnabledByDefault", func(t *testing.T) {
_ = os.Unsetenv("PHOTOPRISM_DISABLE_FEATURES")
assert.True(t, initDefaultFeatures().AppPasswords)
})
t.Run("DisabledViaEnv", func(t *testing.T) {
// Operators can turn app passwords off at startup via PHOTOPRISM_DISABLE_FEATURES;
// the name is normalized, so "app-passwords", "appPasswords", and "AppPasswords"
// all disable it.
_ = os.Setenv("PHOTOPRISM_DISABLE_FEATURES", "app-passwords")
features := initDefaultFeatures()
assert.False(t, features.AppPasswords)
assert.True(t, features.Albums)
})
}
func TestNewSettingsCopiesDefaultFeatures(t *testing.T) {
origEnv, envSet := os.LookupEnv("PHOTOPRISM_DISABLE_FEATURES")
origDefaults := DefaultFeatures
t.Cleanup(func() {
if envSet {
_ = os.Setenv("PHOTOPRISM_DISABLE_FEATURES", origEnv)
} else {
_ = os.Unsetenv("PHOTOPRISM_DISABLE_FEATURES")
}
DefaultFeatures = origDefaults
})
_ = os.Unsetenv("PHOTOPRISM_DISABLE_FEATURES")
DefaultFeatures = initDefaultFeatures()
settings := NewSettings("", "", "")
settings.Features.Upload = false
settings.Features.Download = false
assert.True(t, DefaultFeatures.Upload, "DefaultFeatures should remain unchanged after mutation")
assert.True(t, DefaultFeatures.Download, "DefaultFeatures should remain unchanged after mutation")
}