-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcontext_test.go
More file actions
110 lines (92 loc) · 2.42 KB
/
context_test.go
File metadata and controls
110 lines (92 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package gormcache
import (
"context"
"testing"
"time"
"gorm.io/gorm"
)
func TestSkipCacheContext(t *testing.T) {
db := setupTestDB(t)
// Install cache plugin
cachePlugin := New(Config{
Adapter: NewMemoryAdapter(),
TTL: 5 * time.Minute,
})
err := db.Use(cachePlugin)
if err != nil {
t.Fatalf("failed to install plugin: %v", err)
}
defer cachePlugin.Close()
// Create test data
user := TestUser{Name: "Test User"}
db.Create(&user)
// First query - cache miss
var user1 TestUser
db.First(&user1, user.ID)
// Second query with skip cache context
ctx := SkipCacheContext(context.Background())
var user2 TestUser
result := db.WithContext(ctx).First(&user2, user.ID)
if result.Error != nil {
t.Fatalf("failed to query: %v", result.Error)
}
if user2.Name != "Test User" {
t.Errorf("expected name 'Test User', got '%s'", user2.Name)
}
}
func TestContextSkipCachePriority(t *testing.T) {
db := setupTestDB(t)
// Install cache plugin with custom skip condition
cachePlugin := New(Config{
Adapter: NewMemoryAdapter(),
TTL: 5 * time.Minute,
SkipCacheCondition: func(db *gorm.DB) bool {
// This should not be reached if context skip is set
return false
},
})
err := db.Use(cachePlugin)
if err != nil {
t.Fatalf("failed to install plugin: %v", err)
}
defer cachePlugin.Close()
// Create test data
user := TestUser{Name: "Test User"}
db.Create(&user)
// Context skip should take priority
ctx := SkipCacheContext(context.Background())
var user1 TestUser
result := db.WithContext(ctx).First(&user1, user.ID)
if result.Error != nil {
t.Fatalf("failed to query: %v", result.Error)
}
if user1.Name != "Test User" {
t.Errorf("expected name 'Test User', got '%s'", user1.Name)
}
}
func TestWithSkipCacheFunction(t *testing.T) {
db := setupTestDB(t)
// Install cache plugin
cachePlugin := New(Config{
Adapter: NewMemoryAdapter(),
TTL: 5 * time.Minute,
})
err := db.Use(cachePlugin)
if err != nil {
t.Fatalf("failed to install plugin: %v", err)
}
defer cachePlugin.Close()
// Create test data
user := TestUser{Name: "Test User"}
db.Create(&user)
// Use WithSkipCache function
ctx := WithSkipCache(context.Background(), true)
var user1 TestUser
result := db.WithContext(ctx).First(&user1, user.ID)
if result.Error != nil {
t.Fatalf("failed to query: %v", result.Error)
}
if user1.Name != "Test User" {
t.Errorf("expected name 'Test User', got '%s'", user1.Name)
}
}