@@ -50,30 +50,57 @@ func TestEnsureValidTokenReturnsLoggedOutWithoutRelogin(t *testing.T) {
5050}
5151
5252func TestEnsureValidTokenDoesNotReloginAfterLoggedOutRefresh (t * testing.T ) {
53+ oldGetProfile := getProfileWithToken
54+ oldRecover := recoverLineToken
55+ t .Cleanup (func () {
56+ getProfileWithToken = oldGetProfile
57+ recoverLineToken = oldRecover
58+ })
59+
5360 lc := & LineClient {
61+ AccessToken : "expired" ,
5462 UserLogin : & bridgev2.UserLogin {
5563 Bridge : & bridgev2.Bridge {Log : zerolog .New (io .Discard )},
5664 },
5765 }
5866 var reloginCalls int
59- err := lc .ensureValidTokenWith (
60- context .Background (),
61- func (context.Context ) error { return errAuthRequired },
62- func (context.Context ) error { return errLoggedOut },
63- func (context.Context ) error {
64- reloginCalls ++
65- return nil
66- },
67- )
68- if ! line .IsLoggedOut (err ) {
69- t .Fatalf ("ensureValidTokenWith error = %v, want logged-out error" , err )
67+ getProfileWithToken = func (_ context.Context , token string ) (* line.Profile , error ) {
68+ if token != "expired" {
69+ t .Fatalf ("profile token = %q, want expired" , token )
70+ }
71+ return nil , errAuthRequired
72+ }
73+ recoverLineToken = func (lc * LineClient , ctx context.Context ) error {
74+ return lc .recoverTokenWith (
75+ ctx ,
76+ func (context.Context ) error { return errLoggedOut },
77+ func (context.Context ) error {
78+ reloginCalls ++
79+ return nil
80+ },
81+ )
82+ }
83+
84+ err := lc .ensureValidToken (context .Background ())
85+ if ! line .IsAuthError (err ) {
86+ t .Fatalf ("ensureValidToken error = %v, want auth error" , err )
7087 }
7188 if reloginCalls != 0 {
7289 t .Fatalf ("relogin calls = %d, want 0" , reloginCalls )
7390 }
91+ if lc .hasAccessToken () || ! lc .isSessionInvalidated () {
92+ t .Fatal ("logged-out refresh did not invalidate the session" )
93+ }
7494}
7595
7696func TestForcedLogoutWinsOverEnsureValidTokenRefresh (t * testing.T ) {
97+ oldGetProfile := getProfileWithToken
98+ oldRecover := recoverLineToken
99+ t .Cleanup (func () {
100+ getProfileWithToken = oldGetProfile
101+ recoverLineToken = oldRecover
102+ })
103+
77104 lc := & LineClient {
78105 AccessToken : "old-token" ,
79106 UserLogin : & bridgev2.UserLogin {
@@ -84,10 +111,18 @@ func TestForcedLogoutWinsOverEnsureValidTokenRefresh(t *testing.T) {
84111 allowRefresh := make (chan struct {})
85112 ensureDone := make (chan error , 1 )
86113 var reloginCalls int
87- go func () {
88- ensureDone <- lc .ensureValidTokenWith (
89- context .Background (),
90- func (context.Context ) error { return errAuthRequired },
114+ getProfileWithToken = func (_ context.Context , token string ) (* line.Profile , error ) {
115+ if token == "recovered-token" {
116+ return & line.Profile {}, nil
117+ }
118+ if token != "old-token" {
119+ t .Fatalf ("profile token = %q, want old-token or recovered-token" , token )
120+ }
121+ return nil , errAuthRequired
122+ }
123+ recoverLineToken = func (lc * LineClient , ctx context.Context ) error {
124+ return lc .recoverTokenWith (
125+ ctx ,
91126 func (context.Context ) error {
92127 close (refreshStarted )
93128 <- allowRefresh
@@ -99,6 +134,9 @@ func TestForcedLogoutWinsOverEnsureValidTokenRefresh(t *testing.T) {
99134 return nil
100135 },
101136 )
137+ }
138+ go func () {
139+ ensureDone <- lc .ensureValidToken (context .Background ())
102140 }()
103141 <- refreshStarted
104142
@@ -110,7 +148,7 @@ func TestForcedLogoutWinsOverEnsureValidTokenRefresh(t *testing.T) {
110148 close (allowRefresh )
111149
112150 if err := <- ensureDone ; err != nil {
113- t .Fatalf ("ensureValidTokenWith returned error: %v" , err )
151+ t .Fatalf ("ensureValidToken returned error: %v" , err )
114152 }
115153 if reloginCalls != 0 {
116154 t .Fatalf ("relogin calls = %d, want 0" , reloginCalls )
0 commit comments