diff --git a/api/account_test.go b/api/account_test.go new file mode 100644 index 0000000..fde5d77 --- /dev/null +++ b/api/account_test.go @@ -0,0 +1,66 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + mockdb "github.com/itsscb/df/db/mock" + db "github.com/itsscb/df/db/sqlc" + "github.com/itsscb/df/util" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func TestGetAccountAPI(t *testing.T) { + account := randomAccount() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + store := mockdb.NewMockStore(ctrl) + + store.EXPECT().GetAccount(gomock.Any(), gomock.Eq(account.ID)). + Times(1). + Return(account, nil) + + server := NewServer(store) + recorder := httptest.NewRecorder() + + uri := fmt.Sprintf("/accounts/%d", account.ID) + req, err := http.NewRequest(http.MethodGet, uri, nil) + require.NoError(t, err) + + server.router.ServeHTTP(recorder, req) + + require.Equal(t, http.StatusOK, recorder.Code) + requireBodyMatchAccount(t, recorder.Body, account) +} + +func randomAccount() db.Account { + return db.Account{ + ID: util.RandomInt(1, 1000), + Passwordhash: util.RandomString(250), + Firstname: util.RandomUser(), + Lastname: util.RandomUser(), + Email: util.RandomEmail(), + Zip: util.RandomUser(), + Street: util.RandomUser(), + City: util.RandomUser(), + Country: util.RandomUser(), + } +} + +func requireBodyMatchAccount(t *testing.T, body *bytes.Buffer, account db.Account) { + data, err := io.ReadAll(body) + require.NoError(t, err) + + var getAccount db.Account + err = json.Unmarshal(data, &getAccount) + require.NoError(t, err) + require.Equal(t, account, getAccount) +}