@open-mercato/core 0.4.5-develop-2e9903a57a → 0.4.5-develop-eeccf7adf4
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/package.json +2 -2
- package/dist/modules/auth/__integration__/TC-AUTH-001.spec.js +0 -9
- package/dist/modules/auth/__integration__/TC-AUTH-001.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-002.spec.js +0 -22
- package/dist/modules/auth/__integration__/TC-AUTH-002.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-003.spec.js +0 -21
- package/dist/modules/auth/__integration__/TC-AUTH-003.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-004.spec.js +0 -15
- package/dist/modules/auth/__integration__/TC-AUTH-004.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-005.spec.js +0 -11
- package/dist/modules/auth/__integration__/TC-AUTH-005.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-006.spec.js +0 -11
- package/dist/modules/auth/__integration__/TC-AUTH-006.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-007.spec.js +0 -14
- package/dist/modules/auth/__integration__/TC-AUTH-007.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-008.spec.js +0 -26
- package/dist/modules/auth/__integration__/TC-AUTH-008.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-009.spec.js +0 -16
- package/dist/modules/auth/__integration__/TC-AUTH-009.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-010.spec.js +0 -32
- package/dist/modules/auth/__integration__/TC-AUTH-010.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-011.spec.js +0 -26
- package/dist/modules/auth/__integration__/TC-AUTH-011.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-012.spec.js +0 -30
- package/dist/modules/auth/__integration__/TC-AUTH-012.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-013.spec.js +0 -41
- package/dist/modules/auth/__integration__/TC-AUTH-013.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-014.spec.js +0 -25
- package/dist/modules/auth/__integration__/TC-AUTH-014.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-015.spec.js +0 -20
- package/dist/modules/auth/__integration__/TC-AUTH-015.spec.js.map +0 -7
- package/dist/modules/auth/__integration__/TC-AUTH-016.spec.js +0 -76
- package/dist/modules/auth/__integration__/TC-AUTH-016.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-001.spec.js +0 -20
- package/dist/modules/catalog/__integration__/TC-CAT-001.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-002.spec.js +0 -12
- package/dist/modules/catalog/__integration__/TC-CAT-002.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-003.spec.js +0 -28
- package/dist/modules/catalog/__integration__/TC-CAT-003.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-004.spec.js +0 -33
- package/dist/modules/catalog/__integration__/TC-CAT-004.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-005.spec.js +0 -30
- package/dist/modules/catalog/__integration__/TC-CAT-005.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-006.spec.js +0 -31
- package/dist/modules/catalog/__integration__/TC-CAT-006.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-007.spec.js +0 -31
- package/dist/modules/catalog/__integration__/TC-CAT-007.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-008.spec.js +0 -65
- package/dist/modules/catalog/__integration__/TC-CAT-008.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-009.spec.js +0 -31
- package/dist/modules/catalog/__integration__/TC-CAT-009.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-010.spec.js +0 -28
- package/dist/modules/catalog/__integration__/TC-CAT-010.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-011.spec.js +0 -34
- package/dist/modules/catalog/__integration__/TC-CAT-011.spec.js.map +0 -7
- package/dist/modules/catalog/__integration__/TC-CAT-012.spec.js +0 -27
- package/dist/modules/catalog/__integration__/TC-CAT-012.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-001.spec.js +0 -44
- package/dist/modules/core/__integration__/admin/TC-ADMIN-001.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-002.spec.js +0 -53
- package/dist/modules/core/__integration__/admin/TC-ADMIN-002.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-003.spec.js +0 -26
- package/dist/modules/core/__integration__/admin/TC-ADMIN-003.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-004.spec.js +0 -47
- package/dist/modules/core/__integration__/admin/TC-ADMIN-004.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-005.spec.js +0 -33
- package/dist/modules/core/__integration__/admin/TC-ADMIN-005.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-006.spec.js +0 -30
- package/dist/modules/core/__integration__/admin/TC-ADMIN-006.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-007.spec.js +0 -36
- package/dist/modules/core/__integration__/admin/TC-ADMIN-007.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-008.spec.js +0 -113
- package/dist/modules/core/__integration__/admin/TC-ADMIN-008.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-009.spec.js +0 -25
- package/dist/modules/core/__integration__/admin/TC-ADMIN-009.spec.js.map +0 -7
- package/dist/modules/core/__integration__/admin/TC-ADMIN-010.spec.js +0 -35
- package/dist/modules/core/__integration__/admin/TC-ADMIN-010.spec.js.map +0 -7
- package/dist/modules/core/__integration__/helpers/api.js +0 -64
- package/dist/modules/core/__integration__/helpers/api.js.map +0 -7
- package/dist/modules/core/__integration__/helpers/auth.js +0 -98
- package/dist/modules/core/__integration__/helpers/auth.js.map +0 -7
- package/dist/modules/core/__integration__/helpers/authUi.js +0 -31
- package/dist/modules/core/__integration__/helpers/authUi.js.map +0 -7
- package/dist/modules/core/__integration__/helpers/catalogFixtures.js +0 -49
- package/dist/modules/core/__integration__/helpers/catalogFixtures.js.map +0 -7
- package/dist/modules/core/__integration__/helpers/crmFixtures.js +0 -73
- package/dist/modules/core/__integration__/helpers/crmFixtures.js.map +0 -7
- package/dist/modules/core/__integration__/helpers/salesFixtures.js +0 -63
- package/dist/modules/core/__integration__/helpers/salesFixtures.js.map +0 -7
- package/dist/modules/core/__integration__/helpers/salesUi.js +0 -464
- package/dist/modules/core/__integration__/helpers/salesUi.js.map +0 -7
- package/dist/modules/core/__integration__/integration/TC-INT-001.spec.js +0 -26
- package/dist/modules/core/__integration__/integration/TC-INT-001.spec.js.map +0 -7
- package/dist/modules/core/__integration__/integration/TC-INT-002.spec.js +0 -60
- package/dist/modules/core/__integration__/integration/TC-INT-002.spec.js.map +0 -7
- package/dist/modules/core/__integration__/integration/TC-INT-003.spec.js +0 -36
- package/dist/modules/core/__integration__/integration/TC-INT-003.spec.js.map +0 -7
- package/dist/modules/core/__integration__/integration/TC-INT-004.spec.js +0 -74
- package/dist/modules/core/__integration__/integration/TC-INT-004.spec.js.map +0 -7
- package/dist/modules/core/__integration__/integration/TC-INT-005.spec.js +0 -21
- package/dist/modules/core/__integration__/integration/TC-INT-005.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-001.spec.js +0 -32
- package/dist/modules/customers/__integration__/TC-CRM-001.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-002.spec.js +0 -35
- package/dist/modules/customers/__integration__/TC-CRM-002.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-003.spec.js +0 -40
- package/dist/modules/customers/__integration__/TC-CRM-003.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-004.spec.js +0 -40
- package/dist/modules/customers/__integration__/TC-CRM-004.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-005.spec.js +0 -37
- package/dist/modules/customers/__integration__/TC-CRM-005.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-006.spec.js +0 -42
- package/dist/modules/customers/__integration__/TC-CRM-006.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-007.spec.js +0 -44
- package/dist/modules/customers/__integration__/TC-CRM-007.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-008.spec.js +0 -50
- package/dist/modules/customers/__integration__/TC-CRM-008.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-009.spec.js +0 -33
- package/dist/modules/customers/__integration__/TC-CRM-009.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-010.spec.js +0 -39
- package/dist/modules/customers/__integration__/TC-CRM-010.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-011.spec.js +0 -37
- package/dist/modules/customers/__integration__/TC-CRM-011.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-012.spec.js +0 -38
- package/dist/modules/customers/__integration__/TC-CRM-012.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-013.spec.js +0 -43
- package/dist/modules/customers/__integration__/TC-CRM-013.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-014.spec.js +0 -23
- package/dist/modules/customers/__integration__/TC-CRM-014.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-015.spec.js +0 -63
- package/dist/modules/customers/__integration__/TC-CRM-015.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-016.spec.js +0 -46
- package/dist/modules/customers/__integration__/TC-CRM-016.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-017.spec.js +0 -29
- package/dist/modules/customers/__integration__/TC-CRM-017.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-018.spec.js +0 -52
- package/dist/modules/customers/__integration__/TC-CRM-018.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-019.spec.js +0 -37
- package/dist/modules/customers/__integration__/TC-CRM-019.spec.js.map +0 -7
- package/dist/modules/customers/__integration__/TC-CRM-020.spec.js +0 -65
- package/dist/modules/customers/__integration__/TC-CRM-020.spec.js.map +0 -7
- package/dist/modules/progress/__integration__/TC-PROG-001.spec.js +0 -51
- package/dist/modules/progress/__integration__/TC-PROG-001.spec.js.map +0 -7
- package/dist/modules/resources/__integration__/TC-INT-007.spec.js +0 -88
- package/dist/modules/resources/__integration__/TC-INT-007.spec.js.map +0 -7
- package/dist/modules/resources/__integration__/helpers/resourcesFixtures.js +0 -45
- package/dist/modules/resources/__integration__/helpers/resourcesFixtures.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-001.spec.js +0 -20
- package/dist/modules/sales/__integration__/TC-SALES-001.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-002.spec.js +0 -31
- package/dist/modules/sales/__integration__/TC-SALES-002.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-003.spec.js +0 -13
- package/dist/modules/sales/__integration__/TC-SALES-003.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-004.spec.js +0 -14
- package/dist/modules/sales/__integration__/TC-SALES-004.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-005.spec.js +0 -15
- package/dist/modules/sales/__integration__/TC-SALES-005.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-006.spec.js +0 -20
- package/dist/modules/sales/__integration__/TC-SALES-006.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-007.spec.js +0 -19
- package/dist/modules/sales/__integration__/TC-SALES-007.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-008.spec.js +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-008.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-009.spec.js +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-009.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-010.spec.js +0 -16
- package/dist/modules/sales/__integration__/TC-SALES-010.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-011.spec.js +0 -20
- package/dist/modules/sales/__integration__/TC-SALES-011.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-012.spec.js +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-012.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-013.spec.js +0 -66
- package/dist/modules/sales/__integration__/TC-SALES-013.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-014.spec.js +0 -13
- package/dist/modules/sales/__integration__/TC-SALES-014.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-015.spec.js +0 -13
- package/dist/modules/sales/__integration__/TC-SALES-015.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-016.spec.js +0 -13
- package/dist/modules/sales/__integration__/TC-SALES-016.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-017.spec.js +0 -44
- package/dist/modules/sales/__integration__/TC-SALES-017.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-018.spec.js +0 -18
- package/dist/modules/sales/__integration__/TC-SALES-018.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-019.spec.js +0 -16
- package/dist/modules/sales/__integration__/TC-SALES-019.spec.js.map +0 -7
- package/dist/modules/sales/__integration__/TC-SALES-020.spec.js +0 -75
- package/dist/modules/sales/__integration__/TC-SALES-020.spec.js.map +0 -7
- package/dist/modules/staff/__integration__/TC-INT-006.spec.js +0 -64
- package/dist/modules/staff/__integration__/TC-INT-006.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-001.spec.js +0 -48
- package/dist/modules/translations/__integration__/TC-TRANS-001.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-002.spec.js +0 -94
- package/dist/modules/translations/__integration__/TC-TRANS-002.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-003.spec.js +0 -61
- package/dist/modules/translations/__integration__/TC-TRANS-003.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-004.spec.js +0 -52
- package/dist/modules/translations/__integration__/TC-TRANS-004.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-005.spec.js +0 -106
- package/dist/modules/translations/__integration__/TC-TRANS-005.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-006.spec.js +0 -94
- package/dist/modules/translations/__integration__/TC-TRANS-006.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-007.spec.js +0 -62
- package/dist/modules/translations/__integration__/TC-TRANS-007.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/TC-TRANS-008.spec.js +0 -168
- package/dist/modules/translations/__integration__/TC-TRANS-008.spec.js.map +0 -7
- package/dist/modules/translations/__integration__/helpers/translationFixtures.js +0 -63
- package/dist/modules/translations/__integration__/helpers/translationFixtures.js.map +0 -7
- package/dist/modules/workflows/__integration__/TC-WF-001.spec.js +0 -73
- package/dist/modules/workflows/__integration__/TC-WF-001.spec.js.map +0 -7
- package/src/__tests__/module-decoupling.test.ts +0 -356
- package/src/modules/api_keys/api/__tests__/keys.route.test.ts +0 -244
- package/src/modules/attachments/api/__tests__/attachments.api.test.ts +0 -240
- package/src/modules/attachments/components/__tests__/AttachmentContentPreview.test.tsx +0 -45
- package/src/modules/attachments/data/__tests__/entities-ocr.test.ts +0 -15
- package/src/modules/attachments/lib/__tests__/ocr-config.test.ts +0 -27
- package/src/modules/attachments/lib/__tests__/textExtraction.test.ts +0 -64
- package/src/modules/audit_logs/api/__tests__/access.route.test.ts +0 -118
- package/src/modules/audit_logs/api/__tests__/redo.route.test.ts +0 -131
- package/src/modules/audit_logs/api/__tests__/undo.route.test.ts +0 -103
- package/src/modules/audit_logs/services/__tests__/actionLogService.test.ts +0 -26
- package/src/modules/auth/__integration__/TC-AUTH-001.spec.ts +0 -13
- package/src/modules/auth/__integration__/TC-AUTH-002.spec.ts +0 -30
- package/src/modules/auth/__integration__/TC-AUTH-003.spec.ts +0 -28
- package/src/modules/auth/__integration__/TC-AUTH-004.spec.ts +0 -21
- package/src/modules/auth/__integration__/TC-AUTH-005.spec.ts +0 -17
- package/src/modules/auth/__integration__/TC-AUTH-006.spec.ts +0 -17
- package/src/modules/auth/__integration__/TC-AUTH-007.spec.ts +0 -19
- package/src/modules/auth/__integration__/TC-AUTH-008.spec.ts +0 -31
- package/src/modules/auth/__integration__/TC-AUTH-009.spec.ts +0 -22
- package/src/modules/auth/__integration__/TC-AUTH-010.spec.ts +0 -39
- package/src/modules/auth/__integration__/TC-AUTH-011.spec.ts +0 -35
- package/src/modules/auth/__integration__/TC-AUTH-012.spec.ts +0 -36
- package/src/modules/auth/__integration__/TC-AUTH-013.spec.ts +0 -48
- package/src/modules/auth/__integration__/TC-AUTH-014.spec.ts +0 -31
- package/src/modules/auth/__integration__/TC-AUTH-015.spec.ts +0 -28
- package/src/modules/auth/__integration__/TC-AUTH-016.spec.ts +0 -109
- package/src/modules/auth/__tests__/cli-rotate-encryption.test.ts +0 -97
- package/src/modules/auth/__tests__/cli-setup-acl.test.ts +0 -148
- package/src/modules/auth/api/__tests__/feature-check.test.ts +0 -65
- package/src/modules/auth/api/__tests__/login.test.ts +0 -47
- package/src/modules/auth/commands/__tests__/roles.custom-fields.test.ts +0 -126
- package/src/modules/auth/commands/__tests__/users.custom-fields.test.ts +0 -147
- package/src/modules/auth/lib/__tests__/rateLimitCheck.test.ts +0 -224
- package/src/modules/auth/services/__tests__/authService.test.ts +0 -32
- package/src/modules/auth/services/__tests__/rbacService.test.ts +0 -814
- package/src/modules/business_rules/api/__tests__/execute.route.test.ts +0 -311
- package/src/modules/business_rules/api/__tests__/logs-detail.route.test.ts +0 -181
- package/src/modules/business_rules/api/__tests__/logs.route.test.ts +0 -261
- package/src/modules/business_rules/api/__tests__/rules-detail.route.test.ts +0 -115
- package/src/modules/business_rules/api/__tests__/rules.route.test.ts +0 -746
- package/src/modules/business_rules/api/__tests__/sets-detail.route.test.ts +0 -169
- package/src/modules/business_rules/api/__tests__/sets-members.route.test.ts +0 -367
- package/src/modules/business_rules/api/__tests__/sets.route.test.ts +0 -361
- package/src/modules/business_rules/api/__tests__/test-helpers.ts +0 -42
- package/src/modules/business_rules/components/utils/__tests__/formHelpers.test.ts +0 -69
- package/src/modules/business_rules/data/__tests__/validators.test.ts +0 -637
- package/src/modules/business_rules/lib/__tests__/action-executor.test.ts +0 -728
- package/src/modules/business_rules/lib/__tests__/expression-evaluator.test.ts +0 -592
- package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -805
- package/src/modules/business_rules/lib/__tests__/rule-evaluator.test.ts +0 -436
- package/src/modules/catalog/__integration__/TC-CAT-001.spec.ts +0 -32
- package/src/modules/catalog/__integration__/TC-CAT-002.spec.ts +0 -19
- package/src/modules/catalog/__integration__/TC-CAT-003.spec.ts +0 -39
- package/src/modules/catalog/__integration__/TC-CAT-004.spec.ts +0 -41
- package/src/modules/catalog/__integration__/TC-CAT-005.spec.ts +0 -37
- package/src/modules/catalog/__integration__/TC-CAT-006.spec.ts +0 -40
- package/src/modules/catalog/__integration__/TC-CAT-007.spec.ts +0 -37
- package/src/modules/catalog/__integration__/TC-CAT-008.spec.ts +0 -76
- package/src/modules/catalog/__integration__/TC-CAT-009.spec.ts +0 -39
- package/src/modules/catalog/__integration__/TC-CAT-010.spec.ts +0 -36
- package/src/modules/catalog/__integration__/TC-CAT-011.spec.ts +0 -44
- package/src/modules/catalog/__integration__/TC-CAT-012.spec.ts +0 -35
- package/src/modules/catalog/api/__tests__/offers.route.test.ts +0 -161
- package/src/modules/catalog/api/__tests__/prices.route.test.ts +0 -39
- package/src/modules/catalog/api/__tests__/products.route.test.ts +0 -91
- package/src/modules/catalog/api/__tests__/utils.test.ts +0 -36
- package/src/modules/catalog/api/__tests__/variants.route.test.ts +0 -44
- package/src/modules/catalog/backend/catalog/products/__tests__/ProductsDataTable.test.tsx +0 -172
- package/src/modules/catalog/commands/__tests__/products.delete.test.ts +0 -146
- package/src/modules/catalog/commands/__tests__/products.update.test.ts +0 -142
- package/src/modules/catalog/commands/__tests__/registration.test.ts +0 -54
- package/src/modules/catalog/commands/__tests__/shared.test.ts +0 -129
- package/src/modules/catalog/components/__tests__/catalogComponentsRender.test.tsx +0 -373
- package/src/modules/catalog/components/products/__tests__/ProductImageCell.test.tsx +0 -51
- package/src/modules/catalog/components/products/__tests__/productForm.test.ts +0 -32
- package/src/modules/catalog/lib/__tests__/pricing.test.ts +0 -150
- package/src/modules/catalog/services/__tests__/catalogPricingService.test.ts +0 -21
- package/src/modules/configs/components/__tests__/CachePanel.test.tsx +0 -134
- package/src/modules/configs/components/__tests__/SystemStatusPanel.test.tsx +0 -93
- package/src/modules/configs/lib/__tests__/system-status.test.ts +0 -55
- package/src/modules/configs/lib/__tests__/upgrade-actions.test.ts +0 -135
- package/src/modules/core/__integration__/admin/TC-ADMIN-001.spec.ts +0 -70
- package/src/modules/core/__integration__/admin/TC-ADMIN-002.spec.ts +0 -83
- package/src/modules/core/__integration__/admin/TC-ADMIN-003.spec.ts +0 -50
- package/src/modules/core/__integration__/admin/TC-ADMIN-004.spec.ts +0 -77
- package/src/modules/core/__integration__/admin/TC-ADMIN-005.spec.ts +0 -49
- package/src/modules/core/__integration__/admin/TC-ADMIN-006.spec.ts +0 -59
- package/src/modules/core/__integration__/admin/TC-ADMIN-007.spec.ts +0 -68
- package/src/modules/core/__integration__/admin/TC-ADMIN-008.spec.ts +0 -127
- package/src/modules/core/__integration__/admin/TC-ADMIN-009.spec.ts +0 -48
- package/src/modules/core/__integration__/admin/TC-ADMIN-010.spec.ts +0 -57
- package/src/modules/core/__integration__/helpers/api.ts +0 -84
- package/src/modules/core/__integration__/helpers/auth.ts +0 -110
- package/src/modules/core/__integration__/helpers/authUi.ts +0 -33
- package/src/modules/core/__integration__/helpers/catalogFixtures.ts +0 -73
- package/src/modules/core/__integration__/helpers/crmFixtures.ts +0 -101
- package/src/modules/core/__integration__/helpers/salesFixtures.ts +0 -89
- package/src/modules/core/__integration__/helpers/salesUi.ts +0 -528
- package/src/modules/core/__integration__/integration/TC-INT-001.spec.ts +0 -34
- package/src/modules/core/__integration__/integration/TC-INT-002.spec.ts +0 -74
- package/src/modules/core/__integration__/integration/TC-INT-003.spec.ts +0 -43
- package/src/modules/core/__integration__/integration/TC-INT-004.spec.ts +0 -82
- package/src/modules/core/__integration__/integration/TC-INT-005.spec.ts +0 -29
- package/src/modules/currencies/backend/exchange-rates/__tests__/formatDateTimeLocal.test.ts +0 -78
- package/src/modules/currencies/data/__tests__/validators.test.ts +0 -100
- package/src/modules/currencies/services/__tests__/exchangeRateService.test.ts +0 -666
- package/src/modules/currencies/services/__tests__/rateFetchingService.basic.test.ts +0 -398
- package/src/modules/currencies/services/__tests__/rateFetchingService.errors.test.ts +0 -296
- package/src/modules/currencies/services/__tests__/rateFetchingService.providers.test.ts +0 -350
- package/src/modules/currencies/services/__tests__/rateFetchingService.setup.ts +0 -188
- package/src/modules/customers/__integration__/TC-CRM-001.spec.ts +0 -42
- package/src/modules/customers/__integration__/TC-CRM-002.spec.ts +0 -47
- package/src/modules/customers/__integration__/TC-CRM-003.spec.ts +0 -55
- package/src/modules/customers/__integration__/TC-CRM-004.spec.ts +0 -57
- package/src/modules/customers/__integration__/TC-CRM-005.spec.ts +0 -50
- package/src/modules/customers/__integration__/TC-CRM-006.spec.ts +0 -60
- package/src/modules/customers/__integration__/TC-CRM-007.spec.ts +0 -57
- package/src/modules/customers/__integration__/TC-CRM-008.spec.ts +0 -62
- package/src/modules/customers/__integration__/TC-CRM-009.spec.ts +0 -46
- package/src/modules/customers/__integration__/TC-CRM-010.spec.ts +0 -49
- package/src/modules/customers/__integration__/TC-CRM-011.spec.ts +0 -47
- package/src/modules/customers/__integration__/TC-CRM-012.spec.ts +0 -49
- package/src/modules/customers/__integration__/TC-CRM-013.spec.ts +0 -61
- package/src/modules/customers/__integration__/TC-CRM-014.spec.ts +0 -31
- package/src/modules/customers/__integration__/TC-CRM-015.spec.ts +0 -89
- package/src/modules/customers/__integration__/TC-CRM-016.spec.ts +0 -55
- package/src/modules/customers/__integration__/TC-CRM-017.spec.ts +0 -37
- package/src/modules/customers/__integration__/TC-CRM-018.spec.ts +0 -62
- package/src/modules/customers/__integration__/TC-CRM-019.spec.ts +0 -44
- package/src/modules/customers/__integration__/TC-CRM-020.spec.ts +0 -73
- package/src/modules/customers/api/__tests__/utils.test.ts +0 -61
- package/src/modules/customers/api/dashboard/widgets/new-deals/__tests__/route.test.ts +0 -54
- package/src/modules/customers/commands/__tests__/shared.test.ts +0 -263
- package/src/modules/customers/commands/__tests__/undo.custom-fields.test.ts +0 -1184
- package/src/modules/customers/components/detail/__tests__/ActivityForm.validation.test.ts +0 -37
- package/src/modules/customers/components/detail/__tests__/DealForm.validation.test.ts +0 -45
- package/src/modules/customers/components/detail/__tests__/InlineEditors.test.tsx +0 -166
- package/src/modules/customers/components/detail/__tests__/TaskForm.submit.test.ts +0 -21
- package/src/modules/customers/components/detail/hooks/__tests__/useCustomerDictionary.test.ts +0 -97
- package/src/modules/customers/lib/__tests__/customFieldRouting.test.ts +0 -107
- package/src/modules/customers/utils/__tests__/addressFormat.test.ts +0 -105
- package/src/modules/customers/utils/__tests__/phoneDuplicates.test.ts +0 -98
- package/src/modules/dashboards/__tests__/widgets.test.ts +0 -70
- package/src/modules/dashboards/lib/__tests__/aggregations.test.ts +0 -328
- package/src/modules/dashboards/lib/__tests__/formatters.test.ts +0 -128
- package/src/modules/directory/backend/directory/organizations/__tests__/create-submit.test.ts +0 -46
- package/src/modules/directory/backend/directory/organizations/__tests__/edit-submit.test.ts +0 -49
- package/src/modules/directory/components/__tests__/OrganizationSelect.test.tsx +0 -71
- package/src/modules/directory/components/__tests__/TenantSelect.test.tsx +0 -75
- package/src/modules/entities/__tests__/cli-decrypt-database.test.ts +0 -534
- package/src/modules/entities/__tests__/cli-rotate-encryption.test.ts +0 -123
- package/src/modules/entities/api/__tests__/encryption.api.test.ts +0 -57
- package/src/modules/entities/api/__tests__/records.get.custom-entity.test.ts +0 -43
- package/src/modules/entities/api/__tests__/records.validation.test.ts +0 -53
- package/src/modules/entities/backend/entities/user/__tests__/create-entity-submit.test.ts +0 -47
- package/src/modules/entities/backend/entities/user/__tests__/records-submit.test.ts +0 -104
- package/src/modules/feature_toggles/commands/__tests__/global.test.ts +0 -325
- package/src/modules/feature_toggles/commands/__tests__/overrides.test.ts +0 -186
- package/src/modules/feature_toggles/lib/__tests__/feature-flag-check.test.ts +0 -365
- package/src/modules/feature_toggles/lib/__tests__/queries.test.ts +0 -130
- package/src/modules/inbox_ops/api/emails/[id]/reprocess/__tests__/route.test.ts +0 -194
- package/src/modules/inbox_ops/api/proposals/[id]/__tests__/route.test.ts +0 -124
- package/src/modules/inbox_ops/api/proposals/[id]/accept-all/__tests__/route.test.ts +0 -154
- package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/__tests__/route.test.ts +0 -200
- package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/accept/__tests__/route.test.ts +0 -261
- package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/reject/__tests__/route.test.ts +0 -201
- package/src/modules/inbox_ops/api/proposals/[id]/reject/__tests__/route.test.ts +0 -123
- package/src/modules/inbox_ops/api/proposals/[id]/replies/[replyId]/send/__tests__/route.test.ts +0 -232
- package/src/modules/inbox_ops/api/proposals/[id]/translate/__tests__/route.test.ts +0 -173
- package/src/modules/inbox_ops/api/proposals/__tests__/route.test.ts +0 -185
- package/src/modules/inbox_ops/api/webhook/__tests__/inbound.test.ts +0 -317
- package/src/modules/inbox_ops/data/__tests__/validators.test.ts +0 -463
- package/src/modules/inbox_ops/lib/__tests__/catalogLookup.test.ts +0 -143
- package/src/modules/inbox_ops/lib/__tests__/contactMatcher.test.ts +0 -158
- package/src/modules/inbox_ops/lib/__tests__/emailParser.test.ts +0 -191
- package/src/modules/inbox_ops/lib/__tests__/executionEngine.test.ts +0 -1419
- package/src/modules/inbox_ops/lib/__tests__/extractionPrompt.test.ts +0 -151
- package/src/modules/inbox_ops/lib/__tests__/priceValidator.test.ts +0 -259
- package/src/modules/inbox_ops/lib/__tests__/translationProvider.test.ts +0 -99
- package/src/modules/inbox_ops/subscribers/__tests__/extractionWorker.test.ts +0 -803
- package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -285
- package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
- package/src/modules/notifications/__tests__/notificationService.test.ts +0 -248
- package/src/modules/planner/__tests__/availabilityMerge.test.ts +0 -99
- package/src/modules/planner/__tests__/plannerAvailabilityService.test.ts +0 -89
- package/src/modules/planner/data/__tests__/validators.test.ts +0 -78
- package/src/modules/progress/__integration__/TC-PROG-001.spec.ts +0 -67
- package/src/modules/progress/__tests__/progressService.test.ts +0 -377
- package/src/modules/query_index/__tests__/hybrid-engine.test.ts +0 -365
- package/src/modules/query_index/__tests__/indexer.test.ts +0 -175
- package/src/modules/resources/__integration__/TC-INT-007.spec.ts +0 -110
- package/src/modules/resources/__integration__/helpers/resourcesFixtures.ts +0 -50
- package/src/modules/resources/data/__tests__/validators.test.ts +0 -65
- package/src/modules/sales/__integration__/TC-SALES-001.spec.ts +0 -26
- package/src/modules/sales/__integration__/TC-SALES-002.spec.ts +0 -38
- package/src/modules/sales/__integration__/TC-SALES-003.spec.ts +0 -18
- package/src/modules/sales/__integration__/TC-SALES-004.spec.ts +0 -19
- package/src/modules/sales/__integration__/TC-SALES-005.spec.ts +0 -21
- package/src/modules/sales/__integration__/TC-SALES-006.spec.ts +0 -26
- package/src/modules/sales/__integration__/TC-SALES-007.spec.ts +0 -23
- package/src/modules/sales/__integration__/TC-SALES-008.spec.ts +0 -11
- package/src/modules/sales/__integration__/TC-SALES-009.spec.ts +0 -12
- package/src/modules/sales/__integration__/TC-SALES-010.spec.ts +0 -20
- package/src/modules/sales/__integration__/TC-SALES-011.spec.ts +0 -26
- package/src/modules/sales/__integration__/TC-SALES-012.spec.ts +0 -12
- package/src/modules/sales/__integration__/TC-SALES-013.spec.ts +0 -73
- package/src/modules/sales/__integration__/TC-SALES-014.spec.ts +0 -17
- package/src/modules/sales/__integration__/TC-SALES-015.spec.ts +0 -17
- package/src/modules/sales/__integration__/TC-SALES-016.spec.ts +0 -17
- package/src/modules/sales/__integration__/TC-SALES-017.spec.ts +0 -60
- package/src/modules/sales/__integration__/TC-SALES-018.spec.ts +0 -25
- package/src/modules/sales/__integration__/TC-SALES-019.spec.ts +0 -22
- package/src/modules/sales/__integration__/TC-SALES-020.spec.ts +0 -107
- package/src/modules/sales/api/__tests__/channels.route.test.ts +0 -50
- package/src/modules/sales/api/__tests__/document-history.test.ts +0 -146
- package/src/modules/sales/api/__tests__/documents.factory.test.ts +0 -98
- package/src/modules/sales/api/__tests__/documents.routes.test.ts +0 -149
- package/src/modules/sales/api/__tests__/quotes.acceptance.test.ts +0 -209
- package/src/modules/sales/api/__tests__/timeline.test.tsx +0 -165
- package/src/modules/sales/api/dashboard/widgets/new-orders/__tests__/route.test.ts +0 -112
- package/src/modules/sales/api/dashboard/widgets/new-quotes/__tests__/route.test.ts +0 -116
- package/src/modules/sales/commands/__tests__/documents.cache.test.ts +0 -126
- package/src/modules/sales/commands/__tests__/documents.undo.test.ts +0 -170
- package/src/modules/sales/commands/__tests__/registration.test.ts +0 -141
- package/src/modules/sales/components/__tests__/salesComponentsRender.test.tsx +0 -456
- package/src/modules/sales/lib/__tests__/calculations.test.ts +0 -210
- package/src/modules/sales/services/__tests__/salesCalculationService.test.ts +0 -181
- package/src/modules/sales/services/__tests__/taxCalculationService.test.ts +0 -79
- package/src/modules/sales/widgets/dashboard/new-orders/__tests__/config.test.ts +0 -47
- package/src/modules/sales/widgets/dashboard/new-quotes/__tests__/config.test.ts +0 -47
- package/src/modules/staff/__integration__/TC-INT-006.spec.ts +0 -71
- package/src/modules/staff/data/__tests__/validators.test.ts +0 -60
- package/src/modules/translations/__integration__/TC-TRANS-001.spec.ts +0 -57
- package/src/modules/translations/__integration__/TC-TRANS-002.spec.ts +0 -114
- package/src/modules/translations/__integration__/TC-TRANS-003.spec.ts +0 -71
- package/src/modules/translations/__integration__/TC-TRANS-004.spec.ts +0 -66
- package/src/modules/translations/__integration__/TC-TRANS-005.spec.ts +0 -135
- package/src/modules/translations/__integration__/TC-TRANS-006.spec.ts +0 -113
- package/src/modules/translations/__integration__/TC-TRANS-007.spec.ts +0 -80
- package/src/modules/translations/__integration__/TC-TRANS-008.spec.ts +0 -209
- package/src/modules/translations/__integration__/helpers/translationFixtures.ts +0 -95
- package/src/modules/translations/api/__tests__/locales.test.ts +0 -67
- package/src/modules/translations/data/__tests__/validators.test.ts +0 -143
- package/src/modules/translations/lib/__tests__/extract-record-id.test.ts +0 -75
- package/src/modules/translations/lib/__tests__/helpers.test.ts +0 -215
- package/src/modules/translations/lib/__tests__/locale.test.ts +0 -115
- package/src/modules/translations/lib/__tests__/resolve-field-list.test.ts +0 -176
- package/src/modules/translations/lib/__tests__/translatable-fields.test.ts +0 -79
- package/src/modules/translations/widgets/__tests__/injection-table.test.ts +0 -83
- package/src/modules/workflows/__integration__/TC-WF-001.spec.ts +0 -114
- package/src/modules/workflows/api/__tests__/definitions.route.test.ts +0 -762
- package/src/modules/workflows/api/__tests__/instances.route.test.ts +0 -869
- package/src/modules/workflows/data/__tests__/validators.test.ts +0 -707
- package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +0 -1230
- package/src/modules/workflows/lib/__tests__/call-api.test.ts +0 -421
- package/src/modules/workflows/lib/__tests__/compensation.test.ts +0 -713
- package/src/modules/workflows/lib/__tests__/event-logger.test.ts +0 -615
- package/src/modules/workflows/lib/__tests__/integration.test.ts +0 -693
- package/src/modules/workflows/lib/__tests__/signals.test.ts +0 -566
- package/src/modules/workflows/lib/__tests__/step-handler.test.ts +0 -670
- package/src/modules/workflows/lib/__tests__/sub-workflow.test.ts +0 -934
- package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +0 -925
- package/src/modules/workflows/lib/__tests__/workflow-executor.test.ts +0 -684
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-006.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-006: Customer Address Management\n * Source: .ai/qa/scenarios/TC-CRM-006-address-management.md\n */\ntest.describe('TC-CRM-006: Customer Address Management', () => {\n test('should add multiple company addresses and mark one as primary', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n const firstLabel = `HQ ${Date.now()}`;\n const secondLabel = `Warehouse ${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, `QA TC-CRM-006 ${Date.now()}`);\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/companies/${companyId}`);\n\n await page.getByRole('tab', { name: 'Addresses' }).click();\n await page.getByRole('button', { name: 'Add address' }).click();\n await page.getByRole('textbox', { name: 'Label' }).fill(firstLabel);\n await page\n .locator('select')\n .filter({ has: page.locator('option', { hasText: 'Office' }) })\n .first()\n .selectOption({ label: 'Office' });\n await page.getByRole('textbox', { name: 'Address line 1' }).fill('100 Main Street');\n await page.getByRole('textbox', { name: 'City' }).fill('Austin');\n await page.getByRole('textbox', { name: 'Region / State' }).fill('TX');\n await page.getByRole('textbox', { name: 'Postal code' }).fill('78701');\n await page.getByRole('checkbox', { name: 'Set as primary' }).check();\n await page.getByRole('button', { name: /Save address .*Ctrl\\+Enter/i }).click();\n\n await expect(page.getByText(firstLabel, { exact: true })).toBeVisible();\n await expect(page.getByText('Primary', { exact: true })).toBeVisible();\n\n await page.getByRole('button', { name: 'Add address' }).click();\n await page.getByRole('textbox', { name: 'Label' }).fill(secondLabel);\n await page\n .locator('select')\n .filter({ has: page.locator('option', { hasText: 'Shipping' }) })\n .first()\n .selectOption({ label: 'Shipping' });\n await page.getByRole('textbox', { name: 'Address line 1' }).fill('200 Warehouse Road');\n await page.getByRole('textbox', { name: 'City' }).fill('Dallas');\n await page.getByRole('textbox', { name: 'Region / State' }).fill('TX');\n await page.getByRole('textbox', { name: 'Postal code' }).fill('75201');\n await page.getByRole('button', { name: /Save address .*Ctrl\\+Enter/i }).click();\n\n await expect(page.getByText(secondLabel, { exact: true })).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,4BAA4B;AAC3D,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,2CAA2C,MAAM;AAC7D,OAAK,iEAAiE,OAAO,EAAE,MAAM,QAAQ,MAAM;AACjG,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAC/B,UAAM,aAAa,MAAM,KAAK,IAAI,CAAC;AACnC,UAAM,cAAc,aAAa,KAAK,IAAI,CAAC;AAE3C,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,iBAAiB,KAAK,IAAI,CAAC,EAAE;AAEpF,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,gCAAgC,SAAS,EAAE;AAE3D,YAAM,KAAK,UAAU,OAAO,EAAE,MAAM,YAAY,CAAC,EAAE,MAAM;AACzD,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,cAAc,CAAC,EAAE,MAAM;AAC9D,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,QAAQ,CAAC,EAAE,KAAK,UAAU;AAClE,YAAM,KACH,QAAQ,QAAQ,EAChB,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,SAAS,CAAC,EAAE,CAAC,EAC7D,MAAM,EACN,aAAa,EAAE,OAAO,SAAS,CAAC;AACnC,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC,EAAE,KAAK,iBAAiB;AAClF,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,OAAO,CAAC,EAAE,KAAK,QAAQ;AAC/D,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC,EAAE,KAAK,IAAI;AACrE,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,cAAc,CAAC,EAAE,KAAK,OAAO;AACrE,YAAM,KAAK,UAAU,YAAY,EAAE,MAAM,iBAAiB,CAAC,EAAE,MAAM;AACnE,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,8BAA8B,CAAC,EAAE,MAAM;AAE9E,YAAM,OAAO,KAAK,UAAU,YAAY,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AACtE,YAAM,OAAO,KAAK,UAAU,WAAW,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAErE,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,cAAc,CAAC,EAAE,MAAM;AAC9D,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,QAAQ,CAAC,EAAE,KAAK,WAAW;AACnE,YAAM,KACH,QAAQ,QAAQ,EAChB,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,WAAW,CAAC,EAAE,CAAC,EAC/D,MAAM,EACN,aAAa,EAAE,OAAO,WAAW,CAAC;AACrC,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC,EAAE,KAAK,oBAAoB;AACrF,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,OAAO,CAAC,EAAE,KAAK,QAAQ;AAC/D,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC,EAAE,KAAK,IAAI;AACrE,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,cAAc,CAAC,EAAE,KAAK,OAAO;AACrE,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,8BAA8B,CAAC,EAAE,MAAM;AAE9E,YAAM,OAAO,KAAK,UAAU,aAAa,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAAA,IACzE,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-007: Create Deal", () => {
|
|
6
|
-
test("should create a deal with value, probability, close date and company association", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let companyId = null;
|
|
9
|
-
let dealId = null;
|
|
10
|
-
const companyName = `QA TC-CRM-007 Co ${Date.now()}`;
|
|
11
|
-
const dealTitle = `QA TC-CRM-007 Deal ${Date.now()}`;
|
|
12
|
-
try {
|
|
13
|
-
token = await getAuthToken(request);
|
|
14
|
-
companyId = await createCompanyFixture(request, token, companyName);
|
|
15
|
-
await login(page, "admin");
|
|
16
|
-
await page.goto("/backend/customers/deals/create");
|
|
17
|
-
await page.locator("form").getByRole("textbox").first().fill(dealTitle);
|
|
18
|
-
await page.locator("select").filter({ has: page.locator("option", { hasText: "Open" }) }).first().selectOption({ label: "Open" });
|
|
19
|
-
await page.locator("select").filter({ has: page.locator("option", { hasText: "Opportunity" }) }).first().selectOption({ label: "Opportunity" });
|
|
20
|
-
await page.getByRole("spinbutton").first().fill("25000");
|
|
21
|
-
await page.locator("select").filter({ has: page.locator("option", { hasText: /USD/i }) }).first().selectOption({ index: 1 });
|
|
22
|
-
await page.getByRole("spinbutton").nth(1).fill("60");
|
|
23
|
-
await page.locator('input[type="date"]').fill("2026-12-31");
|
|
24
|
-
const companySearch = page.getByRole("textbox", { name: /Search companies/i });
|
|
25
|
-
await companySearch.fill(companyName);
|
|
26
|
-
await page.getByRole("button", { name: companyName, exact: true }).click();
|
|
27
|
-
await page.getByRole("button", { name: "Create deal" }).first().click();
|
|
28
|
-
await expect(page).toHaveURL(/\/backend\/customers\/deals$/i);
|
|
29
|
-
await page.getByRole("textbox", { name: /Search deals/i }).fill(dealTitle);
|
|
30
|
-
const dealRow = page.getByRole("row", { name: new RegExp(dealTitle) });
|
|
31
|
-
await expect(dealRow).toBeVisible();
|
|
32
|
-
await dealRow.click();
|
|
33
|
-
await expect(page).toHaveURL(/\/backend\/customers\/deals\/[0-9a-f-]{36}$/i);
|
|
34
|
-
await expect(page.getByText(dealTitle, { exact: true }).first()).toBeVisible();
|
|
35
|
-
const idMatch = page.url().match(/\/backend\/customers\/deals\/([0-9a-f-]{36})$/i);
|
|
36
|
-
dealId = idMatch?.[1] ?? null;
|
|
37
|
-
expect(dealId, "Expected created deal id in detail URL").toBeTruthy();
|
|
38
|
-
} finally {
|
|
39
|
-
await deleteEntityIfExists(request, token, "/api/customers/deals", dealId);
|
|
40
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", companyId);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=TC-CRM-007.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-007.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-007: Create Deal\n * Source: .ai/qa/scenarios/TC-CRM-007-deal-creation.md\n */\ntest.describe('TC-CRM-007: Create Deal', () => {\n test('should create a deal with value, probability, close date and company association', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n let dealId: string | null = null;\n\n const companyName = `QA TC-CRM-007 Co ${Date.now()}`;\n const dealTitle = `QA TC-CRM-007 Deal ${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, companyName);\n\n await login(page, 'admin');\n await page.goto('/backend/customers/deals/create');\n\n await page.locator('form').getByRole('textbox').first().fill(dealTitle);\n await page.locator('select').filter({ has: page.locator('option', { hasText: 'Open' }) }).first().selectOption({ label: 'Open' });\n await page.locator('select').filter({ has: page.locator('option', { hasText: 'Opportunity' }) }).first().selectOption({ label: 'Opportunity' });\n await page.getByRole('spinbutton').first().fill('25000');\n await page.locator('select').filter({ has: page.locator('option', { hasText: /USD/i }) }).first().selectOption({ index: 1 });\n await page.getByRole('spinbutton').nth(1).fill('60');\n await page.locator('input[type=\"date\"]').fill('2026-12-31');\n\n const companySearch = page.getByRole('textbox', { name: /Search companies/i });\n await companySearch.fill(companyName);\n await page.getByRole('button', { name: companyName, exact: true }).click();\n\n await page.getByRole('button', { name: 'Create deal' }).first().click();\n\n await expect(page).toHaveURL(/\\/backend\\/customers\\/deals$/i);\n await page.getByRole('textbox', { name: /Search deals/i }).fill(dealTitle);\n const dealRow = page.getByRole('row', { name: new RegExp(dealTitle) });\n await expect(dealRow).toBeVisible();\n await dealRow.click();\n\n await expect(page).toHaveURL(/\\/backend\\/customers\\/deals\\/[0-9a-f-]{36}$/i);\n await expect(page.getByText(dealTitle, { exact: true }).first()).toBeVisible();\n\n const idMatch = page.url().match(/\\/backend\\/customers\\/deals\\/([0-9a-f-]{36})$/i);\n dealId = idMatch?.[1] ?? null;\n expect(dealId, 'Expected created deal id in detail URL').toBeTruthy();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/deals', dealId);\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,4BAA4B;AAC3D,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,2BAA2B,MAAM;AAC7C,OAAK,oFAAoF,OAAO,EAAE,MAAM,QAAQ,MAAM;AACpH,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAC/B,QAAI,SAAwB;AAE5B,UAAM,cAAc,oBAAoB,KAAK,IAAI,CAAC;AAClD,UAAM,YAAY,sBAAsB,KAAK,IAAI,CAAC;AAElD,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAElE,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,iCAAiC;AAEjD,YAAM,KAAK,QAAQ,MAAM,EAAE,UAAU,SAAS,EAAE,MAAM,EAAE,KAAK,SAAS;AACtE,YAAM,KAAK,QAAQ,QAAQ,EAAE,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,OAAO,CAAC;AAChI,YAAM,KAAK,QAAQ,QAAQ,EAAE,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,cAAc,CAAC;AAC9I,YAAM,KAAK,UAAU,YAAY,EAAE,MAAM,EAAE,KAAK,OAAO;AACvD,YAAM,KAAK,QAAQ,QAAQ,EAAE,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAC3H,YAAM,KAAK,UAAU,YAAY,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI;AACnD,YAAM,KAAK,QAAQ,oBAAoB,EAAE,KAAK,YAAY;AAE1D,YAAM,gBAAgB,KAAK,UAAU,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAM,cAAc,KAAK,WAAW;AACpC,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,EAAE,MAAM;AAEzE,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM;AAEtE,YAAM,OAAO,IAAI,EAAE,UAAU,+BAA+B;AAC5D,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,gBAAgB,CAAC,EAAE,KAAK,SAAS;AACzE,YAAM,UAAU,KAAK,UAAU,OAAO,EAAE,MAAM,IAAI,OAAO,SAAS,EAAE,CAAC;AACrE,YAAM,OAAO,OAAO,EAAE,YAAY;AAClC,YAAM,QAAQ,MAAM;AAEpB,YAAM,OAAO,IAAI,EAAE,UAAU,8CAA8C;AAC3E,YAAM,OAAO,KAAK,UAAU,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY;AAE7E,YAAM,UAAU,KAAK,IAAI,EAAE,MAAM,gDAAgD;AACjF,eAAS,UAAU,CAAC,KAAK;AACzB,aAAO,QAAQ,wCAAwC,EAAE,WAAW;AAAA,IACtE,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,wBAAwB,MAAM;AACzE,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, createDealFixture, createPersonFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-008: Add Participants to Deal", () => {
|
|
6
|
-
test("should add a person and an additional company as deal participants", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let primaryCompanyId = null;
|
|
9
|
-
let secondaryCompanyId = null;
|
|
10
|
-
let personId = null;
|
|
11
|
-
let dealId = null;
|
|
12
|
-
const primaryCompanyName = `QA TC-CRM-008 Primary ${Date.now()}`;
|
|
13
|
-
const secondaryCompanyName = `QA TC-CRM-008 Secondary ${Date.now()}`;
|
|
14
|
-
const firstName = `QA${Date.now()}`;
|
|
15
|
-
const lastName = "Participant";
|
|
16
|
-
const displayName = `${firstName} ${lastName}`;
|
|
17
|
-
try {
|
|
18
|
-
token = await getAuthToken(request);
|
|
19
|
-
primaryCompanyId = await createCompanyFixture(request, token, primaryCompanyName);
|
|
20
|
-
secondaryCompanyId = await createCompanyFixture(request, token, secondaryCompanyName);
|
|
21
|
-
personId = await createPersonFixture(request, token, {
|
|
22
|
-
firstName,
|
|
23
|
-
lastName,
|
|
24
|
-
displayName,
|
|
25
|
-
companyEntityId: primaryCompanyId
|
|
26
|
-
});
|
|
27
|
-
dealId = await createDealFixture(request, token, {
|
|
28
|
-
title: `QA TC-CRM-008 Deal ${Date.now()}`,
|
|
29
|
-
companyIds: [primaryCompanyId]
|
|
30
|
-
});
|
|
31
|
-
await login(page, "admin");
|
|
32
|
-
await page.goto(`/backend/customers/deals/${dealId}`);
|
|
33
|
-
await page.getByRole("textbox", { name: "Search people\u2026" }).fill(displayName);
|
|
34
|
-
await page.getByRole("button", { name: new RegExp(displayName) }).first().click();
|
|
35
|
-
await page.getByRole("textbox", { name: "Search companies\u2026" }).fill(secondaryCompanyName);
|
|
36
|
-
await page.getByRole("button", { name: secondaryCompanyName, exact: true }).first().click();
|
|
37
|
-
await page.getByRole("button", { name: /Update deal/i }).click();
|
|
38
|
-
await expect(page.getByRole("button", { name: new RegExp(`Remove ${displayName}`) })).toBeVisible();
|
|
39
|
-
await expect(page.getByRole("button", { name: new RegExp(`Remove ${secondaryCompanyName}`) })).toBeVisible();
|
|
40
|
-
await expect(page.getByRole("link", { name: displayName, exact: true })).toBeVisible();
|
|
41
|
-
await expect(page.getByRole("link", { name: secondaryCompanyName, exact: true })).toBeVisible();
|
|
42
|
-
} finally {
|
|
43
|
-
await deleteEntityIfExists(request, token, "/api/customers/deals", dealId);
|
|
44
|
-
await deleteEntityIfExists(request, token, "/api/customers/people", personId);
|
|
45
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", secondaryCompanyId);
|
|
46
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", primaryCompanyId);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=TC-CRM-008.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-008.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, createDealFixture, createPersonFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-008: Add Participants to Deal\n * Source: .ai/qa/scenarios/TC-CRM-008-deal-participant-add.md\n */\ntest.describe('TC-CRM-008: Add Participants to Deal', () => {\n test('should add a person and an additional company as deal participants', async ({ page, request }) => {\n let token: string | null = null;\n let primaryCompanyId: string | null = null;\n let secondaryCompanyId: string | null = null;\n let personId: string | null = null;\n let dealId: string | null = null;\n\n const primaryCompanyName = `QA TC-CRM-008 Primary ${Date.now()}`;\n const secondaryCompanyName = `QA TC-CRM-008 Secondary ${Date.now()}`;\n const firstName = `QA${Date.now()}`;\n const lastName = 'Participant';\n const displayName = `${firstName} ${lastName}`;\n\n try {\n token = await getAuthToken(request);\n primaryCompanyId = await createCompanyFixture(request, token, primaryCompanyName);\n secondaryCompanyId = await createCompanyFixture(request, token, secondaryCompanyName);\n personId = await createPersonFixture(request, token, {\n firstName,\n lastName,\n displayName,\n companyEntityId: primaryCompanyId,\n });\n dealId = await createDealFixture(request, token, {\n title: `QA TC-CRM-008 Deal ${Date.now()}`,\n companyIds: [primaryCompanyId],\n });\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/deals/${dealId}`);\n\n await page.getByRole('textbox', { name: 'Search people\u2026' }).fill(displayName);\n await page.getByRole('button', { name: new RegExp(displayName) }).first().click();\n\n await page.getByRole('textbox', { name: 'Search companies\u2026' }).fill(secondaryCompanyName);\n await page.getByRole('button', { name: secondaryCompanyName, exact: true }).first().click();\n\n await page.getByRole('button', { name: /Update deal/i }).click();\n\n await expect(page.getByRole('button', { name: new RegExp(`Remove ${displayName}`) })).toBeVisible();\n await expect(page.getByRole('button', { name: new RegExp(`Remove ${secondaryCompanyName}`) })).toBeVisible();\n\n await expect(page.getByRole('link', { name: displayName, exact: true })).toBeVisible();\n await expect(page.getByRole('link', { name: secondaryCompanyName, exact: true })).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/deals', dealId);\n await deleteEntityIfExists(request, token, '/api/customers/people', personId);\n await deleteEntityIfExists(request, token, '/api/customers/companies', secondaryCompanyId);\n await deleteEntityIfExists(request, token, '/api/customers/companies', primaryCompanyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,mBAAmB,qBAAqB,4BAA4B;AACnG,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,wCAAwC,MAAM;AAC1D,OAAK,sEAAsE,OAAO,EAAE,MAAM,QAAQ,MAAM;AACtG,QAAI,QAAuB;AAC3B,QAAI,mBAAkC;AACtC,QAAI,qBAAoC;AACxC,QAAI,WAA0B;AAC9B,QAAI,SAAwB;AAE5B,UAAM,qBAAqB,yBAAyB,KAAK,IAAI,CAAC;AAC9D,UAAM,uBAAuB,2BAA2B,KAAK,IAAI,CAAC;AAClE,UAAM,YAAY,KAAK,KAAK,IAAI,CAAC;AACjC,UAAM,WAAW;AACjB,UAAM,cAAc,GAAG,SAAS,IAAI,QAAQ;AAE5C,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,yBAAmB,MAAM,qBAAqB,SAAS,OAAO,kBAAkB;AAChF,2BAAqB,MAAM,qBAAqB,SAAS,OAAO,oBAAoB;AACpF,iBAAW,MAAM,oBAAoB,SAAS,OAAO;AAAA,QACnD;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,MACnB,CAAC;AACD,eAAS,MAAM,kBAAkB,SAAS,OAAO;AAAA,QAC/C,OAAO,sBAAsB,KAAK,IAAI,CAAC;AAAA,QACvC,YAAY,CAAC,gBAAgB;AAAA,MAC/B,CAAC;AAED,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,4BAA4B,MAAM,EAAE;AAEpD,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,sBAAiB,CAAC,EAAE,KAAK,WAAW;AAC5E,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,IAAI,OAAO,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM;AAEhF,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,yBAAoB,CAAC,EAAE,KAAK,oBAAoB;AACxF,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,sBAAsB,OAAO,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM;AAE1F,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,eAAe,CAAC,EAAE,MAAM;AAE/D,YAAM,OAAO,KAAK,UAAU,UAAU,EAAE,MAAM,IAAI,OAAO,UAAU,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY;AAClG,YAAM,OAAO,KAAK,UAAU,UAAU,EAAE,MAAM,IAAI,OAAO,UAAU,oBAAoB,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY;AAE3G,YAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AACrF,YAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,sBAAsB,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAAA,IAChG,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,wBAAwB,MAAM;AACzE,YAAM,qBAAqB,SAAS,OAAO,yBAAyB,QAAQ;AAC5E,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,kBAAkB;AACzF,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,gBAAgB;AAAA,IACzF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, createDealFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-009: Update Deal Pipeline Stage", () => {
|
|
6
|
-
test("should update a deal pipeline stage to Win and reflect it in the pipeline board", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let companyId = null;
|
|
9
|
-
let dealId = null;
|
|
10
|
-
const companyName = `QA TC-CRM-009 Co ${Date.now()}`;
|
|
11
|
-
const dealTitle = `QA TC-CRM-009 Deal ${Date.now()}`;
|
|
12
|
-
try {
|
|
13
|
-
token = await getAuthToken(request);
|
|
14
|
-
companyId = await createCompanyFixture(request, token, companyName);
|
|
15
|
-
dealId = await createDealFixture(request, token, {
|
|
16
|
-
title: dealTitle,
|
|
17
|
-
companyIds: [companyId]
|
|
18
|
-
});
|
|
19
|
-
await login(page, "admin");
|
|
20
|
-
await page.goto(`/backend/customers/deals/${dealId}`);
|
|
21
|
-
await page.locator("select").filter({ has: page.locator("option", { hasText: "Win" }) }).nth(1).selectOption({ label: "Win" });
|
|
22
|
-
await page.getByRole("button", { name: /Update deal/i }).click();
|
|
23
|
-
await expect(page.getByText(/Win/i).first()).toBeVisible();
|
|
24
|
-
await page.goto("/backend/customers/deals/pipeline");
|
|
25
|
-
const winLane = page.locator("main").locator("div").filter({ has: page.getByText("Win", { exact: true }) }).first();
|
|
26
|
-
await expect(winLane.getByText(dealTitle, { exact: true })).toBeVisible();
|
|
27
|
-
} finally {
|
|
28
|
-
await deleteEntityIfExists(request, token, "/api/customers/deals", dealId);
|
|
29
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", companyId);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
//# sourceMappingURL=TC-CRM-009.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-009.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, createDealFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-009: Update Deal Pipeline Stage\n * Source: .ai/qa/scenarios/TC-CRM-009-deal-pipeline-update.md\n */\ntest.describe('TC-CRM-009: Update Deal Pipeline Stage', () => {\n test('should update a deal pipeline stage to Win and reflect it in the pipeline board', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n let dealId: string | null = null;\n\n const companyName = `QA TC-CRM-009 Co ${Date.now()}`;\n const dealTitle = `QA TC-CRM-009 Deal ${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, companyName);\n dealId = await createDealFixture(request, token, {\n title: dealTitle,\n companyIds: [companyId],\n });\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/deals/${dealId}`);\n\n await page\n .locator('select')\n .filter({ has: page.locator('option', { hasText: 'Win' }) })\n .nth(1)\n .selectOption({ label: 'Win' });\n await page.getByRole('button', { name: /Update deal/i }).click();\n await expect(page.getByText(/Win/i).first()).toBeVisible();\n\n await page.goto('/backend/customers/deals/pipeline');\n const winLane = page.locator('main').locator('div').filter({ has: page.getByText('Win', { exact: true }) }).first();\n await expect(winLane.getByText(dealTitle, { exact: true })).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/deals', dealId);\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,mBAAmB,4BAA4B;AAC9E,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,0CAA0C,MAAM;AAC5D,OAAK,mFAAmF,OAAO,EAAE,MAAM,QAAQ,MAAM;AACnH,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAC/B,QAAI,SAAwB;AAE5B,UAAM,cAAc,oBAAoB,KAAK,IAAI,CAAC;AAClD,UAAM,YAAY,sBAAsB,KAAK,IAAI,CAAC;AAElD,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAClE,eAAS,MAAM,kBAAkB,SAAS,OAAO;AAAA,QAC/C,OAAO;AAAA,QACP,YAAY,CAAC,SAAS;AAAA,MACxB,CAAC;AAED,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,4BAA4B,MAAM,EAAE;AAEpD,YAAM,KACH,QAAQ,QAAQ,EAChB,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,MAAM,CAAC,EAAE,CAAC,EAC1D,IAAI,CAAC,EACL,aAAa,EAAE,OAAO,MAAM,CAAC;AAChC,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,eAAe,CAAC,EAAE,MAAM;AAC/D,YAAM,OAAO,KAAK,UAAU,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY;AAEzD,YAAM,KAAK,KAAK,mCAAmC;AACnD,YAAM,UAAU,KAAK,QAAQ,MAAM,EAAE,QAAQ,KAAK,EAAE,OAAO,EAAE,KAAK,KAAK,UAAU,OAAO,EAAE,OAAO,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM;AAClH,YAAM,OAAO,QAAQ,UAAU,WAAW,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAAA,IAC1E,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,wBAAwB,MAAM;AACzE,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, createDealFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-010: Record Customer Activity", () => {
|
|
6
|
-
test("should record a call activity on a deal timeline", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let companyId = null;
|
|
9
|
-
let dealId = null;
|
|
10
|
-
const companyName = `QA TC-CRM-010 Co ${Date.now()}`;
|
|
11
|
-
const dealTitle = `QA TC-CRM-010 Deal ${Date.now()}`;
|
|
12
|
-
const subject = `QA TC-CRM-010 Activity ${Date.now()}`;
|
|
13
|
-
try {
|
|
14
|
-
token = await getAuthToken(request);
|
|
15
|
-
companyId = await createCompanyFixture(request, token, companyName);
|
|
16
|
-
dealId = await createDealFixture(request, token, {
|
|
17
|
-
title: dealTitle,
|
|
18
|
-
companyIds: [companyId]
|
|
19
|
-
});
|
|
20
|
-
await login(page, "admin");
|
|
21
|
-
await page.goto(`/backend/customers/deals/${dealId}`);
|
|
22
|
-
await page.getByRole("button", { name: "Activities" }).click();
|
|
23
|
-
await page.getByRole("button", { name: /Log activity|Add an activity/i }).first().click();
|
|
24
|
-
const dialog = page.getByRole("dialog", { name: "Add activity" });
|
|
25
|
-
await dialog.getByRole("combobox").nth(1).selectOption({ label: dealTitle });
|
|
26
|
-
await dialog.getByRole("combobox").nth(2).selectOption({ label: "Call" });
|
|
27
|
-
await dialog.getByRole("textbox", { name: "Add a subject (optional)" }).fill(subject);
|
|
28
|
-
await dialog.getByRole("textbox", { name: "Describe the interaction" }).fill("QA activity body for TC-CRM-010");
|
|
29
|
-
await dialog.getByRole("button", { name: /Save activity/i }).click();
|
|
30
|
-
await expect(dialog).toBeHidden();
|
|
31
|
-
await expect(page.getByText("No activities yet")).not.toBeVisible();
|
|
32
|
-
await expect(page.getByText(subject).first()).toBeVisible();
|
|
33
|
-
} finally {
|
|
34
|
-
await deleteEntityIfExists(request, token, "/api/customers/deals", dealId);
|
|
35
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", companyId);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=TC-CRM-010.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-010.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, createDealFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-010: Record Customer Activity\n * Source: .ai/qa/scenarios/TC-CRM-010-activity-recording.md\n */\ntest.describe('TC-CRM-010: Record Customer Activity', () => {\n test('should record a call activity on a deal timeline', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n let dealId: string | null = null;\n\n const companyName = `QA TC-CRM-010 Co ${Date.now()}`;\n const dealTitle = `QA TC-CRM-010 Deal ${Date.now()}`;\n const subject = `QA TC-CRM-010 Activity ${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, companyName);\n dealId = await createDealFixture(request, token, {\n title: dealTitle,\n companyIds: [companyId],\n });\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/deals/${dealId}`);\n\n await page.getByRole('button', { name: 'Activities' }).click();\n await page.getByRole('button', { name: /Log activity|Add an activity/i }).first().click();\n\n const dialog = page.getByRole('dialog', { name: 'Add activity' });\n await dialog.getByRole('combobox').nth(1).selectOption({ label: dealTitle });\n await dialog.getByRole('combobox').nth(2).selectOption({ label: 'Call' });\n await dialog.getByRole('textbox', { name: 'Add a subject (optional)' }).fill(subject);\n await dialog.getByRole('textbox', { name: 'Describe the interaction' }).fill('QA activity body for TC-CRM-010');\n await dialog.getByRole('button', { name: /Save activity/i }).click();\n\n await expect(dialog).toBeHidden();\n await expect(page.getByText('No activities yet')).not.toBeVisible();\n await expect(page.getByText(subject).first()).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/deals', dealId);\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,mBAAmB,4BAA4B;AAC9E,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,wCAAwC,MAAM;AAC1D,OAAK,oDAAoD,OAAO,EAAE,MAAM,QAAQ,MAAM;AACpF,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAC/B,QAAI,SAAwB;AAE5B,UAAM,cAAc,oBAAoB,KAAK,IAAI,CAAC;AAClD,UAAM,YAAY,sBAAsB,KAAK,IAAI,CAAC;AAClD,UAAM,UAAU,0BAA0B,KAAK,IAAI,CAAC;AAEpD,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAClE,eAAS,MAAM,kBAAkB,SAAS,OAAO;AAAA,QAC/C,OAAO;AAAA,QACP,YAAY,CAAC,SAAS;AAAA,MACxB,CAAC;AAED,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,4BAA4B,MAAM,EAAE;AAEpD,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,aAAa,CAAC,EAAE,MAAM;AAC7D,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,gCAAgC,CAAC,EAAE,MAAM,EAAE,MAAM;AAExF,YAAM,SAAS,KAAK,UAAU,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,YAAM,OAAO,UAAU,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,UAAU,CAAC;AAC3E,YAAM,OAAO,UAAU,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,OAAO,CAAC;AACxE,YAAM,OAAO,UAAU,WAAW,EAAE,MAAM,2BAA2B,CAAC,EAAE,KAAK,OAAO;AACpF,YAAM,OAAO,UAAU,WAAW,EAAE,MAAM,2BAA2B,CAAC,EAAE,KAAK,iCAAiC;AAC9G,YAAM,OAAO,UAAU,UAAU,EAAE,MAAM,iBAAiB,CAAC,EAAE,MAAM;AAEnE,YAAM,OAAO,MAAM,EAAE,WAAW;AAChC,YAAM,OAAO,KAAK,UAAU,mBAAmB,CAAC,EAAE,IAAI,YAAY;AAClE,YAAM,OAAO,KAAK,UAAU,OAAO,EAAE,MAAM,CAAC,EAAE,YAAY;AAAA,IAC5D,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,wBAAwB,MAAM;AACzE,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, createDealFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-011: Add Comment to Customer", () => {
|
|
6
|
-
test("should add multiple internal notes on a deal record", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let companyId = null;
|
|
9
|
-
let dealId = null;
|
|
10
|
-
const companyName = `QA TC-CRM-011 Co ${Date.now()}`;
|
|
11
|
-
const noteOne = `QA TC-CRM-011 note one ${Date.now()}`;
|
|
12
|
-
const noteTwo = `QA TC-CRM-011 note two ${Date.now()}`;
|
|
13
|
-
try {
|
|
14
|
-
token = await getAuthToken(request);
|
|
15
|
-
companyId = await createCompanyFixture(request, token, companyName);
|
|
16
|
-
dealId = await createDealFixture(request, token, {
|
|
17
|
-
title: `QA TC-CRM-011 Deal ${Date.now()}`,
|
|
18
|
-
companyIds: [companyId]
|
|
19
|
-
});
|
|
20
|
-
await login(page, "admin");
|
|
21
|
-
await page.goto(`/backend/customers/deals/${dealId}`);
|
|
22
|
-
await page.getByRole("button", { name: "Notes" }).click();
|
|
23
|
-
await page.getByRole("button", { name: /Add a note|Write the first note/i }).first().click();
|
|
24
|
-
const noteInput = page.getByRole("textbox", { name: /Write a note/i }).first();
|
|
25
|
-
await noteInput.fill(noteOne);
|
|
26
|
-
await page.getByRole("button", { name: /Add note/i }).first().click();
|
|
27
|
-
await expect(page.getByText(noteOne)).toBeVisible();
|
|
28
|
-
await noteInput.fill(noteTwo);
|
|
29
|
-
await page.getByRole("button", { name: /Add note/i }).first().click();
|
|
30
|
-
await expect(page.getByText(noteTwo)).toBeVisible();
|
|
31
|
-
} finally {
|
|
32
|
-
await deleteEntityIfExists(request, token, "/api/customers/deals", dealId);
|
|
33
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", companyId);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
//# sourceMappingURL=TC-CRM-011.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-011.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, createDealFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-011: Add Comment to Customer\n * Source: .ai/qa/scenarios/TC-CRM-011-comment-adding.md\n */\ntest.describe('TC-CRM-011: Add Comment to Customer', () => {\n test('should add multiple internal notes on a deal record', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n let dealId: string | null = null;\n\n const companyName = `QA TC-CRM-011 Co ${Date.now()}`;\n const noteOne = `QA TC-CRM-011 note one ${Date.now()}`;\n const noteTwo = `QA TC-CRM-011 note two ${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, companyName);\n dealId = await createDealFixture(request, token, {\n title: `QA TC-CRM-011 Deal ${Date.now()}`,\n companyIds: [companyId],\n });\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/deals/${dealId}`);\n\n await page.getByRole('button', { name: 'Notes' }).click();\n await page.getByRole('button', { name: /Add a note|Write the first note/i }).first().click();\n\n const noteInput = page.getByRole('textbox', { name: /Write a note/i }).first();\n await noteInput.fill(noteOne);\n await page.getByRole('button', { name: /Add note/i }).first().click();\n await expect(page.getByText(noteOne)).toBeVisible();\n\n await noteInput.fill(noteTwo);\n await page.getByRole('button', { name: /Add note/i }).first().click();\n await expect(page.getByText(noteTwo)).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/deals', dealId);\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,mBAAmB,4BAA4B;AAC9E,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,uCAAuC,MAAM;AACzD,OAAK,uDAAuD,OAAO,EAAE,MAAM,QAAQ,MAAM;AACvF,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAC/B,QAAI,SAAwB;AAE5B,UAAM,cAAc,oBAAoB,KAAK,IAAI,CAAC;AAClD,UAAM,UAAU,0BAA0B,KAAK,IAAI,CAAC;AACpD,UAAM,UAAU,0BAA0B,KAAK,IAAI,CAAC;AAEpD,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAClE,eAAS,MAAM,kBAAkB,SAAS,OAAO;AAAA,QAC/C,OAAO,sBAAsB,KAAK,IAAI,CAAC;AAAA,QACvC,YAAY,CAAC,SAAS;AAAA,MACxB,CAAC;AAED,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,4BAA4B,MAAM,EAAE;AAEpD,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM;AACxD,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,mCAAmC,CAAC,EAAE,MAAM,EAAE,MAAM;AAE3F,YAAM,YAAY,KAAK,UAAU,WAAW,EAAE,MAAM,gBAAgB,CAAC,EAAE,MAAM;AAC7E,YAAM,UAAU,KAAK,OAAO;AAC5B,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM;AACpE,YAAM,OAAO,KAAK,UAAU,OAAO,CAAC,EAAE,YAAY;AAElD,YAAM,UAAU,KAAK,OAAO;AAC5B,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM;AACpE,YAAM,OAAO,KAAK,UAAU,OAAO,CAAC,EAAE,YAAY;AAAA,IACpD,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,wBAAwB,MAAM;AACzE,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-012: Tag Customers for Segmentation", () => {
|
|
6
|
-
test("should assign multiple tags to a company and filter list by assigned tag", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let companyId = null;
|
|
9
|
-
const companyName = `QA TC-CRM-012 Co ${Date.now()}`;
|
|
10
|
-
const tagOne = `qa-seg-${Date.now()}`;
|
|
11
|
-
const tagTwo = `qa-tier-${Date.now()}`;
|
|
12
|
-
try {
|
|
13
|
-
token = await getAuthToken(request);
|
|
14
|
-
companyId = await createCompanyFixture(request, token, companyName);
|
|
15
|
-
await login(page, "admin");
|
|
16
|
-
await page.goto(`/backend/customers/companies/${companyId}`);
|
|
17
|
-
await page.getByRole("heading", { name: "Tags" }).locator("xpath=ancestor::div[1]").getByRole("button").click();
|
|
18
|
-
const tagInput = page.getByRole("textbox", { name: "Type to add tags" });
|
|
19
|
-
await tagInput.fill(tagOne);
|
|
20
|
-
await tagInput.press("Enter");
|
|
21
|
-
await tagInput.fill(tagTwo);
|
|
22
|
-
await tagInput.press("Enter");
|
|
23
|
-
await page.getByRole("button", { name: /Save .*Ctrl\+Enter/i }).click();
|
|
24
|
-
await expect(page.getByText(tagOne)).toBeVisible();
|
|
25
|
-
await expect(page.getByText(tagTwo)).toBeVisible();
|
|
26
|
-
await page.goto("/backend/customers/companies");
|
|
27
|
-
await page.getByRole("button", { name: "Filters" }).click();
|
|
28
|
-
const filterTagInput = page.getByRole("textbox", { name: "Add tag and press Enter" });
|
|
29
|
-
await filterTagInput.fill(tagOne);
|
|
30
|
-
await filterTagInput.press("Enter");
|
|
31
|
-
await page.getByRole("button", { name: "Apply" }).last().click();
|
|
32
|
-
await expect(page.getByRole("link", { name: companyName, exact: true })).toBeVisible();
|
|
33
|
-
} finally {
|
|
34
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", companyId);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
//# sourceMappingURL=TC-CRM-012.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-012.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-012: Tag Customers for Segmentation\n * Source: .ai/qa/scenarios/TC-CRM-012-customer-tagging.md\n */\ntest.describe('TC-CRM-012: Tag Customers for Segmentation', () => {\n test('should assign multiple tags to a company and filter list by assigned tag', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n\n const companyName = `QA TC-CRM-012 Co ${Date.now()}`;\n const tagOne = `qa-seg-${Date.now()}`;\n const tagTwo = `qa-tier-${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, companyName);\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/companies/${companyId}`);\n\n await page.getByRole('heading', { name: 'Tags' }).locator('xpath=ancestor::div[1]').getByRole('button').click();\n const tagInput = page.getByRole('textbox', { name: 'Type to add tags' });\n await tagInput.fill(tagOne);\n await tagInput.press('Enter');\n await tagInput.fill(tagTwo);\n await tagInput.press('Enter');\n await page.getByRole('button', { name: /Save .*Ctrl\\+Enter/i }).click();\n\n await expect(page.getByText(tagOne)).toBeVisible();\n await expect(page.getByText(tagTwo)).toBeVisible();\n\n await page.goto('/backend/customers/companies');\n await page.getByRole('button', { name: 'Filters' }).click();\n const filterTagInput = page.getByRole('textbox', { name: 'Add tag and press Enter' });\n await filterTagInput.fill(tagOne);\n await filterTagInput.press('Enter');\n await page.getByRole('button', { name: 'Apply' }).last().click();\n\n await expect(page.getByRole('link', { name: companyName, exact: true })).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,4BAA4B;AAC3D,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,8CAA8C,MAAM;AAChE,OAAK,4EAA4E,OAAO,EAAE,MAAM,QAAQ,MAAM;AAC5G,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAE/B,UAAM,cAAc,oBAAoB,KAAK,IAAI,CAAC;AAClD,UAAM,SAAS,UAAU,KAAK,IAAI,CAAC;AACnC,UAAM,SAAS,WAAW,KAAK,IAAI,CAAC;AAEpC,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAElE,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,gCAAgC,SAAS,EAAE;AAE3D,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,OAAO,CAAC,EAAE,QAAQ,wBAAwB,EAAE,UAAU,QAAQ,EAAE,MAAM;AAC9G,YAAM,WAAW,KAAK,UAAU,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAM,SAAS,KAAK,MAAM;AAC1B,YAAM,SAAS,MAAM,OAAO;AAC5B,YAAM,SAAS,KAAK,MAAM;AAC1B,YAAM,SAAS,MAAM,OAAO;AAC5B,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,sBAAsB,CAAC,EAAE,MAAM;AAEtE,YAAM,OAAO,KAAK,UAAU,MAAM,CAAC,EAAE,YAAY;AACjD,YAAM,OAAO,KAAK,UAAU,MAAM,CAAC,EAAE,YAAY;AAEjD,YAAM,KAAK,KAAK,8BAA8B;AAC9C,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,UAAU,CAAC,EAAE,MAAM;AAC1D,YAAM,iBAAiB,KAAK,UAAU,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpF,YAAM,eAAe,KAAK,MAAM;AAChC,YAAM,eAAe,MAAM,OAAO;AAClC,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM;AAE/D,YAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAAA,IACvF,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, createDealFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-013: Pipeline View Navigation", () => {
|
|
6
|
-
test("should display pipeline columns, show deal card info, open detail, and return to list view", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let companyId = null;
|
|
9
|
-
let dealId = null;
|
|
10
|
-
const companyName = `QA TC-CRM-013 Co ${Date.now()}`;
|
|
11
|
-
const dealTitle = `QA TC-CRM-013 Deal ${Date.now()}`;
|
|
12
|
-
try {
|
|
13
|
-
token = await getAuthToken(request);
|
|
14
|
-
companyId = await createCompanyFixture(request, token, companyName);
|
|
15
|
-
dealId = await createDealFixture(request, token, {
|
|
16
|
-
title: dealTitle,
|
|
17
|
-
companyIds: [companyId]
|
|
18
|
-
});
|
|
19
|
-
await login(page, "admin");
|
|
20
|
-
await page.goto(`/backend/customers/deals/${dealId}`);
|
|
21
|
-
await page.locator("select").filter({ has: page.locator("option", { hasText: "Opportunity" }) }).first().selectOption({ label: "Opportunity" });
|
|
22
|
-
await page.getByRole("button", { name: /Update deal/i }).click();
|
|
23
|
-
await page.goto("/backend/customers/deals/pipeline");
|
|
24
|
-
await expect(page.getByRole("heading", { name: "Sales Pipeline" })).toBeVisible();
|
|
25
|
-
await expect(page.getByText("Opportunity", { exact: true })).toBeVisible();
|
|
26
|
-
await expect(page.getByText("Win", { exact: true })).toBeVisible();
|
|
27
|
-
const dealCard = page.locator("div").filter({ has: page.getByText(dealTitle, { exact: true }) }).first();
|
|
28
|
-
await expect(dealCard).toBeVisible();
|
|
29
|
-
await expect(page.getByText("$", { exact: false }).first()).toBeVisible();
|
|
30
|
-
await page.locator(`a[href="/backend/customers/deals/${dealId}"]`).click();
|
|
31
|
-
await expect(page).toHaveURL(new RegExp(`/backend/customers/deals/${dealId}$`));
|
|
32
|
-
await expect(page.getByText(dealTitle, { exact: true }).first()).toBeVisible();
|
|
33
|
-
await page.goto("/backend/customers/deals");
|
|
34
|
-
await expect(page.getByRole("heading", { name: "Deals" })).toBeVisible();
|
|
35
|
-
await page.getByRole("textbox", { name: /Search deals/i }).fill(dealTitle);
|
|
36
|
-
await expect(page.getByRole("row", { name: new RegExp(dealTitle) })).toBeVisible();
|
|
37
|
-
} finally {
|
|
38
|
-
await deleteEntityIfExists(request, token, "/api/customers/deals", dealId);
|
|
39
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", companyId);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=TC-CRM-013.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-013.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, createDealFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-013: Pipeline View Navigation\n * Source: .ai/qa/scenarios/TC-CRM-013-pipeline-view-navigation.md\n */\ntest.describe('TC-CRM-013: Pipeline View Navigation', () => {\n test('should display pipeline columns, show deal card info, open detail, and return to list view', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n let dealId: string | null = null;\n\n const companyName = `QA TC-CRM-013 Co ${Date.now()}`;\n const dealTitle = `QA TC-CRM-013 Deal ${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, companyName);\n dealId = await createDealFixture(request, token, {\n title: dealTitle,\n companyIds: [companyId],\n });\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/deals/${dealId}`);\n await page\n .locator('select')\n .filter({ has: page.locator('option', { hasText: 'Opportunity' }) })\n .first()\n .selectOption({ label: 'Opportunity' });\n await page.getByRole('button', { name: /Update deal/i }).click();\n\n await page.goto('/backend/customers/deals/pipeline');\n await expect(page.getByRole('heading', { name: 'Sales Pipeline' })).toBeVisible();\n await expect(page.getByText('Opportunity', { exact: true })).toBeVisible();\n await expect(page.getByText('Win', { exact: true })).toBeVisible();\n\n const dealCard = page\n .locator('div')\n .filter({ has: page.getByText(dealTitle, { exact: true }) })\n .first();\n await expect(dealCard).toBeVisible();\n await expect(page.getByText('$', { exact: false }).first()).toBeVisible();\n\n await page.locator(`a[href=\\\"/backend/customers/deals/${dealId}\\\"]`).click();\n await expect(page).toHaveURL(new RegExp(`/backend/customers/deals/${dealId}$`));\n await expect(page.getByText(dealTitle, { exact: true }).first()).toBeVisible();\n\n await page.goto('/backend/customers/deals');\n await expect(page.getByRole('heading', { name: 'Deals' })).toBeVisible();\n await page.getByRole('textbox', { name: /Search deals/i }).fill(dealTitle);\n await expect(page.getByRole('row', { name: new RegExp(dealTitle) })).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/deals', dealId);\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,mBAAmB,4BAA4B;AAC9E,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,wCAAwC,MAAM;AAC1D,OAAK,8FAA8F,OAAO,EAAE,MAAM,QAAQ,MAAM;AAC9H,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAC/B,QAAI,SAAwB;AAE5B,UAAM,cAAc,oBAAoB,KAAK,IAAI,CAAC;AAClD,UAAM,YAAY,sBAAsB,KAAK,IAAI,CAAC;AAElD,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAClE,eAAS,MAAM,kBAAkB,SAAS,OAAO;AAAA,QAC/C,OAAO;AAAA,QACP,YAAY,CAAC,SAAS;AAAA,MACxB,CAAC;AAED,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,4BAA4B,MAAM,EAAE;AACpD,YAAM,KACH,QAAQ,QAAQ,EAChB,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,cAAc,CAAC,EAAE,CAAC,EAClE,MAAM,EACN,aAAa,EAAE,OAAO,cAAc,CAAC;AACxC,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,eAAe,CAAC,EAAE,MAAM;AAE/D,YAAM,KAAK,KAAK,mCAAmC;AACnD,YAAM,OAAO,KAAK,UAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC,CAAC,EAAE,YAAY;AAChF,YAAM,OAAO,KAAK,UAAU,eAAe,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AACzE,YAAM,OAAO,KAAK,UAAU,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAEjE,YAAM,WAAW,KACd,QAAQ,KAAK,EACb,OAAO,EAAE,KAAK,KAAK,UAAU,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,CAAC,EAC1D,MAAM;AACT,YAAM,OAAO,QAAQ,EAAE,YAAY;AACnC,YAAM,OAAO,KAAK,UAAU,KAAK,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY;AAExE,YAAM,KAAK,QAAQ,oCAAqC,MAAM,IAAK,EAAE,MAAM;AAC3E,YAAM,OAAO,IAAI,EAAE,UAAU,IAAI,OAAO,4BAA4B,MAAM,GAAG,CAAC;AAC9E,YAAM,OAAO,KAAK,UAAU,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY;AAE7E,YAAM,KAAK,KAAK,0BAA0B;AAC1C,YAAM,OAAO,KAAK,UAAU,WAAW,EAAE,MAAM,QAAQ,CAAC,CAAC,EAAE,YAAY;AACvE,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,gBAAgB,CAAC,EAAE,KAAK,SAAS;AACzE,YAAM,OAAO,KAAK,UAAU,OAAO,EAAE,MAAM,IAAI,OAAO,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY;AAAA,IACnF,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,wBAAwB,MAAM;AACzE,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { createCompanyFixture } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
5
|
-
test.describe("TC-CRM-014: Delete Customer", () => {
|
|
6
|
-
test("should delete a company and remove it from active company list", async ({ page, request }) => {
|
|
7
|
-
const companyName = `QA TC-CRM-014 ${Date.now()}`;
|
|
8
|
-
const token = await getAuthToken(request);
|
|
9
|
-
const companyId = await createCompanyFixture(request, token, companyName);
|
|
10
|
-
await login(page, "admin");
|
|
11
|
-
await page.goto("/backend/customers/companies");
|
|
12
|
-
await page.getByRole("textbox", { name: "Search companies" }).fill(companyName);
|
|
13
|
-
await page.getByRole("link", { name: companyName, exact: true }).click();
|
|
14
|
-
await page.getByRole("button", { name: "Delete company" }).click();
|
|
15
|
-
await page.getByRole("button", { name: "Confirm" }).click();
|
|
16
|
-
await expect(page).toHaveURL(/\/backend\/customers\/companies$/);
|
|
17
|
-
await page.getByRole("textbox", { name: "Search companies" }).fill(companyName);
|
|
18
|
-
await expect(page.getByRole("link", { name: companyName, exact: true })).toHaveCount(0);
|
|
19
|
-
await page.getByRole("textbox", { name: "Search companies" }).fill(companyId);
|
|
20
|
-
await expect(page.getByText(companyId)).toHaveCount(0);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=TC-CRM-014.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-014.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { createCompanyFixture } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\n\n/**\n * TC-CRM-014: Delete Customer\n * Source: .ai/qa/scenarios/TC-CRM-014-customer-deletion.md\n */\ntest.describe('TC-CRM-014: Delete Customer', () => {\n test('should delete a company and remove it from active company list', async ({ page, request }) => {\n const companyName = `QA TC-CRM-014 ${Date.now()}`;\n const token = await getAuthToken(request);\n const companyId = await createCompanyFixture(request, token, companyName);\n\n await login(page, 'admin');\n await page.goto('/backend/customers/companies');\n await page.getByRole('textbox', { name: 'Search companies' }).fill(companyName);\n await page.getByRole('link', { name: companyName, exact: true }).click();\n\n await page.getByRole('button', { name: 'Delete company' }).click();\n await page.getByRole('button', { name: 'Confirm' }).click();\n\n await expect(page).toHaveURL(/\\/backend\\/customers\\/companies$/);\n await page.getByRole('textbox', { name: 'Search companies' }).fill(companyName);\n await expect(page.getByRole('link', { name: companyName, exact: true })).toHaveCount(0);\n\n await page.getByRole('textbox', { name: 'Search companies' }).fill(companyId);\n await expect(page.getByText(companyId)).toHaveCount(0);\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,aAAa;AACtB,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AAMrC,KAAK,SAAS,+BAA+B,MAAM;AACjD,OAAK,kEAAkE,OAAO,EAAE,MAAM,QAAQ,MAAM;AAClG,UAAM,cAAc,iBAAiB,KAAK,IAAI,CAAC;AAC/C,UAAM,QAAQ,MAAM,aAAa,OAAO;AACxC,UAAM,YAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAExE,UAAM,MAAM,MAAM,OAAO;AACzB,UAAM,KAAK,KAAK,8BAA8B;AAC9C,UAAM,KAAK,UAAU,WAAW,EAAE,MAAM,mBAAmB,CAAC,EAAE,KAAK,WAAW;AAC9E,UAAM,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,EAAE,MAAM;AAEvE,UAAM,KAAK,UAAU,UAAU,EAAE,MAAM,iBAAiB,CAAC,EAAE,MAAM;AACjE,UAAM,KAAK,UAAU,UAAU,EAAE,MAAM,UAAU,CAAC,EAAE,MAAM;AAE1D,UAAM,OAAO,IAAI,EAAE,UAAU,kCAAkC;AAC/D,UAAM,KAAK,UAAU,WAAW,EAAE,MAAM,mBAAmB,CAAC,EAAE,KAAK,WAAW;AAC9E,UAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;AAEtF,UAAM,KAAK,UAAU,WAAW,EAAE,MAAM,mBAAmB,CAAC,EAAE,KAAK,SAAS;AAC5E,UAAM,OAAO,KAAK,UAAU,SAAS,CAAC,EAAE,YAAY,CAAC;AAAA,EACvD,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { createCompanyFixture, deleteEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/crmFixtures";
|
|
3
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
5
|
-
test.describe("TC-CRM-015: Customer Search and Filter", () => {
|
|
6
|
-
test("should search companies by name/email and filter by status, lifecycle and tag", async ({ page, request }) => {
|
|
7
|
-
let token = null;
|
|
8
|
-
let companyId = null;
|
|
9
|
-
const companyName = `QA TC-CRM-015 Co ${Date.now()}`;
|
|
10
|
-
const companyEmail = `qa.crm015.${Date.now()}@example.com`;
|
|
11
|
-
const companyTag = `qa-filter-${Date.now()}`;
|
|
12
|
-
try {
|
|
13
|
-
token = await getAuthToken(request);
|
|
14
|
-
companyId = await createCompanyFixture(request, token, companyName);
|
|
15
|
-
await login(page, "admin");
|
|
16
|
-
await page.goto(`/backend/customers/companies/${companyId}`);
|
|
17
|
-
await page.getByRole("button", { name: /Primary email/i }).click();
|
|
18
|
-
await page.getByRole("textbox", { name: /Add email|name@example.com/i }).fill(companyEmail);
|
|
19
|
-
await page.getByRole("button", { name: /Save .*Ctrl\+Enter/i }).first().click();
|
|
20
|
-
await expect(page.getByText(companyEmail, { exact: true })).toBeVisible();
|
|
21
|
-
await page.getByRole("button", { name: /^Status/i }).click();
|
|
22
|
-
await page.locator("select").filter({ has: page.locator("option", { hasText: "Active" }) }).first().selectOption({ label: "Active" });
|
|
23
|
-
await page.getByRole("button", { name: /Save .*Ctrl\+Enter/i }).first().click();
|
|
24
|
-
await expect(page.getByRole("button", { name: /Status\s+Active/i })).toBeVisible();
|
|
25
|
-
await page.getByRole("button", { name: /Lifecycle stage/i }).click();
|
|
26
|
-
await page.locator("select").filter({ has: page.locator("option", { hasText: "Prospect" }) }).first().selectOption({ label: "Prospect" });
|
|
27
|
-
await page.getByRole("button", { name: /Save .*Ctrl\+Enter/i }).first().click();
|
|
28
|
-
await expect(page.getByRole("button", { name: /Lifecycle stage\s+Prospect/i })).toBeVisible();
|
|
29
|
-
await page.getByRole("heading", { name: "Tags" }).locator("xpath=ancestor::div[1]").getByRole("button").click();
|
|
30
|
-
const tagInput = page.getByRole("textbox", { name: "Type to add tags" });
|
|
31
|
-
await tagInput.fill(companyTag);
|
|
32
|
-
await tagInput.press("Enter");
|
|
33
|
-
await page.getByRole("button", { name: /Save .*Ctrl\+Enter/i }).click();
|
|
34
|
-
await expect(page.getByText(companyTag)).toBeVisible();
|
|
35
|
-
await page.goto("/backend/customers/companies");
|
|
36
|
-
const search = page.getByRole("textbox", { name: /Search companies/i });
|
|
37
|
-
await search.fill(companyName);
|
|
38
|
-
await expect(page.getByRole("link", { name: companyName, exact: true })).toBeVisible();
|
|
39
|
-
await search.fill(companyEmail);
|
|
40
|
-
await expect(page.getByRole("link", { name: companyName, exact: true })).toBeVisible();
|
|
41
|
-
await search.fill("");
|
|
42
|
-
await page.getByRole("button", { name: "Filters" }).click();
|
|
43
|
-
const filtersDialog = page.getByRole("heading", { name: "Filters" }).locator("xpath=ancestor::div[2]");
|
|
44
|
-
await expect(filtersDialog.getByRole("combobox").nth(2)).toBeVisible();
|
|
45
|
-
await filtersDialog.getByRole("combobox").nth(0).selectOption({ label: "Active" });
|
|
46
|
-
await filtersDialog.getByRole("combobox").nth(2).selectOption({ label: "Prospect" });
|
|
47
|
-
const filterTagInput = filtersDialog.getByRole("textbox", { name: "Add tag and press Enter" });
|
|
48
|
-
await filterTagInput.fill(companyTag);
|
|
49
|
-
await filterTagInput.press("Enter");
|
|
50
|
-
await filtersDialog.getByRole("button", { name: "Apply" }).first().click();
|
|
51
|
-
await expect(page.getByRole("button", { name: /Status:\s*Active/i })).toBeVisible();
|
|
52
|
-
await expect(page.getByRole("button", { name: /Lifecycle stage:\s*Prospect/i })).toBeVisible();
|
|
53
|
-
await expect(page.getByRole("link", { name: companyName, exact: true })).toBeVisible();
|
|
54
|
-
await page.getByRole("button", { name: "Filters" }).click();
|
|
55
|
-
await filtersDialog.getByRole("button", { name: "Clear" }).first().click();
|
|
56
|
-
await filtersDialog.getByRole("button", { name: "Apply" }).first().click();
|
|
57
|
-
await expect(page.getByRole("link", { name: companyName, exact: true })).toBeVisible();
|
|
58
|
-
} finally {
|
|
59
|
-
await deleteEntityIfExists(request, token, "/api/customers/companies", companyId);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
//# sourceMappingURL=TC-CRM-015.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/customers/__integration__/TC-CRM-015.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { createCompanyFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\n\n/**\n * TC-CRM-015: Customer Search and Filter\n * Source: .ai/qa/scenarios/TC-CRM-015-customer-search-filter.md\n */\ntest.describe('TC-CRM-015: Customer Search and Filter', () => {\n test('should search companies by name/email and filter by status, lifecycle and tag', async ({ page, request }) => {\n let token: string | null = null;\n let companyId: string | null = null;\n\n const companyName = `QA TC-CRM-015 Co ${Date.now()}`;\n const companyEmail = `qa.crm015.${Date.now()}@example.com`;\n const companyTag = `qa-filter-${Date.now()}`;\n\n try {\n token = await getAuthToken(request);\n companyId = await createCompanyFixture(request, token, companyName);\n\n await login(page, 'admin');\n await page.goto(`/backend/customers/companies/${companyId}`);\n\n await page.getByRole('button', { name: /Primary email/i }).click();\n await page.getByRole('textbox', { name: /Add email|name@example.com/i }).fill(companyEmail);\n await page.getByRole('button', { name: /Save .*Ctrl\\+Enter/i }).first().click();\n await expect(page.getByText(companyEmail, { exact: true })).toBeVisible();\n\n await page.getByRole('button', { name: /^Status/i }).click();\n await page\n .locator('select')\n .filter({ has: page.locator('option', { hasText: 'Active' }) })\n .first()\n .selectOption({ label: 'Active' });\n await page.getByRole('button', { name: /Save .*Ctrl\\+Enter/i }).first().click();\n await expect(page.getByRole('button', { name: /Status\\s+Active/i })).toBeVisible();\n\n await page.getByRole('button', { name: /Lifecycle stage/i }).click();\n await page\n .locator('select')\n .filter({ has: page.locator('option', { hasText: 'Prospect' }) })\n .first()\n .selectOption({ label: 'Prospect' });\n await page.getByRole('button', { name: /Save .*Ctrl\\+Enter/i }).first().click();\n await expect(page.getByRole('button', { name: /Lifecycle stage\\s+Prospect/i })).toBeVisible();\n\n await page.getByRole('heading', { name: 'Tags' }).locator('xpath=ancestor::div[1]').getByRole('button').click();\n const tagInput = page.getByRole('textbox', { name: 'Type to add tags' });\n await tagInput.fill(companyTag);\n await tagInput.press('Enter');\n await page.getByRole('button', { name: /Save .*Ctrl\\+Enter/i }).click();\n await expect(page.getByText(companyTag)).toBeVisible();\n\n await page.goto('/backend/customers/companies');\n\n const search = page.getByRole('textbox', { name: /Search companies/i });\n await search.fill(companyName);\n await expect(page.getByRole('link', { name: companyName, exact: true })).toBeVisible();\n\n await search.fill(companyEmail);\n await expect(page.getByRole('link', { name: companyName, exact: true })).toBeVisible();\n\n await search.fill('');\n await page.getByRole('button', { name: 'Filters' }).click();\n const filtersDialog = page.getByRole('heading', { name: 'Filters' }).locator('xpath=ancestor::div[2]');\n await expect(filtersDialog.getByRole('combobox').nth(2)).toBeVisible();\n await filtersDialog.getByRole('combobox').nth(0).selectOption({ label: 'Active' });\n await filtersDialog.getByRole('combobox').nth(2).selectOption({ label: 'Prospect' });\n const filterTagInput = filtersDialog.getByRole('textbox', { name: 'Add tag and press Enter' });\n await filterTagInput.fill(companyTag);\n await filterTagInput.press('Enter');\n await filtersDialog.getByRole('button', { name: 'Apply' }).first().click();\n\n await expect(page.getByRole('button', { name: /Status:\\s*Active/i })).toBeVisible();\n await expect(page.getByRole('button', { name: /Lifecycle stage:\\s*Prospect/i })).toBeVisible();\n\n await expect(page.getByRole('link', { name: companyName, exact: true })).toBeVisible();\n\n await page.getByRole('button', { name: 'Filters' }).click();\n await filtersDialog.getByRole('button', { name: 'Clear' }).first().click();\n await filtersDialog.getByRole('button', { name: 'Apply' }).first().click();\n await expect(page.getByRole('link', { name: companyName, exact: true })).toBeVisible();\n } finally {\n await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,sBAAsB,4BAA4B;AAC3D,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAMtB,KAAK,SAAS,0CAA0C,MAAM;AAC5D,OAAK,iFAAiF,OAAO,EAAE,MAAM,QAAQ,MAAM;AACjH,QAAI,QAAuB;AAC3B,QAAI,YAA2B;AAE/B,UAAM,cAAc,oBAAoB,KAAK,IAAI,CAAC;AAClD,UAAM,eAAe,aAAa,KAAK,IAAI,CAAC;AAC5C,UAAM,aAAa,aAAa,KAAK,IAAI,CAAC;AAE1C,QAAI;AACF,cAAQ,MAAM,aAAa,OAAO;AAClC,kBAAY,MAAM,qBAAqB,SAAS,OAAO,WAAW;AAElE,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,KAAK,KAAK,gCAAgC,SAAS,EAAE;AAE3D,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,iBAAiB,CAAC,EAAE,MAAM;AACjE,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,8BAA8B,CAAC,EAAE,KAAK,YAAY;AAC1F,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,sBAAsB,CAAC,EAAE,MAAM,EAAE,MAAM;AAC9E,YAAM,OAAO,KAAK,UAAU,cAAc,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAExE,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,WAAW,CAAC,EAAE,MAAM;AAC3D,YAAM,KACH,QAAQ,QAAQ,EAChB,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,SAAS,CAAC,EAAE,CAAC,EAC7D,MAAM,EACN,aAAa,EAAE,OAAO,SAAS,CAAC;AACnC,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,sBAAsB,CAAC,EAAE,MAAM,EAAE,MAAM;AAC9E,YAAM,OAAO,KAAK,UAAU,UAAU,EAAE,MAAM,mBAAmB,CAAC,CAAC,EAAE,YAAY;AAEjF,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,mBAAmB,CAAC,EAAE,MAAM;AACnE,YAAM,KACH,QAAQ,QAAQ,EAChB,OAAO,EAAE,KAAK,KAAK,QAAQ,UAAU,EAAE,SAAS,WAAW,CAAC,EAAE,CAAC,EAC/D,MAAM,EACN,aAAa,EAAE,OAAO,WAAW,CAAC;AACrC,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,sBAAsB,CAAC,EAAE,MAAM,EAAE,MAAM;AAC9E,YAAM,OAAO,KAAK,UAAU,UAAU,EAAE,MAAM,8BAA8B,CAAC,CAAC,EAAE,YAAY;AAE5F,YAAM,KAAK,UAAU,WAAW,EAAE,MAAM,OAAO,CAAC,EAAE,QAAQ,wBAAwB,EAAE,UAAU,QAAQ,EAAE,MAAM;AAC9G,YAAM,WAAW,KAAK,UAAU,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,SAAS,MAAM,OAAO;AAC5B,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,sBAAsB,CAAC,EAAE,MAAM;AACtE,YAAM,OAAO,KAAK,UAAU,UAAU,CAAC,EAAE,YAAY;AAErD,YAAM,KAAK,KAAK,8BAA8B;AAE9C,YAAM,SAAS,KAAK,UAAU,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAM,OAAO,KAAK,WAAW;AAC7B,YAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAErF,YAAM,OAAO,KAAK,YAAY;AAC9B,YAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAErF,YAAM,OAAO,KAAK,EAAE;AACpB,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,UAAU,CAAC,EAAE,MAAM;AAC1D,YAAM,gBAAgB,KAAK,UAAU,WAAW,EAAE,MAAM,UAAU,CAAC,EAAE,QAAQ,wBAAwB;AACrG,YAAM,OAAO,cAAc,UAAU,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,YAAY;AACrE,YAAM,cAAc,UAAU,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,SAAS,CAAC;AACjF,YAAM,cAAc,UAAU,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,WAAW,CAAC;AACnF,YAAM,iBAAiB,cAAc,UAAU,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC7F,YAAM,eAAe,KAAK,UAAU;AACpC,YAAM,eAAe,MAAM,OAAO;AAClC,YAAM,cAAc,UAAU,UAAU,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM;AAEzE,YAAM,OAAO,KAAK,UAAU,UAAU,EAAE,MAAM,oBAAoB,CAAC,CAAC,EAAE,YAAY;AAClF,YAAM,OAAO,KAAK,UAAU,UAAU,EAAE,MAAM,+BAA+B,CAAC,CAAC,EAAE,YAAY;AAE7F,YAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAErF,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,UAAU,CAAC,EAAE,MAAM;AAC1D,YAAM,cAAc,UAAU,UAAU,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM;AACzE,YAAM,cAAc,UAAU,UAAU,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM;AACzE,YAAM,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY;AAAA,IACvF,UAAE;AACA,YAAM,qBAAqB,SAAS,OAAO,4BAA4B,SAAS;AAAA,IAClF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|