@tellescope/sdk 2.0.0-beta.0 → 2.0.0-beta.2
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/CLAUDE.md +24 -0
- package/env.example +6 -0
- package/lib/cjs/sdk.d.ts +376 -3
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +1 -0
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts +22 -0
- package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.js +506 -0
- package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/enduser_fields_sync.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/enduser_fields_sync.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/enduser_fields_sync.test.js +3 -1
- package/lib/cjs/tests/api_tests/enduser_fields_sync.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.js +3 -1
- package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/form_vital_reading.test.d.ts +7 -0
- package/lib/cjs/tests/api_tests/form_vital_reading.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/form_vital_reading.test.js +461 -0
- package/lib/cjs/tests/api_tests/form_vital_reading.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/journey_statistics_cache.test.d.ts +26 -0
- package/lib/cjs/tests/api_tests/journey_statistics_cache.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/journey_statistics_cache.test.js +232 -0
- package/lib/cjs/tests/api_tests/journey_statistics_cache.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/journey_step_manual_count.test.d.ts +34 -0
- package/lib/cjs/tests/api_tests/journey_step_manual_count.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/journey_step_manual_count.test.js +243 -0
- package/lib/cjs/tests/api_tests/journey_step_manual_count.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/load_threads_care_team.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/load_threads_care_team.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/load_threads_care_team.test.js +3 -1
- package/lib/cjs/tests/api_tests/load_threads_care_team.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js +139 -9
- package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/organization_signup.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/organization_signup.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/organization_signup.test.js +3 -1
- package/lib/cjs/tests/api_tests/organization_signup.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.d.ts +7 -0
- package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.js +571 -0
- package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/programs.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/programs.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/programs.test.js +73 -17
- package/lib/cjs/tests/api_tests/programs.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.d.ts +7 -0
- package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.js +733 -0
- package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js +58 -48
- package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.js +3 -1
- package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.js +3 -1
- package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.js +3 -1
- package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js +424 -39
- package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.js +2 -2
- package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js +3 -1
- package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/session_for_join_link.test.d.ts +10 -0
- package/lib/cjs/tests/api_tests/session_for_join_link.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/session_for_join_link.test.js +147 -0
- package/lib/cjs/tests/api_tests/session_for_join_link.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/set_fields_order_templates.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/set_fields_order_templates.test.js +191 -88
- package/lib/cjs/tests/api_tests/set_fields_order_templates.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/stripe_checkout_items.test.d.ts +17 -0
- package/lib/cjs/tests/api_tests/stripe_checkout_items.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/stripe_checkout_items.test.js +219 -0
- package/lib/cjs/tests/api_tests/stripe_checkout_items.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.d.ts +5 -0
- package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.js +396 -0
- package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.js +3 -1
- package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/totp_mfa.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/totp_mfa.test.js +37 -31
- package/lib/cjs/tests/api_tests/totp_mfa.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/trigger_contains_matching.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/trigger_contains_matching.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/trigger_contains_matching.test.js +3 -1
- package/lib/cjs/tests/api_tests/trigger_contains_matching.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.js +3 -1
- package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.d.ts +3 -1
- package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.js +3 -1
- package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/vitl_push.test.d.ts +7 -0
- package/lib/cjs/tests/api_tests/vitl_push.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/vitl_push.test.js +341 -0
- package/lib/cjs/tests/api_tests/vitl_push.test.js.map +1 -0
- package/lib/cjs/tests/setup_isolated.d.ts +48 -0
- package/lib/cjs/tests/setup_isolated.d.ts.map +1 -1
- package/lib/cjs/tests/setup_isolated.js +119 -1
- package/lib/cjs/tests/setup_isolated.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +378 -282
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.d.ts +2 -0
- package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.d.ts.map +1 -0
- package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.js +201 -0
- package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.js.map +1 -0
- package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.d.ts +3 -0
- package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.d.ts.map +1 -0
- package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.js +120 -0
- package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.js.map +1 -0
- package/lib/cjs/tests/webhooks_tests.js +44 -34
- package/lib/cjs/tests/webhooks_tests.js.map +1 -1
- package/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/esm/sdk.d.ts +376 -3
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +1 -0
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts +22 -0
- package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.js +501 -0
- package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.js.map +1 -0
- package/lib/esm/tests/api_tests/enduser_fields_sync.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/enduser_fields_sync.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/enduser_fields_sync.test.js +2 -0
- package/lib/esm/tests/api_tests/enduser_fields_sync.test.js.map +1 -1
- package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.js +2 -0
- package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.js.map +1 -1
- package/lib/esm/tests/api_tests/form_vital_reading.test.d.ts +7 -0
- package/lib/esm/tests/api_tests/form_vital_reading.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/form_vital_reading.test.js +456 -0
- package/lib/esm/tests/api_tests/form_vital_reading.test.js.map +1 -0
- package/lib/esm/tests/api_tests/journey_statistics_cache.test.d.ts +26 -0
- package/lib/esm/tests/api_tests/journey_statistics_cache.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/journey_statistics_cache.test.js +227 -0
- package/lib/esm/tests/api_tests/journey_statistics_cache.test.js.map +1 -0
- package/lib/esm/tests/api_tests/journey_step_manual_count.test.d.ts +34 -0
- package/lib/esm/tests/api_tests/journey_step_manual_count.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/journey_step_manual_count.test.js +238 -0
- package/lib/esm/tests/api_tests/journey_step_manual_count.test.js.map +1 -0
- package/lib/esm/tests/api_tests/load_threads_care_team.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/load_threads_care_team.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/load_threads_care_team.test.js +2 -0
- package/lib/esm/tests/api_tests/load_threads_care_team.test.js.map +1 -1
- package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/mdi_case_offerings.test.js +139 -9
- package/lib/esm/tests/api_tests/mdi_case_offerings.test.js.map +1 -1
- package/lib/esm/tests/api_tests/organization_signup.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/organization_signup.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/organization_signup.test.js +2 -0
- package/lib/esm/tests/api_tests/organization_signup.test.js.map +1 -1
- package/lib/esm/tests/api_tests/phone_embed_leave_message.test.d.ts +7 -0
- package/lib/esm/tests/api_tests/phone_embed_leave_message.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/phone_embed_leave_message.test.js +566 -0
- package/lib/esm/tests/api_tests/phone_embed_leave_message.test.js.map +1 -0
- package/lib/esm/tests/api_tests/programs.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/programs.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/programs.test.js +72 -16
- package/lib/esm/tests/api_tests/programs.test.js.map +1 -1
- package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.d.ts +7 -0
- package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.js +728 -0
- package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js +57 -47
- package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.js +2 -0
- package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.js +2 -0
- package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.js +2 -0
- package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js +424 -39
- package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/register_business_id_injection.test.js +2 -2
- package/lib/esm/tests/api_tests/security/register_business_id_injection.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js +2 -0
- package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js.map +1 -1
- package/lib/esm/tests/api_tests/session_for_join_link.test.d.ts +10 -0
- package/lib/esm/tests/api_tests/session_for_join_link.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/session_for_join_link.test.js +142 -0
- package/lib/esm/tests/api_tests/session_for_join_link.test.js.map +1 -0
- package/lib/esm/tests/api_tests/set_fields_order_templates.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/set_fields_order_templates.test.js +191 -88
- package/lib/esm/tests/api_tests/set_fields_order_templates.test.js.map +1 -1
- package/lib/esm/tests/api_tests/stripe_checkout_items.test.d.ts +17 -0
- package/lib/esm/tests/api_tests/stripe_checkout_items.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/stripe_checkout_items.test.js +214 -0
- package/lib/esm/tests/api_tests/stripe_checkout_items.test.js.map +1 -0
- package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.d.ts +5 -0
- package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.js +388 -0
- package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.js.map +1 -0
- package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.js +2 -0
- package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.js.map +1 -1
- package/lib/esm/tests/api_tests/totp_mfa.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/totp_mfa.test.js +37 -31
- package/lib/esm/tests/api_tests/totp_mfa.test.js.map +1 -1
- package/lib/esm/tests/api_tests/trigger_contains_matching.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/trigger_contains_matching.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/trigger_contains_matching.test.js +2 -0
- package/lib/esm/tests/api_tests/trigger_contains_matching.test.js.map +1 -1
- package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.js +2 -0
- package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.js.map +1 -1
- package/lib/esm/tests/api_tests/vital_review_trigger_action.test.d.ts +3 -1
- package/lib/esm/tests/api_tests/vital_review_trigger_action.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/vital_review_trigger_action.test.js +2 -0
- package/lib/esm/tests/api_tests/vital_review_trigger_action.test.js.map +1 -1
- package/lib/esm/tests/api_tests/vitl_push.test.d.ts +7 -0
- package/lib/esm/tests/api_tests/vitl_push.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/vitl_push.test.js +333 -0
- package/lib/esm/tests/api_tests/vitl_push.test.js.map +1 -0
- package/lib/esm/tests/setup_isolated.d.ts +48 -0
- package/lib/esm/tests/setup_isolated.d.ts.map +1 -1
- package/lib/esm/tests/setup_isolated.js +114 -0
- package/lib/esm/tests/setup_isolated.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +379 -283
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.d.ts +2 -0
- package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.d.ts.map +1 -0
- package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.js +174 -0
- package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.js.map +1 -0
- package/lib/esm/tests/unit_tests/programs_conditional_logic.test.d.ts +3 -0
- package/lib/esm/tests/unit_tests/programs_conditional_logic.test.d.ts.map +1 -0
- package/lib/esm/tests/unit_tests/programs_conditional_logic.test.js +117 -0
- package/lib/esm/tests/unit_tests/programs_conditional_logic.test.js.map +1 -0
- package/lib/esm/tests/webhooks_tests.js +44 -34
- package/lib/esm/tests/webhooks_tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/src/sdk.ts +9 -2
- package/src/tests/api_tests/booking_prevent_upcoming_duplicate.test.ts +541 -0
- package/src/tests/api_tests/enduser_fields_sync.test.ts +154 -0
- package/src/tests/api_tests/enduser_observations_auto_review.test.ts +4 -0
- package/src/tests/api_tests/form_vital_reading.test.ts +393 -0
- package/src/tests/api_tests/journey_statistics_cache.test.ts +237 -0
- package/src/tests/api_tests/journey_step_manual_count.test.ts +220 -0
- package/src/tests/api_tests/load_threads_care_team.test.ts +214 -0
- package/src/tests/api_tests/mdi_case_offerings.test.ts +138 -0
- package/src/tests/api_tests/organization_signup.test.ts +4 -0
- package/src/tests/api_tests/phone_embed_leave_message.test.ts +541 -0
- package/src/tests/api_tests/programs.test.ts +351 -0
- package/src/tests/api_tests/public_form_case_insensitive_match.test.ts +632 -0
- package/src/tests/api_tests/security/add-to-journey-foreign-enduserid.test.ts +37 -26
- package/src/tests/api_tests/security/appointment-reschedule-ownership.test.ts +436 -0
- package/src/tests/api_tests/security/file-link-session-confinement.test.ts +4 -0
- package/src/tests/api_tests/security/form-logic-js-execution.test.ts +4 -0
- package/src/tests/api_tests/security/formsort_webhook_auth_field_lock.test.ts +225 -0
- package/src/tests/api_tests/security/register_business_id_injection.test.ts +2 -2
- package/src/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.ts +4 -0
- package/src/tests/api_tests/session_for_join_link.test.ts +99 -0
- package/src/tests/api_tests/set_fields_order_templates.test.ts +94 -9
- package/src/tests/api_tests/stripe_checkout_items.test.ts +186 -0
- package/src/tests/api_tests/tickets_bulk_assign_from_queue.test.ts +4 -0
- package/src/tests/api_tests/totp_mfa.test.ts +10 -5
- package/src/tests/api_tests/trigger_contains_matching.test.ts +349 -0
- package/src/tests/api_tests/user_logs_restore_deleted.test.ts +419 -0
- package/src/tests/api_tests/vital_review_trigger_action.test.ts +455 -0
- package/src/tests/api_tests/vitl_push.test.ts +323 -0
- package/src/tests/setup_isolated.ts +140 -0
- package/src/tests/tests.ts +126 -20
- package/src/tests/unit_tests/isolated_suite_discovery.test.ts +178 -0
- package/src/tests/unit_tests/programs_conditional_logic.test.ts +189 -0
- package/src/tests/unit_tests/trigger_title_partials.test.ts +174 -0
- package/src/tests/webhooks_tests.ts +6 -1
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated_suite_discovery.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/unit_tests/isolated_suite_discovery.test.ts"],"names":[],"mappings":"AAoEA,eAAO,MAAM,mCAAmC,qBAgG/C,CAAA"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
require('source-map-support').install();
|
|
38
|
+
import * as fs from "fs";
|
|
39
|
+
import * as path from "path";
|
|
40
|
+
import { assert, log_header, } from "@tellescope/testing";
|
|
41
|
+
import { discover_isolated_suites, isolated_suites_root, parse_test_parallelism, DEFAULT_TEST_PARALLELISM, ISOLATED_SUITE_EXPORT, } from "../setup_isolated";
|
|
42
|
+
/**
|
|
43
|
+
* Guard for the auto-discovering dispatcher (run_discovered_isolated_suites).
|
|
44
|
+
*
|
|
45
|
+
* Discovery walks the COMPILED tree (lib/cjs/tests/api_tests), so the failure mode the old
|
|
46
|
+
* hand-maintained arrays did not have is a suite that silently stops running: a `.test.ts` enrolls
|
|
47
|
+
* itself, the build no-ops, and the dispatcher never sees it. Nothing else in the suite would
|
|
48
|
+
* notice. So the first check here compares the enrolled SOURCE files against what discovery
|
|
49
|
+
* actually loaded, in both directions — a missing one means a stale build (`npm run check:build`),
|
|
50
|
+
* an extra one means a compiled orphan of a deleted test.
|
|
51
|
+
*
|
|
52
|
+
* The other two checks protect the dispatcher's own invariants: names are the only handle on a
|
|
53
|
+
* suite in the output, and a suite that is both discovered and awaited by name in tests.ts would
|
|
54
|
+
* provision its tenants and run twice.
|
|
55
|
+
*/
|
|
56
|
+
// compiled location is <sdk>/lib/cjs/tests/unit_tests, so four levels up is the package root
|
|
57
|
+
var SRC_TESTS = path.resolve(__dirname, '..', '..', '..', '..', 'src', 'tests');
|
|
58
|
+
/**
|
|
59
|
+
* Relative paths of every source file under `root` that enrolls itself, split by whether discovery
|
|
60
|
+
* could ever see it. Discovery only loads `*.test.js` under `api_tests`, so a marker anywhere else
|
|
61
|
+
* is a suite that silently never runs — hence `unreachable`, which is an error rather than a miss.
|
|
62
|
+
*/
|
|
63
|
+
var enrolled_source_files = function (root) {
|
|
64
|
+
var discoverable = [];
|
|
65
|
+
var unreachable = [];
|
|
66
|
+
var walk = function (dir, prefix) {
|
|
67
|
+
for (var _i = 0, _a = fs.readdirSync(dir, { withFileTypes: true }); _i < _a.length; _i++) {
|
|
68
|
+
var entry = _a[_i];
|
|
69
|
+
var relative = prefix ? "".concat(prefix, "/").concat(entry.name) : entry.name;
|
|
70
|
+
if (entry.isDirectory()) {
|
|
71
|
+
walk(path.join(dir, entry.name), relative);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!entry.name.endsWith('.ts') || entry.name.endsWith('.d.ts'))
|
|
75
|
+
continue;
|
|
76
|
+
var source = fs.readFileSync(path.join(dir, entry.name), 'utf8');
|
|
77
|
+
if (!new RegExp("^export const ".concat(ISOLATED_SUITE_EXPORT, "\\b"), 'm').test(source))
|
|
78
|
+
continue;
|
|
79
|
+
var inApiTests = relative === 'api_tests' || relative.indexOf('api_tests/') === 0;
|
|
80
|
+
if (inApiTests && entry.name.endsWith('.test.ts')) {
|
|
81
|
+
discoverable.push(relative.replace(/^api_tests\//, ''));
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
unreachable.push(relative);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
walk(root, '');
|
|
89
|
+
return { discoverable: discoverable.sort(), unreachable: unreachable.sort() };
|
|
90
|
+
};
|
|
91
|
+
export var isolated_suite_discovery_unit_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
92
|
+
var discovered, discoveredFiles, _a, discoverable, unreachable, enrolled_1, missing, extra, byName, _i, discovered_1, s, duplicateNames, testsPath, testsSource, doubleRun, _b, discovered_2, suite, loaded, _c, _d, exported, parallelismCases, _e, parallelismCases_1, _f, raw, expected, actual;
|
|
93
|
+
return __generator(this, function (_g) {
|
|
94
|
+
log_header("Isolated suite discovery");
|
|
95
|
+
discovered = discover_isolated_suites() // throws on a malformed descriptor or a duplicate name
|
|
96
|
+
;
|
|
97
|
+
discoveredFiles = discovered.map(function (s) { return s.file; }).sort();
|
|
98
|
+
if (!fs.existsSync(SRC_TESTS)) {
|
|
99
|
+
// Published package, not the monorepo — there is no source tree to compare against.
|
|
100
|
+
console.log(" SKIPPED source comparison: no source tree at ".concat(SRC_TESTS));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
_a = enrolled_source_files(SRC_TESTS), discoverable = _a.discoverable, unreachable = _a.unreachable;
|
|
104
|
+
enrolled_1 = discoverable.map(function (f) { return f.replace(/\.ts$/, '.js'); });
|
|
105
|
+
// Scanning all of src/tests, not just api_tests: an ISOLATED_SUITE outside the discovered tree
|
|
106
|
+
// (wrong directory, or a filename that is not *.test.ts) would never run and nothing else would say so.
|
|
107
|
+
assert(unreachable.length === 0, "exports ".concat(ISOLATED_SUITE_EXPORT, " where discovery can never see it (must be api_tests/**/*.test.ts): ").concat(unreachable.join(', ')), "every ".concat(ISOLATED_SUITE_EXPORT, " in src/tests lives where discovery looks"));
|
|
108
|
+
missing = enrolled_1.filter(function (f) { return discoveredFiles.indexOf(f) === -1; });
|
|
109
|
+
extra = discoveredFiles.filter(function (f) { return enrolled_1.indexOf(f) === -1; });
|
|
110
|
+
assert(missing.length === 0, "enrolled in src but NOT discovered (stale lib/cjs? run npm run check:build -- --fix): ".concat(missing.join(', ')), "every src file exporting ".concat(ISOLATED_SUITE_EXPORT, " is discovered (").concat(enrolled_1.length, ")"));
|
|
111
|
+
assert(extra.length === 0, "discovered but not enrolled in any src file (compiled orphan? delete lib/cjs and rebuild): ".concat(extra.join(', ')), 'every discovered suite has a source file');
|
|
112
|
+
}
|
|
113
|
+
assert(discovered.length > 0, "no isolated suites discovered under ".concat(isolated_suites_root()), 'suites were discovered');
|
|
114
|
+
byName = {};
|
|
115
|
+
for (_i = 0, discovered_1 = discovered; _i < discovered_1.length; _i++) {
|
|
116
|
+
s = discovered_1[_i];
|
|
117
|
+
byName[s.name] = (byName[s.name] || []).concat(s.file);
|
|
118
|
+
}
|
|
119
|
+
duplicateNames = Object.keys(byName).filter(function (n) { return byName[n].length > 1; });
|
|
120
|
+
assert(duplicateNames.length === 0, "duplicate suite names: ".concat(duplicateNames.map(function (n) { return "".concat(JSON.stringify(n), " in ").concat(byName[n].join(' and ')); }).join('; ')), "suite names are unique (".concat(discovered.length, ")"));
|
|
121
|
+
testsPath = path.join(SRC_TESTS, 'tests.ts');
|
|
122
|
+
if (!fs.existsSync(testsPath)) {
|
|
123
|
+
console.log(" SKIPPED tests.ts comparison: not found at ".concat(testsPath));
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
testsSource = fs.readFileSync(testsPath, 'utf8');
|
|
127
|
+
doubleRun = [];
|
|
128
|
+
for (_b = 0, discovered_2 = discovered; _b < discovered_2.length; _b++) {
|
|
129
|
+
suite = discovered_2[_b];
|
|
130
|
+
loaded = require(path.join(isolated_suites_root(), suite.file));
|
|
131
|
+
for (_c = 0, _d = Object.keys(loaded); _c < _d.length; _c++) {
|
|
132
|
+
exported = _d[_c];
|
|
133
|
+
if (exported === ISOLATED_SUITE_EXPORT)
|
|
134
|
+
continue; // every enrolled file exports this one
|
|
135
|
+
if (new RegExp("\\bawait\\s+".concat(exported, "\\s*\\(")).test(testsSource)) {
|
|
136
|
+
doubleRun.push("".concat(exported, " (api_tests/").concat(suite.file, ", discovered as \"").concat(suite.name, "\")"));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
assert(doubleRun.length === 0, "awaited directly in tests.ts as well as discovered, so it would run twice: ".concat(doubleRun.join(', ')), 'no discovered suite is also awaited directly in tests.ts');
|
|
141
|
+
}
|
|
142
|
+
parallelismCases = [
|
|
143
|
+
[undefined, DEFAULT_TEST_PARALLELISM],
|
|
144
|
+
['', DEFAULT_TEST_PARALLELISM],
|
|
145
|
+
[' ', DEFAULT_TEST_PARALLELISM],
|
|
146
|
+
['abc', DEFAULT_TEST_PARALLELISM],
|
|
147
|
+
['0', DEFAULT_TEST_PARALLELISM],
|
|
148
|
+
['-1', DEFAULT_TEST_PARALLELISM],
|
|
149
|
+
['2.5', DEFAULT_TEST_PARALLELISM],
|
|
150
|
+
['1', 1],
|
|
151
|
+
[' 3 ', 3],
|
|
152
|
+
['16', 16],
|
|
153
|
+
];
|
|
154
|
+
for (_e = 0, parallelismCases_1 = parallelismCases; _e < parallelismCases_1.length; _e++) {
|
|
155
|
+
_f = parallelismCases_1[_e], raw = _f[0], expected = _f[1];
|
|
156
|
+
actual = parse_test_parallelism(raw);
|
|
157
|
+
assert(actual === expected, "TEST_PARALLELISM=".concat(JSON.stringify(raw), " parsed as ").concat(actual, ", expected ").concat(expected), "TEST_PARALLELISM=".concat(JSON.stringify(raw), " \u2192 ").concat(expected));
|
|
158
|
+
}
|
|
159
|
+
return [2 /*return*/];
|
|
160
|
+
});
|
|
161
|
+
}); };
|
|
162
|
+
// Allow running this test file independently
|
|
163
|
+
if (require.main === module) {
|
|
164
|
+
isolated_suite_discovery_unit_tests()
|
|
165
|
+
.then(function () {
|
|
166
|
+
console.log("Isolated suite discovery unit tests completed successfully");
|
|
167
|
+
process.exit(0);
|
|
168
|
+
})
|
|
169
|
+
.catch(function (error) {
|
|
170
|
+
console.error("Isolated suite discovery unit tests failed:", error);
|
|
171
|
+
process.exit(1);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=isolated_suite_discovery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated_suite_discovery.test.js","sourceRoot":"","sources":["../../../../src/tests/unit_tests/isolated_suite_discovery.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"programs_conditional_logic.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/unit_tests/programs_conditional_logic.test.ts"],"names":[],"mappings":"AA4KA,QAAA,MAAM,OAAO,YAUZ,CAAA;AAMD,OAAO,EAAE,OAAO,IAAI,qCAAqC,EAAE,CAAA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { evaluate_conditional_logic_for_enduser_fields, validate_custom_field_references } from "@tellescope/utilities";
|
|
2
|
+
/**
|
|
3
|
+
* Unit coverage for the `Programs` key in evaluate_conditional_logic_for_enduser_fields — the V1
|
|
4
|
+
* evaluator that triggers, journeys and phone-tree branches all run on.
|
|
5
|
+
*
|
|
6
|
+
* `{ Programs: { $in: 'CHF' } }` means "has a program named CHF"; adding `$status` means "...whose
|
|
7
|
+
* status is S", bound to that same program entry. Comparison is exact string throughout, matching the
|
|
8
|
+
* shipped Order Status Equals / Vital Update program filters.
|
|
9
|
+
*
|
|
10
|
+
* The round-trip between this and the saved V2 Mongo filter is covered separately, by
|
|
11
|
+
* packages/private/webapp/src/__tests__/programs_condition_filter.test.ts.
|
|
12
|
+
*/
|
|
13
|
+
var failures = 0;
|
|
14
|
+
var passed = 0;
|
|
15
|
+
var assert = function (name, actual, expected) {
|
|
16
|
+
if (actual === expected) {
|
|
17
|
+
passed++;
|
|
18
|
+
console.log(" \u2713 ".concat(name));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
failures++;
|
|
22
|
+
console.error(" \u2717 ".concat(name, " \u2014 expected ").concat(expected, ", got ").concat(actual));
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var with_programs = function (programs) { return ({ programs: programs }); };
|
|
26
|
+
var matches = function (programs, value) { return (evaluate_conditional_logic_for_enduser_fields(with_programs(programs), { $and: [{ condition: { Programs: value } }] })); };
|
|
27
|
+
var CHF_ACTIVE = [{ name: 'CHF', status: 'active' }];
|
|
28
|
+
var CHF_COMPLETED = [{ name: 'CHF', status: 'completed' }];
|
|
29
|
+
var CHF_NO_STATUS = [{ name: 'CHF' }];
|
|
30
|
+
var TWO = [{ name: 'CHF', status: 'completed' }, { name: 'Diabetes', status: 'active' }];
|
|
31
|
+
var run_is_in_tests = function () {
|
|
32
|
+
console.log("\n[Programs / Is In]");
|
|
33
|
+
assert("matches a patient with that program", matches(CHF_ACTIVE, { $in: 'CHF' }), true);
|
|
34
|
+
assert("does not match a patient with a different program", matches([{ name: 'Diabetes' }], { $in: 'CHF' }), false);
|
|
35
|
+
assert("does not match a patient with no programs", matches([], { $in: 'CHF' }), false);
|
|
36
|
+
assert("does not match a patient whose programs are unset", matches(undefined, { $in: 'CHF' }), false);
|
|
37
|
+
assert("matches one program among several", matches(TWO, { $in: 'Diabetes' }), true);
|
|
38
|
+
// exact string comparison — deliberately NOT case-insensitive
|
|
39
|
+
assert("name comparison is case sensitive", matches(CHF_ACTIVE, { $in: 'chf' }), false);
|
|
40
|
+
assert("name comparison does not substring match", matches(CHF_ACTIVE, { $in: 'CH' }), false);
|
|
41
|
+
assert("a name with spaces and punctuation matches exactly", matches([{ name: 'Post-Op Care' }], { $in: 'Post-Op Care' }), true);
|
|
42
|
+
};
|
|
43
|
+
var run_status_tests = function () {
|
|
44
|
+
console.log("\n[Programs / $status]");
|
|
45
|
+
assert("name + status both match", matches(CHF_ACTIVE, { $in: 'CHF', $status: 'active' }), true);
|
|
46
|
+
assert("name matches but status does not", matches(CHF_COMPLETED, { $in: 'CHF', $status: 'active' }), false);
|
|
47
|
+
assert("status matches but name does not", matches(CHF_ACTIVE, { $in: 'Diabetes', $status: 'active' }), false);
|
|
48
|
+
assert("a program with no status is not matched by a status condition", matches(CHF_NO_STATUS, { $in: 'CHF', $status: 'active' }), false);
|
|
49
|
+
assert("a blank status means any status", matches(CHF_COMPLETED, { $in: 'CHF', $status: '' }), true);
|
|
50
|
+
assert("an omitted status means any status", matches(CHF_NO_STATUS, { $in: 'CHF' }), true);
|
|
51
|
+
assert("status comparison is case sensitive", matches(CHF_ACTIVE, { $in: 'CHF', $status: 'Active' }), false);
|
|
52
|
+
// name and status must come from the SAME program, which is the whole point of one paired key
|
|
53
|
+
assert("does not match when the name and the status come from different programs", matches(TWO, { $in: 'CHF', $status: 'active' }), false);
|
|
54
|
+
// $status serialised FIRST — the generic Object.keys(value)[0] operator dispatch would pick $status
|
|
55
|
+
// here and fall through to false, so the Programs branch must read $in/$nin by name
|
|
56
|
+
assert("$status before $in still evaluates as Is In", matches(CHF_ACTIVE, { $status: 'active', $in: 'CHF' }), true);
|
|
57
|
+
assert("$status before $nin still evaluates as Is Not In", matches(CHF_ACTIVE, { $status: 'active', $nin: 'CHF' }), false);
|
|
58
|
+
};
|
|
59
|
+
var run_is_not_in_tests = function () {
|
|
60
|
+
console.log("\n[Programs / Is Not In]");
|
|
61
|
+
assert("does not match a patient with that program", matches(CHF_ACTIVE, { $nin: 'CHF' }), false);
|
|
62
|
+
assert("matches a patient with a different program", matches([{ name: 'Diabetes' }], { $nin: 'CHF' }), true);
|
|
63
|
+
assert("matches a patient with no programs", matches([], { $nin: 'CHF' }), true);
|
|
64
|
+
assert("matches a patient whose programs are unset", matches(undefined, { $nin: 'CHF' }), true);
|
|
65
|
+
assert("negates the name+status pair", matches(CHF_ACTIVE, { $nin: 'CHF', $status: 'active' }), false);
|
|
66
|
+
assert("matches when the name is present but the status differs", matches(CHF_COMPLETED, { $nin: 'CHF', $status: 'active' }), true);
|
|
67
|
+
};
|
|
68
|
+
var run_unconfigured_tests = function () {
|
|
69
|
+
console.log("\n[Programs / unconfigured]");
|
|
70
|
+
// An unfinished condition must match nobody in BOTH directions. This deliberately DIVERGES from
|
|
71
|
+
// Journeys rather than copying it: `{ Journeys: { $nin: '' } }` matches everybody (the blank id is
|
|
72
|
+
// simply absent from enduser.journeys). Failing open on $nin would fire a trigger for every patient.
|
|
73
|
+
assert("a blank name matches nobody under Is In", matches(CHF_ACTIVE, { $in: '' }), false);
|
|
74
|
+
assert("a blank name matches nobody under Is Not In", matches(CHF_ACTIVE, { $nin: '' }), false);
|
|
75
|
+
assert("a blank name matches nobody even with no programs", matches([], { $nin: '' }), false);
|
|
76
|
+
assert("a value with no operator matches nobody", matches(CHF_ACTIVE, { $status: 'active' }), false);
|
|
77
|
+
// the branch is narrowed to $in/$nin, so any other object condition under a key named 'Programs'
|
|
78
|
+
// falls through to the generic custom-field handler — which is what the V2 translator does too
|
|
79
|
+
assert("a non-$in/$nin operator falls through instead of being swallowed", matches(CHF_ACTIVE, { $isSet: 'Value' }), false);
|
|
80
|
+
};
|
|
81
|
+
var run_other_conditions_unaffected = function () {
|
|
82
|
+
console.log("\n[Programs / coexistence with Care Type and Stage]");
|
|
83
|
+
var enduser = {
|
|
84
|
+
programs: CHF_ACTIVE,
|
|
85
|
+
fields: { 'Care Type': 'RPM', 'Care Stage': 'Onboarding' },
|
|
86
|
+
};
|
|
87
|
+
var evaluate = function (conditions) { return (evaluate_conditional_logic_for_enduser_fields(enduser, conditions)); };
|
|
88
|
+
assert("an existing Care Type condition is unaffected", evaluate({ $and: [{ condition: { 'Care Type': 'RPM' } }] }), true);
|
|
89
|
+
assert("Care Stage and Programs can be combined in one filter", evaluate({ $and: [{ condition: { 'Care Stage': 'Onboarding' } }, { condition: { Programs: { $in: 'CHF' } } }] }), true);
|
|
90
|
+
assert("the combined filter fails when the Programs half fails", evaluate({ $and: [{ condition: { 'Care Stage': 'Onboarding' } }, { condition: { Programs: { $in: 'Diabetes' } } }] }), false);
|
|
91
|
+
assert("an $or over Care Type and Programs matches on either half", evaluate({ $or: [{ condition: { 'Care Type': 'Nope' } }, { condition: { Programs: { $in: 'CHF' } } }] }), true);
|
|
92
|
+
};
|
|
93
|
+
var run_custom_field_validation_tests = function () {
|
|
94
|
+
console.log("\n[Programs is a built-in field]");
|
|
95
|
+
// without 'Programs' in BUILT_IN_FIELDS, the trigger and journey validation hooks flag every program
|
|
96
|
+
// condition as a reference to a custom field that no longer exists
|
|
97
|
+
var conditions = { $and: [{ condition: { Programs: { $in: 'CHF', $status: 'active' } } }] };
|
|
98
|
+
assert("a Programs condition is not reported as a missing custom field", validate_custom_field_references(conditions, new Set()).length === 0, true);
|
|
99
|
+
assert("a genuinely missing custom field is still reported", validate_custom_field_references({ $and: [{ condition: { deletedField: 'x' } }] }, new Set()).includes('deletedField'), true);
|
|
100
|
+
};
|
|
101
|
+
var run_all = function () {
|
|
102
|
+
console.log("Running programs_conditional_logic unit tests");
|
|
103
|
+
run_is_in_tests();
|
|
104
|
+
run_status_tests();
|
|
105
|
+
run_is_not_in_tests();
|
|
106
|
+
run_unconfigured_tests();
|
|
107
|
+
run_other_conditions_unaffected();
|
|
108
|
+
run_custom_field_validation_tests();
|
|
109
|
+
console.log("\nResults: ".concat(passed, " passed, ").concat(failures, " failed"));
|
|
110
|
+
if (failures > 0)
|
|
111
|
+
process.exit(1);
|
|
112
|
+
};
|
|
113
|
+
if (require.main === module) {
|
|
114
|
+
run_all();
|
|
115
|
+
}
|
|
116
|
+
export { run_all as programs_conditional_logic_unit_tests };
|
|
117
|
+
//# sourceMappingURL=programs_conditional_logic.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"programs_conditional_logic.test.js","sourceRoot":"","sources":["../../../../src/tests/unit_tests/programs_conditional_logic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -845,81 +845,91 @@ var run_tests = function () { return __awaiter(void 0, void 0, void 0, function
|
|
|
845
845
|
return [4 /*yield*/, reset_test_tenant(sdk)];
|
|
846
846
|
case 3:
|
|
847
847
|
_k.sent();
|
|
848
|
-
return [4 /*yield*/, nonAdminSdk.authenticate(nonAdminEmail, nonAdminPassword)
|
|
848
|
+
return [4 /*yield*/, nonAdminSdk.authenticate(nonAdminEmail, nonAdminPassword)
|
|
849
|
+
// as in setup_tests: booking cancel/reschedule below would otherwise email the host for real
|
|
850
|
+
];
|
|
849
851
|
case 4:
|
|
850
852
|
_k.sent();
|
|
851
|
-
|
|
853
|
+
// as in setup_tests: booking cancel/reschedule below would otherwise email the host for real
|
|
854
|
+
return [4 /*yield*/, Promise.all([
|
|
855
|
+
sdk.api.users.updateOne(sdk.userInfo.id, { notificationEmailsDisabled: true }),
|
|
856
|
+
sdk.api.users.updateOne(nonAdminSdk.userInfo.id, { notificationEmailsDisabled: true }),
|
|
857
|
+
]).catch(console.error)];
|
|
852
858
|
case 5:
|
|
859
|
+
// as in setup_tests: booking cancel/reschedule below would otherwise email the host for real
|
|
853
860
|
_k.sent();
|
|
854
|
-
return [4 /*yield*/, async_test('
|
|
861
|
+
return [4 /*yield*/, async_test('configure webhook is admin only', function () { return nonAdminSdk.api.webhooks.configure({ url: webhookURL, secret: TEST_SECRET }); }, { shouldError: true, onError: function (e) { return e.message === "Inaccessible" || e.message === "Admin access only"; } })];
|
|
855
862
|
case 6:
|
|
856
863
|
_k.sent();
|
|
857
|
-
return [4 /*yield*/, async_test('
|
|
864
|
+
return [4 /*yield*/, async_test('update webhook is admin only', function () { return nonAdminSdk.api.webhooks.update({ subscriptionUpdates: fullSubscription }); }, { shouldError: true, onError: function (e) { return e.message === "Inaccessible" || e.message === "Admin access only"; } })];
|
|
858
865
|
case 7:
|
|
866
|
+
_k.sent();
|
|
867
|
+
return [4 /*yield*/, async_test('configure webhook', function () { return sdk.api.webhooks.configure({ url: webhookURL, secret: TEST_SECRET }); }, { onResult: function (_) { return true; } })];
|
|
868
|
+
case 8:
|
|
859
869
|
_k.sent();
|
|
860
870
|
return [4 /*yield*/, async_test('configure webhook (overwrite)', function () { return sdk.api.webhooks.configure({ url: webhookURL, secret: TEST_SECRET }); }, { onResult: function () { return true; } }
|
|
861
871
|
// { shouldError: true, onError: e => e.message === "Only one webhook configuration is supported per organization. Use /update-webooks to update your configuration." }
|
|
862
872
|
)];
|
|
863
|
-
case
|
|
873
|
+
case 9:
|
|
864
874
|
_k.sent();
|
|
865
875
|
return [4 /*yield*/, async_test('get initial webhook configuration', function () { return sdk.api.webhooks.get_configuration({}); }, { onResult: function (r) { var _a; return r.url === webhookURL && object_is_empty((_a = r.subscriptions) !== null && _a !== void 0 ? _a : {}); } })];
|
|
866
|
-
case
|
|
876
|
+
case 10:
|
|
867
877
|
_k.sent();
|
|
868
878
|
return [4 /*yield*/, async_test('update webhook (set empty subscription)', function () { return sdk.api.webhooks.update({ subscriptionUpdates: {} }); }, { onResult: function (_) { return true; } })];
|
|
869
|
-
case
|
|
879
|
+
case 11:
|
|
870
880
|
_k.sent();
|
|
871
881
|
return [4 /*yield*/, async_test('update webhook (set partial subscription)', function () { return sdk.api.webhooks.update({ subscriptionUpdates: { chats: { create: true } } }); }, { onResult: function (_) { return true; } })];
|
|
872
|
-
case
|
|
882
|
+
case 12:
|
|
873
883
|
_k.sent();
|
|
874
884
|
return [4 /*yield*/, async_test('update webhook (set subscriptions)', function () { return sdk.api.webhooks.update({ subscriptionUpdates: fullSubscription }); }, { onResult: function (_) { return true; } })];
|
|
875
|
-
case
|
|
885
|
+
case 13:
|
|
876
886
|
_k.sent();
|
|
877
887
|
return [4 /*yield*/, async_test('update webhook invalid model', function () { return sdk.api.webhooks.update({ subscriptionUpdates: { notAModel: { create: false } } }); }, { shouldError: true, onError: function (e) { return e.message === "Error parsing field subscriptionUpdates: Got unexpected field(s) [notAModel]"; } })];
|
|
878
|
-
case
|
|
888
|
+
case 14:
|
|
879
889
|
_k.sent();
|
|
880
890
|
return [4 /*yield*/, async_test('get initial webhook configuration after updates', function () { return sdk.api.webhooks.get_configuration({}); }, { onResult: function (r) { return r.url === webhookURL && objects_equivalent(r.subscriptions, fullSubscription); } })];
|
|
881
|
-
case
|
|
891
|
+
case 15:
|
|
882
892
|
_k.sent();
|
|
883
893
|
return [4 /*yield*/, self_serve_appointment_booking_tests()
|
|
884
894
|
// reset to only poartial / testing fields
|
|
885
895
|
// todo: subscribe in individual tests to avoid issues in ordering of tests / subscriptions
|
|
886
896
|
];
|
|
887
|
-
case
|
|
897
|
+
case 16:
|
|
888
898
|
_k.sent();
|
|
889
899
|
// reset to only poartial / testing fields
|
|
890
900
|
// todo: subscribe in individual tests to avoid issues in ordering of tests / subscriptions
|
|
891
901
|
return [4 /*yield*/, sdk.api.webhooks.update({ subscriptionUpdates: __assign(__assign({}, emptySubscription), { chats: { create: true }, meetings: { create: true, update: true, delete: false } })
|
|
892
902
|
})];
|
|
893
|
-
case
|
|
903
|
+
case 17:
|
|
894
904
|
// reset to only poartial / testing fields
|
|
895
905
|
// todo: subscribe in individual tests to avoid issues in ordering of tests / subscriptions
|
|
896
906
|
_k.sent();
|
|
897
907
|
log_header("Webhooks Tests with Subscriptions");
|
|
898
908
|
return [4 /*yield*/, test_automation_webhooks()];
|
|
899
|
-
case
|
|
909
|
+
case 18:
|
|
900
910
|
_k.sent();
|
|
901
911
|
_a = tests;
|
|
902
912
|
_b = [];
|
|
903
913
|
for (_c in _a)
|
|
904
914
|
_b.push(_c);
|
|
905
915
|
_i = 0;
|
|
906
|
-
_k.label =
|
|
907
|
-
case
|
|
908
|
-
if (!(_i < _b.length)) return [3 /*break*/,
|
|
916
|
+
_k.label = 19;
|
|
917
|
+
case 19:
|
|
918
|
+
if (!(_i < _b.length)) return [3 /*break*/, 22];
|
|
909
919
|
_c = _b[_i];
|
|
910
|
-
if (!(_c in _a)) return [3 /*break*/,
|
|
920
|
+
if (!(_c in _a)) return [3 /*break*/, 21];
|
|
911
921
|
t = _c;
|
|
912
922
|
return [4 /*yield*/, ((_h = tests[t]) === null || _h === void 0 ? void 0 : _h.call(tests, true))];
|
|
913
|
-
case 19:
|
|
914
|
-
_k.sent();
|
|
915
|
-
_k.label = 20;
|
|
916
923
|
case 20:
|
|
917
|
-
|
|
918
|
-
|
|
924
|
+
_k.sent();
|
|
925
|
+
_k.label = 21;
|
|
919
926
|
case 21:
|
|
927
|
+
_i++;
|
|
928
|
+
return [3 /*break*/, 19];
|
|
929
|
+
case 22:
|
|
920
930
|
finalLength = handledEvents.length;
|
|
921
931
|
return [4 /*yield*/, async_test('update webhook (set subscriptions empty)', function () { return sdk.api.webhooks.update({ subscriptionUpdates: __assign({}, emptySubscription) }); }, { onResult: function (_) { return true; } })];
|
|
922
|
-
case
|
|
932
|
+
case 23:
|
|
923
933
|
_k.sent();
|
|
924
934
|
log_header("Webhooks Tests without Subscriptions");
|
|
925
935
|
_d = tests;
|
|
@@ -927,23 +937,23 @@ var run_tests = function () { return __awaiter(void 0, void 0, void 0, function
|
|
|
927
937
|
for (_f in _d)
|
|
928
938
|
_e.push(_f);
|
|
929
939
|
_g = 0;
|
|
930
|
-
_k.label =
|
|
931
|
-
case
|
|
932
|
-
if (!(_g < _e.length)) return [3 /*break*/,
|
|
940
|
+
_k.label = 24;
|
|
941
|
+
case 24:
|
|
942
|
+
if (!(_g < _e.length)) return [3 /*break*/, 27];
|
|
933
943
|
_f = _e[_g];
|
|
934
|
-
if (!(_f in _d)) return [3 /*break*/,
|
|
944
|
+
if (!(_f in _d)) return [3 /*break*/, 26];
|
|
935
945
|
t = _f;
|
|
936
946
|
if (tests[t] === tests.calendarEventReminders) {
|
|
937
|
-
return [3 /*break*/,
|
|
947
|
+
return [3 /*break*/, 26]; // don't require subscription / can't unsubscribe
|
|
938
948
|
}
|
|
939
949
|
return [4 /*yield*/, ((_j = tests[t]) === null || _j === void 0 ? void 0 : _j.call(tests, false))];
|
|
940
|
-
case 24:
|
|
941
|
-
_k.sent();
|
|
942
|
-
_k.label = 25;
|
|
943
950
|
case 25:
|
|
944
|
-
|
|
945
|
-
|
|
951
|
+
_k.sent();
|
|
952
|
+
_k.label = 26;
|
|
946
953
|
case 26:
|
|
954
|
+
_g++;
|
|
955
|
+
return [3 /*break*/, 24];
|
|
956
|
+
case 27:
|
|
947
957
|
assert(finalLength === handledEvents.length, 'length changed after subscriptions', 'No webhooks posted when no subscription');
|
|
948
958
|
return [2 /*return*/];
|
|
949
959
|
}
|