go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/db/dbutil/query_formatter_test.go (about)

     1  /*
     2  
     3  Copyright (c) 2023 - Present. Will Charczuk. All rights reserved.
     4  Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository.
     5  
     6  */
     7  
     8  package dbutil
     9  
    10  import (
    11  	"testing"
    12  
    13  	"go.charczuk.com/sdk/assert"
    14  )
    15  
    16  func Test_FormatQuery_trivial(t *testing.T) {
    17  	output, err := (&QueryFormatter{}).FormatQuery("this is just a test", nil)
    18  	assert.ItsNil(t, err)
    19  	assert.ItsEqual(t, "this is just a test", output)
    20  }
    21  
    22  func Test_FormatQuery_typical(t *testing.T) {
    23  	output, err := (&QueryFormatter{}).FormatQuery(`
    24  SELECT
    25  	{{ .user_columns }}
    26  FROM
    27  	{{ .user_table }} u
    28  WHERE
    29  	u.id = $1`, map[string]any{
    30  		"user_columns": "foo,bar,baz",
    31  		"user_table":   "users",
    32  	})
    33  	assert.ItsNil(t, err)
    34  	assert.ItsEqual(t, `
    35  SELECT
    36  	foo,bar,baz
    37  FROM
    38  	users u
    39  WHERE
    40  	u.id = $1`, output)
    41  }
    42  
    43  func Test_FormatQuery_advanced(t *testing.T) {
    44  	output, err := (&QueryFormatter{}).WithTemplates(`{{ define "datums" }}with datums as ( select 1 ){{end}}`).WithFunc("reverse", func(str string) string {
    45  		strRunes := []rune(str)
    46  		for x := 0; x < len(strRunes)>>1; x++ {
    47  			strRunes[x], strRunes[len(strRunes)-(x+1)] = strRunes[len(strRunes)-(x+1)], strRunes[x]
    48  		}
    49  		return string(strRunes)
    50  	}).FormatQuery(`
    51  {{ template "datums" }}
    52  SELECT
    53  	{{ .user_columns }}
    54  FROM
    55  	{{ .user_table | reverse }} u
    56  WHERE
    57  	u.id = $1`,
    58  		map[string]any{
    59  			"user_columns": "foo,bar,baz",
    60  			"user_table":   "users",
    61  		},
    62  	)
    63  	assert.ItsNil(t, err)
    64  	assert.ItsEqual(t, `
    65  with datums as ( select 1 )
    66  SELECT
    67  	foo,bar,baz
    68  FROM
    69  	sresu u
    70  WHERE
    71  	u.id = $1`, output)
    72  }