mukan-ignite/ignite/pkg/cosmostxcollector/adapter/postgres/schemas_test.go
Mukan Erkin Törük c32551b6f7
Some checks failed
Docs Deploy / build_and_deploy (push) Has been cancelled
Generate Docs / cli (push) Has been cancelled
Generate Config Doc / cli (push) Has been cancelled
Go formatting / go-formatting (push) Has been cancelled
Check links / markdown-link-check (push) Has been cancelled
Integration / pre-test (push) Has been cancelled
Integration / test on (push) Has been cancelled
Integration / status (push) Has been cancelled
Lint / Lint Go code (push) Has been cancelled
Test / test (ubuntu-latest) (push) Has been cancelled
refactor: replace all github.com upstream refs with git.cw.tr/mukan-network
2026-05-11 03:36:24 +03:00

128 lines
3 KiB
Go

package postgres_test
import (
"bytes"
"fmt"
"testing"
"testing/fstest"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/cosmostxcollector/adapter/postgres"
)
func TestSchemasWalk(t *testing.T) {
// Arrange: Scripts data by version
data := map[uint]string{
1: "/* TEST-V1 */",
2: "/* TEST-V2 */",
}
// Arrange: Script argument matchers
matchByDataV1 := mock.MatchedBy(func(script []byte) bool {
return bytes.Contains(script, []byte(data[1]))
})
matchByDataV2 := mock.MatchedBy(func(script []byte) bool {
return bytes.Contains(script, []byte(data[2]))
})
// Prepare the walk function mock
m := mock.Mock{}
m.Test(t)
m.On("fn", uint64(1), matchByDataV1).Return(nil)
m.On("fn", uint64(2), matchByDataV2).Return(nil)
fn := func(version uint64, script []byte) error {
return m.MethodCalled("fn", version, script).Error(0)
}
// Arrange: A new schema that contains SQL scripts for three versions
fs := fstest.MapFS{
"schemas/1.sql": &fstest.MapFile{Data: []byte(data[1])},
"schemas/2.sql": &fstest.MapFile{Data: []byte(data[2])},
}
s := postgres.NewSchemas(fs, "")
// Act
err := s.WalkFrom(1, fn)
// Assert
require.NoError(t, err)
m.AssertExpectations(t)
}
func TestSchemasWalkOrder(t *testing.T) {
// Arrange: Scripts data by version
data := map[uint]string{
1: "/* TEST-V1 */",
2: "/* TEST-V2 */",
10: "/* TEST-V10 */",
}
// Arrange: Script argument matchers
matchByDataV1 := mock.MatchedBy(func(script []byte) bool {
return bytes.Contains(script, []byte(data[1]))
})
matchByDataV2 := mock.MatchedBy(func(script []byte) bool {
return bytes.Contains(script, []byte(data[2]))
})
matchByDataV10 := mock.MatchedBy(func(script []byte) bool {
return bytes.Contains(script, []byte(data[10]))
})
// Arrange: Walk function mock
m := mock.Mock{}
m.Test(t)
m.On("fn", uint64(1), matchByDataV1).Return(nil)
m.On("fn", uint64(2), matchByDataV2).Return(nil)
m.On("fn", uint64(10), matchByDataV10).Return(nil)
var versions []uint64
fn := func(ver uint64, script []byte) error {
versions = append(versions, ver)
return m.MethodCalled("fn", ver, script).Error(0)
}
// Arrange: A new schema that contains SQL scripts for three versions
fs := fstest.MapFS{
"schemas/1.sql": &fstest.MapFile{Data: []byte(data[1])},
"schemas/2.sql": &fstest.MapFile{Data: []byte(data[2])},
"schemas/10.sql": &fstest.MapFile{Data: []byte(data[10])},
}
s := postgres.NewSchemas(fs, "")
// Act
err := s.WalkFrom(1, fn)
// Assert
require.NoError(t, err)
require.IsIncreasing(t, versions)
m.AssertExpectations(t)
}
func TestScriptBuilder(t *testing.T) {
// Arrange
s1 := "SCRIPT-1;"
s2 := "SCRIPT-2;"
c1 := "COMMAND-1"
c2 := "COMMAND-2"
b := postgres.ScriptBuilder{}
b.BeginTX()
b.AppendScript([]byte(s1))
b.AppendScript([]byte(s2))
b.AppendCommand(c1)
b.AppendCommand(c2)
b.CommitTX()
want := fmt.Sprintf("BEGIN;%s%s%s;%s;COMMIT;", s1, s2, c1, c2)
// Act
script := b.Bytes()
// Assert
require.EqualValues(t, []byte(want), script)
}