block types: 구분선/리스트 블록 스토어 및 유닛 테스트 추가
This commit is contained in:
@@ -3,6 +3,9 @@ import {
|
||||
createEditorStore,
|
||||
type TextBlockProps,
|
||||
type ButtonBlockProps,
|
||||
type ImageBlockProps,
|
||||
type DividerBlockProps,
|
||||
type ListBlockProps,
|
||||
} from "@/features/editor/state/editorStore";
|
||||
|
||||
// 에디터 상태 스토어에 대한 첫 TDD: 텍스트 블록 추가
|
||||
@@ -22,6 +25,48 @@ describe("editorStore", () => {
|
||||
expect(selectedBlockId).toBe(blocks[0].id);
|
||||
});
|
||||
|
||||
it("구분선 블록을 추가하면 기본 align/thickness 와 함께 추가되고 선택되어야 한다", () => {
|
||||
const store = createEditorStore();
|
||||
|
||||
store.getState().addDividerBlock();
|
||||
|
||||
const { blocks, selectedBlockId } = store.getState();
|
||||
|
||||
expect(blocks).toHaveLength(1);
|
||||
expect(blocks[0].type).toBe("divider");
|
||||
|
||||
const dividerProps = blocks[0].props as DividerBlockProps;
|
||||
expect(dividerProps.align).toBe("center");
|
||||
expect(dividerProps.thickness).toBe("thin");
|
||||
|
||||
expect((blocks[0] as any).sectionId).toBeNull();
|
||||
expect((blocks[0] as any).columnId).toBeNull();
|
||||
|
||||
expect(selectedBlockId).toBe(blocks[0].id);
|
||||
});
|
||||
|
||||
it("리스트 블록을 추가하면 기본 items/ordered/align 과 함께 추가되고 선택되어야 한다", () => {
|
||||
const store = createEditorStore();
|
||||
|
||||
store.getState().addListBlock();
|
||||
|
||||
const { blocks, selectedBlockId } = store.getState();
|
||||
|
||||
expect(blocks).toHaveLength(1);
|
||||
expect(blocks[0].type).toBe("list");
|
||||
|
||||
const listProps = blocks[0].props as ListBlockProps;
|
||||
expect(Array.isArray(listProps.items)).toBe(true);
|
||||
expect(listProps.items.length).toBeGreaterThanOrEqual(1);
|
||||
expect(listProps.ordered).toBe(false);
|
||||
expect(listProps.align).toBe("left");
|
||||
|
||||
expect((blocks[0] as any).sectionId).toBeNull();
|
||||
expect((blocks[0] as any).columnId).toBeNull();
|
||||
|
||||
expect(selectedBlockId).toBe(blocks[0].id);
|
||||
});
|
||||
|
||||
it("reorderBlocks 호출 시 블록 배열 순서가 변경되어야 한다", () => {
|
||||
const store = createEditorStore();
|
||||
|
||||
@@ -78,6 +123,27 @@ describe("editorStore", () => {
|
||||
expect(selectedBlockId).toBe(updatedBlocks[0].id);
|
||||
});
|
||||
|
||||
it("이미지 블록을 추가하면 기본 src/alt와 함께 추가되고 선택되어야 한다", () => {
|
||||
const store = createEditorStore();
|
||||
|
||||
store.getState().addImageBlock();
|
||||
|
||||
const { blocks, selectedBlockId } = store.getState();
|
||||
|
||||
expect(blocks).toHaveLength(1);
|
||||
expect(blocks[0].type).toBe("image");
|
||||
|
||||
const imageProps = blocks[0].props as ImageBlockProps;
|
||||
expect(imageProps.src).toBe("");
|
||||
expect(imageProps.alt).toBe("이미지 설명");
|
||||
|
||||
// 루트에서 추가한 경우에는 sectionId/columnId 가 null 이어야 한다.
|
||||
expect((blocks[0] as any).sectionId).toBeNull();
|
||||
expect((blocks[0] as any).columnId).toBeNull();
|
||||
|
||||
expect(selectedBlockId).toBe(blocks[0].id);
|
||||
});
|
||||
|
||||
it("섹션이 선택된 상태에서 텍스트 블록을 추가하면 해당 섹션의 첫 컬럼에 배치되어야 한다", () => {
|
||||
const store = createEditorStore();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user