| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package repository
- import (
- "context"
- "log"
- "os"
- "testing"
- "time"
- "github.com/google/uuid"
- "github.com/jackc/pgx/v5/pgxpool"
- "gogs.fxtmmsk.ru/foxtime/photoplaces/backend/internal/models"
- )
- var testPool *pgxpool.Pool
- func TestMain(m *testing.M) {
- databaseURL := os.Getenv("DATABASE_URL_TEST")
- if databaseURL == "" {
- databaseURL = os.Getenv("DATABASE_URL")
- }
- if databaseURL == "" {
- log.Println("SKIP: DATABASE_URL_TEST not set")
- return
- }
- ctx := context.Background()
- pool, err := pgxpool.New(ctx, databaseURL)
- if err != nil {
- log.Printf("SKIP: cannot connect to test database: %v", err)
- return
- }
- defer pool.Close()
- testPool = pool
- os.Exit(m.Run())
- }
- func cleanTables(t *testing.T, tables ...string) {
- t.Helper()
- ctx := context.Background()
- for _, table := range tables {
- if _, err := testPool.Exec(ctx, "DELETE FROM "+table); err != nil {
- t.Fatalf("clean table %s: %v", table, err)
- }
- }
- }
- func insertTestUser(t *testing.T) *models.User {
- t.Helper()
- ctx := context.Background()
- user := &models.User{
- ID: uuid.New().String(),
- Email: uuid.New().String() + "@test.test",
- PasswordHash: "hash",
- Role: "customer",
- Status: "active",
- CreatedAt: time.Now(),
- }
- _, err := testPool.Exec(ctx,
- `INSERT INTO users (id, email, password_hash, role, status, created_at)
- VALUES ($1, $2, $3, $4, $5, $6)`,
- user.ID, user.Email, user.PasswordHash, user.Role, user.Status, user.CreatedAt)
- if err != nil {
- t.Fatalf("insert test user: %v", err)
- }
- return user
- }
- func insertTestPlace(t *testing.T, ownerID string, hourlyRate *int) *models.Place {
- t.Helper()
- ctx := context.Background()
- p := &models.Place{
- ID: uuid.New().String(),
- Type: "studio",
- OwnerID: ownerID,
- Title: "Test Place " + uuid.New().String()[:8],
- Lat: 55.75,
- Lng: 37.61,
- Status: "published",
- HourlyRate: hourlyRate,
- Currency: "RUB",
- Rating: 0,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- _, err := testPool.Exec(ctx,
- `INSERT INTO places (id, type, owner_id, title, coordinates, status, hourly_rate, currency, rating, created_at, updated_at)
- VALUES ($1, $2, $3, $4, ST_SetSRID(ST_MakePoint($5, $6), 4326), $7, $8, $9, $10, $11, $12)`,
- p.ID, p.Type, p.OwnerID, p.Title, p.Lng, p.Lat, p.Status, p.HourlyRate, p.Currency, p.Rating, p.CreatedAt, p.UpdatedAt)
- if err != nil {
- t.Fatalf("insert test place: %v", err)
- }
- return p
- }
- func insertTestTag(t *testing.T) *models.Tag {
- t.Helper()
- ctx := context.Background()
- tag := &models.Tag{
- ID: uuid.New().String(),
- Name: "Test Tag " + uuid.New().String()[:8],
- Category: "style",
- }
- _, err := testPool.Exec(ctx,
- `INSERT INTO tags (id, name, category) VALUES ($1, $2, $3)`,
- tag.ID, tag.Name, tag.Category)
- if err != nil {
- t.Fatalf("insert test tag: %v", err)
- }
- return tag
- }
- func insertTestPlaceTag(t *testing.T, placeID, tagID string) {
- t.Helper()
- if _, err := testPool.Exec(context.Background(),
- `INSERT INTO place_tags (place_id, tag_id) VALUES ($1, $2)`, placeID, tagID); err != nil {
- t.Fatalf("insert place_tag: %v", err)
- }
- }
|