docs/reports/2026-10-05-full-model-comparison/forms-unit-tests.log
1bun test v1.4.0 (34cbb9a40)
2
3phone/countries.test.ts:
4(pass) formatPhoneCountryDisplay > is flag plus dial code [0.07ms]
5(pass) formatPhoneCountrySearchOption > is name, flag, and dial code [0.02ms]
6(pass) filterPhoneCountries > returns all countries for an empty query [0.02ms]
7(pass) filterPhoneCountries > matches country name substrings [0.11ms]
8(pass) filterPhoneCountries > matches dial codes [0.05ms]
9(pass) filterPhoneCountries > matches ISO codes [0.05ms]
10(pass) filterPhoneCountries > returns no rows for a non-match [0.07ms]
11
12phone/country-select.test.ts:
13(pass) mapIsoToCountrySelectValue > maps common ISO codes via Intl display names [0.38ms]
14(pass) mapIsoToCountrySelectValue > uses aliases when Intl names diverge from the preset [0.09ms]
15(pass) mapIsoToCountrySelectValue > prefers option value when label differs [0.03ms]
16(pass) mapIsoToCountrySelectValue > returns null for unknown or unmatched codes [0.16ms]
17
18web/lib/form-link.test.ts:
19(pass) isFormBuilderFormDoc detects migrated-form refs before hydration [0.03ms]
20(pass) isActionLinkFormReady accepts formBuilder stubs with only an id [0.01ms]
21(pass) isActionLinkFormReady still requires legacy inline fields [0.02ms]
22(pass) isFormBuilderFormDoc detects formBuilder step shape before hydration
23(pass) getActionLinkFormId prefers _id over _ref
24
25web/lib/business-email.test.ts:
26(pass) getEmailDomain extracts lowercase domain [0.03ms]
27(pass) isFreeEmailAddress blocks common consumer domains [0.02ms]
28(pass) getBusinessEmailValidationMessage uses default or custom copy [0.01ms]
29(pass) looksLikeEmail is a light shape check [0.01ms]
30(pass) FREE_EMAIL_DOMAINS covers the usual suspects [0.01ms]
31(pass) fieldRequiresBusinessEmail is on by default for email fields [0.01ms]
32
33sanity/studio/forms/form-conditions.test.ts:
34(pass) availableConditionSourcesForFieldSetMember > first member has no sources [0.06ms]
35(pass) availableConditionSourcesForFieldSetMember > second member sees the first field [0.03ms]
36(pass) availableConditionSourcesForFieldSetMember > dedupes duplicate field ids from earlier members [0.01ms]
37(pass) availableConditionSourcesForFieldSetMember > returns empty when member id is missing
38(pass) evaluateCondition > defaults to equals when operator is omitted [0.02ms]
39(pass) evaluateCondition > supports is not
40(pass) evaluateCondition > does not match empty values
41(pass) evaluateCondition > keeps any-value behavior when equals is blank
42(pass) formatConditionLabel > renders equals and not equals labels [0.02ms]
43(pass) formatConditionLabel > keeps has-a-value label when equals is blank
44
45sanity/studio/forms/form-terms-variant.test.ts:
46(pass) portableTextHasDynamicReference > detects dynamicReference markDefs [0.03ms]
47(pass) resolveUseSponsoredTerms > requires sponsored members on the form [0.17ms]
48(pass) shouldShowTermsMember > default cluster when not using sponsored [0.03ms]
49(pass) shouldShowTermsMember > sponsored cluster only when useSponsored
50(pass) shouldShowTermsMember > non-terms members always show [0.03ms]
51(pass) shouldShowTermsMember > tc-checkbox with legacy sponsored variant still shows when not useSponsored [0.09ms]
52(pass) applyTermsVariantInference > infers sponsored from dynamicReference prose [0.10ms]
53(pass) applyTermsVariantInference > leaves explicit termsVariant unchanged [0.02ms]
54(pass) effectiveTermsVariant > unset is default
55(pass) formHasSponsoredTermsMembers > counts dynamicReference prose without tag [0.01ms]
56
57sanity/studio/forms/form-builder-rich-text-overlay-merge.test.ts:
58(pass) mergeOverlayDocumentChange > merges portable-text array emitted as nextValue [0.04ms]
59(pass) mergeOverlayDocumentChange > merges partial object with content field
60(pass) mergeOverlayDocumentChange > merges span-level nextValue from portable text keystrokes [0.05ms]
61(pass) mergeOverlayDocumentChange > reads overlay document from patch channel snapshot [0.02ms]
62
63sanity/studio/forms/form-builder-rich-text-overlay-patches.test.ts:
64(pass) applyOverlayFormPatches > applies set patches at portable-text span path (FormBuilder shape) [0.12ms]
65
66sanity/studio/storage/serialize.test.ts:
67(pass) condition operator serialization > round-trips form step and member conditions [0.28ms]
68(pass) condition operator serialization > round-trips field set member conditions [0.04ms]
69
70sanity/studio/storage/formBuilderDeleteReferences.test.ts:
71(pass) field referencers include field sets (not forms when only nested in a set) [0.13ms]
72(pass) field referencers include forms when referenced directly [0.04ms]
73(pass) field set referencers include forms [0.03ms]
74(pass) form referencers include usedByPages [0.02ms]
75(pass) preset referencers include fields [0.02ms]
76(pass) unused field has no referencers [0.01ms]
77(pass) mergeFormDeleteReferencers dedupes GROQ pages with local usedByPages [0.08ms]
78
79 56 pass
80 0 fail
81 99 expect() calls
82Ran 56 tests across 10 files. [54.00ms]
83