mukan-ignite/ignite/services/chain/chain_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

190 lines
4.4 KiB
Go

package chain
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/archive"
)
func TestSourceVersion(t *testing.T) {
t.Run("tagged latest commit", func(t *testing.T) {
c, err := New(tempSource(t, "testdata/version/mars.v0.2.tar.gz"))
require.NoError(t, err)
assert.Equal(t, "0.2", c.sourceVersion.tag)
assert.Equal(t, "503123b1ac552437c7db3d17f816fd4121ff400d", c.sourceVersion.hash)
})
t.Run("tagged older commit", func(t *testing.T) {
c, err := New(tempSource(t, "testdata/version/mars.v0.2-3-gaae48b7.tar.gz"))
require.NoError(t, err)
assert.Equal(t, "0.2-aae48b7f", c.sourceVersion.tag)
assert.Equal(t, "aae48b7ffa4991bbe229f0969db8fe8623bf1fd4", c.sourceVersion.hash)
})
}
func TestBech32Prefix(t *testing.T) {
t.Run("default prefix when not specified", func(t *testing.T) {
dir, err := tempSourceWithApp(t)
require.NoError(t, err)
c, err := New(dir)
require.NoError(t, err)
prefix, err := c.Bech32Prefix()
require.NoError(t, err)
// Should return the default Cosmos prefix
assert.Equal(t, "cosmos", prefix)
})
t.Run("returns custom prefix when specified", func(t *testing.T) {
dir, err := tempSourceWithApp(t)
require.NoError(t, err)
// Create mock app.go with custom prefix
mockAppGo := `package app
const (
AccountAddressPrefix = "mars"
)
`
require.NoError(t, os.WriteFile(filepath.Join(dir, "app", "app.go"), []byte(mockAppGo), 0o644))
c, err := New(dir)
require.NoError(t, err)
prefix, err := c.Bech32Prefix()
require.NoError(t, err)
assert.Equal(t, "mars", prefix)
})
t.Run("handles alternate prefix declaration format", func(t *testing.T) {
dir, err := tempSourceWithApp(t)
require.NoError(t, err)
// Create mock app.go with custom prefix in alternate format
mockAppGo := `package app
const AccountAddressPrefix string = "jupiter" // Some comment
`
require.NoError(t, os.WriteFile(filepath.Join(dir, "app", "app.go"), []byte(mockAppGo), 0o644))
c, err := New(dir)
require.NoError(t, err)
prefix, err := c.Bech32Prefix()
require.NoError(t, err)
assert.Equal(t, "jupiter", prefix)
})
}
func TestCoinType(t *testing.T) {
t.Run("default coin type when not specified", func(t *testing.T) {
dir, err := tempSourceWithApp(t)
require.NoError(t, err)
c, err := New(dir)
require.NoError(t, err)
coinType, err := c.CoinType()
require.NoError(t, err)
assert.Equal(t, uint32(118), coinType)
})
t.Run("returns custom coin type when specified", func(t *testing.T) {
dir, err := tempSourceWithApp(t)
require.NoError(t, err)
// Create mock app.go with custom coin type
mockAppGo := `package app
const (
ChainCoinType = 529
)
`
require.NoError(t, os.WriteFile(filepath.Join(dir, "app", "app.go"), []byte(mockAppGo), 0o644))
c, err := New(dir)
require.NoError(t, err)
coinType, err := c.CoinType()
require.NoError(t, err)
assert.Equal(t, uint32(529), coinType)
})
t.Run("handles coin type with comments", func(t *testing.T) {
dir, err := tempSourceWithApp(t)
require.NoError(t, err)
mockAppGo := `package app
// ChainCoinType is the coin type for this chain
const ChainCoinType = 330 // Custom coin type for test
`
require.NoError(t, os.WriteFile(filepath.Join(dir, "app", "app.go"), []byte(mockAppGo), 0o644))
c, err := New(dir)
require.NoError(t, err)
coinType, err := c.CoinType()
require.NoError(t, err)
assert.Equal(t, uint32(330), coinType)
})
}
func tempSource(t *testing.T, tarPath string) (path string) {
t.Helper()
f, err := os.Open(tarPath)
require.NoError(t, err)
defer f.Close()
dir := t.TempDir()
require.NoError(t, archive.ExtractArchive(dir, f))
dirs, err := os.ReadDir(dir)
require.NoError(t, err)
return filepath.Join(dir, dirs[0].Name())
}
func tempSourceWithApp(t *testing.T) (string, error) {
t.Helper()
tmpDir := t.TempDir()
emptyFilesPaths := []string{
filepath.Join(tmpDir, "go.mod"),
filepath.Join(tmpDir, "app", "app.go"),
}
if err := os.WriteFile(emptyFilesPaths[0], []byte("module my-new-chain"), 0o755); err != nil {
return "", err
}
for _, f := range emptyFilesPaths[1:] {
if err := os.MkdirAll(filepath.Dir(f), 0o755); err != nil {
return "", err
}
if err := os.WriteFile(f, []byte("package my-new-chain"), 0o755); err != nil {
return "", err
}
}
return tmpDir, nil
}