MCPcopy Create free account
hub / github.com/daodst/chat / TestLoginToken

Function TestLoginToken

userapi/userapi_test.go:150–270  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

148}
149
150func TestLoginToken(t *testing.T) {
151 ctx := context.Background()
152
153 t.Run("tokenLoginFlow", func(t *testing.T) {
154 test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
155 userAPI, accountDB, close := MustMakeInternalAPI(t, apiTestOpts{}, dbType)
156 defer close()
157 _, err := accountDB.CreateAccount(ctx, "auser", "apassword", "", api.AccountTypeUser)
158 if err != nil {
159 t.Fatalf("failed to make account: %s", err)
160 }
161
162 t.Log("Creating a login token like the SSO callback would...")
163
164 creq := api.PerformLoginTokenCreationRequest{
165 Data: api.LoginTokenData{UserID: "@auser:example.com"},
166 }
167 var cresp api.PerformLoginTokenCreationResponse
168 if err := userAPI.PerformLoginTokenCreation(ctx, &creq, &cresp); err != nil {
169 t.Fatalf("PerformLoginTokenCreation failed: %v", err)
170 }
171
172 if cresp.Metadata.Token == "" {
173 t.Errorf("PerformLoginTokenCreation Token: got %q, want non-empty", cresp.Metadata.Token)
174 }
175 if cresp.Metadata.Expiration.Before(time.Now()) {
176 t.Errorf("PerformLoginTokenCreation Expiration: got %v, want non-expired", cresp.Metadata.Expiration)
177 }
178
179 t.Log("Querying the login token like /login with m.login.token would...")
180
181 qreq := api.QueryLoginTokenRequest{Token: cresp.Metadata.Token}
182 var qresp api.QueryLoginTokenResponse
183 if err := userAPI.QueryLoginToken(ctx, &qreq, &qresp); err != nil {
184 t.Fatalf("QueryLoginToken failed: %v", err)
185 }
186
187 if qresp.Data == nil {
188 t.Errorf("QueryLoginToken Data: got %v, want non-nil", qresp.Data)
189 } else if want := "@auser:example.com"; qresp.Data.UserID != want {
190 t.Errorf("QueryLoginToken UserID: got %q, want %q", qresp.Data.UserID, want)
191 }
192
193 t.Log("Deleting the login token like /login with m.login.token would...")
194
195 dreq := api.PerformLoginTokenDeletionRequest{Token: cresp.Metadata.Token}
196 var dresp api.PerformLoginTokenDeletionResponse
197 if err := userAPI.PerformLoginTokenDeletion(ctx, &dreq, &dresp); err != nil {
198 t.Fatalf("PerformLoginTokenDeletion failed: %v", err)
199 }
200 })
201 })
202
203 t.Run("expiredTokenIsNotReturned", func(t *testing.T) {
204 test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
205 userAPI, _, close := MustMakeInternalAPI(t, apiTestOpts{loginTokenLifetime: -1 * time.Second}, dbType)
206 defer close()
207

Callers

nothing calls this directly

Calls 5

MustMakeInternalAPIFunction · 0.85
RunMethod · 0.80
QueryLoginTokenMethod · 0.65

Tested by

no test coverage detected