material_manage_system/internal/repository/material_test.go
2026-09-15 16:08:18 +08:00

47 lines
1.3 KiB
Go

package repository
import (
"encoding/json"
"regexp"
"testing"
"time"
"github.com/DATA-DOG/go-sqlmock"
"github.com/wmms/wmms/internal/model"
"github.com/wmms/wmms/pkg/database"
)
func TestMaterialRepoGetByIDReturnsOnlyMasterData(t *testing.T) {
db, mock, err := sqlmock.New()
if err != nil {
t.Fatalf("open sql mock: %v", err)
}
t.Cleanup(func() {
database.DB = nil
db.Close()
})
database.DB = db
query := `SELECT id, material_code, name, material_image, spec, category, unit, created_at, updated_at FROM materials WHERE id = ?`
now := time.Date(2026, 9, 15, 9, 0, 0, 0, time.UTC)
mock.ExpectQuery(regexp.QuoteMeta(query)).WithArgs(int64(7)).WillReturnRows(
sqlmock.NewRows([]string{"id", "material_code", "name", "material_image", "spec", "category", "unit", "created_at", "updated_at"}).
AddRow(7, "MAT-007", "轴承", nil, "6205", "A02", "件", now, now),
)
var material model.Material
if err := NewMaterialRepo().GetByID(7, &material); err != nil {
t.Fatalf("get material: %v", err)
}
payload, err := json.Marshal(material)
if err != nil {
t.Fatalf("marshal material: %v", err)
}
if regexp.MustCompile(`current_stock|warning_stock`).Match(payload) {
t.Fatalf("material payload leaks inventory fields: %s", payload)
}
if err := mock.ExpectationsWereMet(); err != nil {
t.Fatal(err)
}
}