@@ -354,277 +354,7 @@ jobs:
354354 curl -f http://localhost:8086/actuator/health || echo "Auth service not ready"
355355 curl -f http://localhost:8084/actuator/health || echo "Document service not ready"
356356
357- # Job 6: Authentication & Authorization Functionality Tests
358- auth-functionality-tests :
359- name : Authentication & Authorization Functionality
360- runs-on : ubuntu-latest
361- timeout-minutes : 15
362-
363- services :
364- postgres :
365- image : postgres:15
366- env :
367- POSTGRES_DB : auth_test
368- POSTGRES_USER : test
369- POSTGRES_PASSWORD : test
370- ports :
371- - 5432:5432
372- options : >-
373- --health-cmd "pg_isready -U test -d auth_test"
374- --health-interval 10s
375- --health-timeout 5s
376- --health-retries 5
377-
378- steps :
379- - name : Checkout code
380- uses : actions/checkout@v4
381-
382- - name : Setup Node.js
383- uses : actions/setup-node@v4
384- with :
385- node-version : ${{ env.NODE_VERSION }}
386- cache : ' npm'
387- cache-dependency-path : client/package-lock.json
388-
389- - name : Setup Java
390- uses : actions/setup-java@v4
391- with :
392- java-version : ${{ env.JAVA_VERSION }}
393- distribution : ' temurin'
394-
395- - name : Start Auth Service
396- run : |
397- cd microservices/auth-service
398- chmod +x gradlew
399- ./gradlew bootRun &
400- echo $! > auth-service.pid
401-
402- # Wait for service to start
403- timeout 60 bash -c 'until curl -f http://localhost:8086/actuator/health; do sleep 5; done' || echo 'Auth service health check failed'
404-
405- - name : Test client-side authentication
406- run : |
407- cd client
408- npm ci
409-
410- # Create focused auth test
411- cat > src/test/auth-functionality.test.ts << 'EOF'
412- import { describe, it, expect } from 'vitest'
413- import { server } from './mocks/server'
414- import { http, HttpResponse } from 'msw'
415-
416- describe('Authentication Functionality', () => {
417- it('should handle login flow', async () => {
418- const loginData = {
419- username: 'testuser',
420- password: 'password123'
421- }
422-
423- server.use(
424- http.post('/api/auth/login', async ({ request }) => {
425- const body = await request.json()
426- expect(body).toEqual(loginData)
427- return HttpResponse.json({
428- token: 'test-jwt-token',
429- user: { id: 1, username: 'testuser' }
430- })
431- })
432- )
433-
434- const response = await fetch('/api/auth/login', {
435- method: 'POST',
436- headers: { 'Content-Type': 'application/json' },
437- body: JSON.stringify(loginData)
438- })
439-
440- expect(response.status).toBe(200)
441- const result = await response.json()
442- expect(result.token).toBe('test-jwt-token')
443- })
444-
445- it('should handle JWT token validation', async () => {
446- server.use(
447- http.get('/api/auth/me', ({ request }) => {
448- const authHeader = request.headers.get('Authorization')
449- if (!authHeader || !authHeader.startsWith('Bearer ')) {
450- return HttpResponse.json({ error: 'Unauthorized' }, { status: 401 })
451- }
452- return HttpResponse.json({ id: 1, username: 'testuser' })
453- })
454- )
455-
456- # Test with valid token
457- const validResponse = await fetch('/api/auth/me', {
458- headers: { Authorization: 'Bearer valid-token' }
459- })
460- expect(validResponse.status).toBe(200)
461-
462- # Test without token
463- const invalidResponse = await fetch('/api/auth/me')
464- expect(invalidResponse.status).toBe(401)
465- })
466- })
467- EOF
468-
469- npm test -- src/test/auth-functionality.test.ts
470-
471- - name : Cleanup
472- if : always()
473- run : |
474- if [ -f microservices/auth-service/auth-service.pid ]; then
475- kill $(cat microservices/auth-service/auth-service.pid) || true
476- fi
477-
478- # Job 7: Document Management Functionality Tests
479- document-functionality-tests :
480- name : Document Management Functionality
481- runs-on : ubuntu-latest
482- timeout-minutes : 20
483-
484- services :
485- postgres :
486- image : postgres:15
487- env :
488- POSTGRES_DB : document_test
489- POSTGRES_USER : test
490- POSTGRES_PASSWORD : test
491- ports :
492- - 5432:5432
493- options : >-
494- --health-cmd "pg_isready -U test -d document_test"
495- --health-interval 10s
496- --health-timeout 5s
497- --health-retries 5
498-
499- steps :
500- - name : Checkout code
501- uses : actions/checkout@v4
502-
503- - name : Setup Node.js
504- uses : actions/setup-node@v4
505- with :
506- node-version : ${{ env.NODE_VERSION }}
507- cache : ' npm'
508- cache-dependency-path : client/package-lock.json
509-
510- - name : Setup Java
511- uses : actions/setup-java@v4
512- with :
513- java-version : ${{ env.JAVA_VERSION }}
514- distribution : ' temurin'
515-
516- - name : Start Document Service
517- run : |
518- cd microservices/document-service
519- chmod +x gradlew
520- ./gradlew bootRun &
521- echo $! > document-service.pid
522-
523- # Wait for service to start
524- timeout 60 bash -c 'until curl -f http://localhost:8084/actuator/health; do sleep 5; done' || echo 'Document service health check failed'
525-
526- - name : Test document upload functionality
527- run : |
528- cd client
529- npm ci
530-
531- # Create test document
532- echo "This is a test document for upload testing." > test-document.txt
533-
534- # Create focused document test
535- cat > src/test/document-functionality.test.ts << 'EOF'
536- import { describe, it, expect } from 'vitest'
537- import { server } from './mocks/server'
538- import { http, HttpResponse } from 'msw'
539-
540- describe('Document Management Functionality', () => {
541- it('should handle file upload', async () => {
542- server.use(
543- http.post('/api/documents/upload', async ({ request }) => {
544- const formData = await request.formData()
545- const file = formData.get('file') as File
546-
547- expect(file).toBeDefined()
548- expect(file.name).toBe('test-document.txt')
549- expect(file.type).toBe('text/plain')
550-
551- return HttpResponse.json({
552- id: 1,
553- filename: file.name,
554- status: 'UPLOADED',
555- size: file.size,
556- contentType: file.type
557- })
558- })
559- )
560-
561- const testFile = new File(['test content'], 'test-document.txt', { type: 'text/plain' })
562- const formData = new FormData()
563- formData.append('file', testFile)
564-
565- const response = await fetch('/api/documents/upload', {
566- method: 'POST',
567- body: formData
568- })
569-
570- expect(response.status).toBe(200)
571- const result = await response.json()
572- expect(result.filename).toBe('test-document.txt')
573- expect(result.status).toBe('UPLOADED')
574- })
575-
576- it('should validate file types', async () => {
577- server.use(
578- http.post('/api/documents/upload', async ({ request }) => {
579- const formData = await request.formData()
580- const file = formData.get('file') as File
581-
582- if (!['application/pdf', 'text/plain'].includes(file.type)) {
583- return HttpResponse.json(
584- { error: 'Unsupported file type' },
585- { status: 415 }
586- )
587- }
588-
589- return HttpResponse.json({ id: 1, filename: file.name })
590- })
591- )
592-
593- # Test valid file type
594- const validFile = new File(['content'], 'test.pdf', { type: 'application/pdf' })
595- const validFormData = new FormData()
596- validFormData.append('file', validFile)
597-
598- const validResponse = await fetch('/api/documents/upload', {
599- method: 'POST',
600- body: validFormData
601- })
602- expect(validResponse.status).toBe(200)
603-
604- # Test invalid file type
605- const invalidFile = new File(['content'], 'test.exe', { type: 'application/exe' })
606- const invalidFormData = new FormData()
607- invalidFormData.append('file', invalidFile)
608-
609- const invalidResponse = await fetch('/api/documents/upload', {
610- method: 'POST',
611- body: invalidFormData
612- })
613- expect(invalidResponse.status).toBe(415)
614- })
615- })
616- EOF
617-
618- npm test -- src/test/document-functionality.test.ts
619-
620- - name : Cleanup
621- if : always()
622- run : |
623- if [ -f microservices/document-service/document-service.pid ]; then
624- kill $(cat microservices/document-service/document-service.pid) || true
625- fi
626-
627- # Job 8: AI Features Functionality Tests
357+ # Job 6: AI Features Functionality Tests
628358 ai-functionality-tests :
629359 name : AI Features Functionality
630360 runs-on : ubuntu-latest
@@ -727,7 +457,7 @@ jobs:
727457 kill $(cat genAi/genai-service.pid) || true
728458 fi
729459
730- # Job 9 : Error Handling & Recovery Tests
460+ # Job 7 : Error Handling & Recovery Tests
731461 error-handling-tests :
732462 name : Error Handling & Recovery
733463 runs-on : ubuntu-latest
@@ -813,7 +543,7 @@ jobs:
813543
814544 npm test -- src/test/error-handling.test.ts
815545
816- # Job 10 : Security Tests
546+ # Job 8 : Security Tests
817547 security-tests :
818548 name : Security Tests
819549 runs-on : ubuntu-latest
@@ -844,7 +574,7 @@ jobs:
844574 base : main
845575 head : HEAD
846576
847- # Job 11 : Performance Tests
577+ # Job 9 : Performance Tests
848578 performance-tests :
849579 name : Performance Tests
850580 runs-on : ubuntu-latest
@@ -895,11 +625,11 @@ jobs:
895625 # Run load test (will fail without running services, but validates config)
896626 k6 run --vus 1 --duration 10s load-test.js || true
897627
898- # Job 12 : Test Summary
628+ # Job 10 : Test Summary
899629 test-summary :
900630 name : Test Summary
901631 runs-on : ubuntu-latest
902- needs : [client-tests, genai-tests, auth-service-tests, document-service-tests, integration-tests, auth-functionality-tests, document-functionality-tests, ai-functionality-tests, error-handling-tests, security-tests]
632+ needs : [client-tests, genai-tests, auth-service-tests, document-service-tests, integration-tests, ai-functionality-tests, error-handling-tests, security-tests]
903633 if : always()
904634
905635 steps :
@@ -951,17 +681,6 @@ jobs:
951681 echo "❌ Security Tests: FAILED" >> test-summary.md
952682 fi
953683
954- if [ "${{ needs.auth-functionality-tests.result }}" = "success" ]; then
955- echo "✅ Authentication Functionality Tests: PASSED" >> test-summary.md
956- else
957- echo "❌ Authentication Functionality Tests: FAILED" >> test-summary.md
958- fi
959-
960- if [ "${{ needs.document-functionality-tests.result }}" = "success" ]; then
961- echo "✅ Document Management Functionality Tests: PASSED" >> test-summary.md
962- else
963- echo "❌ Document Management Functionality Tests: FAILED" >> test-summary.md
964- fi
965684
966685 if [ "${{ needs.ai-functionality-tests.result }}" = "success" ]; then
967686 echo "✅ AI Features Functionality Tests: PASSED" >> test-summary.md
@@ -1003,7 +722,7 @@ jobs:
1003722 body: summary
1004723 });
1005724
1006- # Job 13 : Cleanup
725+ # Job 11 : Cleanup
1007726 cleanup :
1008727 name : Cleanup
1009728 runs-on : ubuntu-latest
0 commit comments