@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,77 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
|
|
3
|
-
import { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* TC-ADMIN-004: Manage Dictionary Entries
|
|
7
|
-
* Source: .ai/qa/scenarios/TC-ADMIN-004-dictionary-management.md
|
|
8
|
-
*
|
|
9
|
-
* Verifies that the dictionaries page loads, shows existing dictionaries
|
|
10
|
-
* with their entries, and allows creating a new dictionary.
|
|
11
|
-
*
|
|
12
|
-
* Navigation: Settings → Module Configuration → Dictionaries
|
|
13
|
-
*/
|
|
14
|
-
test.describe('TC-ADMIN-004: Dictionary Management', () => {
|
|
15
|
-
test('should display dictionaries and allow creating a new one', async ({ page, request }) => {
|
|
16
|
-
let token: string | null = null;
|
|
17
|
-
let dictionaryId: string | null = null;
|
|
18
|
-
let dictionaryKey: string | null = null;
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
token = await getAuthToken(request);
|
|
22
|
-
await login(page, 'admin');
|
|
23
|
-
await page.goto('/backend/config/dictionaries');
|
|
24
|
-
|
|
25
|
-
// Verify page heading
|
|
26
|
-
await expect(page.getByRole('heading', { name: 'Dictionaries', level: 2 })).toBeVisible();
|
|
27
|
-
|
|
28
|
-
// Wait for loading
|
|
29
|
-
await page.getByText('Loading dictionaries').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
30
|
-
|
|
31
|
-
// Verify the "New dictionary" button is available
|
|
32
|
-
await expect(page.getByRole('button', { name: 'New dictionary' })).toBeVisible();
|
|
33
|
-
|
|
34
|
-
// The first dictionary should be auto-selected — verify its details panel
|
|
35
|
-
await expect(page.getByText('Manage reusable values and appearance')).toBeVisible({ timeout: 5_000 });
|
|
36
|
-
await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible();
|
|
37
|
-
await expect(page.getByRole('button', { name: 'Add entry' })).toBeVisible();
|
|
38
|
-
|
|
39
|
-
// Verify the entries table columns
|
|
40
|
-
await expect(page.getByRole('columnheader', { name: 'Value' })).toBeVisible();
|
|
41
|
-
await expect(page.getByRole('columnheader', { name: 'Label' })).toBeVisible();
|
|
42
|
-
|
|
43
|
-
// Create a new dictionary
|
|
44
|
-
await page.getByRole('button', { name: 'New dictionary' }).click();
|
|
45
|
-
|
|
46
|
-
// Verify the dialog appears
|
|
47
|
-
await expect(page.getByRole('heading', { name: 'Create dictionary', level: 2 })).toBeVisible({ timeout: 5_000 });
|
|
48
|
-
|
|
49
|
-
// Fill in the Key field (slug)
|
|
50
|
-
const timestamp = Date.now();
|
|
51
|
-
const dictKey = `qa_tc_admin_004_${timestamp}`;
|
|
52
|
-
const dictName = `QA TC-ADMIN-004 ${timestamp}`;
|
|
53
|
-
dictionaryKey = dictKey;
|
|
54
|
-
await page.getByRole('textbox', { name: 'slug_name' }).fill(dictKey);
|
|
55
|
-
|
|
56
|
-
// Fill in the Name field
|
|
57
|
-
await page.getByRole('textbox', { name: 'Display name' }).fill(dictName);
|
|
58
|
-
|
|
59
|
-
// Submit
|
|
60
|
-
await page.getByRole('button', { name: 'Save' }).click();
|
|
61
|
-
|
|
62
|
-
// Verify the new dictionary appears in the sidebar list
|
|
63
|
-
await expect(page.getByText(dictName)).toBeVisible({ timeout: 5_000 });
|
|
64
|
-
} finally {
|
|
65
|
-
if (token && dictionaryKey) {
|
|
66
|
-
const listResponse = await apiRequest(request, 'GET', '/api/dictionaries', { token }).catch(() => null);
|
|
67
|
-
if (listResponse && listResponse.ok()) {
|
|
68
|
-
const listData = (await listResponse.json().catch(() => null)) as { items?: Array<{ id?: string; key?: string }> } | null;
|
|
69
|
-
dictionaryId = listData?.items?.find((item) => item.key === dictionaryKey)?.id ?? null;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (token && dictionaryId) {
|
|
73
|
-
await apiRequest(request, 'DELETE', `/api/dictionaries/${encodeURIComponent(dictionaryId)}`, { token }).catch(() => {});
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
});
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* TC-ADMIN-005: Feature Toggles Management
|
|
6
|
-
* Source: .ai/qa/scenarios/TC-ADMIN-005-feature-toggle-create.md
|
|
7
|
-
*
|
|
8
|
-
* Verifies that the feature toggles page is accessible to superadmins,
|
|
9
|
-
* displays existing toggles with proper columns, and has a working
|
|
10
|
-
* create form with all expected fields.
|
|
11
|
-
*
|
|
12
|
-
* Navigation: Settings → Feature Toggles → Global
|
|
13
|
-
*/
|
|
14
|
-
test.describe('TC-ADMIN-005: Feature Toggles Management', () => {
|
|
15
|
-
test('should display feature toggles list and create form for superadmin', async ({ page }) => {
|
|
16
|
-
await login(page, 'superadmin');
|
|
17
|
-
|
|
18
|
-
await page.goto('/backend/feature-toggles/global');
|
|
19
|
-
await expect(page.getByRole('heading', { name: /Feature Toggles/i })).toBeVisible();
|
|
20
|
-
await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
21
|
-
|
|
22
|
-
await expect(page.getByRole('columnheader', { name: 'Category' })).toBeVisible();
|
|
23
|
-
await expect(page.getByRole('columnheader', { name: 'Identifier' })).toBeVisible();
|
|
24
|
-
await expect(page.getByRole('columnheader', { name: 'Name' })).toBeVisible();
|
|
25
|
-
await expect(page.getByRole('columnheader', { name: 'Type' })).toBeVisible();
|
|
26
|
-
|
|
27
|
-
const createLink = page.getByRole('link', { name: /^Create$/i }).first();
|
|
28
|
-
if (await createLink.isVisible().catch(() => false)) {
|
|
29
|
-
await createLink.click();
|
|
30
|
-
} else {
|
|
31
|
-
await page.getByRole('button', { name: /^Create$/i }).first().click();
|
|
32
|
-
}
|
|
33
|
-
await expect(page).toHaveURL(/\/backend\/feature-toggles\/global\/create(?:\?.*)?$/);
|
|
34
|
-
await expect(page.locator('main').getByText('Create Feature Toggle', { exact: true })).toBeVisible();
|
|
35
|
-
|
|
36
|
-
await expect(page.getByText('Basic Information')).toBeVisible();
|
|
37
|
-
await expect(page.getByText('Type Configuration')).toBeVisible();
|
|
38
|
-
await expect(page.getByText('Default Value', { exact: true })).toBeVisible();
|
|
39
|
-
|
|
40
|
-
const textboxes = page.locator('main').getByRole('textbox');
|
|
41
|
-
expect(await textboxes.count()).toBeGreaterThanOrEqual(3);
|
|
42
|
-
|
|
43
|
-
const comboboxes = page.locator('main').getByRole('combobox');
|
|
44
|
-
expect(await comboboxes.count()).toBeGreaterThan(0);
|
|
45
|
-
|
|
46
|
-
await expect(page.getByRole('button', { name: 'Save' }).first()).toBeVisible();
|
|
47
|
-
await expect(page.getByRole('link', { name: /Back/i }).first()).toBeVisible();
|
|
48
|
-
});
|
|
49
|
-
});
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* TC-ADMIN-006: Feature Toggle Overrides
|
|
6
|
-
* Source: .ai/qa/scenarios/TC-ADMIN-006-feature-toggle-override.md
|
|
7
|
-
*
|
|
8
|
-
* Verifies that the feature toggle overrides page displays per-tenant
|
|
9
|
-
* overrides with proper columns, and that clicking an override shows
|
|
10
|
-
* the detail view with enable/disable controls.
|
|
11
|
-
*
|
|
12
|
-
* Navigation: Settings → Feature Toggles → Overrides
|
|
13
|
-
*/
|
|
14
|
-
test.describe('TC-ADMIN-006: Feature Toggle Overrides', () => {
|
|
15
|
-
test('should display overrides list and allow viewing override details', async ({ page }) => {
|
|
16
|
-
await login(page, 'superadmin');
|
|
17
|
-
|
|
18
|
-
// Navigate to overrides page
|
|
19
|
-
await page.goto('/backend/feature-toggles/overrides');
|
|
20
|
-
await expect(page.getByRole('heading', { name: 'Feature Toggle Overrides', level: 2 })).toBeVisible();
|
|
21
|
-
await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
22
|
-
|
|
23
|
-
// Verify table columns
|
|
24
|
-
await expect(page.getByRole('columnheader', { name: 'Tenant' })).toBeVisible();
|
|
25
|
-
await expect(page.getByRole('columnheader', { name: 'Identifier' })).toBeVisible();
|
|
26
|
-
await expect(page.getByRole('columnheader', { name: 'Name' })).toBeVisible();
|
|
27
|
-
await expect(page.getByRole('columnheader', { name: 'Category' })).toBeVisible();
|
|
28
|
-
await expect(page.getByRole('columnheader', { name: 'Override State' })).toBeVisible();
|
|
29
|
-
|
|
30
|
-
// Verify Refresh button
|
|
31
|
-
await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible();
|
|
32
|
-
|
|
33
|
-
// Verify at least one override row exists
|
|
34
|
-
const rows = page.locator('table tbody tr');
|
|
35
|
-
await expect(rows.first()).toBeVisible();
|
|
36
|
-
|
|
37
|
-
// Click the first override row to see detail view
|
|
38
|
-
await rows.first().click();
|
|
39
|
-
|
|
40
|
-
// Verify detail page loads with expected sections
|
|
41
|
-
await expect(page.getByRole('heading', { name: 'Details', level: 2 })).toBeVisible();
|
|
42
|
-
await expect(page.getByRole('heading', { name: 'Description', level: 2 })).toBeVisible();
|
|
43
|
-
await expect(page.getByRole('heading', { name: 'Default Value', level: 2 })).toBeVisible();
|
|
44
|
-
|
|
45
|
-
// Verify override section
|
|
46
|
-
await expect(page.getByText('Override', { exact: true })).toBeVisible();
|
|
47
|
-
await expect(page.getByText('Override Mode')).toBeVisible();
|
|
48
|
-
|
|
49
|
-
// Verify Enable Override checkbox
|
|
50
|
-
await expect(page.getByRole('checkbox', { name: 'Enable Override' })).toBeVisible();
|
|
51
|
-
|
|
52
|
-
// Verify Save Override button
|
|
53
|
-
await expect(page.getByRole('button', { name: 'Save Override' })).toBeVisible();
|
|
54
|
-
|
|
55
|
-
// Verify toggle detail fields
|
|
56
|
-
await expect(page.getByText('Name')).toBeVisible();
|
|
57
|
-
await expect(page.getByText('Identifier')).toBeVisible();
|
|
58
|
-
});
|
|
59
|
-
});
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* TC-ADMIN-007: Custom Entity Creation
|
|
6
|
-
* Source: .ai/qa/scenarios/TC-ADMIN-007-custom-entity-creation.md
|
|
7
|
-
*
|
|
8
|
-
* Verifies that the User Entities page displays existing entities,
|
|
9
|
-
* and that the create form has all expected fields.
|
|
10
|
-
*
|
|
11
|
-
* Navigation: Settings → Data Designer → User Entities
|
|
12
|
-
*/
|
|
13
|
-
test.describe('TC-ADMIN-007: Custom Entity Creation', () => {
|
|
14
|
-
test('should display user entities list and create form', async ({ page }) => {
|
|
15
|
-
await login(page, 'superadmin');
|
|
16
|
-
|
|
17
|
-
// Navigate to User Entities
|
|
18
|
-
await page.goto('/backend/entities/user');
|
|
19
|
-
await expect(page.getByRole('heading', { name: 'User Entities', level: 2 })).toBeVisible();
|
|
20
|
-
await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
21
|
-
|
|
22
|
-
// Verify table columns
|
|
23
|
-
await expect(page.getByRole('columnheader', { name: /Entity/ })).toBeVisible();
|
|
24
|
-
await expect(page.getByRole('columnheader', { name: 'Label' })).toBeVisible();
|
|
25
|
-
await expect(page.getByRole('columnheader', { name: 'Source' })).toBeVisible();
|
|
26
|
-
await expect(page.getByRole('columnheader', { name: 'Fields' })).toBeVisible();
|
|
27
|
-
await expect(page.getByRole('columnheader', { name: 'In Sidebar' })).toBeVisible();
|
|
28
|
-
|
|
29
|
-
// Verify at least one entity row exists
|
|
30
|
-
const rows = page.locator('table tbody tr');
|
|
31
|
-
await expect(rows.first()).toBeVisible();
|
|
32
|
-
|
|
33
|
-
// Verify Export and Create buttons
|
|
34
|
-
await expect(page.getByRole('button', { name: 'Export' })).toBeVisible();
|
|
35
|
-
await expect(page.getByRole('link', { name: 'Create' })).toBeVisible();
|
|
36
|
-
|
|
37
|
-
// Verify Search box
|
|
38
|
-
await expect(page.getByRole('textbox', { name: 'Search' })).toBeVisible();
|
|
39
|
-
|
|
40
|
-
// Navigate to Create form
|
|
41
|
-
await page.getByRole('link', { name: 'Create' }).click();
|
|
42
|
-
await expect(page).toHaveURL(/\/backend\/entities\/user\/create$/);
|
|
43
|
-
await expect(page.getByText('Create Entity')).toBeVisible();
|
|
44
|
-
|
|
45
|
-
// Verify form fields
|
|
46
|
-
await expect(page.getByText('Entity ID', { exact: false })).toBeVisible();
|
|
47
|
-
await expect(page.getByText('Label', { exact: false })).toBeVisible();
|
|
48
|
-
await expect(page.getByText('Description')).toBeVisible();
|
|
49
|
-
|
|
50
|
-
// Verify Entity ID default placeholder value
|
|
51
|
-
const entityIdField = page.getByRole('textbox', { name: 'module_name:entity_id' });
|
|
52
|
-
await expect(entityIdField).toBeVisible();
|
|
53
|
-
await expect(entityIdField).toHaveValue('user:your_entity');
|
|
54
|
-
|
|
55
|
-
// Verify Default Editor combobox
|
|
56
|
-
await expect(page.locator('main').getByRole('combobox')).toBeVisible();
|
|
57
|
-
|
|
58
|
-
// Verify Show in sidebar checkbox
|
|
59
|
-
await expect(page.getByRole('checkbox', { name: 'Show in sidebar' })).toBeVisible();
|
|
60
|
-
|
|
61
|
-
// Verify Create and Cancel buttons
|
|
62
|
-
await expect(page.getByRole('button', { name: 'Create' }).first()).toBeVisible();
|
|
63
|
-
await expect(page.getByRole('link', { name: 'Cancel' }).first()).toBeVisible();
|
|
64
|
-
|
|
65
|
-
// Verify Back link
|
|
66
|
-
await expect(page.getByRole('link', { name: '← Back' })).toBeVisible();
|
|
67
|
-
});
|
|
68
|
-
});
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { expect, test } from '@playwright/test';
|
|
2
|
-
import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
|
|
3
|
-
import { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
|
|
4
|
-
|
|
5
|
-
function escapeRegExp(value: string): string {
|
|
6
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* TC-ADMIN-008: Create Custom Entity Record
|
|
11
|
-
* Source: .ai/qa/scenarios/TC-ADMIN-008-custom-entity-record.md
|
|
12
|
-
*/
|
|
13
|
-
test.describe('TC-ADMIN-008: Create Custom Entity Record', () => {
|
|
14
|
-
test('should create and edit a record for a custom entity', async ({ page, request }) => {
|
|
15
|
-
const stamp = Date.now();
|
|
16
|
-
const entityId = `user:qa_admin_008_${stamp}`;
|
|
17
|
-
const location = `QA Location ${stamp}`;
|
|
18
|
-
const title = `QA Title ${stamp}`;
|
|
19
|
-
const updatedTitle = `${title} Updated`;
|
|
20
|
-
let token: string | null = null;
|
|
21
|
-
let recordId: string | null = null;
|
|
22
|
-
|
|
23
|
-
const fillField = async (label: string, fallbackIndex: number, value: string): Promise<void> => {
|
|
24
|
-
const namedInput = page
|
|
25
|
-
.getByRole('textbox', { name: new RegExp(`^${escapeRegExp(label)}$`, 'i') })
|
|
26
|
-
.first();
|
|
27
|
-
if ((await namedInput.count()) > 0) {
|
|
28
|
-
await namedInput.fill(value);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const textboxes = page.locator('main').getByRole('textbox');
|
|
33
|
-
await expect(textboxes.nth(fallbackIndex)).toBeVisible();
|
|
34
|
-
await textboxes.nth(fallbackIndex).fill(value);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
try {
|
|
38
|
-
token = await getAuthToken(request, 'superadmin');
|
|
39
|
-
const entityCreateResponse = await apiRequest(request, 'POST', '/api/entities/entities', {
|
|
40
|
-
token,
|
|
41
|
-
data: {
|
|
42
|
-
entityId,
|
|
43
|
-
label: `QA Admin 008 ${stamp}`,
|
|
44
|
-
description: 'Temporary QA entity',
|
|
45
|
-
showInSidebar: false,
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
expect(entityCreateResponse.ok()).toBeTruthy();
|
|
49
|
-
|
|
50
|
-
const fieldDefinitions = [
|
|
51
|
-
{ key: 'location', label: 'Location' },
|
|
52
|
-
{ key: 'title', label: 'Title' },
|
|
53
|
-
{ key: 'event_date', label: 'Event Date' },
|
|
54
|
-
];
|
|
55
|
-
for (const field of fieldDefinitions) {
|
|
56
|
-
const definitionResponse = await apiRequest(request, 'POST', '/api/entities/definitions', {
|
|
57
|
-
token,
|
|
58
|
-
data: {
|
|
59
|
-
entityId,
|
|
60
|
-
key: field.key,
|
|
61
|
-
kind: 'text',
|
|
62
|
-
configJson: {
|
|
63
|
-
label: field.label,
|
|
64
|
-
priority: 10,
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
expect(definitionResponse.ok()).toBeTruthy();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
await login(page, 'superadmin');
|
|
72
|
-
await page.goto(`/backend/entities/user/${encodeURIComponent(entityId)}/records`);
|
|
73
|
-
await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
74
|
-
|
|
75
|
-
await expect(page.getByRole('heading', { name: new RegExp(`Records:\\s*${entityId}`, 'i') })).toBeVisible();
|
|
76
|
-
await page.getByRole('link', { name: 'Create' }).click();
|
|
77
|
-
|
|
78
|
-
await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records/create$`, 'i'));
|
|
79
|
-
await fillField('Location', 0, location);
|
|
80
|
-
await fillField('Title', 1, title);
|
|
81
|
-
await fillField('Event Date', 2, '2026-02-14');
|
|
82
|
-
await page.getByRole('button', { name: 'Save' }).first().click();
|
|
83
|
-
|
|
84
|
-
await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records$`, 'i'));
|
|
85
|
-
await expect(page.getByRole('row', { name: new RegExp(location, 'i') })).toBeVisible();
|
|
86
|
-
|
|
87
|
-
await page.getByRole('row', { name: new RegExp(location, 'i') }).click();
|
|
88
|
-
await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records/[^/]+$`, 'i'));
|
|
89
|
-
recordId =
|
|
90
|
-
page.url().match(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records/([^/?#]+)$`, 'i'))?.[1] ??
|
|
91
|
-
null;
|
|
92
|
-
|
|
93
|
-
await fillField('Title', 1, updatedTitle);
|
|
94
|
-
await page.getByRole('button', { name: 'Save' }).first().click();
|
|
95
|
-
|
|
96
|
-
await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records$`, 'i'));
|
|
97
|
-
await expect(page.getByRole('row', { name: new RegExp(updatedTitle, 'i') })).toBeVisible();
|
|
98
|
-
} finally {
|
|
99
|
-
if (token && recordId) {
|
|
100
|
-
await apiRequest(
|
|
101
|
-
request,
|
|
102
|
-
'DELETE',
|
|
103
|
-
`/api/entities/records?entityId=${encodeURIComponent(entityId)}&recordId=${encodeURIComponent(recordId)}`,
|
|
104
|
-
{ token },
|
|
105
|
-
).catch(() => {});
|
|
106
|
-
}
|
|
107
|
-
if (token) {
|
|
108
|
-
await apiRequest(request, 'DELETE', '/api/entities/definitions', {
|
|
109
|
-
token,
|
|
110
|
-
data: { entityId, key: 'event_date' },
|
|
111
|
-
}).catch(() => {});
|
|
112
|
-
await apiRequest(request, 'DELETE', '/api/entities/definitions', {
|
|
113
|
-
token,
|
|
114
|
-
data: { entityId, key: 'title' },
|
|
115
|
-
}).catch(() => {});
|
|
116
|
-
await apiRequest(request, 'DELETE', '/api/entities/definitions', {
|
|
117
|
-
token,
|
|
118
|
-
data: { entityId, key: 'location' },
|
|
119
|
-
}).catch(() => {});
|
|
120
|
-
await apiRequest(request, 'DELETE', '/api/entities/entities', {
|
|
121
|
-
token,
|
|
122
|
-
data: { entityId },
|
|
123
|
-
}).catch(() => {});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
});
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* TC-ADMIN-009: View System Status Dashboard
|
|
6
|
-
* Source: .ai/qa/scenarios/TC-ADMIN-009-system-status-view.md
|
|
7
|
-
*
|
|
8
|
-
* Verifies that the system status page displays environment variable
|
|
9
|
-
* configuration sections for profiling, logging, security, caching,
|
|
10
|
-
* query index, and entities.
|
|
11
|
-
*
|
|
12
|
-
* Navigation: Settings → System → System status
|
|
13
|
-
*/
|
|
14
|
-
test.describe('TC-ADMIN-009: View System Status Dashboard', () => {
|
|
15
|
-
test('should display system status sections with environment variable details', async ({ page }) => {
|
|
16
|
-
await login(page, 'admin');
|
|
17
|
-
await page.goto('/backend/config/system-status');
|
|
18
|
-
|
|
19
|
-
// Wait for the page to load
|
|
20
|
-
await expect(page.getByRole('heading', { name: 'System status', level: 2 })).toBeVisible();
|
|
21
|
-
await expect(page.getByText('Review debugging, cache, and logging flags')).toBeVisible();
|
|
22
|
-
|
|
23
|
-
// Wait for loading to finish
|
|
24
|
-
await page.getByText('Loading status snapshot').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
25
|
-
|
|
26
|
-
// Verify runtime mode is shown
|
|
27
|
-
await expect(page.getByText(/Runtime mode:/)).toBeVisible();
|
|
28
|
-
|
|
29
|
-
// Verify key sections are present
|
|
30
|
-
await expect(page.getByRole('heading', { name: 'Profiling', level: 3 })).toBeVisible();
|
|
31
|
-
await expect(page.getByRole('heading', { name: 'Logging', level: 3 })).toBeVisible();
|
|
32
|
-
await expect(page.getByRole('heading', { name: 'Security', level: 3 })).toBeVisible();
|
|
33
|
-
await expect(page.getByRole('heading', { name: 'Caching', level: 3 })).toBeVisible();
|
|
34
|
-
await expect(page.getByRole('heading', { name: 'Query index', level: 3 })).toBeVisible();
|
|
35
|
-
|
|
36
|
-
// Verify at least one env var card shows Current value and Default
|
|
37
|
-
await expect(page.getByText('Current value').first()).toBeVisible();
|
|
38
|
-
await expect(page.getByText('Default').first()).toBeVisible();
|
|
39
|
-
|
|
40
|
-
// Verify specific env var cards exist
|
|
41
|
-
await expect(page.getByRole('heading', { name: 'Cache strategy', level: 4 })).toBeVisible();
|
|
42
|
-
await expect(page.getByRole('heading', { name: 'Password min length', level: 4 })).toBeVisible();
|
|
43
|
-
|
|
44
|
-
// Verify the page is accessible via Settings sidebar
|
|
45
|
-
await expect(page.getByRole('link', { name: 'System status' })).toBeVisible();
|
|
46
|
-
await expect(page.getByRole('link', { name: 'Cache' })).toBeVisible();
|
|
47
|
-
});
|
|
48
|
-
});
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* TC-ADMIN-010: Cache Management
|
|
6
|
-
* Source: .ai/qa/scenarios/TC-ADMIN-010-cache-management.md
|
|
7
|
-
*
|
|
8
|
-
* Verifies that the cache overview page displays cache statistics,
|
|
9
|
-
* segments with purge controls, and a global purge button.
|
|
10
|
-
*
|
|
11
|
-
* Navigation: Settings → System → Cache
|
|
12
|
-
*/
|
|
13
|
-
test.describe('TC-ADMIN-010: Cache Management', () => {
|
|
14
|
-
test('should display cache statistics and allow purging', async ({ page }) => {
|
|
15
|
-
await login(page, 'superadmin');
|
|
16
|
-
|
|
17
|
-
// First visit a CRUD page to ensure some cache entries exist
|
|
18
|
-
await page.goto('/backend/customers/companies');
|
|
19
|
-
await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
20
|
-
|
|
21
|
-
// Navigate to cache management
|
|
22
|
-
await page.goto('/backend/config/cache');
|
|
23
|
-
|
|
24
|
-
// Verify page heading
|
|
25
|
-
await expect(page.getByRole('heading', { name: 'Cache overview', level: 2 })).toBeVisible();
|
|
26
|
-
await expect(page.getByText('Inspect cached responses and clear segments')).toBeVisible();
|
|
27
|
-
|
|
28
|
-
// Wait for loading
|
|
29
|
-
await page.getByText('Loading cache statistics').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
|
|
30
|
-
|
|
31
|
-
// Verify stats are displayed
|
|
32
|
-
await expect(page.getByText(/\d+ cached entr/)).toBeVisible();
|
|
33
|
-
await expect(page.getByText(/Stats generated/)).toBeVisible();
|
|
34
|
-
|
|
35
|
-
// Verify control buttons
|
|
36
|
-
await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible();
|
|
37
|
-
const purgeAllButton = page.getByRole('button', { name: 'Purge all cache' }).first();
|
|
38
|
-
if (await purgeAllButton.isVisible().catch(() => false)) {
|
|
39
|
-
await expect(purgeAllButton).toBeVisible();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Verify table structure + purge flow only when segments are present
|
|
43
|
-
const hasEmptyState = await page.getByText(/No cached responses for this tenant\./).isVisible().catch(() => false);
|
|
44
|
-
if (!hasEmptyState) {
|
|
45
|
-
await expect(page.getByRole('columnheader', { name: 'Segment' })).toBeVisible();
|
|
46
|
-
await expect(page.getByRole('columnheader', { name: 'Path' })).toBeVisible();
|
|
47
|
-
await expect(page.getByRole('columnheader', { name: 'Method' })).toBeVisible();
|
|
48
|
-
await expect(page.getByRole('columnheader', { name: 'Cached keys' })).toBeVisible();
|
|
49
|
-
|
|
50
|
-
const firstPurgeButton = page.getByRole('button', { name: 'Purge segment' }).first();
|
|
51
|
-
await firstPurgeButton.click();
|
|
52
|
-
await expect(page.getByText(/Stats generated/)).toBeVisible();
|
|
53
|
-
} else {
|
|
54
|
-
await expect(page.getByText(/No cached responses for this tenant\./)).toBeVisible();
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
});
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { type APIRequestContext } from '@playwright/test';
|
|
2
|
-
import { DEFAULT_CREDENTIALS, type Role } from './auth';
|
|
3
|
-
|
|
4
|
-
const BASE_URL = process.env.BASE_URL || 'http://localhost:3000';
|
|
5
|
-
|
|
6
|
-
export async function getAuthToken(
|
|
7
|
-
request: APIRequestContext,
|
|
8
|
-
roleOrEmail: Role | string = 'admin',
|
|
9
|
-
password?: string,
|
|
10
|
-
): Promise<string> {
|
|
11
|
-
const role = roleOrEmail in DEFAULT_CREDENTIALS ? (roleOrEmail as Role) : null;
|
|
12
|
-
const credentialAttempts: Array<{ email: string; password: string }> = [];
|
|
13
|
-
|
|
14
|
-
if (role) {
|
|
15
|
-
const configured = DEFAULT_CREDENTIALS[role];
|
|
16
|
-
credentialAttempts.push({ email: configured.email, password: password ?? configured.password });
|
|
17
|
-
if (!password) {
|
|
18
|
-
credentialAttempts.push({ email: `${role}@acme.com`, password: 'secret' });
|
|
19
|
-
}
|
|
20
|
-
} else {
|
|
21
|
-
credentialAttempts.push({ email: roleOrEmail, password: password ?? 'secret' });
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
let lastStatus = 0;
|
|
25
|
-
|
|
26
|
-
for (const attempt of credentialAttempts) {
|
|
27
|
-
const form = new URLSearchParams();
|
|
28
|
-
form.set('email', attempt.email);
|
|
29
|
-
form.set('password', attempt.password);
|
|
30
|
-
|
|
31
|
-
const response = await request.post(`${BASE_URL}/api/auth/login`, {
|
|
32
|
-
headers: {
|
|
33
|
-
'content-type': 'application/x-www-form-urlencoded',
|
|
34
|
-
},
|
|
35
|
-
data: form.toString(),
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
const raw = await response.text();
|
|
39
|
-
let body: Record<string, unknown> | null = null;
|
|
40
|
-
try {
|
|
41
|
-
body = raw ? (JSON.parse(raw) as Record<string, unknown>) : null;
|
|
42
|
-
} catch {
|
|
43
|
-
body = null;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
lastStatus = response.status();
|
|
47
|
-
if (response.ok() && body && typeof body.token === 'string' && body.token) {
|
|
48
|
-
return body.token;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
throw new Error(`Failed to obtain auth token (status ${lastStatus})`);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export async function apiRequest(
|
|
56
|
-
request: APIRequestContext,
|
|
57
|
-
method: string,
|
|
58
|
-
path: string,
|
|
59
|
-
options: { token: string; data?: unknown },
|
|
60
|
-
) {
|
|
61
|
-
const url = `${BASE_URL}${path}`;
|
|
62
|
-
const headers = {
|
|
63
|
-
Authorization: `Bearer ${options.token}`,
|
|
64
|
-
'Content-Type': 'application/json',
|
|
65
|
-
};
|
|
66
|
-
return request.fetch(url, { method, headers, data: options.data });
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export async function postForm(
|
|
70
|
-
request: APIRequestContext,
|
|
71
|
-
path: string,
|
|
72
|
-
data: Record<string, string>,
|
|
73
|
-
options?: { headers?: Record<string, string> },
|
|
74
|
-
) {
|
|
75
|
-
const form = new URLSearchParams();
|
|
76
|
-
for (const [key, value] of Object.entries(data)) form.set(key, value);
|
|
77
|
-
return request.post(`${BASE_URL}${path}`, {
|
|
78
|
-
headers: {
|
|
79
|
-
'content-type': 'application/x-www-form-urlencoded',
|
|
80
|
-
...(options?.headers ?? {}),
|
|
81
|
-
},
|
|
82
|
-
data: form.toString(),
|
|
83
|
-
});
|
|
84
|
-
}
|