sqlite_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package repository
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "job-cheng-xing/model"
  7. )
  8. func setupSQLiteRepo(t *testing.T) *SQLiteRepo {
  9. t.Helper()
  10. dbPath := "/tmp/test_orders_" + t.Name() + ".db"
  11. repo, err := NewSQLiteRepo(dbPath)
  12. if err != nil {
  13. t.Fatalf("failed to create SQLite repo: %v", err)
  14. }
  15. t.Cleanup(func() {
  16. repo.Close()
  17. os.Remove(dbPath)
  18. })
  19. return repo
  20. }
  21. func TestSQLiteRepo_CreateAndFind(t *testing.T) {
  22. repo := setupSQLiteRepo(t)
  23. order := &model.Order{
  24. ID: "ord_001",
  25. Status: model.StatusPending,
  26. ServiceTime: time.Now(),
  27. Duration: 120,
  28. Address: "北京朝阳",
  29. CreatedAt: time.Now(),
  30. UpdatedAt: time.Now(),
  31. }
  32. err := repo.Create(order)
  33. if err != nil {
  34. t.Fatalf("Create failed: %v", err)
  35. }
  36. found, err := repo.FindByID("ord_001")
  37. if err != nil {
  38. t.Fatalf("FindByID failed: %v", err)
  39. }
  40. if found.ID != "ord_001" {
  41. t.Errorf("expected ord_001, got %s", found.ID)
  42. }
  43. if found.Address != "北京朝阳" {
  44. t.Errorf("expected 北京朝阳, got %s", found.Address)
  45. }
  46. }
  47. func TestSQLiteRepo_Update_CAS(t *testing.T) {
  48. repo := setupSQLiteRepo(t)
  49. order := &model.Order{
  50. ID: "ord_001",
  51. Status: model.StatusPending,
  52. ServiceTime: time.Now(),
  53. Duration: 120,
  54. Address: "北京朝阳",
  55. CreatedAt: time.Now(),
  56. UpdatedAt: time.Now(),
  57. }
  58. repo.Create(order)
  59. pid := "prov_001"
  60. newOrder := &model.Order{
  61. Status: model.StatusAccepted,
  62. ProviderID: &pid,
  63. UpdatedAt: time.Now(),
  64. }
  65. err := repo.Update("ord_001", model.StatusPending, newOrder)
  66. if err != nil {
  67. t.Fatalf("Update failed: %v", err)
  68. }
  69. found, _ := repo.FindByID("ord_001")
  70. if found.Status != model.StatusAccepted {
  71. t.Errorf("expected accepted, got %s", found.Status)
  72. }
  73. }
  74. func TestSQLiteRepo_Update_CAS_Fail(t *testing.T) {
  75. repo := setupSQLiteRepo(t)
  76. order := &model.Order{
  77. ID: "ord_001",
  78. Status: model.StatusAccepted,
  79. ServiceTime: time.Now(),
  80. Duration: 120,
  81. Address: "北京朝阳",
  82. CreatedAt: time.Now(),
  83. UpdatedAt: time.Now(),
  84. }
  85. repo.Create(order)
  86. newOrder := &model.Order{Status: model.StatusCanceled}
  87. err := repo.Update("ord_001", model.StatusPending, newOrder)
  88. if err != model.ErrStatusConflict {
  89. t.Errorf("expected ErrStatusConflict, got %v", err)
  90. }
  91. }
  92. func TestSQLiteRepo_FindByID_NotFound(t *testing.T) {
  93. repo := setupSQLiteRepo(t)
  94. _, err := repo.FindByID("nonexistent")
  95. if err != model.ErrNotFound {
  96. t.Errorf("expected ErrNotFound, got %v", err)
  97. }
  98. }