135 lines
4.1 KiB
TypeScript
135 lines
4.1 KiB
TypeScript
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|
import { MarkdownViewerComponent } from './markdown-viewer.component';
|
|
import { MarkdownService } from '../../services/markdown.service';
|
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
|
|
describe('MarkdownViewerComponent', () => {
|
|
let component: MarkdownViewerComponent;
|
|
let fixture: ComponentFixture<MarkdownViewerComponent>;
|
|
let markdownService: jasmine.SpyObj<MarkdownService>;
|
|
|
|
beforeEach(async () => {
|
|
const markdownServiceSpy = jasmine.createSpyObj('MarkdownService', ['render']);
|
|
|
|
await TestBed.configureTestingModule({
|
|
imports: [MarkdownViewerComponent],
|
|
providers: [
|
|
{ provide: MarkdownService, useValue: markdownServiceSpy }
|
|
]
|
|
}).compileComponents();
|
|
|
|
markdownService = TestBed.inject(MarkdownService) as jasmine.SpyObj<MarkdownService>;
|
|
fixture = TestBed.createComponent(MarkdownViewerComponent);
|
|
component = fixture.componentInstance;
|
|
});
|
|
|
|
it('should create', () => {
|
|
expect(component).toBeTruthy();
|
|
});
|
|
|
|
it('should render markdown content', () => {
|
|
const testMarkdown = '# Hello World';
|
|
const expectedHtml = '<h1>Hello World</h1>';
|
|
|
|
markdownService.render.and.returnValue(expectedHtml);
|
|
component.content = testMarkdown;
|
|
|
|
fixture.detectChanges();
|
|
|
|
expect(markdownService.render).toHaveBeenCalledWith(testMarkdown, [], undefined);
|
|
});
|
|
|
|
it('should detect excalidraw files', () => {
|
|
component.filePath = 'test.excalidraw.md';
|
|
fixture.detectChanges();
|
|
|
|
expect(component.isExcalidrawFile()).toBe(true);
|
|
});
|
|
|
|
it('should not detect regular markdown as excalidraw', () => {
|
|
component.filePath = 'test.md';
|
|
fixture.detectChanges();
|
|
|
|
expect(component.isExcalidrawFile()).toBe(false);
|
|
});
|
|
|
|
it('should toggle fullscreen mode', () => {
|
|
expect(component.isFullscreen()).toBe(false);
|
|
|
|
component.toggleFullscreen();
|
|
expect(component.isFullscreen()).toBe(true);
|
|
|
|
component.toggleFullscreen();
|
|
expect(component.isFullscreen()).toBe(false);
|
|
});
|
|
|
|
it('should handle render errors gracefully', () => {
|
|
const testMarkdown = '# Test';
|
|
markdownService.render.and.throwError('Render error');
|
|
|
|
component.content = testMarkdown;
|
|
fixture.detectChanges();
|
|
|
|
expect(component.error()).toContain('Erreur de rendu');
|
|
});
|
|
|
|
it('should clear error on content change', () => {
|
|
component.error.set('Previous error');
|
|
component.content = 'New content';
|
|
|
|
component.ngOnChanges({
|
|
content: {
|
|
currentValue: 'New content',
|
|
previousValue: 'Old content',
|
|
firstChange: false,
|
|
isFirstChange: () => false
|
|
}
|
|
});
|
|
|
|
expect(component.error()).toBeNull();
|
|
});
|
|
|
|
it('should show toolbar when showToolbar is true', () => {
|
|
component.showToolbar = true;
|
|
fixture.detectChanges();
|
|
|
|
const toolbar = fixture.nativeElement.querySelector('.markdown-viewer__toolbar');
|
|
expect(toolbar).toBeTruthy();
|
|
});
|
|
|
|
it('should hide toolbar when showToolbar is false', () => {
|
|
component.showToolbar = false;
|
|
fixture.detectChanges();
|
|
|
|
const toolbar = fixture.nativeElement.querySelector('.markdown-viewer__toolbar');
|
|
expect(toolbar).toBeFalsy();
|
|
});
|
|
|
|
it('should pass allNotes to markdown service', () => {
|
|
const testNotes = [
|
|
{ id: '1', title: 'Note 1', content: 'Content 1' },
|
|
{ id: '2', title: 'Note 2', content: 'Content 2' }
|
|
] as any[];
|
|
|
|
markdownService.render.and.returnValue('<p>Test</p>');
|
|
component.content = '# Test';
|
|
component.allNotes = testNotes;
|
|
|
|
fixture.detectChanges();
|
|
|
|
expect(markdownService.render).toHaveBeenCalledWith('# Test', testNotes, undefined);
|
|
});
|
|
|
|
it('should pass currentNote to markdown service', () => {
|
|
const currentNote = { id: '1', title: 'Current', content: 'Content' } as any;
|
|
|
|
markdownService.render.and.returnValue('<p>Test</p>');
|
|
component.content = '# Test';
|
|
component.currentNote = currentNote;
|
|
|
|
fixture.detectChanges();
|
|
|
|
expect(markdownService.render).toHaveBeenCalledWith('# Test', [], currentNote);
|
|
});
|
|
});
|