@@ -32,6 +32,7 @@ import (
3232 "cloud.google.com/go/spanner"
3333 "github.com/google/go-cmp/cmp"
3434 "github.com/googleapis/gax-go/v2/apierror"
35+ "go.mercari.io/yo/loaders"
3536 "go.mercari.io/yo/test/testmodels/customtypes"
3637 models "go.mercari.io/yo/test/testmodels/default"
3738 "go.mercari.io/yo/test/testutil"
@@ -579,6 +580,96 @@ func TestCustomCompositePrimaryKey(t *testing.T) {
579580 })
580581}
581582
583+ func TestAllowCommitTimestamp (t * testing.T ) {
584+ ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
585+ defer cancel ()
586+
587+ v := & models.AllowCommitTimestamp {
588+ ID : 300 ,
589+ UpdatedAt : spanner .CommitTimestamp ,
590+ }
591+
592+ if _ , err := client .Apply (ctx , []* spanner.Mutation {v .Insert (ctx )}); err != nil {
593+ t .Fatalf ("Apply failed: %v" , err )
594+ }
595+
596+ var insertTime time.Time
597+ t .Run ("Insert" , func (t * testing.T ) {
598+ got , err := models .FindAllowCommitTimestamp (ctx , client .Single (), 300 )
599+ if err != nil {
600+ t .Fatalf ("unexpected error: %v" , err )
601+ }
602+ if got .UpdatedAt .IsZero () {
603+ t .Errorf ("got UpdatedAt.IsZero" )
604+ }
605+ insertTime = got .UpdatedAt
606+ })
607+
608+ t .Run ("Update" , func (t * testing.T ) {
609+ gc := & models.AllowCommitTimestamp {
610+ ID : 300 ,
611+ UpdatedAt : spanner .CommitTimestamp ,
612+ }
613+
614+ if _ , err := client .Apply (ctx , []* spanner.Mutation {gc .Update (ctx )}); err != nil {
615+ t .Fatalf ("Apply failed: %v" , err )
616+ }
617+
618+ got , err := models .FindAllowCommitTimestamp (ctx , client .Single (), 300 )
619+ if err != nil {
620+ t .Fatalf ("unexpected error: %v" , err )
621+ }
622+
623+ if ! got .UpdatedAt .After (insertTime ) {
624+ t .Errorf ("expected UpdatedAt (%v) to be after insertTime (%v)" , got .UpdatedAt , insertTime )
625+ }
626+ })
627+
628+ t .Run ("InsertOrUpdate" , func (t * testing.T ) {
629+ gc := & models.AllowCommitTimestamp {
630+ ID : 300 ,
631+ UpdatedAt : spanner .CommitTimestamp ,
632+ }
633+
634+ if _ , err := client .Apply (ctx , []* spanner.Mutation {gc .InsertOrUpdate (ctx )}); err != nil {
635+ t .Fatalf ("Apply failed: %v" , err )
636+ }
637+
638+ got , err := models .FindAllowCommitTimestamp (ctx , client .Single (), 300 )
639+ if err != nil {
640+ t .Fatalf ("unexpected error: %v" , err )
641+ }
642+
643+ if got .UpdatedAt .IsZero () {
644+ t .Errorf ("got UpdatedAt.IsZero" )
645+ }
646+ })
647+
648+ t .Run ("IsAllowCommitTimestamp" , func (t * testing.T ) {
649+ gc := & models.AllowCommitTimestamp {
650+ ID : 300 ,
651+ UpdatedAt : spanner .CommitTimestamp ,
652+ }
653+
654+ if _ , err := client .Apply (ctx , []* spanner.Mutation {gc .Update (ctx )}); err != nil {
655+ t .Fatalf ("Apply failed: %v" , err )
656+ }
657+
658+ cols , err := loaders .SpanTableColumns (client , "AllowCommitTimestamp" )
659+ if err != nil {
660+ t .Fatalf ("SpanTableColumns failed: %v" , err )
661+ }
662+
663+ for _ , col := range cols {
664+ if col .ColumnName == "UpdatedAt" {
665+ if ! col .IsAllowCommitTimestamp {
666+ t .Errorf ("updated_at is not AllowCommitTimestamp" )
667+ }
668+ }
669+ }
670+ })
671+ }
672+
582673func TestGeneratedColumn (t * testing.T ) {
583674 ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
584675 defer cancel ()
0 commit comments