user_repo_email_identity_integration_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //go:build integration
  2. package repository
  3. import (
  4. "context"
  5. "github.com/Wei-Shaw/sub2api/ent/authidentity"
  6. "github.com/Wei-Shaw/sub2api/internal/service"
  7. )
  8. func (s *UserRepoSuite) TestCreate_CreatesEmailAuthIdentityForNormalEmail() {
  9. user := &service.User{
  10. Email: "repo-create@example.com",
  11. PasswordHash: "test-password-hash",
  12. Role: service.RoleUser,
  13. Status: service.StatusActive,
  14. Concurrency: 2,
  15. }
  16. s.Require().NoError(s.repo.Create(s.ctx, user))
  17. identity, err := s.client.AuthIdentity.Query().
  18. Where(
  19. authidentity.UserIDEQ(user.ID),
  20. authidentity.ProviderTypeEQ("email"),
  21. authidentity.ProviderKeyEQ("email"),
  22. authidentity.ProviderSubjectEQ("repo-create@example.com"),
  23. ).
  24. Only(s.ctx)
  25. s.Require().NoError(err)
  26. s.Require().Equal(user.ID, identity.UserID)
  27. }
  28. func (s *UserRepoSuite) TestCreate_SkipsEmailAuthIdentityForSyntheticLinuxDoEmail() {
  29. user := &service.User{
  30. Email: "linuxdo-legacy-user@linuxdo-connect.invalid",
  31. PasswordHash: "test-password-hash",
  32. Role: service.RoleUser,
  33. Status: service.StatusActive,
  34. Concurrency: 2,
  35. }
  36. s.Require().NoError(s.repo.Create(s.ctx, user))
  37. count, err := s.client.AuthIdentity.Query().
  38. Where(
  39. authidentity.UserIDEQ(user.ID),
  40. authidentity.ProviderTypeEQ("email"),
  41. authidentity.ProviderKeyEQ("email"),
  42. ).
  43. Count(s.ctx)
  44. s.Require().NoError(err)
  45. s.Require().Zero(count)
  46. }
  47. func (s *UserRepoSuite) TestUpdate_ReplacesEmailAuthIdentityWhenEmailChanges() {
  48. user := s.mustCreateUser(&service.User{
  49. Email: "before-update@example.com",
  50. })
  51. user.Email = "after-update@example.com"
  52. s.Require().NoError(s.repo.Update(s.ctx, user, service.UserUpdateFields{Email: true}))
  53. newIdentity, err := s.client.AuthIdentity.Query().
  54. Where(
  55. authidentity.UserIDEQ(user.ID),
  56. authidentity.ProviderTypeEQ("email"),
  57. authidentity.ProviderKeyEQ("email"),
  58. authidentity.ProviderSubjectEQ("after-update@example.com"),
  59. ).
  60. Only(s.ctx)
  61. s.Require().NoError(err)
  62. s.Require().Equal(user.ID, newIdentity.UserID)
  63. oldCount, err := s.client.AuthIdentity.Query().
  64. Where(
  65. authidentity.UserIDEQ(user.ID),
  66. authidentity.ProviderTypeEQ("email"),
  67. authidentity.ProviderKeyEQ("email"),
  68. authidentity.ProviderSubjectEQ("before-update@example.com"),
  69. ).
  70. Count(context.Background())
  71. s.Require().NoError(err)
  72. s.Require().Zero(oldCount)
  73. }