mirror of
https://github.com/hanzo-fi/payments.git
synced 2026-10-30 20:31:20 +00:00
- go.mod module path + all self-imports: github.com/formancehq/payments -> github.com/hanzo-fi/payments (1590 .go files / 3152 refs; 20 modules: root, pkg/client, pkg/domain, 18 ce/plugins). External dep kept: formancehq/go-libs. - plugins: each ce/plugins/* consumed a *published* pkg/domain; added local 'replace .../pkg/domain => ../../../pkg/domain' (consistent with root) so every standalone plugin module builds in-monorepo. compile-plugin.sh MOD var rebranded too. - branding: README, LICENSE (dual MIT+EE; upstream copyright retained + Hanzo added), goreleaser (release images -> registry.hanzo.ai/hanzo-fi, OCI labels, homepage), proto go_package, renovate, speakeasy gen.yaml, connector-template *.gotpl. - CI: removed Numary/Formance workflows + composite action; added canonical hanzo.yml + cicd.yml (hanzoai/ci, gated HANZO_CI_ENABLED) + secretless ci.yml (go build/vet). - kept as data/compat keys: wire capability enums ALLOW_FORMANCE_*, generated SDK type client.Formance, domain field FormanceRedirectURL, OTEL_SERVICE_NAME, upstream base image. - verified: go build ./... (default + -tags ee) + all 20 nested modules green.
83 lines
2.6 KiB
Go
83 lines
2.6 KiB
Go
package v3
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"time"
|
|
|
|
"github.com/hanzo-fi/payments/internal/api/backend"
|
|
"github.com/hanzo-fi/payments/pkg/domain/models"
|
|
"github.com/google/uuid"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/mock/gomock"
|
|
)
|
|
|
|
var _ = Describe("API v3 Connector Config Update", func() {
|
|
var (
|
|
handlerFn http.HandlerFunc
|
|
)
|
|
|
|
Context("update a connector config", func() {
|
|
var (
|
|
w *httptest.ResponseRecorder
|
|
m *backend.MockBackend
|
|
|
|
connectorID models.ConnectorID
|
|
connector models.Connector
|
|
config models.Config
|
|
)
|
|
BeforeEach(func() {
|
|
w = httptest.NewRecorder()
|
|
ctrl := gomock.NewController(GinkgoT())
|
|
m = backend.NewMockBackend(ctrl)
|
|
handlerFn = connectorsConfigUpdate(m)
|
|
connectorID = models.ConnectorID{
|
|
Reference: uuid.New(),
|
|
Provider: "dummypay",
|
|
}
|
|
connectorName := "some-name"
|
|
connector = models.Connector{
|
|
ConnectorBase: models.ConnectorBase{
|
|
ID: connectorID,
|
|
Name: connectorName,
|
|
Provider: connectorID.Provider,
|
|
},
|
|
}
|
|
config = models.Config{PollingPeriod: 20 * time.Minute}
|
|
config.Name = connectorName
|
|
conf, err := config.MarshalJSON()
|
|
require.Nil(GinkgoT(), err)
|
|
connector.Config = conf
|
|
})
|
|
|
|
It("should return a validation error when connector ID is invalid", func(ctx SpecContext) {
|
|
handlerFn(w, prepareJSONRequestWithQuery(http.MethodPatch, "connectorID", "invalidID", &config))
|
|
|
|
assertExpectedResponse(w.Result(), http.StatusBadRequest, "INVALID_ID")
|
|
})
|
|
|
|
It("should return a validation error when request body is too big", func(ctx SpecContext) {
|
|
data := oversizeRequestBody()
|
|
handlerFn(w, prepareJSONRequestWithQuery(http.MethodPatch, "connectorID", connectorID.String(), &data))
|
|
|
|
assertExpectedResponse(w.Result(), http.StatusRequestEntityTooLarge, "MISSING_OR_INVALID_BODY")
|
|
})
|
|
|
|
It("should return an internal server error when backend returns error", func(ctx SpecContext) {
|
|
m.EXPECT().ConnectorsConfigUpdate(gomock.Any(), gomock.Any(), gomock.Any()).Return(
|
|
fmt.Errorf("connector update err"),
|
|
)
|
|
handlerFn(w, prepareJSONRequestWithQuery(http.MethodPatch, "connectorID", connectorID.String(), &config))
|
|
assertExpectedResponse(w.Result(), http.StatusInternalServerError, "INTERNAL")
|
|
})
|
|
|
|
It("should return status no content on success", func(ctx SpecContext) {
|
|
m.EXPECT().ConnectorsConfigUpdate(gomock.Any(), connector.ID, gomock.Any()).Return(nil)
|
|
handlerFn(w, prepareJSONRequestWithQuery(http.MethodPatch, "connectorID", connectorID.String(), &config))
|
|
assertExpectedResponse(w.Result(), http.StatusNoContent, "")
|
|
})
|
|
})
|
|
})
|