78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
// Package mysqltest provides real activity-service MySQL repositories for tests.
|
|
package mysqltest
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"hyapp/internal/testutil/mysqlschema"
|
|
activitydomain "hyapp/services/activity-service/internal/domain/activity"
|
|
mysqlstorage "hyapp/services/activity-service/internal/storage/mysql"
|
|
)
|
|
|
|
// Repository wraps the production activity MySQL repository with test seed helpers.
|
|
type Repository struct {
|
|
*mysqlstorage.Repository
|
|
|
|
t testing.TB
|
|
schema *mysqlschema.Schema
|
|
}
|
|
|
|
// NewRepository creates an isolated activity schema and opens the production repository.
|
|
func NewRepository(t testing.TB) *Repository {
|
|
t.Helper()
|
|
|
|
schema := mysqlschema.New(t, mysqlschema.Config{
|
|
EnvVar: "ACTIVITY_SERVICE_MYSQL_TEST_DSN",
|
|
InitDBPath: initDBPath(t),
|
|
DatabasePrefix: "hyapp_activity_test",
|
|
})
|
|
repository, err := mysqlstorage.Open(context.Background(), schema.DSN)
|
|
if err != nil {
|
|
t.Fatalf("open activity mysql repository failed: %v", err)
|
|
}
|
|
|
|
wrapped := &Repository{Repository: repository, t: t, schema: schema}
|
|
t.Cleanup(wrapped.Close)
|
|
return wrapped
|
|
}
|
|
|
|
// Close shuts down the repository; mysqlschema owns schema cleanup.
|
|
func (r *Repository) Close() {
|
|
r.t.Helper()
|
|
|
|
if r.Repository != nil {
|
|
_ = r.Repository.Close()
|
|
}
|
|
}
|
|
|
|
// PutActivity seeds one activity projection row.
|
|
func (r *Repository) PutActivity(activity activitydomain.Activity) {
|
|
r.t.Helper()
|
|
|
|
nowMs := activity.UpdatedAtMs
|
|
if nowMs == 0 {
|
|
nowMs = time.Now().UnixMilli()
|
|
}
|
|
_, err := r.schema.DB.ExecContext(context.Background(), `
|
|
INSERT INTO activities (activity_id, status, updated_at_ms)
|
|
VALUES (?, ?, ?)
|
|
ON DUPLICATE KEY UPDATE
|
|
status = VALUES(status),
|
|
updated_at_ms = VALUES(updated_at_ms)
|
|
`, activity.ActivityID, string(activity.Status), nowMs)
|
|
if err != nil {
|
|
r.t.Fatalf("seed activity failed: %v", err)
|
|
}
|
|
}
|
|
|
|
func initDBPath(t testing.TB) string {
|
|
t.Helper()
|
|
|
|
return mysqlschema.InitDBPath(t,
|
|
mysqlschema.CallerFile(t, 1),
|
|
"..", "..", "..", "deploy", "mysql", "initdb", "001_activity_service.sql",
|
|
)
|
|
}
|