9c16d337a2
* feat(web): add app status bar * feat(web): add app status bar visibility toggle * feat(web): persist status bar item order * fix(web): refine app status bar behavior * fix(web): polish app status bar presentation * test(web): split plugin slot coverage groups * fix(web): address status surface review feedback * fix(web): stabilize status bar overlay tests
168 lines
4.3 KiB
Go
168 lines
4.3 KiB
Go
package runtimeflags
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/kandev/kandev/internal/common/config"
|
|
"github.com/kandev/kandev/internal/profiles"
|
|
)
|
|
|
|
func TestApplyStatesToConfigClearsProfileDebugEnvWhenDisabled(t *testing.T) {
|
|
for _, name := range []string{
|
|
"KANDEV_DEBUG_DEV_MODE",
|
|
"KANDEV_DEBUG_PPROF_ENABLED",
|
|
"KANDEV_DEBUG_AGENT_MESSAGES",
|
|
} {
|
|
preserveEnv(t, name)
|
|
}
|
|
_ = os.Unsetenv("KANDEV_DEBUG_PPROF_ENABLED")
|
|
_ = os.Unsetenv("KANDEV_DEBUG_AGENT_MESSAGES")
|
|
t.Setenv("KANDEV_DEBUG_DEV_MODE", "true")
|
|
|
|
if _, _, err := profiles.ApplyProfile(); err != nil {
|
|
t.Fatalf("ApplyProfile: %v", err)
|
|
}
|
|
if os.Getenv("KANDEV_DEBUG_AGENT_MESSAGES") != "true" {
|
|
t.Fatal("profile did not enable agent message debug logs")
|
|
}
|
|
|
|
cfg := &config.Config{}
|
|
ApplyStatesToConfig(cfg, []RuntimeFlagState{{
|
|
Key: "debug.devMode",
|
|
EffectiveValue: false,
|
|
}})
|
|
|
|
if cfg.Debug.DevMode {
|
|
t.Fatal("Debug.DevMode = true, want false")
|
|
}
|
|
if cfg.Debug.PprofEnabled {
|
|
t.Fatal("Debug.PprofEnabled = true, want false")
|
|
}
|
|
if _, ok := os.LookupEnv("KANDEV_DEBUG_AGENT_MESSAGES"); ok {
|
|
t.Fatal("KANDEV_DEBUG_AGENT_MESSAGES remained set after disabled override")
|
|
}
|
|
if _, ok := os.LookupEnv("KANDEV_DEBUG_PPROF_ENABLED"); ok {
|
|
t.Fatal("KANDEV_DEBUG_PPROF_ENABLED remained set after disabled override")
|
|
}
|
|
}
|
|
|
|
func TestOptionsFromConfigParsesUppercaseTruthyEnv(t *testing.T) {
|
|
preserveEnv(t, "KANDEV_FEATURES_OFFICE")
|
|
t.Setenv("KANDEV_FEATURES_OFFICE", "TRUE")
|
|
|
|
opts := OptionsFromConfig(&config.Config{})
|
|
|
|
if !opts.EnvValues["KANDEV_FEATURES_OFFICE"] {
|
|
t.Fatal("KANDEV_FEATURES_OFFICE TRUE parsed false, want true")
|
|
}
|
|
}
|
|
|
|
func TestOptionsFromConfigParsesUppercaseTruthyEnvForPlugins(t *testing.T) {
|
|
preserveEnv(t, "KANDEV_FEATURES_PLUGINS")
|
|
t.Setenv("KANDEV_FEATURES_PLUGINS", "TRUE")
|
|
|
|
opts := OptionsFromConfig(&config.Config{})
|
|
|
|
if !opts.EnvValues["KANDEV_FEATURES_PLUGINS"] {
|
|
t.Fatal("KANDEV_FEATURES_PLUGINS TRUE parsed false, want true")
|
|
}
|
|
}
|
|
|
|
func TestOptionsFromConfigParsesUppercaseTruthyEnvForAppStatusBar(t *testing.T) {
|
|
preserveEnv(t, "KANDEV_FEATURES_APP_STATUS_BAR")
|
|
t.Setenv("KANDEV_FEATURES_APP_STATUS_BAR", "TRUE")
|
|
|
|
opts := OptionsFromConfig(&config.Config{})
|
|
|
|
if !opts.EnvValues["KANDEV_FEATURES_APP_STATUS_BAR"] {
|
|
t.Fatal("KANDEV_FEATURES_APP_STATUS_BAR TRUE parsed false, want true")
|
|
}
|
|
}
|
|
|
|
func TestValuesFromConfigIncludesPlugins(t *testing.T) {
|
|
cfg := &config.Config{}
|
|
cfg.Features.Plugins = true
|
|
|
|
values := ValuesFromConfig(cfg)
|
|
|
|
if !values["features.plugins"] {
|
|
t.Fatal("ValuesFromConfig did not surface features.plugins = true")
|
|
}
|
|
}
|
|
|
|
func TestApplyStatesToConfigSetsPlugins(t *testing.T) {
|
|
cfg := &config.Config{}
|
|
ApplyStatesToConfig(cfg, []RuntimeFlagState{{
|
|
Key: "features.plugins",
|
|
EffectiveValue: true,
|
|
}})
|
|
|
|
if !cfg.Features.Plugins {
|
|
t.Fatal("ApplyStatesToConfig did not set Features.Plugins = true")
|
|
}
|
|
}
|
|
|
|
func TestApplyStatesToConfigSetsAppStatusBar(t *testing.T) {
|
|
cfg := &config.Config{Features: config.FeaturesConfig{AppStatusBar: true}}
|
|
ApplyStatesToConfig(cfg, []RuntimeFlagState{{
|
|
Key: "features.appStatusBar",
|
|
EffectiveValue: false,
|
|
}})
|
|
|
|
if cfg.Features.AppStatusBar {
|
|
t.Fatal("ApplyStatesToConfig did not set Features.AppStatusBar = false")
|
|
}
|
|
}
|
|
|
|
func TestValuesFromConfigIncludesAppStatusBar(t *testing.T) {
|
|
cfg := &config.Config{Features: config.FeaturesConfig{AppStatusBar: true}}
|
|
|
|
values := ValuesFromConfig(cfg)
|
|
|
|
if !values["features.appStatusBar"] {
|
|
t.Fatal("ValuesFromConfig did not surface features.appStatusBar = true")
|
|
}
|
|
}
|
|
|
|
func TestApplyStatesToConfigMarksImpliedDebugEnvAsApplied(t *testing.T) {
|
|
for _, name := range []string{
|
|
"KANDEV_DEBUG_PPROF_ENABLED",
|
|
"KANDEV_DEBUG_AGENT_MESSAGES",
|
|
} {
|
|
preserveEnv(t, name)
|
|
}
|
|
|
|
cfg := &config.Config{}
|
|
ApplyStatesToConfig(cfg, []RuntimeFlagState{{
|
|
Key: "debug.devMode",
|
|
EffectiveValue: true,
|
|
}})
|
|
opts := OptionsFromConfig(cfg)
|
|
|
|
for _, name := range []string{
|
|
"KANDEV_DEBUG_PPROF_ENABLED",
|
|
"KANDEV_DEBUG_AGENT_MESSAGES",
|
|
} {
|
|
if !opts.EnvValues[name] {
|
|
t.Fatalf("%s was not enabled", name)
|
|
}
|
|
if opts.IsExplicitEnv(name) {
|
|
t.Fatalf("%s reported explicit, want profile-applied", name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func preserveEnv(t *testing.T, name string) {
|
|
t.Helper()
|
|
value, ok := os.LookupEnv(name)
|
|
_ = os.Unsetenv(name)
|
|
t.Cleanup(func() {
|
|
if ok {
|
|
_ = os.Setenv(name, value)
|
|
return
|
|
}
|
|
_ = os.Unsetenv(name)
|
|
})
|
|
}
|