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