Ctrl K
ComunidadGuías…

internal/store/postgres/account_login_email_integration_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package postgres

import (
	"context"
	"errors"
	"testing"

	"telesrv/internal/domain"
)

func TestPasswordStoreLoginEmailUniqueCaseInsensitivePostgres(t *testing.T) {
	pool := testPool(t)
	ctx := context.Background()
	passwords := NewPasswordStore(pool)
	users := NewUserStore(pool)
	suffix := randomSuffix(t)
	u1, err := users.Create(ctx, domain.User{AccessHash: 101, Phone: "+1665" + suffix + "01", FirstName: "EmailOne"})
	if err != nil {
		t.Fatalf("create user1: %v", err)
	}
	u2, err := users.Create(ctx, domain.User{AccessHash: 102, Phone: "+1665" + suffix + "02", FirstName: "EmailTwo"})
	if err != nil {
		t.Fatalf("create user2: %v", err)
	}
	t.Cleanup(func() {
		_, _ = pool.Exec(ctx, "DELETE FROM account_passwords WHERE user_id = ANY($1::bigint[])", []int64{u1.ID, u2.ID})
		_, _ = pool.Exec(ctx, "DELETE FROM users WHERE id = ANY($1::bigint[])", []int64{u1.ID, u2.ID})
	})

	if err := passwords.Save(ctx, u1.ID, domain.PasswordSettings{LoginEmail: "Owner@Example.Test"}); err != nil {
		t.Fatalf("save user1 email: %v", err)
	}
	ownerID, found, err := passwords.LoginEmailOwner(ctx, "owner@example.test")
	if err != nil || !found || ownerID != u1.ID {
		t.Fatalf("LoginEmailOwner = id %d found %v err %v, want user1", ownerID, found, err)
	}
	if err := passwords.Save(ctx, u2.ID, domain.PasswordSettings{LoginEmail: "owner@example.test"}); !errors.Is(err, domain.ErrEmailOccupied) {
		t.Fatalf("save duplicate email err = %v, want ErrEmailOccupied", err)
	}
}