Inicial
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
package auth_test
|
||||
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/techxcar/backend/internal/auth"
|
||||
)
|
||||
|
||||
func TestRequireAuth_missingHeader(t *testing.T) {
|
||||
app := fiber.New()
|
||||
app.Get("/protected", auth.RequireAuth(testSecret), func(c *fiber.Ctx) error {
|
||||
return c.SendString("ok")
|
||||
})
|
||||
|
||||
req := httptest.NewRequest("GET", "/protected", nil)
|
||||
resp, err := app.Test(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 401, resp.StatusCode)
|
||||
}
|
||||
|
||||
func TestRequireAuth_validToken(t *testing.T) {
|
||||
token, _ := auth.GenerateAccessToken("user-1", "tenant-1", "manager", testSecret)
|
||||
|
||||
app := fiber.New()
|
||||
app.Get("/protected", auth.RequireAuth(testSecret), func(c *fiber.Ctx) error {
|
||||
claims := c.Locals("claims").(*auth.Claims)
|
||||
return c.SendString(claims.UserID)
|
||||
})
|
||||
|
||||
req := httptest.NewRequest("GET", "/protected", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, err := app.Test(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 200, resp.StatusCode)
|
||||
}
|
||||
|
||||
func TestRequireAuth_invalidToken(t *testing.T) {
|
||||
app := fiber.New()
|
||||
app.Get("/protected", auth.RequireAuth(testSecret), func(c *fiber.Ctx) error {
|
||||
return c.SendString("ok")
|
||||
})
|
||||
|
||||
req := httptest.NewRequest("GET", "/protected", nil)
|
||||
req.Header.Set("Authorization", "Bearer invalid.token.here")
|
||||
resp, err := app.Test(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 401, resp.StatusCode)
|
||||
}
|
||||
|
||||
func TestRequireRole_allowed(t *testing.T) {
|
||||
token, _ := auth.GenerateAccessToken("user-1", "", "super_admin", testSecret)
|
||||
|
||||
app := fiber.New()
|
||||
app.Get("/admin",
|
||||
auth.RequireAuth(testSecret),
|
||||
auth.RequireRole("super_admin"),
|
||||
func(c *fiber.Ctx) error { return c.SendString("ok") },
|
||||
)
|
||||
|
||||
req := httptest.NewRequest("GET", "/admin", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, err := app.Test(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 200, resp.StatusCode)
|
||||
}
|
||||
|
||||
func TestRequireRole_forbidden(t *testing.T) {
|
||||
token, _ := auth.GenerateAccessToken("user-1", "t-1", "technician", testSecret)
|
||||
|
||||
app := fiber.New()
|
||||
app.Get("/admin",
|
||||
auth.RequireAuth(testSecret),
|
||||
auth.RequireRole("super_admin", "tenant_admin"),
|
||||
func(c *fiber.Ctx) error { return c.SendString("ok") },
|
||||
)
|
||||
|
||||
req := httptest.NewRequest("GET", "/admin", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
resp, err := app.Test(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 403, resp.StatusCode)
|
||||
}
|
||||
|
||||
func TestRequireRole_allowsMatchingRole(t *testing.T) {
|
||||
app := fiber.New()
|
||||
app.Use(func(c *fiber.Ctx) error {
|
||||
c.Locals("claims", &auth.Claims{Role: "tenant_admin"})
|
||||
return c.Next()
|
||||
})
|
||||
app.Get("/test", auth.RequireRole("tenant_admin"), func(c *fiber.Ctx) error {
|
||||
return c.SendStatus(200)
|
||||
})
|
||||
req := httptest.NewRequest("GET", "/test", nil)
|
||||
resp, err := app.Test(req)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 200, resp.StatusCode)
|
||||
}
|
||||
|
||||
func TestRequireRole_rejectsMismatch(t *testing.T) {
|
||||
app := fiber.New()
|
||||
app.Use(func(c *fiber.Ctx) error {
|
||||
c.Locals("claims", &auth.Claims{Role: "technician"})
|
||||
return c.Next()
|
||||
})
|
||||
app.Get("/test", auth.RequireRole("super_admin"), func(c *fiber.Ctx) error {
|
||||
return c.SendStatus(200)
|
||||
})
|
||||
req := httptest.NewRequest("GET", "/test", nil)
|
||||
resp, err := app.Test(req)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 403, resp.StatusCode)
|
||||
}
|
||||
Reference in New Issue
Block a user