feat(auth): reclaim stale identities and refresh profile UI

This commit is contained in:
IanShaw027
2026-04-21 07:49:40 -07:00
parent c0371e9104
commit d5819181ea
16 changed files with 633 additions and 105 deletions
@@ -8,6 +8,8 @@ import (
"time"
dbent "github.com/Wei-Shaw/sub2api/ent"
"github.com/Wei-Shaw/sub2api/ent/authidentity"
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
"github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
"github.com/Wei-Shaw/sub2api/internal/service"
"github.com/stretchr/testify/suite"
@@ -124,11 +126,27 @@ func (s *UserRepoSuite) TestGetByEmail() {
s.Require().Equal(user.ID, got.ID)
}
func (s *UserRepoSuite) TestGetByEmail_NormalizesSpacingAndCaseOnPostgres() {
user := s.mustCreateUser(&service.User{Email: " Legacy@Example.com "})
got, err := s.repo.GetByEmail(s.ctx, " legacy@example.com ")
s.Require().NoError(err, "GetByEmail normalized lookup")
s.Require().Equal(user.ID, got.ID)
}
func (s *UserRepoSuite) TestGetByEmail_NotFound() {
_, err := s.repo.GetByEmail(s.ctx, "nonexistent@test.com")
s.Require().Error(err, "expected error for non-existent email")
}
func (s *UserRepoSuite) TestExistsByEmail_NormalizesSpacingAndCaseOnPostgres() {
s.mustCreateUser(&service.User{Email: " Legacy@Example.com "})
exists, err := s.repo.ExistsByEmail(s.ctx, " LEGACY@example.com ")
s.Require().NoError(err, "ExistsByEmail normalized lookup")
s.Require().True(exists)
}
func (s *UserRepoSuite) TestUpdate() {
user := s.mustCreateUser(&service.User{Email: "update@test.com", Username: "original"})
@@ -152,6 +170,39 @@ func (s *UserRepoSuite) TestDelete() {
s.Require().Error(err, "expected error after delete")
}
func (s *UserRepoSuite) TestDeleteRemovesAuthIdentitiesAndChannels() {
user := s.mustCreateUser(&service.User{Email: "delete-oauth@test.com"})
identity, err := s.client.AuthIdentity.Create().
SetUserID(user.ID).
SetProviderType("linuxdo").
SetProviderKey("linuxdo").
SetProviderSubject("delete-oauth-subject").
Save(s.ctx)
s.Require().NoError(err)
_, err = s.client.AuthIdentityChannel.Create().
SetIdentityID(identity.ID).
SetProviderType("wechat").
SetProviderKey("wechat").
SetChannel("open").
SetChannelAppID("app-id").
SetChannelSubject("openid-123").
Save(s.ctx)
s.Require().NoError(err)
err = s.repo.Delete(s.ctx, user.ID)
s.Require().NoError(err)
identityCount, err := s.client.AuthIdentity.Query().Where(authidentity.UserIDEQ(user.ID)).Count(s.ctx)
s.Require().NoError(err)
s.Require().Zero(identityCount)
channelCount, err := s.client.AuthIdentityChannel.Query().Where(authidentitychannel.IdentityIDEQ(identity.ID)).Count(s.ctx)
s.Require().NoError(err)
s.Require().Zero(channelCount)
}
// --- List / ListWithFilters ---
func (s *UserRepoSuite) TestList() {