Files
trouvetonprofile/src/app/shared/features/pdf-viewer/pdf-viewer.component.spec.ts
styve Lioumba b90e78e1b7
All checks were successful
Build Check / build (push) Successful in 3m8s
Build Check / build (pull_request) Successful in 3m19s
refacto : restructuration du projet
2025-12-23 09:06:41 +01:00

154 lines
4.8 KiB
TypeScript

import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PdfViewerComponent } from './pdf-viewer.component';
import { ProfileViewModel } from '../../../adapters/profiles/profile.presenter.model';
describe('PdfViewerComponent', () => {
let component: PdfViewerComponent;
let fixture: ComponentFixture<PdfViewerComponent>;
const mockProfileWithCv: ProfileViewModel = {
id: '123',
cv: 'cvfilename.pdf',
} as ProfileViewModel;
const mockProfileWithoutCv: ProfileViewModel = {
id: '123',
cv: '',
} as ProfileViewModel;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [PdfViewerComponent],
}).compileComponents();
fixture = TestBed.createComponent(PdfViewerComponent);
component = fixture.componentInstance;
});
it('should create', () => {
fixture.componentRef.setInput('profile', mockProfileWithCv);
fixture.detectChanges();
expect(component).toBeTruthy();
});
describe('CV URL generation', () => {
it('should generate correct URL when CV exists', async () => {
fixture.componentRef.setInput('profile', mockProfileWithCv);
fixture.detectChanges();
await fixture.whenStable();
const cvUrl = component['cvUrl']();
expect(cvUrl).toBeTruthy();
expect(cvUrl).toContain('cvfilename.pdf');
});
it('should return null when CV does not exist', async () => {
fixture.componentRef.setInput('profile', mockProfileWithoutCv);
fixture.detectChanges();
await fixture.whenStable();
const cvUrl = component['cvUrl']();
expect(cvUrl).toBeNull();
});
it('should handle profile with undefined cv', async () => {
const profileWithUndefinedCv = {
id: '123',
cv: '',
} as ProfileViewModel;
fixture.componentRef.setInput('profile', profileWithUndefinedCv);
fixture.detectChanges();
await fixture.whenStable();
const cvUrl = component['cvUrl']();
expect(cvUrl).toBeNull();
});
it('should return full URL when CV is already a complete URL', async () => {
const profileWithFullUrl = {
id: '123',
cv: 'https://example.com/cv.pdf',
} as ProfileViewModel;
fixture.componentRef.setInput('profile', profileWithFullUrl);
fixture.detectChanges();
await fixture.whenStable();
const cvUrl = component['cvUrl']();
expect(cvUrl).toBe('https://example.com/cv.pdf');
});
});
describe('hasCv computed', () => {
it('should return true when CV exists', async () => {
fixture.componentRef.setInput('profile', mockProfileWithCv);
fixture.detectChanges();
await fixture.whenStable();
expect(component['hasCv']()).toBe(true);
});
it('should return false when CV does not exist', async () => {
fixture.componentRef.setInput('profile', mockProfileWithoutCv);
fixture.detectChanges();
await fixture.whenStable();
expect(component['hasCv']()).toBe(false);
});
});
describe('Template rendering', () => {
it('should display PDF viewer when CV exists', async () => {
fixture.componentRef.setInput('profile', mockProfileWithCv);
fixture.detectChanges();
await fixture.whenStable();
const compiled = fixture.nativeElement as HTMLElement;
const pdfViewer = compiled.querySelector('pdf-viewer');
const noDataMessage = compiled.querySelector('h3');
expect(pdfViewer).toBeTruthy();
expect(noDataMessage?.textContent).not.toContain('Aucun CV disponible');
});
it('should display "no CV" message when CV does not exist', async () => {
fixture.componentRef.setInput('profile', mockProfileWithoutCv);
fixture.detectChanges();
await fixture.whenStable();
const compiled = fixture.nativeElement as HTMLElement;
const pdfViewer = compiled.querySelector('pdf-viewer');
const messageTitle = compiled.querySelector('h3');
expect(pdfViewer).toBeNull();
expect(messageTitle?.textContent?.trim()).toBe('Aucun CV disponible');
});
it('should display download button when CV exists', async () => {
fixture.componentRef.setInput('profile', mockProfileWithCv);
fixture.detectChanges();
await fixture.whenStable();
const compiled = fixture.nativeElement as HTMLElement;
const downloadButton = compiled.querySelector('a[download]');
expect(downloadButton).toBeTruthy();
expect(downloadButton?.getAttribute('href')).toBeTruthy();
});
it('should not display download button when CV does not exist', async () => {
fixture.componentRef.setInput('profile', mockProfileWithoutCv);
fixture.detectChanges();
await fixture.whenStable();
const compiled = fixture.nativeElement as HTMLElement;
const downloadButton = compiled.querySelector('a[download]');
expect(downloadButton).toBeNull();
});
});
});