| 
									
										
										
										
											2025-05-09 22:35:36 +03:00
										 |  |  | import { ClassicEditor, Paragraph, _setModelData as setModelData, _getModelData as getModelData } from 'ckeditor5'; | 
					
						
							| 
									
										
										
										
											2025-05-10 02:23:22 +03:00
										 |  |  | import { afterEach, beforeEach, describe, it } from 'vitest'; | 
					
						
							|  |  |  | import { expect } from 'vitest'; | 
					
						
							| 
									
										
										
										
											2025-05-10 02:31:29 +03:00
										 |  |  | import MermaidEditing from '../../src/mermaidediting'; | 
					
						
							|  |  |  | import InsertMermaidCommand from '../../src/commands/insertMermaidCommand'; | 
					
						
							| 
									
										
										
										
											2022-03-04 13:39:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* global document */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe( 'InsertMermaidCommand', () => { | 
					
						
							|  |  |  | 	let domElement, editor, model, command; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	beforeEach( async () => { | 
					
						
							|  |  |  | 		domElement = document.createElement( 'div' ); | 
					
						
							|  |  |  | 		document.body.appendChild( domElement ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		editor = await ClassicEditor.create( domElement, { | 
					
						
							| 
									
										
										
										
											2025-05-10 02:25:11 +03:00
										 |  |  | 			licenseKey: "GPL", | 
					
						
							| 
									
										
										
										
											2022-03-04 13:39:39 +01:00
										 |  |  | 			plugins: [ | 
					
						
							|  |  |  | 				MermaidEditing, | 
					
						
							|  |  |  | 				Paragraph | 
					
						
							|  |  |  | 			] | 
					
						
							|  |  |  | 		} ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		model = editor.model; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		command = new InsertMermaidCommand( editor ); | 
					
						
							|  |  |  | 	} ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	afterEach( () => { | 
					
						
							|  |  |  | 		domElement.remove(); | 
					
						
							|  |  |  | 		return editor.destroy(); | 
					
						
							|  |  |  | 	} ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	describe( '#isEnabled', () => { | 
					
						
							|  |  |  | 		describe( 'should be false', () => { | 
					
						
							|  |  |  | 			it( 'when selection is inside mermaid', () => { | 
					
						
							|  |  |  | 				setModelData( model, | 
					
						
							|  |  |  | 					'<paragraph>foo</paragraph>' + | 
					
						
							|  |  |  | 					'<mermaid source="flowchart TB\nA --> B\nB --> C">[]</mermaid>' | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				expect( command.isEnabled ).to.be.false; | 
					
						
							|  |  |  | 			} ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			it( 'when mermaid is selected', () => { | 
					
						
							|  |  |  | 				setModelData( model, | 
					
						
							|  |  |  | 					'<paragraph>foo</paragraph>' + | 
					
						
							|  |  |  | 					'[<mermaid source="flowchart TB\nA --> B\nB --> C"></mermaid>]' | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				expect( command.isEnabled ).to.be.false; | 
					
						
							|  |  |  | 			} ); | 
					
						
							|  |  |  | 		} ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		describe( 'should be true', () => { | 
					
						
							|  |  |  | 			it( 'when text is selected', () => { | 
					
						
							|  |  |  | 				setModelData( model, | 
					
						
							|  |  |  | 					'<paragraph>[foo]</paragraph>' + | 
					
						
							|  |  |  | 					'<mermaid source="flowchart TB\nA --> B\nB --> C"></mermaid>' | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				expect( command.isEnabled ).to.be.true; | 
					
						
							|  |  |  | 			} ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			it( 'when mermaid is part of the selection', () => { | 
					
						
							|  |  |  | 				setModelData( model, | 
					
						
							|  |  |  | 					'<paragraph>[foo</paragraph>' + | 
					
						
							|  |  |  | 					'<mermaid source="flowchart TB\nA --> B\nB --> C"></mermaid>' + | 
					
						
							|  |  |  | 					'<paragraph>b]az</paragraph>' | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				expect( command.isEnabled ).to.be.true; | 
					
						
							|  |  |  | 			} ); | 
					
						
							|  |  |  | 		} ); | 
					
						
							|  |  |  | 	} ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	describe( 'execute()', () => { | 
					
						
							|  |  |  | 		it( 'should add sample mermaid', () => { | 
					
						
							|  |  |  | 			setModelData( model, | 
					
						
							|  |  |  | 				'<paragraph>[foo]</paragraph>' | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			command.execute(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			expect( getModelData( model, { withoutSelection: true } ) ).to.equal( | 
					
						
							|  |  |  | 				'<mermaid displayMode="split" source="flowchart TB\nA --> B\nB --> C"></mermaid>' | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} ); | 
					
						
							|  |  |  | 	} ); | 
					
						
							|  |  |  | } ); |