fix: say a sign-in error once, then in Details for that account
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
87d98d038d
commit
b5c89bc6d9
3 files changed
+123
-15
No files matched your search
@@ -1022,3 +1022,50 @@ func TestMultiLineErrorsShownWhole(t *testing.T) {
|
||||
t.Errorf("footer:\n%s", d.screen())
|
||||
}
|
||||
}
|
||||
|
||||
// signedOut is a second Azure account whose sign-in has expired.
|
||||
type signedOut struct{ provider.Provider }
|
||||
|
||||
func (signedOut) ID() string { return "Azure:admin@contoso.com/t1" }
|
||||
func (signedOut) Label() string { return "Azure · admin" }
|
||||
func (signedOut) Sources(context.Context) ([]provider.Source, error) {
|
||||
return nil, &provider.AuthError{Kind: provider.KindAzure, Account: "Azure · admin",
|
||||
Login: []string{"az", "login", "--tenant", "t1"}, Err: errors.New("AADSTS70043")}
|
||||
}
|
||||
|
||||
func TestSignInMessageOnceThenInDetails(t *testing.T) {
|
||||
t.Parallel()
|
||||
d := newDriverOpts(t, Options{CollapseGroups: false}, fake.Azure(0), signedOut{fake.Azure(0)})
|
||||
hint := "Azure · admin: sign-in required"
|
||||
if !strings.Contains(lastLines(d.screen(), 2), hint) {
|
||||
t.Fatalf("not said at start:\n%s", d.screen())
|
||||
}
|
||||
d.keys("j")
|
||||
if strings.Contains(lastLines(d.screen(), 2), hint) {
|
||||
t.Errorf("still in the footer after moving:\n%s", d.screen())
|
||||
}
|
||||
|
||||
// On the account's group, Details says it, and L signs in to it.
|
||||
d.keys("G")
|
||||
if r, _ := d.m.sources.Selected(); r.provider != "Azure:admin@contoso.com/t1" {
|
||||
t.Fatalf("selected %+v", r)
|
||||
}
|
||||
if !strings.Contains(d.screen(), hint) || !strings.Contains(d.screen(), "press L to run az login --tenant t1") {
|
||||
t.Errorf("not in Details:\n%s", d.screen())
|
||||
}
|
||||
if a := d.m.loginFor(); a == nil || a.Account != "Azure · admin" {
|
||||
t.Errorf("L signs in to %+v", a)
|
||||
}
|
||||
|
||||
// Elsewhere Details is as usual.
|
||||
d.keys("g")
|
||||
if strings.Contains(d.screen(), hint) {
|
||||
t.Errorf("shown for another account:\n%s", d.screen())
|
||||
}
|
||||
}
|
||||
|
||||
// lastLines is the bottom n lines of a screen.
|
||||
func lastLines(scr string, n int) string {
|
||||
lines := strings.Split(strings.TrimRight(scr, "\n"), "\n")
|
||||
return strings.Join(lines[max(0, len(lines)-n):], "\n")
|
||||
}
|
||||
Reference in new issue
Block a user