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  }