/// /** * Test: wish("#default") in pattern test harness * * Verifies that the test runner sets up a defaultPattern with allPieces * so that patterns using wish({ query: "#default" }) can read/write allPieces. * * Run: deno task ct test packages/patterns/gideon-tests/wish-default.test.tsx --verbose */ import { action, computed, NAME, pattern, wish, Writable } from "commontools"; interface MinimalPiece { [NAME]?: string; } export default pattern(() => { // This is the core thing being tested: wish("#default") should resolve // and provide allPieces as a writable array const { allPieces } = wish<{ allPieces: Writable }>({ query: "#default" }).result; // Track state for assertions const initialLength = computed(() => allPieces?.get?.()?.length ?? -1); // Push a piece to allPieces const action_push_piece = action(() => { allPieces.push({ [NAME]: "Test Piece 1" } as any); }); const action_push_another = action(() => { allPieces.push({ [NAME]: "Test Piece 2" } as any); }); // Assertions const assert_allPieces_exists = computed(() => !!allPieces); const assert_initial_empty = computed(() => initialLength === 0); const assert_after_push_one = computed( () => allPieces?.get?.()?.length === 1, ); const assert_after_push_two = computed( () => allPieces?.get?.()?.length === 2, ); return { tests: [ // allPieces should be defined (wish resolved successfully) { assertion: assert_allPieces_exists }, // allPieces should start empty { assertion: assert_initial_empty }, // Push a piece { action: action_push_piece }, { assertion: assert_after_push_one }, // Push another { action: action_push_another }, { assertion: assert_after_push_two }, ], }; });