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 }