mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-08 06:28:27 -04:00
3f6cd0b579
feat(registry): support multiple plugin/theme registries closes #2763 --------- Co-authored-by: bbedward <bbedward@gmail.com>
80 lines
2.7 KiB
Go
80 lines
2.7 KiB
Go
package registries
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/spf13/afero"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func setupFs(t *testing.T) afero.Fs {
|
|
t.Setenv("XDG_CONFIG_HOME", "/xdg")
|
|
return afero.NewMemMapFs()
|
|
}
|
|
|
|
func TestLoadDefaults(t *testing.T) {
|
|
fs := setupFs(t)
|
|
|
|
sources := Load(fs)
|
|
require.Len(t, sources, 1)
|
|
assert.Equal(t, OfficialName, sources[0].Name)
|
|
assert.Equal(t, officialURL, sources[0].URL)
|
|
assert.True(t, sources[0].Official())
|
|
}
|
|
|
|
func TestAddAndLoad(t *testing.T) {
|
|
fs := setupFs(t)
|
|
|
|
require.NoError(t, Add(fs, "extra", "https://example.com/extra.git"))
|
|
require.NoError(t, Add(fs, "another", "https://example.com/another.git"))
|
|
|
|
sources := Load(fs)
|
|
require.Len(t, sources, 3)
|
|
assert.Equal(t, OfficialName, sources[0].Name)
|
|
assert.Equal(t, "extra", sources[1].Name)
|
|
assert.Equal(t, "another", sources[2].Name)
|
|
assert.False(t, sources[1].Official())
|
|
}
|
|
|
|
func TestAddValidation(t *testing.T) {
|
|
fs := setupFs(t)
|
|
|
|
assert.Error(t, Add(fs, "", "https://example.com/x.git"))
|
|
assert.Error(t, Add(fs, "Has Spaces", "https://example.com/x.git"))
|
|
assert.Error(t, Add(fs, "UPPER", "https://example.com/x.git"))
|
|
assert.Error(t, Add(fs, "../escape", "https://example.com/x.git"))
|
|
assert.Error(t, Add(fs, OfficialName, "https://example.com/x.git"))
|
|
assert.Error(t, Add(fs, "noname", ""))
|
|
|
|
require.NoError(t, Add(fs, "extra", "https://example.com/x.git"))
|
|
assert.Error(t, Add(fs, "extra", "https://example.com/other.git"), "duplicate name rejected")
|
|
assert.Error(t, Add(fs, "extra2", "https://example.com/x.git"), "duplicate URL rejected")
|
|
}
|
|
|
|
func TestRemove(t *testing.T) {
|
|
fs := setupFs(t)
|
|
|
|
require.NoError(t, Add(fs, "extra", "https://example.com/x.git"))
|
|
require.NoError(t, Remove(fs, "extra"))
|
|
assert.Len(t, Load(fs), 1)
|
|
|
|
assert.Error(t, Remove(fs, "extra"), "already removed")
|
|
assert.Error(t, Remove(fs, OfficialName), "official is not removable")
|
|
}
|
|
|
|
func TestLoadIgnoresInvalidConfig(t *testing.T) {
|
|
fs := setupFs(t)
|
|
|
|
require.NoError(t, fs.MkdirAll("/xdg/DankMaterialShell", 0o755))
|
|
require.NoError(t, afero.WriteFile(fs, "/xdg/DankMaterialShell/registries.json", []byte("{not json"), 0o644))
|
|
assert.Len(t, Load(fs), 1)
|
|
|
|
entries := `[{"name":"ok","url":"https://example.com/ok.git"},{"name":"Bad Name","url":"https://example.com/bad.git"},{"name":"official","url":"https://example.com/spoof.git"},{"name":"nourl","url":""}]`
|
|
require.NoError(t, afero.WriteFile(fs, "/xdg/DankMaterialShell/registries.json", []byte(entries), 0o644))
|
|
sources := Load(fs)
|
|
require.Len(t, sources, 2, "invalid entries dropped")
|
|
assert.Equal(t, "ok", sources[1].Name)
|
|
assert.Equal(t, officialURL, sources[0].URL, "official cannot be spoofed from config")
|
|
}
|