github.com/dynastymasra/migrate/v4@v4.11.0/database/spanner/spanner_test.go (about)

     1  package spanner
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  )
     8  
     9  import (
    10  	"github.com/golang-migrate/migrate/v4"
    11  	dt "github.com/golang-migrate/migrate/v4/database/testing"
    12  	_ "github.com/golang-migrate/migrate/v4/source/file"
    13  )
    14  
    15  import (
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func Test(t *testing.T) {
    20  	if testing.Short() {
    21  		t.Skip("skipping test in short mode.")
    22  	}
    23  
    24  	db, ok := os.LookupEnv("SPANNER_DATABASE")
    25  	if !ok {
    26  		t.Skip("SPANNER_DATABASE not set, skipping test.")
    27  	}
    28  
    29  	s := &Spanner{}
    30  	addr := fmt.Sprintf("spanner://%s", db)
    31  	d, err := s.Open(addr)
    32  	if err != nil {
    33  		t.Fatal(err)
    34  	}
    35  	dt.Test(t, d, []byte("SELECT 1"))
    36  }
    37  
    38  func TestMigrate(t *testing.T) {
    39  	if testing.Short() {
    40  		t.Skip("skipping test in short mode.")
    41  	}
    42  
    43  	db, ok := os.LookupEnv("SPANNER_DATABASE")
    44  	if !ok {
    45  		t.Skip("SPANNER_DATABASE not set, skipping test.")
    46  	}
    47  
    48  	s := &Spanner{}
    49  	addr := fmt.Sprintf("spanner://%s", db)
    50  	d, err := s.Open(addr)
    51  	if err != nil {
    52  		t.Fatal(err)
    53  	}
    54  	m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", db, d)
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  	dt.TestMigrate(t, m)
    59  }
    60  
    61  func TestMultistatementSplit(t *testing.T) {
    62  	testCases := []struct {
    63  		name           string
    64  		multiStatement string
    65  		expected       []string
    66  	}{
    67  		{
    68  			name:           "single statement, single line, no semicolon",
    69  			multiStatement: "CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id)",
    70  			expected:       []string{"CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id)"},
    71  		},
    72  		{
    73  			name: "single statement, multi line, no semicolon",
    74  			multiStatement: `CREATE TABLE table_name (
    75  	id STRING(255) NOT NULL,
    76  ) PRIMARY KEY (id)`,
    77  			expected: []string{`CREATE TABLE table_name (
    78  	id STRING(255) NOT NULL,
    79  ) PRIMARY KEY (id)`},
    80  		},
    81  		{
    82  			name:           "single statement, single line, with semicolon",
    83  			multiStatement: "CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id);",
    84  			expected:       []string{"CREATE TABLE table_name (id STRING(255) NOT NULL) PRIMARY KEY (id)"},
    85  		},
    86  		{
    87  			name: "single statement, multi line, with semicolon",
    88  			multiStatement: `CREATE TABLE table_name (
    89  	id STRING(255) NOT NULL,
    90  ) PRIMARY KEY (id);`,
    91  			expected: []string{`CREATE TABLE table_name (
    92  	id STRING(255) NOT NULL,
    93  ) PRIMARY KEY (id)`},
    94  		},
    95  		{
    96  			name: "multi statement, with trailing semicolon",
    97  			// From https://github.com/mattes/migrate/pull/281
    98  			multiStatement: `CREATE TABLE table_name (
    99  	id STRING(255) NOT NULL,
   100  ) PRIMARY KEY(id);
   101  
   102  CREATE INDEX table_name_id_idx ON table_name (id);`,
   103  			expected: []string{`CREATE TABLE table_name (
   104  	id STRING(255) NOT NULL,
   105  ) PRIMARY KEY(id)`, "CREATE INDEX table_name_id_idx ON table_name (id)"},
   106  		},
   107  		{
   108  			name: "multi statement, no trailing semicolon",
   109  			// From https://github.com/mattes/migrate/pull/281
   110  			multiStatement: `CREATE TABLE table_name (
   111  	id STRING(255) NOT NULL,
   112  ) PRIMARY KEY(id);
   113  
   114  CREATE INDEX table_name_id_idx ON table_name (id)`,
   115  			expected: []string{`CREATE TABLE table_name (
   116  	id STRING(255) NOT NULL,
   117  ) PRIMARY KEY(id)`, "CREATE INDEX table_name_id_idx ON table_name (id)"},
   118  		},
   119  	}
   120  
   121  	for _, tc := range testCases {
   122  		t.Run(tc.name, func(t *testing.T) {
   123  			if stmts := migrationStatements([]byte(tc.multiStatement)); !assert.Equal(t, stmts, tc.expected) {
   124  				t.Error()
   125  			}
   126  		})
   127  	}
   128  }