Files
hnh-map/internal/app/migrations_test.go
Nikolay Tatarinov 761fbaed55 Refactor Docker and Makefile configurations for improved build processes
- Updated docker-compose.tools.yml to mount source code at /src and set working directory for backend tools, ensuring proper Go module caching.
- Modified Dockerfile.tools to install the latest golangci-lint version compatible with Go 1.24 and adjusted working directory for build-time operations.
- Enhanced Makefile to build backend tools before running tests and linting, ensuring dependencies are up-to-date and improving overall workflow efficiency.
- Refactored test and handler files to include error handling for database operations, enhancing reliability and debugging capabilities.
2026-03-04 13:59:00 +03:00

100 lines
2.2 KiB
Go

package app_test
import (
"path/filepath"
"testing"
"github.com/andyleap/hnh-map/internal/app"
"github.com/andyleap/hnh-map/internal/app/store"
"go.etcd.io/bbolt"
)
func newTestDB(t *testing.T) *bbolt.DB {
t.Helper()
dir := t.TempDir()
db, err := bbolt.Open(filepath.Join(dir, "test.db"), 0600, nil)
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() { db.Close() })
return db
}
func TestRunMigrations_FreshDB(t *testing.T) {
db := newTestDB(t)
if err := app.RunMigrations(db); err != nil {
t.Fatalf("migrations failed on fresh DB: %v", err)
}
if err := db.View(func(tx *bbolt.Tx) error {
b := tx.Bucket(store.BucketConfig)
if b == nil {
t.Fatal("expected config bucket after migrations")
}
v := b.Get([]byte("version"))
if v == nil {
t.Fatal("expected version key in config")
}
title := b.Get([]byte("title"))
if title == nil || string(title) != "HnH Automapper Server" {
t.Fatalf("expected default title, got %s", title)
}
return nil
}); err != nil {
t.Fatal(err)
}
if tx, _ := db.Begin(false); tx != nil {
if tx.Bucket(store.BucketOAuthStates) == nil {
t.Fatal("expected oauth_states bucket after migrations")
}
_ = tx.Rollback()
}
}
func TestRunMigrations_Idempotent(t *testing.T) {
db := newTestDB(t)
if err := app.RunMigrations(db); err != nil {
t.Fatalf("first run failed: %v", err)
}
if err := app.RunMigrations(db); err != nil {
t.Fatalf("second run failed: %v", err)
}
if err := db.View(func(tx *bbolt.Tx) error {
b := tx.Bucket(store.BucketConfig)
if b == nil {
t.Fatal("expected config bucket")
}
v := b.Get([]byte("version"))
if v == nil {
t.Fatal("expected version key")
}
return nil
}); err != nil {
t.Fatal(err)
}
}
func TestRunMigrations_SetsVersion(t *testing.T) {
db := newTestDB(t)
if err := app.RunMigrations(db); err != nil {
t.Fatal(err)
}
var version string
if err := db.View(func(tx *bbolt.Tx) error {
b := tx.Bucket(store.BucketConfig)
version = string(b.Get([]byte("version")))
return nil
}); err != nil {
t.Fatal(err)
}
if version == "" || version == "0" {
t.Fatalf("expected non-zero version, got %q", version)
}
}