Fix API token policy action buttons
This commit is contained in:
@@ -836,8 +836,8 @@ func (u *ui) auditQuickFilterButton(gtx layout.Context, click *widget.Clickable,
|
|||||||
|
|
||||||
func (u *ui) apiTokenDetailPanel(gtx layout.Context) layout.Dimensions {
|
func (u *ui) apiTokenDetailPanel(gtx layout.Context) layout.Dimensions {
|
||||||
token, ok := u.selectedAPIToken()
|
token, ok := u.selectedAPIToken()
|
||||||
editClicks := u.ensureAPIPolicyEditClickables(0)
|
var editClicks []widget.Clickable
|
||||||
removeClicks := u.ensureAPIPolicyRemoveClickables(0)
|
var removeClicks []widget.Clickable
|
||||||
if ok {
|
if ok {
|
||||||
editClicks = u.ensureAPIPolicyEditClickables(len(token.Policies))
|
editClicks = u.ensureAPIPolicyEditClickables(len(token.Policies))
|
||||||
removeClicks = u.ensureAPIPolicyRemoveClickables(len(token.Policies))
|
removeClicks = u.ensureAPIPolicyRemoveClickables(len(token.Policies))
|
||||||
|
|||||||
@@ -1007,14 +1007,16 @@ func (u *ui) handleAPIPolicyClicks(gtx layout.Context) {
|
|||||||
for u.clearAPIPolicyTarget.Clicked(gtx) {
|
for u.clearAPIPolicyTarget.Clicked(gtx) {
|
||||||
u.runAction("clear API policy target", u.clearAPIPolicyTargetAction)
|
u.runAction("clear API policy target", u.clearAPIPolicyTargetAction)
|
||||||
}
|
}
|
||||||
for i := range u.apiPolicyEdits {
|
editClicks := u.apiPolicyEdits
|
||||||
for u.apiPolicyEdits[i].Clicked(gtx) {
|
for i := range editClicks {
|
||||||
|
for editClicks[i].Clicked(gtx) {
|
||||||
index := i
|
index := i
|
||||||
u.runAction("edit API policy rule", func() error { return u.editAPIPolicyRuleAction(index) })
|
u.runAction("edit API policy rule", func() error { return u.editAPIPolicyRuleAction(index) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for i := range u.apiPolicyRemoves {
|
removeClicks := u.apiPolicyRemoves
|
||||||
for u.apiPolicyRemoves[i].Clicked(gtx) {
|
for i := range removeClicks {
|
||||||
|
for removeClicks[i].Clicked(gtx) {
|
||||||
index := i
|
index := i
|
||||||
u.runAction("remove API policy rule", func() error { return u.removeAPIPolicyRuleAction(index) })
|
u.runAction("remove API policy rule", func() error { return u.removeAPIPolicyRuleAction(index) })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -861,6 +861,72 @@ func TestUIAPITokenPolicyRulesCanBeCreatedUpdatedAndRemoved(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUIAPITokenPolicyButtonsRemainClickableAfterPanelLayout(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
u := newUIWithSession("desktop", &session.Manager{}, statePaths{
|
||||||
|
DefaultSaveAsPath: filepath.Join(t.TempDir(), "vault.kdbx"),
|
||||||
|
RecentVaultsPath: filepath.Join(t.TempDir(), "recent-vaults.json"),
|
||||||
|
RecentRemotesPath: filepath.Join(t.TempDir(), "recent-remotes.json"),
|
||||||
|
UIPreferencesPath: filepath.Join(t.TempDir(), "ui-prefs.json"),
|
||||||
|
})
|
||||||
|
u.masterPassword.SetText("correct horse battery staple")
|
||||||
|
if err := u.createVaultAction(); err != nil {
|
||||||
|
t.Fatalf("createVaultAction() error = %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
u.showAPITokensSection()
|
||||||
|
u.apiTokenName.SetText("CLI")
|
||||||
|
u.apiTokenClientName.SetText("grpc-cli")
|
||||||
|
if err := u.issueAPITokenAction(); err != nil {
|
||||||
|
t.Fatalf("issueAPITokenAction() error = %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
u.apiPolicyOperation.SetText(string(apitokens.OperationListEntries))
|
||||||
|
u.apiPolicyPath.SetText("Root / Internet")
|
||||||
|
u.apiPolicyAllow.Value = true
|
||||||
|
u.apiPolicyGroupScopeW.Value = true
|
||||||
|
if err := u.addAPIPolicyRuleAction(); err != nil {
|
||||||
|
t.Fatalf("addAPIPolicyRuleAction() error = %v", err)
|
||||||
|
}
|
||||||
|
token, ok := u.selectedAPIToken()
|
||||||
|
if !ok || len(token.Policies) != 1 {
|
||||||
|
t.Fatalf("selectedAPIToken().Policies before layout = %#v, want 1 rule", token.Policies)
|
||||||
|
}
|
||||||
|
if len(u.apiPolicyEdits) != 1 {
|
||||||
|
t.Fatalf("len(apiPolicyEdits) before layout = %d, want 1", len(u.apiPolicyEdits))
|
||||||
|
}
|
||||||
|
|
||||||
|
gtx := layout.Context{
|
||||||
|
Ops: new(op.Ops),
|
||||||
|
Constraints: layout.Exact(image.Pt(800, 600)),
|
||||||
|
}
|
||||||
|
_ = u.apiTokenDetailPanel(gtx)
|
||||||
|
|
||||||
|
if len(u.apiPolicyEdits) != 1 {
|
||||||
|
t.Fatalf("len(apiPolicyEdits) after layout = %d, want 1", len(u.apiPolicyEdits))
|
||||||
|
}
|
||||||
|
u.apiPolicyEdits[0].Click()
|
||||||
|
u.handleAPIPolicyClicks(layout.Context{})
|
||||||
|
if u.selectedAPIPolicyIndex != 0 {
|
||||||
|
t.Fatalf("selectedAPIPolicyIndex after rendered edit click = %d, want 0", u.selectedAPIPolicyIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
u.selectedAPIPolicyIndex = -1
|
||||||
|
u.loadSelectedAPITokenIntoEditor()
|
||||||
|
_ = u.apiTokenDetailPanel(gtx)
|
||||||
|
if len(u.apiPolicyRemoves) != 1 {
|
||||||
|
t.Fatalf("len(apiPolicyRemoves) after layout = %d, want 1", len(u.apiPolicyRemoves))
|
||||||
|
}
|
||||||
|
u.apiPolicyRemoves[0].Click()
|
||||||
|
u.handleAPIPolicyClicks(layout.Context{})
|
||||||
|
|
||||||
|
token, ok = u.selectedAPIToken()
|
||||||
|
if !ok || len(token.Policies) != 0 {
|
||||||
|
t.Fatalf("selectedAPIToken().Policies after rendered remove click = %#v, want empty", token.Policies)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAPITokenStatusSummary(t *testing.T) {
|
func TestAPITokenStatusSummary(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user