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)
 | 
						|
} |