H-263 restore PostgreSQL E2E coverage (#41)

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-18 00:55:45 +08:00
committed by GitHub
co-authored by rogee
parent 9555397b6b
commit a3b01e664e
12 changed files with 222 additions and 266 deletions
+31 -43
View File
@@ -22,13 +22,13 @@ type AuthE2ETestSuite struct {
E2ETestSuite
}
func (s *AuthE2ETestSuite) TestRegisterNewUser() {
func (s *AuthE2ETestSuite) TestRegistrationEndpointIsNotExposed() {
account := s.CreateTestAccount("Registration Org")
registerPayload := map[string]interface{}{
"name": "New Test User",
"email": "register@test.com",
"password": "SecurePass123!",
"name": "New Test User",
"email": "register@test.com",
"password": "SecurePass123!",
"account_id": account.ID,
}
@@ -39,29 +39,22 @@ func (s *AuthE2ETestSuite) TestRegisterNewUser() {
bytes.NewBuffer(body),
)
if err != nil {
s.T().Logf("Register endpoint not available yet: %v", err)
return
}
s.Require().NoError(err)
defer resp.Body.Close()
// Verify user was created in database
if resp.StatusCode == http.StatusOK || resp.StatusCode == http.StatusCreated {
var user model.User
err = s.DB().Where("email = ?", "register@test.com").First(&user).Error
assert.NoError(s.T(), err, "Registered user should exist in database")
assert.Equal(s.T(), "New Test User", user.Name)
}
assert.Equal(s.T(), http.StatusNotFound, resp.StatusCode)
var count int64
s.Require().NoError(s.DB().Model(&model.User{}).Where("email = ?", "register@test.com").Count(&count).Error)
assert.Zero(s.T(), count, "an unregistered route must not create a user")
}
func (s *AuthE2ETestSuite) TestRegisterDuplicateEmailFails() {
func (s *AuthE2ETestSuite) TestRegistrationEndpointCannotMutateExistingUser() {
account := s.CreateTestAccount("Dup Org")
s.CreateTestUser("dup@test.com", "Existing", "hashedpass", "agent", account.ID)
registerPayload := map[string]interface{}{
"name": "Duplicate User",
"email": "dup@test.com",
"password": "AnotherPass!",
"name": "Duplicate User",
"email": "dup@test.com",
"password": "AnotherPass!",
"account_id": account.ID,
}
@@ -72,17 +65,12 @@ func (s *AuthE2ETestSuite) TestRegisterDuplicateEmailFails() {
bytes.NewBuffer(body),
)
if err != nil {
s.T().Logf("Register endpoint not available: %v", err)
return
}
s.Require().NoError(err)
defer resp.Body.Close()
// Duplicate email should be rejected
assert.True(s.T(),
resp.StatusCode == http.StatusConflict || resp.StatusCode == http.StatusBadRequest,
"Duplicate email registration should fail",
)
assert.Equal(s.T(), http.StatusNotFound, resp.StatusCode)
var count int64
s.Require().NoError(s.DB().Model(&model.User{}).Where("email = ?", "dup@test.com").Count(&count).Error)
assert.Equal(s.T(), int64(1), count, "an unregistered route must not mutate existing users")
}
func (s *AuthE2ETestSuite) TestLoginWithValidCredentials() {
@@ -335,8 +323,8 @@ func (s *AuthE2ETestSuite) TestAccessProtectedEndpointWithValidToken() {
func (s *AuthE2ETestSuite) TestJWTTokenExpiry() {
// Test that expired tokens are rejected
cfg := crypto.JWTConfig{
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: -1, // Already expired
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: -1, // Already expired
RefreshExpiryHours: 24,
}
expiredToken, err := crypto.GenerateToken(cfg, 1, "expired@test.com", "agent")
@@ -348,8 +336,8 @@ func (s *AuthE2ETestSuite) TestJWTTokenExpiry() {
func (s *AuthE2ETestSuite) TestJWTTokenValidation() {
cfg := crypto.JWTConfig{
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
RefreshExpiryHours: 24,
}
@@ -367,15 +355,15 @@ func (s *AuthE2ETestSuite) TestJWTTokenValidation() {
func (s *AuthE2ETestSuite) TestInvalidJWTTokenRejected() {
cfg := crypto.JWTConfig{
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
RefreshExpiryHours: 24,
}
// Token signed with different secret
wrongCfg := crypto.JWTConfig{
Secret: []byte("wrong-secret-key"),
ExpiryHours: 1,
Secret: []byte("wrong-secret-key"),
ExpiryHours: 1,
RefreshExpiryHours: 24,
}
wrongToken, err := crypto.GenerateToken(wrongCfg, 1, "wrong@test.com", "agent")
@@ -462,8 +450,8 @@ func (s *AuthE2ETestSuite) TestMultipleUsersCanLoginIndependently() {
// Both users should be able to generate valid JWT tokens independently
cfg := crypto.JWTConfig{
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
RefreshExpiryHours: 24,
}
@@ -516,8 +504,8 @@ func (s *AuthE2ETestSuite) TestInactiveUserLoginRejected() {
func (s *AuthE2ETestSuite) TestAuthTokensContainCorrectClaims() {
cfg := crypto.JWTConfig{
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
Secret: []byte("e2e-test-secret-key"),
ExpiryHours: 1,
RefreshExpiryHours: 24,
}
@@ -534,4 +522,4 @@ func (s *AuthE2ETestSuite) TestAuthTokensContainCorrectClaims() {
// TestAuthE2ESuite runs the Auth E2E test suite.
func TestAuthE2ESuite(t *testing.T) {
suite.Run(t, new(AuthE2ETestSuite))
}
}