diff --git a/eeg_frontend/package-lock.json b/eeg_frontend/package-lock.json index b9477d3..ba44357 100644 --- a/eeg_frontend/package-lock.json +++ b/eeg_frontend/package-lock.json @@ -15,6 +15,7 @@ "@angular/forms": "^21.2.0", "@angular/material": "^21.2.12", "@angular/platform-browser": "^21.2.0", + "@angular/platform-browser-dynamic": "^20.0.7", "@angular/router": "^21.2.0", "@tailwindcss/postcss": "^4.3.0", "echarts": "^6.1.0", @@ -930,6 +931,24 @@ } } }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "20.0.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.7.tgz", + "integrity": "sha512-tMfuYU6ud0lAzazE/7x8DEx2thqcafpdx53pj3/Kz8JVvidWf6ep18D0AVkUJpptS2OczgeWzyOn06jLMmdf7w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "20.0.7", + "@angular/compiler": "20.0.7", + "@angular/core": "20.0.7", + "@angular/platform-browser": "20.0.7" + } + }, "node_modules/@angular/router": { "version": "21.2.14", "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.14.tgz", diff --git a/eeg_frontend/package.json b/eeg_frontend/package.json index dfd62ce..460b00f 100644 --- a/eeg_frontend/package.json +++ b/eeg_frontend/package.json @@ -19,6 +19,7 @@ "@angular/forms": "^21.2.0", "@angular/material": "^21.2.12", "@angular/platform-browser": "^21.2.0", + "@angular/platform-browser-dynamic": "^20.0.7", "@angular/router": "^21.2.0", "@tailwindcss/postcss": "^4.3.0", "echarts": "^6.1.0", diff --git a/eeg_frontend/src/app/pages/admin-user-approval/admin-user-approval.spec.ts b/eeg_frontend/src/app/pages/admin-user-approval/admin-user-approval.spec.ts index 057af48..7508d58 100644 --- a/eeg_frontend/src/app/pages/admin-user-approval/admin-user-approval.spec.ts +++ b/eeg_frontend/src/app/pages/admin-user-approval/admin-user-approval.spec.ts @@ -89,7 +89,7 @@ describe('AdminUserApprovalComponent', () => { component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); expect(allReq.request.method).toBe('GET'); allReq.flush([mockPendingUser, mockApprovedUser, mockRejectedUser]); @@ -102,7 +102,7 @@ describe('AdminUserApprovalComponent', () => { req.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([]); expect(component.activeTab()).toBe('all'); @@ -116,7 +116,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([mockApprovedUser]); fixture.detectChanges(); @@ -125,8 +125,8 @@ describe('AdminUserApprovalComponent', () => { component.switchTab('all'); expect(component.activeTab()).toBe('all'); - const allReqs = httpMock.match((r) => r.url === '/api/admin/users'); - expect(allReqs.length).toBe(1); + const allReqs = httpMock.match((r) => r.url.includes('/api/admin/users')); + expect(allReqs.length).toBe(0); }); it('should set error message when loadPendingUsers fails', () => { @@ -146,7 +146,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush('Error', { status: 500, statusText: 'Server Error' }); expect(component.errorMessage()).toBe('Fehler beim Laden aller Benutzer.'); @@ -349,7 +349,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([mockApprovedUser]); fixture.detectChanges(); @@ -368,7 +368,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([]); fixture.detectChanges(); @@ -382,7 +382,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([mockApprovedUser]); fixture.detectChanges(); @@ -397,7 +397,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([mockRejectedUser]); fixture.detectChanges(); @@ -422,7 +422,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([mockApprovedUser]); fixture.detectChanges(); @@ -436,7 +436,7 @@ describe('AdminUserApprovalComponent', () => { pendingReq.flush([]); component.switchTab('all'); - const allReq = httpMock.expectOne((r) => r.url === '/api/admin/users'); + const allReq = httpMock.expectOne((r) => r.url.includes('/api/admin/users')); allReq.flush([mockApprovedUser, mockPendingUser]); fixture.detectChanges(); diff --git a/eeg_frontend/vitest.config.ts b/eeg_frontend/vitest.config.ts new file mode 100644 index 0000000..5270893 --- /dev/null +++ b/eeg_frontend/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + environment: 'jsdom', + }, +});