@pdtf/schemas 3.6.0-dev.3 → 3.6.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/charming-napier-57a77c/LICENSE +21 -0
- package/charming-napier-57a77c/README.md +430 -0
- package/charming-napier-57a77c/docs/sef25-extensions-ui-spec.md +355 -0
- package/charming-napier-57a77c/index.js +654 -0
- package/charming-napier-57a77c/package-lock.json +7297 -0
- package/charming-napier-57a77c/package.json +41 -0
- package/charming-napier-57a77c/src/examples/v1/exampleAddParticipantVouch.json +32 -0
- package/charming-napier-57a77c/src/examples/v1/exampleDocumentedVouch.json +40 -0
- package/charming-napier-57a77c/src/examples/v1/exampleElectronicRecord.json +30 -0
- package/charming-napier-57a77c/src/examples/v1/exampleTransaction.json +878 -0
- package/charming-napier-57a77c/src/examples/v1/exampleVouch.json +25 -0
- package/charming-napier-57a77c/src/examples/v2/exampleTransaction.json +901 -0
- package/charming-napier-57a77c/src/examples/v3/exampleAddParticipantVouch.json +38 -0
- package/charming-napier-57a77c/src/examples/v3/exampleCustomOverlay.json +55 -0
- package/charming-napier-57a77c/src/examples/v3/exampleCustomOverlay2.json +93 -0
- package/charming-napier-57a77c/src/examples/v3/exampleDocumentedVouch.json +47 -0
- package/charming-napier-57a77c/src/examples/v3/exampleElectronicRecord.json +36 -0
- package/charming-napier-57a77c/src/examples/v3/exampleTransaction.json +1038 -0
- package/charming-napier-57a77c/src/examples/v3/exampleVouch.json +32 -0
- package/charming-napier-57a77c/src/mappings/SendPropertyDetailsRequestSchema.json +1588 -0
- package/charming-napier-57a77c/src/mappings/adf.js +198 -0
- package/charming-napier-57a77c/src/schemas/v1/GeoJSON.json +1279 -0
- package/charming-napier-57a77c/src/schemas/v1/baspiNotes.html +102 -0
- package/charming-napier-57a77c/src/schemas/v1/energy-performance-certificate.json +124 -0
- package/charming-napier-57a77c/src/schemas/v1/freehold-information.json +2051 -0
- package/charming-napier-57a77c/src/schemas/v1/leasehold-information.json +2064 -0
- package/charming-napier-57a77c/src/schemas/v1/legal-information.json +1045 -0
- package/charming-napier-57a77c/src/schemas/v1/material-facts.json +2109 -0
- package/charming-napier-57a77c/src/schemas/v1/pdtf-transaction-search-results.json +40 -0
- package/charming-napier-57a77c/src/schemas/v1/pdtf-transaction.json +191 -0
- package/charming-napier-57a77c/src/schemas/v1/searches/drainage-and-water.json +261 -0
- package/charming-napier-57a77c/src/schemas/v1/searches/local-land-charges.json +69 -0
- package/charming-napier-57a77c/src/schemas/v1/searches/local-searches-required.json +857 -0
- package/charming-napier-57a77c/src/schemas/v1/searches.json +237 -0
- package/charming-napier-57a77c/src/schemas/v1/title-deed.json +841 -0
- package/charming-napier-57a77c/src/schemas/v2/baspiNotes.html +102 -0
- package/charming-napier-57a77c/src/schemas/v2/combined.json +37731 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/baspi.json +8132 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/con29DW.json +705 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/con29R.json +2956 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/fme1.json +1259 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/llc1.json +25 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/lpe1.json +2171 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/nts.json +326 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/oc1.json +2799 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/piq.json +3419 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/rds.json +3736 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/ta10.json +5306 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/ta6.json +4533 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/ta7.json +1045 -0
- package/charming-napier-57a77c/src/schemas/v2/pdtf-transaction.json +34351 -0
- package/charming-napier-57a77c/src/schemas/v2/skeleton.json +3973 -0
- package/charming-napier-57a77c/src/schemas/v3/combined.json +48153 -0
- package/charming-napier-57a77c/src/schemas/v3/compactSkeleton.txt +4457 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/README.md +299 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/baspi4.json +8027 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/baspi5.json +8177 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/con29DW.json +716 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/con29R.json +2981 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ac.json +333 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/as.json +74 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/dk.json +32 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/dr.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/er.json +85 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/fd.json +75 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/hi.json +51 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/hs.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ic.json +59 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/jk.json +96 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/la.json +85 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/lc.json +75 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ma.json +90 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/mc.json +38 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/mi.json +69 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/nd.json +43 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/oa.json +24 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/oc.json +57 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/pc.json +37 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ph.json +194 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/rw.json +68 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sb.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sc.json +129 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sd.json +63 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sf.json +74 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sl.json +68 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ta.json +240 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/tf.json +103 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/tr.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/wg.json +350 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/fme1.json +1266 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/llc1.json +25 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/lpe1.json +2199 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/nts.json +2157 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/nts2.json +2742 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ntsl.json +1813 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ntsl2.json +2217 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/oc1.json +2817 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/piq.json +3321 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/rds.json +3665 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/sef25.json +1639 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/sr24.json +38 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta10.json +4654 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta6.json +4568 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta6ed6.json +6537 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta7.json +1537 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta7ed5.json +1551 -0
- package/charming-napier-57a77c/src/schemas/v3/pdtf-transaction.json +41229 -0
- package/charming-napier-57a77c/src/schemas/v3/skeleton.json +5703 -0
- package/charming-napier-57a77c/src/schemas/verifiedClaims/README.md +21 -0
- package/charming-napier-57a77c/src/schemas/verifiedClaims/pdtf-verified-claims.json +447 -0
- package/charming-napier-57a77c/src/tests/v3/buyerCircumstances.test.js +543 -0
- package/charming-napier-57a77c/src/tests/v3/caching.test.js +591 -0
- package/charming-napier-57a77c/src/tests/v3/enquiries.test.js +1096 -0
- package/charming-napier-57a77c/src/tests/v3/extensionOverlays.test.js +1599 -0
- package/charming-napier-57a77c/src/tests/v3/offers.test.js +823 -0
- package/charming-napier-57a77c/src/tests/v3/patternProperties.test.js +688 -0
- package/charming-napier-57a77c/src/tests/v3/ta6ed6.test.js +2374 -0
- package/charming-napier-57a77c/src/tests/v3/ta7ed5.test.js +600 -0
- package/charming-napier-57a77c/src/tests/v3/transactionSchema.test.js +646 -0
- package/charming-napier-57a77c/src/tests/v3/verifiedClaimsValidator.test.js +195 -0
- package/charming-napier-57a77c/src/utils/compactSkeleton.js +84 -0
- package/charming-napier-57a77c/src/utils/countTokens.js +67 -0
- package/charming-napier-57a77c/src/utils/extractExtensionOverlays.js +624 -0
- package/charming-napier-57a77c/src/utils/extractOverlay.js +381 -0
- package/charming-napier-57a77c/src/utils/extractProperties.js +44 -0
- package/charming-napier-57a77c/src/utils/listPathTitles.js +36 -0
- package/charming-napier-57a77c/src/utils/minimalSkeleton.js +85 -0
- package/charming-napier-57a77c/src/utils/pathList.csv +903 -0
- package/charming-napier-57a77c/src/utils/pathSkeleton.js +181 -0
- package/keen-dewdney-6ae15b/LICENSE +21 -0
- package/keen-dewdney-6ae15b/README.md +334 -0
- package/keen-dewdney-6ae15b/index.js +557 -0
- package/keen-dewdney-6ae15b/package-lock.json +7296 -0
- package/keen-dewdney-6ae15b/package.json +39 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleAddParticipantVouch.json +32 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleDocumentedVouch.json +40 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleElectronicRecord.json +30 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleTransaction.json +878 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleVouch.json +25 -0
- package/keen-dewdney-6ae15b/src/examples/v2/exampleTransaction.json +901 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleAddParticipantVouch.json +35 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleCustomOverlay.json +55 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleCustomOverlay2.json +93 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleDocumentedVouch.json +44 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleElectronicRecord.json +33 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleTransaction.json +1034 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleVouch.json +29 -0
- package/keen-dewdney-6ae15b/src/mappings/SendPropertyDetailsRequestSchema.json +1588 -0
- package/keen-dewdney-6ae15b/src/mappings/adf.js +198 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/GeoJSON.json +1279 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/baspiNotes.html +102 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/energy-performance-certificate.json +124 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/freehold-information.json +2051 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/leasehold-information.json +2064 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/legal-information.json +1045 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/material-facts.json +2109 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/pdtf-transaction-search-results.json +40 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/pdtf-transaction.json +191 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches/drainage-and-water.json +261 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches/local-land-charges.json +69 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches/local-searches-required.json +857 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches.json +237 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/title-deed.json +841 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/baspiNotes.html +102 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/combined.json +37731 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/baspi.json +8132 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/con29DW.json +705 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/con29R.json +2956 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/fme1.json +1259 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/llc1.json +25 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/lpe1.json +2171 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/nts.json +326 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/oc1.json +2799 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/piq.json +3419 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/rds.json +3736 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta10.json +5306 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta6.json +4533 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta7.json +1045 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/pdtf-transaction.json +34351 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/skeleton.json +3973 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/combined.json +41720 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/compactSkeleton.txt +3325 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/README.md +299 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/baspi4.json +7872 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/baspi5.json +8019 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/con29DW.json +716 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/con29R.json +2981 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/as.json +72 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/dr.json +73 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/er.json +83 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/fd.json +72 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/hi.json +48 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/hs.json +71 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/jk.json +76 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/la.json +83 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/ma.json +87 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/mc.json +36 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/oa.json +22 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/oc.json +55 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sb.json +71 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sf.json +72 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sl.json +66 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/tf.json +100 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/fme1.json +1264 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/llc1.json +25 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/lpe1.json +2226 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/nts.json +2090 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/nts2.json +2678 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ntsl.json +1746 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ntsl2.json +2153 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/oc1.json +2817 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/piq.json +3276 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/rds.json +3552 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/sr24.json +38 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta10.json +4642 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta6.json +4501 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta7.json +1435 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/pdtf-transaction.json +37225 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/skeleton.json +4323 -0
- package/keen-dewdney-6ae15b/src/schemas/verifiedClaims/README.md +12 -0
- package/keen-dewdney-6ae15b/src/schemas/verifiedClaims/pdtf-verified-claims.json +431 -0
- package/keen-dewdney-6ae15b/src/tests/v3/caching.test.js +591 -0
- package/keen-dewdney-6ae15b/src/tests/v3/extensionOverlays.test.js +525 -0
- package/keen-dewdney-6ae15b/src/tests/v3/transactionSchema.test.js +574 -0
- package/keen-dewdney-6ae15b/src/tests/v3/verifiedClaimsValidator.test.js +128 -0
- package/keen-dewdney-6ae15b/src/utils/compactSkeleton.js +84 -0
- package/keen-dewdney-6ae15b/src/utils/countTokens.js +67 -0
- package/keen-dewdney-6ae15b/src/utils/extractExtensionOverlays.js +362 -0
- package/keen-dewdney-6ae15b/src/utils/extractOverlay.js +290 -0
- package/keen-dewdney-6ae15b/src/utils/extractProperties.js +44 -0
- package/keen-dewdney-6ae15b/src/utils/listPathTitles.js +36 -0
- package/keen-dewdney-6ae15b/src/utils/minimalSkeleton.js +85 -0
- package/keen-dewdney-6ae15b/src/utils/pathList.csv +903 -0
- package/keen-dewdney-6ae15b/src/utils/pathSkeleton.js +181 -0
- package/package.json +1 -1
- package/src/schemas/v3/combined.json +8 -15
- package/src/schemas/v3/overlays/baspi4.json +12 -7
- package/src/schemas/v3/overlays/baspi5.json +12 -7
- package/src/schemas/v3/overlays/extensions/ac.json +2 -1
- package/src/schemas/v3/overlays/extensions/dk.json +3 -2
- package/src/schemas/v3/overlays/extensions/ic.json +2 -1
- package/src/schemas/v3/overlays/extensions/lc.json +3 -2
- package/src/schemas/v3/overlays/extensions/mi.json +2 -1
- package/src/schemas/v3/overlays/extensions/nd.json +3 -2
- package/src/schemas/v3/overlays/extensions/pc.json +3 -2
- package/src/schemas/v3/overlays/extensions/ph.json +2 -1
- package/src/schemas/v3/overlays/extensions/rw.json +4 -3
- package/src/schemas/v3/overlays/extensions/sc.json +8 -4
- package/src/schemas/v3/overlays/extensions/sd.json +3 -2
- package/src/schemas/v3/overlays/extensions/tr.json +3 -2
- package/src/schemas/v3/overlays/extensions/wg.json +2 -1
- package/src/schemas/v3/overlays/lpe1.json +1 -1
- package/src/schemas/v3/overlays/nts.json +3 -1
- package/src/schemas/v3/overlays/nts2.json +3 -1
- package/src/schemas/v3/overlays/ntsl.json +3 -1
- package/src/schemas/v3/overlays/ntsl2.json +3 -1
- package/src/schemas/v3/overlays/piq.json +7 -5
- package/src/schemas/v3/overlays/rds.json +9 -6
- package/src/schemas/v3/overlays/ta10.json +0 -9
- package/src/schemas/v3/overlays/ta6.json +8 -4
- package/src/schemas/v3/overlays/ta6ed6.json +4 -2
- package/src/schemas/v3/pdtf-transaction.json +15 -18
- package/src/utils/extractExtensionOverlays.js +10 -1
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
const {
|
|
2
|
+
getTransactionSchema,
|
|
3
|
+
getSubschemaValidator,
|
|
4
|
+
} = require("../../../index.js");
|
|
5
|
+
const ta7ed5Overlay = require("../../schemas/v3/overlays/ta7ed5.json");
|
|
6
|
+
|
|
7
|
+
const schemaId =
|
|
8
|
+
"https://trust.propdata.org.uk/schemas/v3/pdtf-transaction.json";
|
|
9
|
+
|
|
10
|
+
const overlays = ["ta7ed5"];
|
|
11
|
+
|
|
12
|
+
const collectRequiredWithoutPropertyIssues = (schema) => {
|
|
13
|
+
const issues = [];
|
|
14
|
+
|
|
15
|
+
const walk = (node, path = "#") => {
|
|
16
|
+
if (!node || typeof node !== "object") return;
|
|
17
|
+
|
|
18
|
+
if (Array.isArray(node.required)) {
|
|
19
|
+
node.required.forEach((propertyName) => {
|
|
20
|
+
if (!node.properties?.[propertyName]) {
|
|
21
|
+
issues.push(`${path} requires ${propertyName}`);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
Object.entries(node.properties || {}).forEach(([key, value]) =>
|
|
27
|
+
walk(value, `${path}/properties/${key}`)
|
|
28
|
+
);
|
|
29
|
+
(node.oneOf || []).forEach((value, index) =>
|
|
30
|
+
walk(value, `${path}/oneOf/${index}`)
|
|
31
|
+
);
|
|
32
|
+
if (node.items) walk(node.items, `${path}/items`);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
walk(schema);
|
|
36
|
+
return issues;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Helper: navigate to a deeply nested property in the merged schema
|
|
40
|
+
const getSchemaProperty = (schema, dotPath) => {
|
|
41
|
+
return dotPath.split(".").reduce((obj, key) => obj?.[key], schema);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Base path to leasehold information (through the ownership discriminator)
|
|
45
|
+
// The /0/ element navigates through the array type to items, then
|
|
46
|
+
// leaseholdInformation is found in the Leasehold oneOf branch.
|
|
47
|
+
const leaseholdBase =
|
|
48
|
+
"/propertyPack/ownership/ownershipsToBeTransferred/0/leaseholdInformation";
|
|
49
|
+
|
|
50
|
+
describe("TA7 5th edition overlay", () => {
|
|
51
|
+
let schema;
|
|
52
|
+
|
|
53
|
+
beforeAll(() => {
|
|
54
|
+
schema = getTransactionSchema(schemaId, overlays);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// ---------------------------------------------------------------
|
|
58
|
+
// Schema structure tests
|
|
59
|
+
// ---------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
describe("overlay structure", () => {
|
|
62
|
+
test("merged schema requires address and ownership at propertyPack level", () => {
|
|
63
|
+
const required = schema.properties?.propertyPack?.required;
|
|
64
|
+
expect(required).toContain("address");
|
|
65
|
+
expect(required).toContain("ownership");
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("generated overlay exposes every TA7 edition 5 required property", () => {
|
|
69
|
+
expect(collectRequiredWithoutPropertyIssues(ta7ed5Overlay)).toEqual([]);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("leasehold branch requires the referenced ta7ed5 sections", () => {
|
|
73
|
+
const leaseholdOneOf =
|
|
74
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
75
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
76
|
+
|
|
77
|
+
// Find the Leasehold branch
|
|
78
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
79
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
80
|
+
);
|
|
81
|
+
expect(leaseholdBranch).toBeDefined();
|
|
82
|
+
|
|
83
|
+
const required =
|
|
84
|
+
leaseholdBranch.properties.leaseholdInformation.required;
|
|
85
|
+
expect(required).toContain("typeOfLeasehold");
|
|
86
|
+
expect(required).toContain("contactDetails");
|
|
87
|
+
expect(required).toContain("ownershipAndManagement");
|
|
88
|
+
expect(required).toContain("serviceCharge");
|
|
89
|
+
expect(required).toContain("disputes");
|
|
90
|
+
expect(required).toContain("buildingSafetyAct");
|
|
91
|
+
expect(required).toContain("enfranchisement");
|
|
92
|
+
expect(required).toContain("requiredDocuments");
|
|
93
|
+
expect(required).toContain("additionalInformation");
|
|
94
|
+
expect(required).toContain("confirmationOfAccuracy");
|
|
95
|
+
expect(required).not.toContain("buildingSafety");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// ---------------------------------------------------------------
|
|
100
|
+
// typeOfLeasehold discriminator (section 2.1)
|
|
101
|
+
// ---------------------------------------------------------------
|
|
102
|
+
|
|
103
|
+
describe("typeOfLeasehold discriminator", () => {
|
|
104
|
+
const path = `${leaseholdBase}/typeOfLeasehold`;
|
|
105
|
+
|
|
106
|
+
test("valid with a standard leasehold type", () => {
|
|
107
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
108
|
+
expect(validator({ leaseholdType: "Flat" })).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test("valid with Other when otherLeaseholdType provided", () => {
|
|
112
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
113
|
+
expect(
|
|
114
|
+
validator({
|
|
115
|
+
leaseholdType: "Other",
|
|
116
|
+
otherLeaseholdType: "Live/work unit",
|
|
117
|
+
})
|
|
118
|
+
).toBe(true);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("invalid with Other when otherLeaseholdType missing", () => {
|
|
122
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
123
|
+
expect(validator({ leaseholdType: "Other" })).toBe(false);
|
|
124
|
+
const err = validator.errors.find((e) =>
|
|
125
|
+
e.message.includes("otherLeaseholdType")
|
|
126
|
+
);
|
|
127
|
+
expect(err).toBeDefined();
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
test("invalid when leaseholdType missing entirely", () => {
|
|
131
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
132
|
+
expect(validator({})).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
test("invalid with unrecognised enum value", () => {
|
|
136
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
137
|
+
expect(validator({ leaseholdType: "Bungalow" })).toBe(false);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
// ---------------------------------------------------------------
|
|
142
|
+
// Managing agent contact required fields (section 4.1)
|
|
143
|
+
// ---------------------------------------------------------------
|
|
144
|
+
|
|
145
|
+
describe("managingAgent contact required fields", () => {
|
|
146
|
+
const path = `${leaseholdBase}/contactDetails/contacts/managingAgent`;
|
|
147
|
+
|
|
148
|
+
test("valid managing agent with all required fields", () => {
|
|
149
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
150
|
+
expect(
|
|
151
|
+
validator({
|
|
152
|
+
contact: {
|
|
153
|
+
nameOrOrganisation: "ABC Property Management",
|
|
154
|
+
address: { line1: "1 High St", postcode: "SW1A 1AA" },
|
|
155
|
+
emailAddress: "info@abc.co.uk",
|
|
156
|
+
},
|
|
157
|
+
})
|
|
158
|
+
).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test("invalid when contact is missing", () => {
|
|
162
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
163
|
+
expect(validator({})).toBe(false);
|
|
164
|
+
const err = validator.errors.find((e) =>
|
|
165
|
+
e.message.includes("contact")
|
|
166
|
+
);
|
|
167
|
+
expect(err).toBeDefined();
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test("invalid when contact.emailAddress is missing", () => {
|
|
171
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
172
|
+
expect(
|
|
173
|
+
validator({
|
|
174
|
+
contact: {
|
|
175
|
+
nameOrOrganisation: "ABC Property Management",
|
|
176
|
+
address: { line1: "1 High St", postcode: "SW1A 1AA" },
|
|
177
|
+
},
|
|
178
|
+
})
|
|
179
|
+
).toBe(false);
|
|
180
|
+
const err = validator.errors.find((e) =>
|
|
181
|
+
e.message.includes("emailAddress")
|
|
182
|
+
);
|
|
183
|
+
expect(err).toBeDefined();
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
test("invalid when contact.nameOrOrganisation is missing", () => {
|
|
187
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
188
|
+
expect(
|
|
189
|
+
validator({
|
|
190
|
+
contact: {
|
|
191
|
+
address: { line1: "1 High St", postcode: "SW1A 1AA" },
|
|
192
|
+
emailAddress: "info@abc.co.uk",
|
|
193
|
+
},
|
|
194
|
+
})
|
|
195
|
+
).toBe(false);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test("telephone is not required for managing agent contact", () => {
|
|
199
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
200
|
+
// Valid without telephone
|
|
201
|
+
expect(
|
|
202
|
+
validator({
|
|
203
|
+
contact: {
|
|
204
|
+
nameOrOrganisation: "ABC Property Management",
|
|
205
|
+
address: { line1: "1 High St", postcode: "SW1A 1AA" },
|
|
206
|
+
emailAddress: "info@abc.co.uk",
|
|
207
|
+
},
|
|
208
|
+
})
|
|
209
|
+
).toBe(true);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
// ---------------------------------------------------------------
|
|
214
|
+
// ownershipAndManagement required fields (section 4)
|
|
215
|
+
// ---------------------------------------------------------------
|
|
216
|
+
|
|
217
|
+
describe("ownershipAndManagement required fields", () => {
|
|
218
|
+
const path = `${leaseholdBase}/ownershipAndManagement`;
|
|
219
|
+
|
|
220
|
+
test("requires isManagingAgentEmployed, sellerOwnership, hasTenantCompanyDissolved", () => {
|
|
221
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
222
|
+
expect(validator({})).toBe(false);
|
|
223
|
+
|
|
224
|
+
const missingFields = validator.errors
|
|
225
|
+
.filter((e) => e.keyword === "required")
|
|
226
|
+
.map((e) => e.params.missingProperty);
|
|
227
|
+
|
|
228
|
+
expect(missingFields).toContain("isManagingAgentEmployed");
|
|
229
|
+
expect(missingFields).toContain("sellerOwnership");
|
|
230
|
+
expect(missingFields).toContain("hasTenantCompanyDissolved");
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test("isManagingAgentEmployed accepts Not applicable", () => {
|
|
234
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
235
|
+
validator({
|
|
236
|
+
isManagingAgentEmployed: "Not applicable",
|
|
237
|
+
sellerOwnership: { yesNo: "No" },
|
|
238
|
+
hasTenantCompanyDissolved: "No",
|
|
239
|
+
});
|
|
240
|
+
// Should not have enum errors for isManagingAgentEmployed
|
|
241
|
+
const enumErr = (validator.errors || []).find(
|
|
242
|
+
(e) =>
|
|
243
|
+
e.instancePath === "/isManagingAgentEmployed" &&
|
|
244
|
+
e.keyword === "enum"
|
|
245
|
+
);
|
|
246
|
+
expect(enumErr).toBeUndefined();
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// ---------------------------------------------------------------
|
|
251
|
+
// collectsGroundRent discriminator (section 4.3)
|
|
252
|
+
// ---------------------------------------------------------------
|
|
253
|
+
|
|
254
|
+
describe("collectsGroundRent discriminator", () => {
|
|
255
|
+
const path = `${leaseholdBase}/contactDetails/serviceContactAssignments/collectsGroundRent`;
|
|
256
|
+
|
|
257
|
+
test("requires collector field", () => {
|
|
258
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
259
|
+
expect(validator({})).toBe(false);
|
|
260
|
+
const err = validator.errors.find(
|
|
261
|
+
(e) =>
|
|
262
|
+
e.keyword === "required" &&
|
|
263
|
+
e.params.missingProperty === "collector"
|
|
264
|
+
);
|
|
265
|
+
expect(err).toBeDefined();
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
test("valid with Landlord (no otherCollector needed)", () => {
|
|
269
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
270
|
+
expect(validator({ collector: "Landlord" })).toBe(true);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
test("valid with Management Company (no otherCollector needed)", () => {
|
|
274
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
275
|
+
expect(validator({ collector: "Management Company" })).toBe(true);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
test("invalid with Other when otherCollector is missing", () => {
|
|
279
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
280
|
+
expect(validator({ collector: "Other" })).toBe(false);
|
|
281
|
+
const err = validator.errors.find(
|
|
282
|
+
(e) =>
|
|
283
|
+
e.keyword === "required" &&
|
|
284
|
+
e.params.missingProperty === "otherCollector"
|
|
285
|
+
);
|
|
286
|
+
expect(err).toBeDefined();
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
test("valid with Other when otherCollector is provided", () => {
|
|
290
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
291
|
+
expect(
|
|
292
|
+
validator({ collector: "Other", otherCollector: "The Crown Estate" })
|
|
293
|
+
).toBe(true);
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
test("invalid with Other when otherCollector is empty string", () => {
|
|
297
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
298
|
+
expect(
|
|
299
|
+
validator({ collector: "Other", otherCollector: "" })
|
|
300
|
+
).toBe(false);
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
test("invalid with unrecognised enum value", () => {
|
|
304
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
305
|
+
expect(validator({ collector: "The Pope" })).toBe(false);
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
test("invalid when collector is wrong type", () => {
|
|
309
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
310
|
+
expect(validator({ collector: 42 })).toBe(false);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
test("ta7ed5 overlay enum has exactly 3 values", () => {
|
|
314
|
+
const leaseholdOneOf =
|
|
315
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
316
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
317
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
318
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
319
|
+
);
|
|
320
|
+
const collector =
|
|
321
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
322
|
+
?.contactDetails?.properties?.serviceContactAssignments?.properties
|
|
323
|
+
?.collectsGroundRent?.properties?.collector;
|
|
324
|
+
expect(collector?.enum).toEqual([
|
|
325
|
+
"Landlord",
|
|
326
|
+
"Management Company",
|
|
327
|
+
"Other",
|
|
328
|
+
]);
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
// ---------------------------------------------------------------
|
|
333
|
+
// collectsbuildingInsurancePremiums discriminator (section 4.2)
|
|
334
|
+
// ---------------------------------------------------------------
|
|
335
|
+
|
|
336
|
+
describe("collectsbuildingInsurancePremiums discriminator", () => {
|
|
337
|
+
const path = `${leaseholdBase}/contactDetails/serviceContactAssignments/collectsbuildingInsurancePremiums`;
|
|
338
|
+
|
|
339
|
+
test("requires collector field", () => {
|
|
340
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
341
|
+
expect(validator({})).toBe(false);
|
|
342
|
+
const err = validator.errors.find(
|
|
343
|
+
(e) =>
|
|
344
|
+
e.keyword === "required" &&
|
|
345
|
+
e.params.missingProperty === "collector"
|
|
346
|
+
);
|
|
347
|
+
expect(err).toBeDefined();
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
test("valid with Freeholder (no otherCollector needed)", () => {
|
|
351
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
352
|
+
expect(validator({ collector: "Freeholder" })).toBe(true);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
test("valid with each non-Other enum value", () => {
|
|
356
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
357
|
+
for (const value of [
|
|
358
|
+
"Freeholder",
|
|
359
|
+
"Landlord",
|
|
360
|
+
"Management Company",
|
|
361
|
+
"Head Leaseholder",
|
|
362
|
+
"Seller",
|
|
363
|
+
]) {
|
|
364
|
+
expect(validator({ collector: value })).toBe(true);
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
test("invalid with Other when otherCollector is missing", () => {
|
|
369
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
370
|
+
expect(validator({ collector: "Other" })).toBe(false);
|
|
371
|
+
const err = validator.errors.find(
|
|
372
|
+
(e) =>
|
|
373
|
+
e.keyword === "required" &&
|
|
374
|
+
e.params.missingProperty === "otherCollector"
|
|
375
|
+
);
|
|
376
|
+
expect(err).toBeDefined();
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
test("valid with Other when otherCollector is provided", () => {
|
|
380
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
381
|
+
expect(
|
|
382
|
+
validator({
|
|
383
|
+
collector: "Other",
|
|
384
|
+
otherCollector: "Residents association",
|
|
385
|
+
})
|
|
386
|
+
).toBe(true);
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
test("invalid with Other when otherCollector is empty string", () => {
|
|
390
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
391
|
+
expect(
|
|
392
|
+
validator({ collector: "Other", otherCollector: "" })
|
|
393
|
+
).toBe(false);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
test("invalid with unrecognised enum value", () => {
|
|
397
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
398
|
+
expect(validator({ collector: "Managing Agent" })).toBe(false);
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
test("ta7ed5 overlay enum has exactly 6 values", () => {
|
|
402
|
+
const leaseholdOneOf =
|
|
403
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
404
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
405
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
406
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
407
|
+
);
|
|
408
|
+
const collector =
|
|
409
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
410
|
+
?.contactDetails?.properties?.serviceContactAssignments?.properties
|
|
411
|
+
?.collectsbuildingInsurancePremiums?.properties?.collector;
|
|
412
|
+
expect(collector?.enum).toEqual([
|
|
413
|
+
"Freeholder",
|
|
414
|
+
"Landlord",
|
|
415
|
+
"Management Company",
|
|
416
|
+
"Head Leaseholder",
|
|
417
|
+
"Seller",
|
|
418
|
+
"Other",
|
|
419
|
+
]);
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
// ---------------------------------------------------------------
|
|
424
|
+
// serviceContactAssignments required fields
|
|
425
|
+
// ---------------------------------------------------------------
|
|
426
|
+
|
|
427
|
+
describe("serviceContactAssignments required fields", () => {
|
|
428
|
+
const path = `${leaseholdBase}/contactDetails/serviceContactAssignments`;
|
|
429
|
+
|
|
430
|
+
test("requires collectsGroundRent and collectsbuildingInsurancePremiums", () => {
|
|
431
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
432
|
+
expect(validator({})).toBe(false);
|
|
433
|
+
|
|
434
|
+
const missingFields = validator.errors
|
|
435
|
+
.filter((e) => e.keyword === "required")
|
|
436
|
+
.map((e) => e.params.missingProperty);
|
|
437
|
+
|
|
438
|
+
expect(missingFields).toContain("collectsGroundRent");
|
|
439
|
+
expect(missingFields).toContain("collectsbuildingInsurancePremiums");
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
test("valid when both collection fields provided", () => {
|
|
443
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
444
|
+
expect(
|
|
445
|
+
validator({
|
|
446
|
+
collectsGroundRent: { collector: "Landlord" },
|
|
447
|
+
collectsbuildingInsurancePremiums: { collector: "Management Company" },
|
|
448
|
+
})
|
|
449
|
+
).toBe(true);
|
|
450
|
+
});
|
|
451
|
+
|
|
452
|
+
test("invalid when collectsGroundRent is a string instead of object", () => {
|
|
453
|
+
const validator = getSubschemaValidator(path, schemaId, overlays);
|
|
454
|
+
expect(
|
|
455
|
+
validator({
|
|
456
|
+
collectsGroundRent: "Landlord",
|
|
457
|
+
collectsbuildingInsurancePremiums: { collector: "Landlord" },
|
|
458
|
+
})
|
|
459
|
+
).toBe(false);
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
// ---------------------------------------------------------------
|
|
464
|
+
// Removed properties should not exist
|
|
465
|
+
// ---------------------------------------------------------------
|
|
466
|
+
|
|
467
|
+
describe("removed redundant properties", () => {
|
|
468
|
+
test("isGroundRentCollectedByManagingAgent does not exist in merged schema", () => {
|
|
469
|
+
const leaseholdOneOf =
|
|
470
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
471
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
472
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
473
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
474
|
+
);
|
|
475
|
+
const serviceContactAssignments =
|
|
476
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
477
|
+
?.contactDetails?.properties?.serviceContactAssignments;
|
|
478
|
+
|
|
479
|
+
expect(
|
|
480
|
+
serviceContactAssignments?.properties
|
|
481
|
+
?.isGroundRentCollectedByManagingAgent
|
|
482
|
+
).toBeUndefined();
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
test("managingAgentArrangesOrCollectsBuildingInsuranceCharges does not exist in merged schema", () => {
|
|
486
|
+
const leaseholdOneOf =
|
|
487
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
488
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
489
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
490
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
491
|
+
);
|
|
492
|
+
const serviceContactAssignments =
|
|
493
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
494
|
+
?.contactDetails?.properties?.serviceContactAssignments;
|
|
495
|
+
|
|
496
|
+
expect(
|
|
497
|
+
serviceContactAssignments?.properties
|
|
498
|
+
?.managingAgentArrangesOrCollectsBuildingInsuranceCharges
|
|
499
|
+
).toBeUndefined();
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
test("standalone groundRentOtherCollector does not exist (absorbed into collectsGroundRent oneOf)", () => {
|
|
503
|
+
const leaseholdOneOf =
|
|
504
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
505
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
506
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
507
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
508
|
+
);
|
|
509
|
+
const serviceContactAssignments =
|
|
510
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
511
|
+
?.contactDetails?.properties?.serviceContactAssignments;
|
|
512
|
+
|
|
513
|
+
expect(
|
|
514
|
+
serviceContactAssignments?.properties?.groundRentOtherCollector
|
|
515
|
+
).toBeUndefined();
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
test("standalone buildingInsurancePremiumsOtherCollector does not exist (absorbed into collectsbuildingInsurancePremiums oneOf)", () => {
|
|
519
|
+
const leaseholdOneOf =
|
|
520
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
521
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
522
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
523
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
524
|
+
);
|
|
525
|
+
const serviceContactAssignments =
|
|
526
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
527
|
+
?.contactDetails?.properties?.serviceContactAssignments;
|
|
528
|
+
|
|
529
|
+
expect(
|
|
530
|
+
serviceContactAssignments?.properties
|
|
531
|
+
?.buildingInsurancePremiumsOtherCollector
|
|
532
|
+
).toBeUndefined();
|
|
533
|
+
});
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
// ---------------------------------------------------------------
|
|
537
|
+
// Discriminator structure in the overlay
|
|
538
|
+
// ---------------------------------------------------------------
|
|
539
|
+
|
|
540
|
+
describe("discriminator oneOf structure", () => {
|
|
541
|
+
test("collectsGroundRent has discriminator on collector with two branches", () => {
|
|
542
|
+
const leaseholdOneOf =
|
|
543
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
544
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
545
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
546
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
547
|
+
);
|
|
548
|
+
const collectsGroundRent =
|
|
549
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
550
|
+
?.contactDetails?.properties?.serviceContactAssignments?.properties
|
|
551
|
+
?.collectsGroundRent;
|
|
552
|
+
|
|
553
|
+
expect(collectsGroundRent.discriminator).toEqual({
|
|
554
|
+
propertyName: "collector",
|
|
555
|
+
});
|
|
556
|
+
expect(collectsGroundRent.oneOf).toHaveLength(2);
|
|
557
|
+
|
|
558
|
+
// Branch 1: non-Other values
|
|
559
|
+
const branch1Enum =
|
|
560
|
+
collectsGroundRent.oneOf[0].properties.collector.enum;
|
|
561
|
+
expect(branch1Enum).not.toContain("Other");
|
|
562
|
+
|
|
563
|
+
// Branch 2: Other + required otherCollector
|
|
564
|
+
const branch2 = collectsGroundRent.oneOf[1];
|
|
565
|
+
expect(branch2.properties.collector.enum).toEqual(["Other"]);
|
|
566
|
+
expect(branch2.required).toContain("otherCollector");
|
|
567
|
+
expect(branch2.properties.otherCollector).toBeDefined();
|
|
568
|
+
expect(branch2.properties.otherCollector.type).toBe("string");
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
test("collectsbuildingInsurancePremiums has discriminator on collector with two branches", () => {
|
|
572
|
+
const leaseholdOneOf =
|
|
573
|
+
schema.properties?.propertyPack?.properties?.ownership?.properties
|
|
574
|
+
?.ownershipsToBeTransferred?.items?.oneOf;
|
|
575
|
+
const leaseholdBranch = leaseholdOneOf?.find((branch) =>
|
|
576
|
+
branch.properties?.ownershipType?.enum?.includes("Leasehold")
|
|
577
|
+
);
|
|
578
|
+
const collectsInsurance =
|
|
579
|
+
leaseholdBranch?.properties?.leaseholdInformation?.properties
|
|
580
|
+
?.contactDetails?.properties?.serviceContactAssignments?.properties
|
|
581
|
+
?.collectsbuildingInsurancePremiums;
|
|
582
|
+
|
|
583
|
+
expect(collectsInsurance.discriminator).toEqual({
|
|
584
|
+
propertyName: "collector",
|
|
585
|
+
});
|
|
586
|
+
expect(collectsInsurance.oneOf).toHaveLength(2);
|
|
587
|
+
|
|
588
|
+
// Branch 1: non-Other values (superset of all overlay values)
|
|
589
|
+
const branch1Enum =
|
|
590
|
+
collectsInsurance.oneOf[0].properties.collector.enum;
|
|
591
|
+
expect(branch1Enum).toHaveLength(7);
|
|
592
|
+
expect(branch1Enum).not.toContain("Other");
|
|
593
|
+
|
|
594
|
+
// Branch 2: Other + required otherCollector
|
|
595
|
+
const branch2 = collectsInsurance.oneOf[1];
|
|
596
|
+
expect(branch2.properties.collector.enum).toEqual(["Other"]);
|
|
597
|
+
expect(branch2.required).toContain("otherCollector");
|
|
598
|
+
});
|
|
599
|
+
});
|
|
600
|
+
});
|