go.mercari.io/datastore@v1.8.2/testsuite/property_ls.go (about) 1 package testsuite 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "go.mercari.io/datastore" 9 ) 10 11 var _ datastore.PropertyLoadSaver = &dataPLS{} 12 var _ datastore.KeyLoader = &dataKL{} 13 14 type dataPLS struct { 15 Name string 16 LoadCount int 17 CreatedAt time.Time 18 } 19 20 func (d *dataPLS) Load(ctx context.Context, ps []datastore.Property) error { 21 err := datastore.LoadStruct(ctx, d, ps) 22 if err != nil { 23 return err 24 } 25 26 d.LoadCount++ 27 28 return nil 29 } 30 31 func (d *dataPLS) Save(ctx context.Context) ([]datastore.Property, error) { 32 if d.CreatedAt.IsZero() { 33 d.CreatedAt = time.Now() 34 } 35 36 return datastore.SaveStruct(ctx, d) 37 } 38 39 func plsBasic(ctx context.Context, t *testing.T, client datastore.Client) { 40 defer func() { 41 err := client.Close() 42 if err != nil { 43 t.Fatal(err) 44 } 45 }() 46 47 key := client.IncompleteKey("DataPLS", nil) 48 obj := &dataPLS{Name: "Test"} 49 key, err := client.Put(ctx, key, obj) 50 if err != nil { 51 t.Fatal(err) 52 } 53 54 if v := obj.CreatedAt; v.IsZero() { 55 t.Fatalf("unexpected: %v", v) 56 } 57 if v := obj.LoadCount; v != 0 { 58 t.Fatalf("unexpected: %v", v) 59 } 60 61 obj = &dataPLS{} 62 err = client.Get(ctx, key, obj) 63 if err != nil { 64 t.Fatal(err) 65 } 66 if v := obj.CreatedAt; v.IsZero() { 67 t.Fatalf("unexpected: %v", v) 68 } 69 if v := obj.LoadCount; v != 1 { 70 t.Fatalf("unexpected: %v", v) 71 } 72 } 73 74 type dataKL struct { 75 ID int64 `datastore:"-"` 76 Name string 77 } 78 79 func (d *dataKL) LoadKey(ctx context.Context, k datastore.Key) error { 80 d.ID = k.ID() 81 82 return nil 83 } 84 85 func (d *dataKL) Load(ctx context.Context, ps []datastore.Property) error { 86 return datastore.LoadStruct(ctx, d, ps) 87 } 88 89 func (d *dataKL) Save(ctx context.Context) ([]datastore.Property, error) { 90 return datastore.SaveStruct(ctx, d) 91 } 92 93 func klBasic(ctx context.Context, t *testing.T, client datastore.Client) { 94 defer func() { 95 err := client.Close() 96 if err != nil { 97 t.Fatal(err) 98 } 99 }() 100 101 key := client.IncompleteKey("DataKL", nil) 102 obj := &dataKL{Name: "Test"} 103 key, err := client.Put(ctx, key, obj) 104 if err != nil { 105 t.Fatal(err) 106 } 107 108 obj = &dataKL{} 109 err = client.Get(ctx, key, obj) 110 if err != nil { 111 t.Fatal(err) 112 } 113 114 if v := obj.ID; v == 0 { 115 t.Fatalf("unexpected: %v", v) 116 } 117 }