refactor: change number to http status

change 200 to http.StatusOk
change 400 to http.StatusBadRequest
change 404 to http.StatusNotFound
change 500 to http.StatusInternalServerError

Nddtfjiang <zhicheng.jiang@merico.dev>
diff --git a/plugins/helper/api_async_client.go b/plugins/helper/api_async_client.go
index f8806ea..8b8777b 100644
--- a/plugins/helper/api_async_client.go
+++ b/plugins/helper/api_async_client.go
@@ -16,7 +16,7 @@
 
 type ApiAsyncCallback func(*http.Response, error) error
 
-var HttpMinStatusRetryCode = 400
+var HttpMinStatusRetryCode = http.StatusBadRequest
 
 // ApiAsyncClient is built on top of ApiClient, to provide a asynchronous semantic
 // You may submit multiple requests at once by calling `GetAsync`, and those requests
diff --git a/plugins/helper/api_async_client_test.go b/plugins/helper/api_async_client_test.go
deleted file mode 100644
index 5812708..0000000
--- a/plugins/helper/api_async_client_test.go
+++ /dev/null
@@ -1,336 +0,0 @@
-package helper
-
-import (
-	"context"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"net/http"
-	"net/url"
-	"os"
-	"reflect"
-	"sync/atomic"
-	"testing"
-	"time"
-
-	"github.com/agiledragon/gomonkey/v2"
-	"github.com/merico-dev/lake/plugins/core"
-	"github.com/sirupsen/logrus"
-	"github.com/spf13/viper"
-	"github.com/stretchr/testify/assert"
-	"gorm.io/gorm"
-)
-
-// TestReadder for test io data
-type TestReader struct {
-	Err error
-}
-
-func (r *TestReader) Read(p []byte) (n int, err error) {
-	return 0, r.Err
-}
-
-func (r *TestReader) Close() error {
-	return nil
-}
-
-// it is better to move some where more public.
-var ErrUnitTest error = fmt.Errorf("ErrorForTest[%d]", time.Now().UnixNano())
-
-func callback(_ *http.Response, err error) error {
-	if err == nil {
-		return nil
-	}
-	return ErrUnitTest
-}
-
-func GetConfigForTest(basepath string) *viper.Viper {
-	// create the object and load the .env file
-	v := viper.New()
-	envfile := ".env"
-	envbasefile := basepath + ".env.example"
-	bytesRead, err := ioutil.ReadFile(envbasefile)
-	if err != nil {
-		logrus.Warn("Failed to read ["+envbasefile+"] file:", err)
-	}
-	err = ioutil.WriteFile(envfile, bytesRead, 0644)
-
-	if err != nil {
-		logrus.Warn("Failed to write config file ["+envfile+"] file:", err)
-	}
-
-	v.SetConfigFile(envfile)
-	err = v.ReadInConfig()
-	if err != nil {
-		path, _ := os.Getwd()
-		logrus.Warn("Now in the path [" + path + "]")
-		logrus.Warn("Failed to read ["+envfile+"] file:", err)
-	}
-	v.AutomaticEnv()
-	// This line is essential for reading and writing
-	v.WatchConfig()
-	return v
-}
-
-// Create an AsyncApiClient object for test
-func CreateTestAsyncApiClient(t *testing.T) (*ApiAsyncClient, error) {
-	// create rate limit calculator
-	rateLimiter := &ApiRateLimitCalculator{
-		UserRateLimitPerHour: 36000, // ten times each seconed
-	}
-
-	// set the function of create new default taskcontext for the AsyncApiClient
-	gm := gomonkey.ApplyFunc(NewDefaultTaskContext, func(
-		cfg *viper.Viper,
-		_ core.Logger,
-		db *gorm.DB,
-		_ context.Context,
-		name string,
-		subtasks map[string]bool,
-		progress chan core.RunningProgress,
-	) core.TaskContext {
-		return &DefaultTaskContext{
-			&defaultExecContext{
-				cfg:      cfg,
-				logger:   &DefaultLogger{},
-				db:       db,
-				ctx:      context.Background(),
-				name:     "Test",
-				data:     nil,
-				progress: progress,
-			},
-			subtasks,
-			make(map[string]*DefaultSubTaskContext),
-		}
-	})
-	defer gm.Reset()
-	taskCtx := NewDefaultTaskContext(GetConfigForTest("../../"), nil, nil, nil, "", nil, nil)
-
-	// create ApiClient
-	apiClient := &ApiClient{}
-	apiClient.Setup("", nil, 3*time.Second)
-	apiClient.SetContext(taskCtx.GetContext())
-
-	return CreateAsyncApiClient(taskCtx, apiClient, rateLimiter)
-}
-
-// go test -gcflags=all=-l -run ^TestWaitAsync_EmptyWork
-func TestWaitAsync_EmptyWork(t *testing.T) {
-	asyncApiClient, _ := CreateTestAsyncApiClient(t)
-
-	err := asyncApiClient.WaitAsync()
-	assert.Equal(t, err, nil)
-}
-
-// go test -gcflags=all=-l -run ^TestWaitAsync_WithWork
-func TestWaitAsync_WithWork(t *testing.T) {
-	asyncApiClient, _ := CreateTestAsyncApiClient(t)
-
-	gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), "Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
-	})
-	defer gm_info.Reset()
-
-	gm_do := gomonkey.ApplyMethod(reflect.TypeOf(&ApiClient{}), "Do", func(
-		apiClient *ApiClient,
-		method string,
-		path string,
-		query url.Values,
-		body interface{},
-		headers http.Header,
-	) (*http.Response, error) {
-		return &http.Response{
-			Body:       &TestReader{Err: io.EOF},
-			StatusCode: 200,
-		}, nil
-	})
-	defer gm_do.Reset()
-
-	// check if the callback1 has been finished
-	waitSuc := false
-	callback1 := func(_ *http.Response, err error) error {
-		// wait 0.5 second for wait
-		time.Sleep(500 * time.Millisecond)
-		waitSuc = true
-		return nil
-	}
-
-	// begin to test
-	err := asyncApiClient.DoAsync("", "", nil, nil, nil, callback1, 0)
-	assert.Equal(t, err, nil)
-
-	err = asyncApiClient.WaitAsync()
-	assert.Equal(t, err, nil)
-	assert.Equal(t, waitSuc, true)
-}
-
-// go test -gcflags=all=-l -run ^TestWaitAsync_MutiWork
-func TestWaitAsync_MutiWork(t *testing.T) {
-	asyncApiClient, _ := CreateTestAsyncApiClient(t)
-
-	gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), "Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
-	})
-	defer gm_info.Reset()
-
-	gm_do := gomonkey.ApplyMethod(reflect.TypeOf(&ApiClient{}), "Do", func(
-		apiClient *ApiClient,
-		method string,
-		path string,
-		query url.Values,
-		body interface{},
-		headers http.Header,
-	) (*http.Response, error) {
-		return &http.Response{
-			Body:       &TestReader{Err: io.EOF},
-			StatusCode: 200,
-		}, nil
-	})
-	defer gm_do.Reset()
-
-	// check if the callback2 has been finished
-	finishedCount := int64(0)
-	callback2 := func(_ *http.Response, err error) error {
-		// wait 0.5 second for wait
-		time.Sleep(500 * time.Millisecond)
-		atomic.AddInt64(&finishedCount, 1)
-		return nil
-	}
-
-	testCount := int64(5)
-
-	// begin to test
-	for i := int64(0); i < testCount; i++ {
-		err := asyncApiClient.DoAsync("", "", nil, nil, nil, callback2, 0)
-		assert.Equal(t, err, nil)
-	}
-
-	err := asyncApiClient.WaitAsync()
-	assert.Equal(t, err, nil)
-	assert.Equal(t, finishedCount, testCount)
-}
-
-// go test -gcflags=all=-l -run ^TestDoAsync_OnceSuceess
-func TestDoAsync_OnceSuceess(t *testing.T) {
-	asyncApiClient, _ := CreateTestAsyncApiClient(t)
-	gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), "Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
-	})
-	defer gm_info.Reset()
-
-	gm_do := gomonkey.ApplyMethod(reflect.TypeOf(&ApiClient{}), "Do", func(
-		apiClient *ApiClient,
-		method string,
-		path string,
-		query url.Values,
-		body interface{},
-		headers http.Header,
-	) (*http.Response, error) {
-		return &http.Response{
-			Body:       &TestReader{Err: io.EOF},
-			StatusCode: 200,
-		}, nil
-	})
-	defer gm_do.Reset()
-
-	// ready to test
-	err := asyncApiClient.DoAsync("", "", nil, nil, nil, callback, 0)
-	assert.Equal(t, err, nil)
-
-	err = asyncApiClient.WaitAsync()
-	assert.Equal(t, err, nil)
-}
-
-// go test -gcflags=all=-l -run ^TestDoAsync_TryAndFail
-func TestDoAsync_TryAndFail(t *testing.T) {
-	asyncApiClient, _ := CreateTestAsyncApiClient(t)
-	gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), "Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
-	})
-	defer gm_info.Reset()
-
-	gm_do := gomonkey.ApplyMethod(reflect.TypeOf(&ApiClient{}), "Do", func(
-		apiClient *ApiClient,
-		method string,
-		path string,
-		query url.Values,
-		body interface{},
-		headers http.Header,
-	) (*http.Response, error) {
-		return &http.Response{
-			Body:       &TestReader{Err: ErrUnitTest},
-			StatusCode: 500,
-		}, nil
-	})
-	defer gm_do.Reset()
-
-	// ready to test
-	err := asyncApiClient.DoAsync("", "", nil, nil, nil, callback, 0)
-	assert.Equal(t, err, nil)
-
-	err = asyncApiClient.WaitAsync()
-	// there must have err and the err must be ErrUnitTest
-	if assert.NotNil(t, err) {
-		assert.Contains(t, err.Error(), ErrUnitTest.Error())
-	}
-}
-
-// go test -gcflags=all=-l -run ^TestDoAsync_TryAndSuceess
-func TestDoAsync_TryAndSuceess(t *testing.T) {
-	asyncApiClient, _ := CreateTestAsyncApiClient(t)
-	gm_info := gomonkey.ApplyMethod(reflect.TypeOf(&DefaultLogger{}), "Info", func(_ *DefaultLogger, _ string, _ ...interface{}) {
-	})
-	defer gm_info.Reset()
-
-	// counting the retry times
-	times := 0
-	gm_do := gomonkey.ApplyMethod(reflect.TypeOf(&ApiClient{}), "Do", func(
-		apiClient *ApiClient,
-		method string,
-		path string,
-		query url.Values,
-		body interface{},
-		headers http.Header,
-	) (*http.Response, error) {
-		times++
-		switch times {
-		case 1:
-			return &http.Response{
-				Body:       &TestReader{Err: ErrUnitTest},
-				StatusCode: 500,
-			}, nil
-		case 2:
-			return &http.Response{
-				Body:       &TestReader{Err: io.EOF},
-				StatusCode: 500,
-			}, nil
-		case 3:
-			return &http.Response{
-				Body:       &TestReader{Err: io.EOF},
-				StatusCode: 400,
-			}, nil
-		case 4:
-			return &http.Response{
-				Body:       &TestReader{Err: io.EOF},
-				StatusCode: 300,
-			}, nil
-		case 5:
-			return &http.Response{
-				Body:       &TestReader{Err: io.EOF},
-				StatusCode: 200,
-			}, nil
-		default:
-			assert.Empty(t, TestNoRunHere)
-			return &http.Response{
-				Body:       &TestReader{Err: io.EOF},
-				StatusCode: 200,
-			}, TestError
-		}
-	})
-	defer gm_do.Reset()
-	asyncApiClient.SetMaxRetry(5)
-
-	// ready to test
-	err := asyncApiClient.DoAsync("", "", nil, nil, nil, callback, 0)
-	assert.Equal(t, err, nil)
-
-	err = asyncApiClient.WaitAsync()
-	assert.Equal(t, err, nil)
-	assert.Equal(t, times, 4)
-}