Skip to content
quarry Artifact [c74b88046d]
Login

Artifact [c74b88046d]

Artifact c74b88046d64bd6c599d792985273983a401bc91e0fb7248d2dbb7b60d5dee0d:


package ci

import "testing"

// An environment's ceiling round-trips between letters and
// permissions:'s words, and letters no word accounts for survive.
func TestPermissionLevelsRoundTrip(t *testing.T) {
	levels, extra := LevelsOf("go8")
	if levels["contents"] != "read" || levels["checks"] != "write" || levels["uv"] != "none" || extra != "" {
		t.Fatalf("FAIL: go8 read as %v extra %q, want contents read, checks write", levels, extra)
	}
	levels, extra = LevelsOf("y")
	if levels["uv"] != "write" || levels["contents"] != "none" || extra != "" {
		t.Fatalf("FAIL: y read as %v extra %q, want uv write alone", levels, extra)
	}
	levels, _ = LevelsOf("gio")
	if levels["contents"] != "write" {
		t.Fatalf("FAIL: gio read as %v, want contents write", levels)
	}
	if _, extra = LevelsOf("goq"); extra != "q" {
		t.Fatalf("FAIL: goq extra %q, want q kept", extra)
	}
	for _, c := range []struct{ noun, level, want string }{
		{"uv", "write", "y"}, {"contents", "read", "og"}, {"checks", "read", ""}, {"wiki", "none", ""},
	} {
		got, err := LettersFor(c.noun, c.level)
		if err != nil || got != c.want {
			t.Fatalf("FAIL: LettersFor(%s,%s) = %q %v, want %q", c.noun, c.level, got, err, c.want)
		}
	}
	if _, err := LettersFor("contents", "admin"); err == nil {
		t.Fatal("FAIL: an unknown level was accepted")
	}
	if _, err := LettersFor("secrets", "read"); err == nil {
		t.Fatal("FAIL: an unknown noun was accepted")
	}
	t.Log("ok: letters and permission words round-trip")
}