github.com/iasthc/atlas/cmd/atlas@v0.0.0-20230523071841-73246df3f88d/internal/migrate/migrate_test.go (about) 1 // Copyright 2021-present The Atlas Authors. All rights reserved. 2 // This source code is licensed under the Apache 2.0 license found 3 // in the LICENSE file in the root directory of this source tree. 4 5 package migrate 6 7 import ( 8 "context" 9 "testing" 10 "time" 11 12 "github.com/iasthc/atlas/cmd/atlas/internal/migrate/ent" 13 "github.com/iasthc/atlas/cmd/atlas/internal/migrate/ent/revision" 14 "github.com/iasthc/atlas/sql/migrate" 15 "github.com/iasthc/atlas/sql/sqlclient" 16 17 _ "github.com/mattn/go-sqlite3" 18 "github.com/stretchr/testify/require" 19 ) 20 21 func TestNewEntRevisions(t *testing.T) { 22 ctx := context.Background() 23 c, err := sqlclient.Open(ctx, "sqlite://?mode=memory") 24 require.NoError(t, err) 25 r, err := NewEntRevisions(ctx, c) 26 require.NoError(t, err) 27 require.NoError(t, r.Migrate(ctx)) 28 29 s, err := c.Driver.InspectSchema(ctx, "", nil) 30 require.NoError(t, err) 31 require.Len(t, s.Tables, 1) 32 _, ok := s.Table(revision.Table) 33 require.True(t, ok) 34 35 cur, err := r.CurrentRevision(ctx) 36 require.True(t, ent.IsNotFound(err)) 37 require.Nil(t, cur) 38 39 err = r.WriteRevision(ctx, &migrate.Revision{ 40 Version: "1", 41 Description: "desc", 42 Type: migrate.RevisionTypeResolved, 43 ExecutedAt: time.Now(), 44 Hash: "hash", 45 OperatorVersion: "0.1.0", 46 }) 47 require.NoError(t, err) 48 cur, err = r.CurrentRevision(ctx) 49 require.NoError(t, err) 50 require.Equal(t, "1", cur.Version) 51 52 next := *cur 53 next.Version = "2" 54 require.NoError(t, r.WriteRevision(ctx, &next)) 55 cur, err = r.CurrentRevision(ctx) 56 require.NoError(t, err) 57 require.Equal(t, "2", cur.Version) 58 59 revs, err := r.ReadRevisions(ctx) 60 require.NoError(t, err) 61 require.Len(t, revs, 2) 62 require.Equal(t, "1", revs[0].Version) 63 require.Equal(t, "2", revs[1].Version) 64 65 id, err := r.ID(ctx, "v0.10.1") 66 require.NoError(t, err) 67 require.NotEmpty(t, id) 68 id1, err := r.ID(ctx, "v0.10.1") 69 require.NoError(t, err) 70 require.Equal(t, id, id1, "identifiers should be allocated only once") 71 72 // Identifier is not returned as a revision. 73 revs, err = r.ReadRevisions(ctx) 74 require.NoError(t, err) 75 require.Len(t, revs, 2, "identifiers should not be returned as revisions") 76 _, err = r.ReadRevision(ctx, revisionID) 77 require.Error(t, err) 78 err = r.DeleteRevision(ctx, revisionID) 79 require.Error(t, err) 80 err = r.WriteRevision(ctx, &migrate.Revision{Version: revisionID}) 81 require.Error(t, err) 82 83 cur, err = r.CurrentRevision(ctx) 84 require.NoError(t, err) 85 require.Equal(t, "2", cur.Version) 86 require.NoError(t, r.DeleteRevision(ctx, "2")) 87 cur, err = r.CurrentRevision(ctx) 88 require.NoError(t, err) 89 require.Equal(t, "1", cur.Version) 90 require.NoError(t, r.DeleteRevision(ctx, "1")) 91 cur, err = r.CurrentRevision(ctx) 92 require.True(t, ent.IsNotFound(err)) 93 require.Nil(t, cur) 94 revs, err = r.ReadRevisions(ctx) 95 require.NoError(t, err) 96 require.Len(t, revs, 0) 97 id1, err = r.ID(ctx, "v0.10.1") 98 require.NoError(t, err) 99 require.Equal(t, id, id1) 100 }