package query_test

import (
	"testing"

	"github.com/0glabs/0g-chain/client/grpc/query"
	"github.com/stretchr/testify/require"
)

func TestNewQueryClient_InvalidGprc(t *testing.T) {
	t.Run("valid connection", func(t *testing.T) {
		conn, err := query.NewQueryClient("http://localhost:1234")
		require.NoError(t, err)
		require.NotNil(t, conn)
	})

	t.Run("non-empty url", func(t *testing.T) {
		_, err := query.NewQueryClient("")
		require.ErrorContains(t, err, "unknown grpc url scheme")
	})

	t.Run("invalid url scheme", func(t *testing.T) {
		_, err := query.NewQueryClient("ftp://localhost:1234")
		require.ErrorContains(t, err, "unknown grpc url scheme")
	})
}

func TestNewQueryClient_ValidClient(t *testing.T) {
	t.Run("all clients are created", func(t *testing.T) {
		client, err := query.NewQueryClient("http://localhost:1234")
		require.NoError(t, err)
		require.NotNil(t, client)

		// validate cosmos clients
		require.NotNil(t, client.Tm)
		require.NotNil(t, client.Tx)
		require.NotNil(t, client.Auth)
		require.NotNil(t, client.Authz)
		require.NotNil(t, client.Bank)
		require.NotNil(t, client.Distribution)
		require.NotNil(t, client.Evidence)
		require.NotNil(t, client.Gov)
		require.NotNil(t, client.GovBeta)
		require.NotNil(t, client.Mint)
		require.NotNil(t, client.Params)
		require.NotNil(t, client.Slashing)
		require.NotNil(t, client.Staking)
		require.NotNil(t, client.Upgrade)
		require.NotNil(t, client.Consensus)

		// validate 3rd party clients
		require.NotNil(t, client.Evm)
		require.NotNil(t, client.Feemarket)
		require.NotNil(t, client.IbcClient)
		require.NotNil(t, client.IbcTransfer)

		// validate 0gChain clients
		require.NotNil(t, client.Evmutil)
		require.NotNil(t, client.Council)
		require.NotNil(t, client.Das)
	})
}