149 lines
3.7 KiB
Go
149 lines
3.7 KiB
Go
package tests
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"mohportal/config"
|
|
"mohportal/handlers"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func setupRouter() *gin.Engine {
|
|
gin.SetMode(gin.TestMode)
|
|
router := gin.New()
|
|
|
|
// Health check endpoint
|
|
router.GET("/health", handlers.HealthCheck)
|
|
|
|
// API routes
|
|
api := router.Group("/api/v1")
|
|
{
|
|
tenants := api.Group("/tenants")
|
|
{
|
|
tenants.POST("/", handlers.CreateTenant)
|
|
tenants.GET("/", handlers.GetTenants)
|
|
tenants.GET("/:id", handlers.GetTenant)
|
|
}
|
|
|
|
auth := api.Group("/auth")
|
|
{
|
|
auth.POST("/login", handlers.Login)
|
|
auth.POST("/register", handlers.Register)
|
|
}
|
|
|
|
positions := api.Group("/positions")
|
|
{
|
|
positions.GET("/", handlers.GetPositions)
|
|
positions.GET("/:id", handlers.GetPosition)
|
|
positions.POST("/", handlers.CreatePosition)
|
|
}
|
|
|
|
applications := api.Group("/applications")
|
|
{
|
|
applications.GET("/", handlers.GetApplications)
|
|
applications.POST("/", handlers.CreateApplication)
|
|
}
|
|
|
|
resumes := api.Group("/resumes")
|
|
{
|
|
resumes.POST("/", handlers.UploadResume)
|
|
resumes.GET("/:id", handlers.GetResume)
|
|
}
|
|
}
|
|
|
|
return router
|
|
}
|
|
|
|
func TestHealthCheck(t *testing.T) {
|
|
router := setupRouter()
|
|
|
|
req, _ := http.NewRequest("GET", "/health", nil)
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
var response map[string]interface{}
|
|
err := json.Unmarshal(w.Body.Bytes(), &response)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "healthy", response["status"])
|
|
}
|
|
|
|
func TestCreateTenant(t *testing.T) {
|
|
router := setupRouter()
|
|
|
|
tenantData := map[string]string{
|
|
"name": "Test Tenant",
|
|
"slug": "test-tenant",
|
|
"description": "A test tenant for testing purposes",
|
|
}
|
|
|
|
jsonData, _ := json.Marshal(tenantData)
|
|
req, _ := http.NewRequest("POST", "/api/v1/tenants/", bytes.NewBuffer(jsonData))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// For now, just check that it doesn't return an internal server error
|
|
// since we don't have a connected DB in testing
|
|
assert.NotEqual(t, http.StatusInternalServerError, w.Code)
|
|
}
|
|
|
|
func TestGetTenants(t *testing.T) {
|
|
router := setupRouter()
|
|
|
|
req, _ := http.NewRequest("GET", "/api/v1/tenants/", nil)
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// For now, just check that it doesn't return an internal server error
|
|
assert.NotEqual(t, http.StatusInternalServerError, w.Code)
|
|
}
|
|
|
|
func TestCreateUser(t *testing.T) {
|
|
router := setupRouter()
|
|
|
|
userData := map[string]interface{}{
|
|
"tenant_id": "00000000-0000-0000-0000-000000000000", // dummy UUID
|
|
"email": "test@example.com",
|
|
"username": "testuser",
|
|
"first_name": "Test",
|
|
"last_name": "User",
|
|
"phone": "1234567890",
|
|
"role": "job_seeker",
|
|
"password": "password123",
|
|
}
|
|
|
|
jsonData, _ := json.Marshal(userData)
|
|
req, _ := http.NewRequest("POST", "/api/v1/auth/register", bytes.NewBuffer(jsonData))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// For now, just check that it doesn't return an internal server error
|
|
assert.NotEqual(t, http.StatusInternalServerError, w.Code)
|
|
}
|
|
|
|
func TestLogin(t *testing.T) {
|
|
router := setupRouter()
|
|
|
|
loginData := map[string]string{
|
|
"email": "test@example.com",
|
|
"password": "password123",
|
|
}
|
|
jsonData, _ := json.Marshal(loginData)
|
|
|
|
req, _ := http.NewRequest("POST", "/api/v1/auth/login", bytes.NewBuffer(jsonData))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// For now, just check that it doesn't return an internal server error
|
|
assert.NotEqual(t, http.StatusInternalServerError, w.Code)
|
|
} |