package keeper_test

import (
	"testing"

	sdk "github.com/cosmos/cosmos-sdk/types"
	"github.com/stretchr/testify/require"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"

	keepertest "cosmos-test/testutil/keeper"
	"cosmos-test/testutil/nullify"
	"cosmos-test/x/cosmostest/types"
)

func TestNextAuctionQuery(t *testing.T) {
	keeper, ctx := keepertest.CosmostestKeeper(t)
	wctx := sdk.WrapSDKContext(ctx)
	item := createTestNextAuction(keeper, ctx)
	for _, tc := range []struct {
		desc     string
		request  *types.QueryGetNextAuctionRequest
		response *types.QueryGetNextAuctionResponse
		err      error
	}{
		{
			desc:     "First",
			request:  &types.QueryGetNextAuctionRequest{},
			response: &types.QueryGetNextAuctionResponse{NextAuction: item},
		},
		{
			desc: "InvalidRequest",
			err:  status.Error(codes.InvalidArgument, "invalid request"),
		},
	} {
		t.Run(tc.desc, func(t *testing.T) {
			response, err := keeper.NextAuction(wctx, tc.request)
			if tc.err != nil {
				require.ErrorIs(t, err, tc.err)
			} else {
				require.NoError(t, err)
				require.Equal(t,
					nullify.Fill(tc.response),
					nullify.Fill(response),
				)
			}
		})
	}
}
