fix: resolve CI failures — gofmt, unused functions, test parameter mismatches
- gofmt: user.go, config_test.go, group_handler.go, smart_retry_test.go - Remove unused: mergeGroupIDs, resolveProxyURL, "time" import - Fix api_contract_test.go: remove extra Sora args from NewAdminService, NewSettingHandler, NewAccountHandler; remove Sora field expectations - Fix account_test_service_openai_test.go: restore test helpers
This commit is contained in:
@@ -1,48 +0,0 @@
|
|||||||
package service
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"
|
|
||||||
)
|
|
||||||
|
|
||||||
// queuedHTTPUpstream is a test helper that serves pre-loaded responses in order.
|
|
||||||
type queuedHTTPUpstream struct {
|
|
||||||
responses []*http.Response
|
|
||||||
requests []*http.Request
|
|
||||||
tlsFlags []bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *queuedHTTPUpstream) Do(_ *http.Request, _ string, _ int64, _ int) (*http.Response, error) {
|
|
||||||
return nil, fmt.Errorf("unexpected Do call")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *queuedHTTPUpstream) DoWithTLS(req *http.Request, _ string, _ int64, _ int, profile *tlsfingerprint.Profile) (*http.Response, error) {
|
|
||||||
u.requests = append(u.requests, req)
|
|
||||||
u.tlsFlags = append(u.tlsFlags, profile != nil)
|
|
||||||
if len(u.responses) == 0 {
|
|
||||||
return nil, fmt.Errorf("no mocked response")
|
|
||||||
}
|
|
||||||
resp := u.responses[0]
|
|
||||||
u.responses = u.responses[1:]
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// newJSONResponse creates a simple HTTP response for testing.
|
|
||||||
func newJSONResponse(status int, body string) *http.Response {
|
|
||||||
return &http.Response{
|
|
||||||
StatusCode: status,
|
|
||||||
Header: make(http.Header),
|
|
||||||
Body: io.NopCloser(strings.NewReader(body)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// newJSONResponseWithHeader creates a JSON response with a custom header.
|
|
||||||
func newJSONResponseWithHeader(status int, body, key, value string) *http.Response {
|
|
||||||
resp := newJSONResponse(status, body)
|
|
||||||
resp.Header.Set(key, value)
|
|
||||||
return resp
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,7 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
@@ -13,8 +14,43 @@ import (
|
|||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// --- shared test helpers ---
|
||||||
|
|
||||||
|
type queuedHTTPUpstream struct {
|
||||||
|
responses []*http.Response
|
||||||
|
requests []*http.Request
|
||||||
|
tlsFlags []bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *queuedHTTPUpstream) Do(_ *http.Request, _ string, _ int64, _ int) (*http.Response, error) {
|
||||||
|
return nil, fmt.Errorf("unexpected Do call")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *queuedHTTPUpstream) DoWithTLS(req *http.Request, _ string, _ int64, _ int, profile *tlsfingerprint.Profile) (*http.Response, error) {
|
||||||
|
u.requests = append(u.requests, req)
|
||||||
|
u.tlsFlags = append(u.tlsFlags, profile != nil)
|
||||||
|
if len(u.responses) == 0 {
|
||||||
|
return nil, fmt.Errorf("no mocked response")
|
||||||
|
}
|
||||||
|
resp := u.responses[0]
|
||||||
|
u.responses = u.responses[1:]
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func newJSONResponse(status int, body string) *http.Response {
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: status,
|
||||||
|
Header: make(http.Header),
|
||||||
|
Body: io.NopCloser(strings.NewReader(body)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- test functions ---
|
||||||
|
|
||||||
func newTestContext() (*gin.Context, *httptest.ResponseRecorder) {
|
func newTestContext() (*gin.Context, *httptest.ResponseRecorder) {
|
||||||
gin.SetMode(gin.TestMode)
|
gin.SetMode(gin.TestMode)
|
||||||
rec := httptest.NewRecorder()
|
rec := httptest.NewRecorder()
|
||||||
|
|||||||
Reference in New Issue
Block a user