mirror of
https://github.com/photoprism/photoprism.git
synced 2026-07-17 16:49:04 +00:00
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.
94 lines
2.7 KiB
Go
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")
|
|
}
|