Any frontmatter field whose value contains [[wikilinks]] now renders as a relationship chip automatically. Fields with plain-text values always render as editable properties, even if they were formerly hardcoded relationship keys. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
3.0 KiB
TypeScript
66 lines
3.0 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
import { sendShortcut } from './helpers'
|
|
|
|
async function openNoteViaQuickOpen(page: import('@playwright/test').Page, query: string) {
|
|
await page.locator('body').click()
|
|
await sendShortcut(page, 'p', ['Control'])
|
|
const searchInput = page.locator('input[placeholder="Search notes..."]')
|
|
await expect(searchInput).toBeVisible()
|
|
await searchInput.fill(query)
|
|
await page.waitForTimeout(500)
|
|
await page.keyboard.press('Enter')
|
|
await page.waitForTimeout(1000)
|
|
}
|
|
|
|
test.describe('Dynamic wikilink relationship detection', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.setViewportSize({ width: 1600, height: 900 })
|
|
await page.goto('/')
|
|
await page.waitForLoadState('networkidle')
|
|
})
|
|
|
|
test('wikilink fields render as relationships, plain-text fields as properties', async ({ page }) => {
|
|
// Open "Sponsorships" — has Has Measures/Has Procedures (custom wikilink arrays)
|
|
// and Status: Open (plain text)
|
|
await openNoteViaQuickOpen(page, 'Sponsorships')
|
|
|
|
// Wait for note to load — Status should render as editable property
|
|
const statusProp = page.locator('[data-testid="editable-property"]').filter({ hasText: 'Status' })
|
|
await expect(statusProp).toBeVisible({ timeout: 5000 })
|
|
await expect(statusProp.getByText('Open')).toBeVisible()
|
|
|
|
// 'Has Measures' has wikilinks → should NOT be in Properties
|
|
const measuresProp = page.locator('[data-testid="editable-property"]').filter({ hasText: 'Has Measures' })
|
|
await expect(measuresProp).not.toBeVisible()
|
|
|
|
// 'Has Measures' should appear as a relationship label
|
|
const measuresLabel = page.locator('span.font-mono-overline').filter({ hasText: 'Has Measures' })
|
|
await expect(measuresLabel).toBeVisible()
|
|
|
|
// 'Has Procedures' has wikilinks → should be in Relationships
|
|
const proceduresLabel = page.locator('span.font-mono-overline').filter({ hasText: 'Has Procedures' })
|
|
await expect(proceduresLabel).toBeVisible()
|
|
})
|
|
|
|
test('existing wikilink relationships still render correctly', async ({ page }) => {
|
|
// Open "Start Laputa App Project" — has Belongs to: [[24q4]], Owner: [[person-luca-rossi]]
|
|
await openNoteViaQuickOpen(page, 'Start Laputa App')
|
|
|
|
// Wait for note content to load
|
|
const statusProp = page.locator('[data-testid="editable-property"]').first()
|
|
await expect(statusProp).toBeVisible({ timeout: 5000 })
|
|
|
|
// 'Belongs to' has wikilink → should be in Relationships (not Properties)
|
|
const belongsToProp = page.locator('[data-testid="editable-property"]').filter({ hasText: 'Belongs to' })
|
|
await expect(belongsToProp).not.toBeVisible()
|
|
|
|
// 'Belongs to' should appear as a relationship label
|
|
const belongsToLabel = page.locator('span.font-mono-overline').filter({ hasText: 'Belongs to' })
|
|
await expect(belongsToLabel).toBeVisible()
|
|
|
|
// 'Owner' has wikilink → should be in Relationships
|
|
const ownerProp = page.locator('[data-testid="editable-property"]').filter({ hasText: 'Owner' })
|
|
await expect(ownerProp).not.toBeVisible()
|
|
})
|
|
})
|