108 lines
3.4 KiB
Go
108 lines
3.4 KiB
Go
package profile
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
|
|
domainProfile "base/internal/domain/profile"
|
|
)
|
|
|
|
// setupTestDB creates an in-memory SQLite database for testing
|
|
func setupTestDB(t *testing.T) *gorm.DB {
|
|
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{
|
|
DisableForeignKeyConstraintWhenMigrating: true,
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
// Create tables manually with SQLite-compatible syntax
|
|
// This avoids PostgreSQL-specific syntax like gen_random_uuid() and timestamptz
|
|
|
|
createProfilesTable := `
|
|
CREATE TABLE IF NOT EXISTS profiles (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT,
|
|
handle TEXT NOT NULL,
|
|
role_id TEXT,
|
|
role_name TEXT,
|
|
first_name TEXT,
|
|
last_name TEXT,
|
|
company TEXT,
|
|
short_description TEXT,
|
|
resume_link TEXT,
|
|
cta_enabled INTEGER NOT NULL DEFAULT 0,
|
|
avatar TEXT,
|
|
profile_picture TEXT,
|
|
about TEXT,
|
|
email TEXT,
|
|
phone TEXT,
|
|
visibility_level TEXT NOT NULL DEFAULT 'public',
|
|
page_section_order TEXT,
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
deleted_at DATETIME,
|
|
UNIQUE(handle)
|
|
)
|
|
`
|
|
require.NoError(t, db.Exec(createProfilesTable).Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS profiles_user_id_idx ON profiles(user_id)").Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS profiles_role_id_idx ON profiles(role_id)").Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS profiles_name_idx ON profiles(first_name, last_name)").Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS profiles_company_idx ON profiles(company)").Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS profiles_email_idx ON profiles(email)").Error)
|
|
|
|
createProfileSkillsTable := `
|
|
CREATE TABLE IF NOT EXISTS profile_skills (
|
|
id TEXT PRIMARY KEY,
|
|
profile_id TEXT NOT NULL,
|
|
skill_name TEXT NOT NULL,
|
|
level TEXT NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
deleted_at DATETIME
|
|
)
|
|
`
|
|
require.NoError(t, db.Exec(createProfileSkillsTable).Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS skills_profile_id_idx ON profile_skills(profile_id)").Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS skills_name_idx ON profile_skills(skill_name)").Error)
|
|
|
|
createProfileSocialLinksTable := `
|
|
CREATE TABLE IF NOT EXISTS profile_social_links (
|
|
id TEXT PRIMARY KEY,
|
|
profile_id TEXT NOT NULL,
|
|
link_type TEXT NOT NULL,
|
|
link TEXT NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
deleted_at DATETIME
|
|
)
|
|
`
|
|
require.NoError(t, db.Exec(createProfileSocialLinksTable).Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS social_links_profile_id_idx ON profile_social_links(profile_id)").Error)
|
|
|
|
createProfileAchievementsTable := `
|
|
CREATE TABLE IF NOT EXISTS profile_achievements (
|
|
id TEXT PRIMARY KEY,
|
|
profile_id TEXT NOT NULL,
|
|
title TEXT NOT NULL,
|
|
value TEXT NOT NULL,
|
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
deleted_at DATETIME
|
|
)
|
|
`
|
|
require.NoError(t, db.Exec(createProfileAchievementsTable).Error)
|
|
require.NoError(t, db.Exec("CREATE INDEX IF NOT EXISTS achievements_profile_id_idx ON profile_achievements(profile_id)").Error)
|
|
|
|
return db
|
|
}
|
|
|
|
// createTestProfileRepository creates a profile repository for testing
|
|
func createTestProfileRepository(db *gorm.DB) domainProfile.Repository {
|
|
return &profileRepository{db: db}
|
|
}
|
|
|