Skip to content
This repository has been archived by the owner on Dec 4, 2023. It is now read-only.

Testing #49

Open
AshleyCoder3 opened this issue Jul 27, 2022 · 1 comment
Open

Testing #49

AshleyCoder3 opened this issue Jul 27, 2022 · 1 comment

Comments

@AshleyCoder3
Copy link

I use this for creating a point and mongodb. everything runs great. But now im testing and im unsure how to hit the keys.set.... part of the function. any pointers or examples would be fantastic

@shadowspore
Copy link
Owner

shadowspore commented Nov 14, 2022

Hello
You can mock the t38c.Executor interface and initialize client this way:

client, err := t38c.NewWithExecutor(myExecutorMock, true)

Example using gomock:

package mypkg

import (
	"context"
	"testing"

	gomock "github.com/golang/mock/gomock"
	"github.com/stretchr/testify/require"
	"github.com/xjem/t38c"
)

func TestMock(t *testing.T) {
	ctrl := gomock.NewController(t)
	defer ctrl.Finish()

	e := NewMockExecutor(ctrl)

	gomock.InOrder(
		e.EXPECT().
			Execute(gomock.Any(), "PING", []string{}).
			Return([]byte(`{"ok": true, "ping":"pong"}`), nil),

		e.EXPECT().
			Execute(gomock.Any(), "SET", []string{"test", "1", "POINT", "1", "2"}).
			Return([]byte(`{"ok": true}`), nil),

		e.EXPECT().
			Execute(gomock.Any(), "GET", []string{"test", "1", "POINT"}).
			Return([]byte(`{"ok": true, "point": {"lat": 1, "lon": 2}}`), nil),
	)

	client, err := t38c.NewWithExecutor(e, true)
	require.NoError(t, err)

	err = client.Keys.Set("test", "1").Point(1, 2).Do(context.TODO())
	require.NoError(t, err)

	point, err := client.Keys.Get("test", "1").Point(context.TODO())
	require.NoError(t, err)

	require.Equal(t, &t38c.GetPointResponse{Point: t38c.Point{Lat: 1, Lon: 2}}, point)
}

Mocking raw bytes is a bit painful, but it works :)
I will try to improve this in future

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants