Files
apskel-pos-backend/internal/router/router_test.go
T
efrilmandClaude Opus 5.5 fe2f459b03 feat(loyalty): organization loyalty settings API
Adds GET and PUT /marketing/loyalty-settings and GET
/marketing/loyalty-settings/history (docs/prd-point-coin.md F2, PC-302).

The settings are the point value, the exchange rate, transfer limits and
the stored expiry settings. PUT merges the body like the outlet settings
and is limited to loyalty managers. Every response carries the impact of
the change on the balances in circulation: outstanding EnakPoint and
EnakCoin, their rupiah value, and the coins exchanged into points, before
and after. With ?dry_run=true nothing is saved and the response lists the
keys that would change, for the warning shown before saving.

Saving records each change in loyalty_setting_changes with who made it;
history can be filtered to one outlet. Changing the value leaves what was
already written alone. The diff behind saving and previewing is shared.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:26:16 +07:00

49 lines
1.6 KiB
Go

package router
import (
"testing"
"github.com/stretchr/testify/assert"
"apskel-pos-be/config"
"apskel-pos-be/internal/middleware"
)
// Gin panics at startup when two routes disagree on a path parameter's name at the
// same position (say /outlets/:id/x next to /outlets/:outlet_id/y). Registering every
// route here catches that in a test instead of on deploy. Handlers are nil: nothing is
// served, only registered.
func TestAllRoutesRegister(t *testing.T) {
r := &Router{
config: &config.Config{},
authMiddleware: middleware.NewAuthMiddleware(nil),
customerAuthMiddleware: middleware.NewCustomerAuthMiddleware("test"),
}
engine := r.Init()
registered := map[string]bool{}
for _, route := range engine.Routes() {
registered[route.Method+" "+route.Path] = true
}
for _, want := range []string{
"GET /api/v1/customer/wallet",
"GET /api/v1/customer/wallet/transactions",
"GET /api/v1/marketing/customers/:id/wallet",
"POST /api/v1/marketing/customers/:id/wallet/adjust",
"GET /api/v1/outlets/:outlet_id/loyalty-settings",
"PUT /api/v1/outlets/:outlet_id/loyalty-settings",
"GET /api/v1/marketing/loyalty-settings",
"PUT /api/v1/marketing/loyalty-settings",
"GET /api/v1/marketing/loyalty-settings/history",
"GET /api/v1/customer/pin/status",
"POST /api/v1/customer/pin/otp",
"POST /api/v1/customer/pin",
"PUT /api/v1/customer/pin",
"POST /api/v1/customer/pin/reset",
"DELETE /api/v1/marketing/customers/:id/pin",
"GET /api/v1/marketing/customers/:id/security-events",
} {
assert.True(t, registered[want], want)
}
}