MCPcopy Create free account
hub / github.com/supabase/auth / TestAdminUserSoftDeletion

Method TestAdminUserSoftDeletion

internal/api/admin_test.go:628–708  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

626}
627
628func (ts *AdminTestSuite) TestAdminUserSoftDeletion() {
629 // create user
630 u, err := models.NewUser("123456789", "test@example.com", "secret", ts.Config.JWT.Aud, map[string]interface{}{"name": "test"})
631 require.NoError(ts.T(), err)
632 u.ConfirmationToken = "some_token"
633 u.RecoveryToken = "some_token"
634 u.EmailChangeTokenCurrent = "some_token"
635 u.EmailChangeTokenNew = "some_token"
636 u.PhoneChangeToken = "some_token"
637 u.AppMetaData = map[string]interface{}{
638 "provider": "email",
639 }
640 require.NoError(ts.T(), ts.API.db.Create(u))
641 require.NoError(ts.T(), models.CreateOneTimeToken(ts.API.db, u.ID, u.GetEmail(), u.ConfirmationToken, models.ConfirmationToken))
642 require.NoError(ts.T(), models.CreateOneTimeToken(ts.API.db, u.ID, u.GetEmail(), u.RecoveryToken, models.RecoveryToken))
643 require.NoError(ts.T(), models.CreateOneTimeToken(ts.API.db, u.ID, u.GetEmail(), u.EmailChangeTokenCurrent, models.EmailChangeTokenCurrent))
644 require.NoError(ts.T(), models.CreateOneTimeToken(ts.API.db, u.ID, u.GetEmail(), u.EmailChangeTokenNew, models.EmailChangeTokenNew))
645 require.NoError(ts.T(), models.CreateOneTimeToken(ts.API.db, u.ID, u.GetPhone(), u.PhoneChangeToken, models.PhoneChangeToken))
646
647 // create user identities
648 _, err = ts.API.createNewIdentity(ts.API.db, u, "email", map[string]interface{}{
649 "sub": "123456",
650 "email": "test@example.com",
651 })
652 require.NoError(ts.T(), err)
653 _, err = ts.API.createNewIdentity(ts.API.db, u, "github", map[string]interface{}{
654 "sub": "234567",
655 "email": "test@example.com",
656 })
657 require.NoError(ts.T(), err)
658
659 // register a WebAuthn credential for the user
660 passkey := &models.WebAuthnCredential{
661 ID: uuid.Must(uuid.NewV4()),
662 UserID: u.ID,
663 CredentialID: []byte("test-credential-id"),
664 PublicKey: []byte("test-public-key"),
665 FriendlyName: "test passkey",
666 }
667 require.NoError(ts.T(), ts.API.db.Create(passkey))
668
669 var buffer bytes.Buffer
670 require.NoError(ts.T(), json.NewEncoder(&buffer).Encode(map[string]interface{}{
671 "should_soft_delete": true,
672 }))
673 w := httptest.NewRecorder()
674 req := httptest.NewRequest(http.MethodDelete, fmt.Sprintf("/admin/users/%s", u.ID), &buffer)
675
676 req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", ts.token))
677
678 ts.API.handler.ServeHTTP(w, req)
679 require.Equal(ts.T(), http.StatusOK, w.Code)
680
681 // get soft-deleted user from db
682 deletedUser, err := models.FindUserByID(ts.API.db, u.ID)
683 require.NoError(ts.T(), err)
684
685 require.Empty(ts.T(), deletedUser.ConfirmationToken)

Callers

nothing calls this directly

Calls 12

GetEmailMethod · 0.95
GetPhoneMethod · 0.95
NewUserFunction · 0.92
CreateOneTimeTokenFunction · 0.92
FindUserByIDFunction · 0.92
FindIdentitiesByUserIDFunction · 0.92
createNewIdentityMethod · 0.80
EncodeMethod · 0.80
SetMethod · 0.80
EqualMethod · 0.80
ServeHTTPMethod · 0.45

Tested by

no test coverage detected