mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-22 04:26:23 +08:00
c882a8c5da
## New Features - **Markdown diff**: - Introduced block-level diffing for markdown content, enabling detection of insertions, deletions, and replacements between document versions. - Generate patch operations from markdown diff. - **Patch Renderer**: Transfer patch operations to a render diff which can be rendered into page body. - **Patch apply**:Added functionality to apply patch operations to documents, supporting block insertion, deletion, and content replacement. ## Refactors * Move `affine/shared/__tests__/utils` to `blocksuite/affine-shared/test-utils` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Introduced utilities for declarative creation and testing of document structures using template literals. * Added new functions and types for block-level markdown diffing and patch application. * Provided a utility to generate structured render diffs for markdown blocks. * Added a unified test-utils entry point for easier access to testing helpers. * **Bug Fixes** * Updated import paths in test files to use the new test-utils location. * **Documentation** * Improved example usage in documentation to reflect the new import paths for test utilities. * **Tests** * Added comprehensive test suites for markdown diffing, patch application, and render diff utilities. * **Chores** * Updated package dependencies and export maps to expose new test utilities. * Refactored internal test utilities organization for clarity and maintainability. <!-- end of auto-generated comment: release notes by coderabbit.ai --> > CLOSE AI-271 AI-272 AI-273
AFFiNE Test Tools
Structured Document Creation
affine-template.ts provides a concise way to create test documents, using a html-like syntax.
Basic Usage
import { affine } from '@blocksuite/affine-shared/test-utils';
// Create a simple document
const doc = affine`
<affine-page>
<affine-note>
<affine-paragraph>Hello, World!</affine-paragraph>
</affine-note>
</affine-page>
`;
Complex Structure Example
// Create a document with multiple notes and paragraphs
const doc = affine`
<affine-page title="My Test Page">
<affine-note>
<affine-paragraph>First paragraph</affine-paragraph>
<affine-paragraph>Second paragraph</affine-paragraph>
</affine-note>
<affine-note>
<affine-paragraph>Another note</affine-paragraph>
</affine-note>
</affine-page>
`;
Application in Tests
This tool is particularly suitable for creating documents with specific structures in test cases:
import { describe, expect, it } from 'vitest';
import { affine } from '../__tests__/utils/affine-template';
describe('My Test', () => {
it('should correctly handle document structure', () => {
const doc = affine`
<affine-page>
<affine-note>
<affine-paragraph>Test content</affine-paragraph>
</affine-note>
</affine-page>
`;
// Get blocks
const pages = doc.getBlocksByFlavour('affine:page');
const notes = doc.getBlocksByFlavour('affine:note');
const paragraphs = doc.getBlocksByFlavour('affine:paragraph');
expect(pages.length).toBe(1);
expect(notes.length).toBe(1);
expect(paragraphs.length).toBe(1);
// Perform more tests here...
});
});
Supported Block Types
Currently supports the following block types:
affine-page→affine:pageaffine-note→affine:noteaffine-paragraph→affine:paragraphaffine-list→affine:listaffine-image→affine:image