mukan-ignite/ignite/pkg/cosmosanalysis/app/app_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

238 lines
6.5 KiB
Go

package app
import (
_ "embed"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/goanalysis"
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/xast"
)
var (
//go:embed testdata/app_minimal.go
AppMinimalFile []byte
//go:embed testdata/app_generic.go
AppGenericFile []byte
//go:embed testdata/no_app.go
NoAppFile []byte
//go:embed testdata/two_app.go
TwoAppFile []byte
//go:embed testdata/app_di.go
AppDepinject []byte
)
func TestCheckKeeper(t *testing.T) {
tests := []struct {
name string
appFile []byte
keeperName string
expectedError string
}{
{
name: "minimal app",
appFile: AppMinimalFile,
keeperName: "FooKeeper",
},
{
name: "generic app",
appFile: AppGenericFile,
keeperName: "FooKeeper",
},
{
name: "no app",
appFile: NoAppFile,
keeperName: "FooKeeper",
expectedError: "app.go should contain a single app (got 0)",
},
{
name: "two apps",
appFile: TwoAppFile,
keeperName: "FooKeeper",
expectedError: "app.go should contain a single app (got 2)",
},
{
name: "app depinject",
appFile: AppDepinject,
keeperName: "FooKeeper",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tmpDir := t.TempDir()
tmpFile := filepath.Join(tmpDir, "app.go")
err := os.WriteFile(tmpFile, tt.appFile, 0o644)
require.NoError(t, err)
err = CheckKeeper(tmpDir, tt.keeperName)
if tt.expectedError != "" {
require.EqualError(t, err, tt.expectedError)
return
}
require.NoError(t, err)
})
}
}
func TestFindRegisteredModules(t *testing.T) {
basicModules := []string{
"github.com/cosmos/cosmos-sdk/x/auth",
"github.com/cosmos/cosmos-sdk/x/bank",
"github.com/cosmos/cosmos-sdk/x/staking",
"github.com/cosmos/cosmos-sdk/x/gov",
"github.com/username/test/x/foo",
"github.com/cosmos/cosmos-sdk/x/auth/tx",
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice",
"github.com/cosmos/cosmos-sdk/client/grpc/node",
}
cases := []struct {
name string
path string
expectedModules []string
}{
{
name: "new basic manager with only a app.go",
path: "testdata/modules/single_app",
expectedModules: append(basicModules, "github.com/cosmos/ibc-go/v7/modules/core"),
},
{
name: "with runtime api routes",
path: "testdata/modules/runtime",
expectedModules: basicModules,
},
{
name: "with app_config.go file",
path: "testdata/modules/app_config",
expectedModules: []string{
"cosmossdk.io/x/circuit",
"cosmossdk.io/x/evidence",
"cosmossdk.io/x/feegrant/module",
"cosmossdk.io/x/upgrade",
"github.com/cosmos/cosmos-sdk/x/auth",
"github.com/cosmos/cosmos-sdk/x/auth/tx",
"github.com/cosmos/cosmos-sdk/x/auth/tx/config",
"github.com/cosmos/cosmos-sdk/x/auth/vesting",
"github.com/cosmos/cosmos-sdk/x/authz/module",
"github.com/cosmos/cosmos-sdk/x/bank",
"github.com/cosmos/cosmos-sdk/x/consensus",
"github.com/cosmos/cosmos-sdk/x/distribution",
"github.com/cosmos/cosmos-sdk/x/group/module",
"github.com/cosmos/cosmos-sdk/x/mint",
"github.com/cosmos/cosmos-sdk/x/params",
"github.com/cosmos/cosmos-sdk/x/slashing",
"github.com/cosmos/cosmos-sdk/x/staking",
"github.com/ignite/mars/x/mars",
"github.com/cosmos/cosmos-sdk/x/gov",
"github.com/username/test/x/foo",
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice",
"github.com/cosmos/cosmos-sdk/client/grpc/node",
},
},
}
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
got, err := FindRegisteredModules(tt.path)
require.NoError(t, err)
require.ElementsMatch(t, tt.expectedModules, got)
})
}
}
func TestDiscoverModules(t *testing.T) {
basicModules := []string{
"github.com/cosmos/cosmos-sdk/x/auth",
"github.com/cosmos/cosmos-sdk/x/bank",
"github.com/cosmos/cosmos-sdk/x/staking",
"github.com/cosmos/cosmos-sdk/x/gov",
"github.com/username/test/x/foo",
"github.com/cosmos/cosmos-sdk/x/auth/tx",
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice",
"github.com/cosmos/cosmos-sdk/client/grpc/node",
}
cases := []struct {
name string
path string
expectedModules []string
}{
{
name: "new basic manager with only a app.go",
path: "testdata/modules/single_app",
expectedModules: append(basicModules, "github.com/cosmos/ibc-go/v7/modules/core"),
},
{
name: "with app_config.go file",
path: "testdata/modules/app_config",
expectedModules: basicModules,
},
{
name: "with runtime api routes",
path: "testdata/modules/runtime",
expectedModules: basicModules,
},
}
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
appPkg, _, err := xast.ParseDir(tt.path)
require.NoError(t, err)
got := make([]string, 0)
for _, f := range appPkg.Files {
fileImports := goanalysis.FormatImports(f)
modules, err := DiscoverModules(f, tt.path, fileImports)
require.NoError(t, err)
if modules != nil {
got = append(got, modules...)
}
}
require.ElementsMatch(t, tt.expectedModules, got)
})
}
}
func Test_removeKeeperPkgPath(t *testing.T) {
tests := []struct {
name string
arg string
want string
}{
{
name: "test controller keeper",
arg: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/keeper",
want: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts",
},
{
name: "test controller",
arg: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller",
want: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts",
},
{
name: "test keeper",
arg: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/keeper",
want: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts",
},
{
name: "test controller keeper",
arg: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/host/controller/keeper",
want: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts",
},
{
name: "test host controller keeper",
arg: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/host/keeper",
want: "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := removeKeeperPkgPath(tt.arg)
require.Equal(t, tt.want, got)
})
}
}