github.com/nokia/migrate/v4@v4.16.0/database/multistmt/parse_test.go (about)

     1  package multistmt_test
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  
     9  	"github.com/nokia/migrate/v4/database/multistmt"
    10  )
    11  
    12  const maxMigrationSize = 1024
    13  
    14  func TestParse(t *testing.T) {
    15  	testCases := []struct {
    16  		name        string
    17  		multiStmt   string
    18  		delimiter   string
    19  		expected    []string
    20  		expectedErr error
    21  	}{
    22  		{
    23  			name: "single statement, no delimiter", multiStmt: "single statement, no delimiter", delimiter: ";",
    24  			expected: []string{"single statement, no delimiter"}, expectedErr: nil,
    25  		},
    26  		{
    27  			name: "single statement, one delimiter", multiStmt: "single statement, one delimiter;", delimiter: ";",
    28  			expected: []string{"single statement, one delimiter;"}, expectedErr: nil,
    29  		},
    30  		{
    31  			name: "two statements, no trailing delimiter", multiStmt: "statement one; statement two", delimiter: ";",
    32  			expected: []string{"statement one;", " statement two"}, expectedErr: nil,
    33  		},
    34  		{
    35  			name: "two statements, with trailing delimiter", multiStmt: "statement one; statement two;", delimiter: ";",
    36  			expected: []string{"statement one;", " statement two;"}, expectedErr: nil,
    37  		},
    38  	}
    39  
    40  	for _, tc := range testCases {
    41  		t.Run(tc.name, func(t *testing.T) {
    42  			stmts := make([]string, 0, len(tc.expected))
    43  			err := multistmt.Parse(strings.NewReader(tc.multiStmt), []byte(tc.delimiter), maxMigrationSize, func(b []byte) bool {
    44  				stmts = append(stmts, string(b))
    45  				return true
    46  			})
    47  			assert.Equal(t, tc.expectedErr, err)
    48  			assert.Equal(t, tc.expected, stmts)
    49  		})
    50  	}
    51  }
    52  
    53  func TestParseDiscontinue(t *testing.T) {
    54  	multiStmt := "statement one; statement two"
    55  	delimiter := ";"
    56  	expected := []string{"statement one;"}
    57  
    58  	stmts := make([]string, 0, len(expected))
    59  	err := multistmt.Parse(strings.NewReader(multiStmt), []byte(delimiter), maxMigrationSize, func(b []byte) bool {
    60  		stmts = append(stmts, string(b))
    61  		return false
    62  	})
    63  	assert.Nil(t, err)
    64  	assert.Equal(t, expected, stmts)
    65  }