@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,75 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
3
|
-
import { getAuthToken, apiRequest } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
4
|
-
import { createSalesOrderFixture, deleteSalesEntityIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/salesFixtures";
|
|
5
|
-
const WIDGET_LOAD_TIMEOUT = 1e4;
|
|
6
|
-
test.describe("TC-SALES-020: Document History Widget", () => {
|
|
7
|
-
test("should show action, status, and comment entries and filter each kind correctly", async ({ page }) => {
|
|
8
|
-
test.setTimeout(6e4);
|
|
9
|
-
const token = await getAuthToken(page.request, "admin");
|
|
10
|
-
let orderId = null;
|
|
11
|
-
try {
|
|
12
|
-
orderId = await createSalesOrderFixture(page.request, token);
|
|
13
|
-
await apiRequest(page.request, "POST", "/api/sales/notes", {
|
|
14
|
-
token,
|
|
15
|
-
data: { contextType: "order", contextId: orderId, body: "QA test history comment" }
|
|
16
|
-
});
|
|
17
|
-
const statusListRes = await apiRequest(page.request, "GET", "/api/sales/order-statuses?pageSize=5", { token });
|
|
18
|
-
expect(statusListRes.ok(), "Failed to load order statuses").toBeTruthy();
|
|
19
|
-
const statusList = await statusListRes.json();
|
|
20
|
-
const statusId = statusList.items?.[0]?.id;
|
|
21
|
-
expect(statusId, "No order statuses are seeded \u2014 cannot produce a status history entry").toBeTruthy();
|
|
22
|
-
await apiRequest(page.request, "PUT", "/api/sales/orders", {
|
|
23
|
-
token,
|
|
24
|
-
data: { id: orderId, statusEntryId: statusId }
|
|
25
|
-
});
|
|
26
|
-
await login(page, "admin");
|
|
27
|
-
await page.goto(`/backend/sales/documents/${orderId}?kind=order`);
|
|
28
|
-
await page.waitForLoadState("networkidle");
|
|
29
|
-
const historyButton = page.getByRole("button", { name: "History", exact: true });
|
|
30
|
-
await expect(historyButton).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });
|
|
31
|
-
await historyButton.scrollIntoViewIfNeeded();
|
|
32
|
-
await historyButton.click();
|
|
33
|
-
const filterButton = page.getByRole("button", { name: /Filters/i });
|
|
34
|
-
await expect(filterButton).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });
|
|
35
|
-
await expect(page.locator(".relative.flex.gap-3").first()).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });
|
|
36
|
-
await expect(page.getByText(/No history entries yet/i)).toHaveCount(0);
|
|
37
|
-
await filterButton.click();
|
|
38
|
-
const filterMenu = page.getByRole("listbox", { name: /Filters/i });
|
|
39
|
-
await expect(filterMenu).toBeVisible();
|
|
40
|
-
await expect(filterMenu.getByRole("option", { name: /^All$/i })).toBeVisible();
|
|
41
|
-
await expect(filterMenu.getByRole("option", { name: /Status changes/i })).toBeVisible();
|
|
42
|
-
await expect(filterMenu.getByRole("option", { name: /^Actions$/i })).toBeVisible();
|
|
43
|
-
await expect(filterMenu.getByRole("option", { name: /^Comments$/i })).toBeVisible();
|
|
44
|
-
await filterMenu.getByRole("option", { name: /^All$/i }).click();
|
|
45
|
-
await expect(filterMenu).toBeHidden();
|
|
46
|
-
const assertKindHasEntries = async (optionName, label) => {
|
|
47
|
-
await page.getByRole("button", { name: /Filters/i }).click();
|
|
48
|
-
const menu = page.getByRole("listbox", { name: /Filters/i });
|
|
49
|
-
await expect(menu).toBeVisible();
|
|
50
|
-
await menu.getByRole("option", { name: optionName }).click();
|
|
51
|
-
await expect(menu).toBeHidden();
|
|
52
|
-
await expect(
|
|
53
|
-
page.getByText(/No history entries yet/i),
|
|
54
|
-
`"${label}" filter shows empty state \u2014 expected at least one entry`
|
|
55
|
-
).toHaveCount(0, { timeout: WIDGET_LOAD_TIMEOUT });
|
|
56
|
-
await expect(
|
|
57
|
-
page.locator(".relative.flex.gap-3").first(),
|
|
58
|
-
`"${label}" filter shows no timeline items`
|
|
59
|
-
).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });
|
|
60
|
-
};
|
|
61
|
-
await assertKindHasEntries(/^Actions$/i, "Actions");
|
|
62
|
-
await assertKindHasEntries(/Status changes/i, "Status changes");
|
|
63
|
-
await assertKindHasEntries(/^Comments$/i, "Comments");
|
|
64
|
-
await page.getByRole("button", { name: /Filters/i }).click();
|
|
65
|
-
const resetMenu = page.getByRole("listbox", { name: /Filters/i });
|
|
66
|
-
await expect(resetMenu).toBeVisible();
|
|
67
|
-
await resetMenu.getByRole("option", { name: /^All$/i }).click();
|
|
68
|
-
await expect(resetMenu).toBeHidden();
|
|
69
|
-
await expect(page.getByRole("button", { name: /^Filters$/i })).toBeVisible();
|
|
70
|
-
} finally {
|
|
71
|
-
await deleteSalesEntityIfExists(page.request, token, "/api/sales/orders", orderId);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
//# sourceMappingURL=TC-SALES-020.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/sales/__integration__/TC-SALES-020.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\nimport { getAuthToken, apiRequest } from '@open-mercato/core/modules/core/__integration__/helpers/api';\nimport { createSalesOrderFixture, deleteSalesEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/salesFixtures';\n\nconst WIDGET_LOAD_TIMEOUT = 10_000;\n\n/**\n * TC-SALES-020: Document History Widget\n * Verifies the History tab renders all 3 entry kinds (action, status, comment)\n * and that each Filters dropdown option correctly scopes visible entries.\n *\n * Fixtures created via API (no reliance on seeded demo data):\n * - Order creation \u2192 'action' entry (sales.orders.create command log)\n * - Note creation \u2192 'comment' entry (SalesNote, source: note)\n * - Status update \u2192 'status' entry (command bus before/after snapshot diff)\n */\ntest.describe('TC-SALES-020: Document History Widget', () => {\n test('should show action, status, and comment entries and filter each kind correctly', async ({ page }) => {\n test.setTimeout(60_000);\n const token = await getAuthToken(page.request, 'admin');\n let orderId: string | null = null;\n\n try {\n // 1. Create order \u2192 logs an 'action' entry via sales.orders.create command\n orderId = await createSalesOrderFixture(page.request, token);\n\n // 2. Create a note \u2192 produces a 'comment' entry (SalesNote, source: 'note')\n await apiRequest(page.request, 'POST', '/api/sales/notes', {\n token,\n data: { contextType: 'order', contextId: orderId, body: 'QA test history comment' },\n });\n\n // 3. Update order status \u2192 produces a 'status' entry via command-bus before/after snapshots\n const statusListRes = await apiRequest(page.request, 'GET', '/api/sales/order-statuses?pageSize=5', { token });\n expect(statusListRes.ok(), 'Failed to load order statuses').toBeTruthy();\n const statusList = (await statusListRes.json()) as { items?: Array<{ id: string }> };\n const statusId = statusList.items?.[0]?.id;\n expect(statusId, 'No order statuses are seeded \u2014 cannot produce a status history entry').toBeTruthy();\n await apiRequest(page.request, 'PUT', '/api/sales/orders', {\n token,\n data: { id: orderId, statusEntryId: statusId },\n });\n\n // --- Navigate to order detail page ---\n await login(page, 'admin');\n await page.goto(`/backend/sales/documents/${orderId}?kind=order`);\n await page.waitForLoadState('networkidle');\n\n // Open History tab\n const historyButton = page.getByRole('button', { name: 'History', exact: true });\n await expect(historyButton).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });\n await historyButton.scrollIntoViewIfNeeded();\n await historyButton.click();\n\n const filterButton = page.getByRole('button', { name: /Filters/i });\n await expect(filterButton).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });\n\n // Wait for at least one timeline entry to be visible\n await expect(page.locator('.relative.flex.gap-3').first()).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });\n await expect(page.getByText(/No history entries yet/i)).toHaveCount(0);\n\n // --- Verify all 4 filter options are present ---\n await filterButton.click();\n const filterMenu = page.getByRole('listbox', { name: /Filters/i });\n await expect(filterMenu).toBeVisible();\n await expect(filterMenu.getByRole('option', { name: /^All$/i })).toBeVisible();\n await expect(filterMenu.getByRole('option', { name: /Status changes/i })).toBeVisible();\n await expect(filterMenu.getByRole('option', { name: /^Actions$/i })).toBeVisible();\n await expect(filterMenu.getByRole('option', { name: /^Comments$/i })).toBeVisible();\n await filterMenu.getByRole('option', { name: /^All$/i }).click();\n await expect(filterMenu).toBeHidden();\n\n // Helper: apply a filter and assert at least one entry is visible\n const assertKindHasEntries = async (optionName: string | RegExp, label: string) => {\n await page.getByRole('button', { name: /Filters/i }).click();\n const menu = page.getByRole('listbox', { name: /Filters/i });\n await expect(menu).toBeVisible();\n await menu.getByRole('option', { name: optionName }).click();\n await expect(menu).toBeHidden();\n await expect(\n page.getByText(/No history entries yet/i),\n `\"${label}\" filter shows empty state \u2014 expected at least one entry`,\n ).toHaveCount(0, { timeout: WIDGET_LOAD_TIMEOUT });\n await expect(\n page.locator('.relative.flex.gap-3').first(),\n `\"${label}\" filter shows no timeline items`,\n ).toBeVisible({ timeout: WIDGET_LOAD_TIMEOUT });\n };\n\n // Each of the 3 entry kinds must be present as real data\n await assertKindHasEntries(/^Actions$/i, 'Actions');\n await assertKindHasEntries(/Status changes/i, 'Status changes');\n await assertKindHasEntries(/^Comments$/i, 'Comments');\n\n // --- Reset to All and verify label clears ---\n await page.getByRole('button', { name: /Filters/i }).click();\n const resetMenu = page.getByRole('listbox', { name: /Filters/i });\n await expect(resetMenu).toBeVisible();\n await resetMenu.getByRole('option', { name: /^All$/i }).click();\n await expect(resetMenu).toBeHidden();\n await expect(page.getByRole('button', { name: /^Filters$/i })).toBeVisible();\n } finally {\n await deleteSalesEntityIfExists(page.request, token, '/api/sales/orders', orderId);\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,64 +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
|
-
test.describe("TC-INT-006: Embedded Settings Headings on Resource and Team Member Detail", () => {
|
|
5
|
-
test("should render embedded settings sections without the old edit-form header rows", async ({ page, request }) => {
|
|
6
|
-
test.setTimeout(25e3);
|
|
7
|
-
const stamp = Date.now();
|
|
8
|
-
const resourceName = `QA Resource ${stamp}`;
|
|
9
|
-
const memberName = `QA Team Member ${stamp}`;
|
|
10
|
-
let token = null;
|
|
11
|
-
let resourceId = null;
|
|
12
|
-
let teamMemberId = null;
|
|
13
|
-
try {
|
|
14
|
-
token = await getAuthToken(request, "admin");
|
|
15
|
-
await login(page, "admin");
|
|
16
|
-
const resourceCreateResponse = await apiRequest(request, "POST", "/api/resources/resources", {
|
|
17
|
-
token,
|
|
18
|
-
data: { name: resourceName }
|
|
19
|
-
});
|
|
20
|
-
expect(resourceCreateResponse.ok(), "Resource fixture should be created").toBeTruthy();
|
|
21
|
-
const resourceCreateBody = await resourceCreateResponse.json();
|
|
22
|
-
resourceId = typeof resourceCreateBody.id === "string" ? resourceCreateBody.id : null;
|
|
23
|
-
expect(resourceId, "Resource id should be returned by create response").toBeTruthy();
|
|
24
|
-
const teamMemberCreateResponse = await apiRequest(request, "POST", "/api/staff/team-members", {
|
|
25
|
-
token,
|
|
26
|
-
data: { displayName: memberName }
|
|
27
|
-
});
|
|
28
|
-
expect(teamMemberCreateResponse.ok(), "Team member fixture should be created").toBeTruthy();
|
|
29
|
-
const teamMemberCreateBody = await teamMemberCreateResponse.json();
|
|
30
|
-
teamMemberId = typeof teamMemberCreateBody.id === "string" ? teamMemberCreateBody.id : null;
|
|
31
|
-
expect(teamMemberId, "Team member id should be returned by create response").toBeTruthy();
|
|
32
|
-
await page.goto(`/backend/resources/resources/${encodeURIComponent(resourceId ?? "")}`);
|
|
33
|
-
const resourceSettingsHeading = page.getByRole("heading", {
|
|
34
|
-
name: /resource settings|ressourceneinstellungen|configuraci\u00f3n del recurso|ustawienia zasobu/i
|
|
35
|
-
});
|
|
36
|
-
await expect(resourceSettingsHeading).toBeVisible();
|
|
37
|
-
const resourceCard = page.locator("div.rounded-lg.border.bg-card.p-4").filter({ has: resourceSettingsHeading }).first();
|
|
38
|
-
await expect(resourceCard.locator('button[type="submit"]')).toBeVisible({ timeout: 45e3 });
|
|
39
|
-
await expect(resourceCard.getByText(/edit resource|ressource bearbeiten|editar recurso|edytuj zas\u00f3b/i)).toHaveCount(0);
|
|
40
|
-
await page.goto(`/backend/staff/team-members/${encodeURIComponent(teamMemberId ?? "")}`);
|
|
41
|
-
const memberSettingsHeading = page.getByRole("heading", {
|
|
42
|
-
name: /member settings|mitgliedseinstellungen|configuraci\u00f3n del miembro|ustawienia cz\u0142onka/i
|
|
43
|
-
});
|
|
44
|
-
await expect(memberSettingsHeading).toBeVisible();
|
|
45
|
-
const memberCard = page.locator("div.rounded-lg.border.bg-card.p-4").filter({ has: memberSettingsHeading }).first();
|
|
46
|
-
await expect(memberCard.locator('button[type="submit"]')).toBeVisible({ timeout: 45e3 });
|
|
47
|
-
await expect(memberCard.getByText(/edit team member|teammitglied bearbeiten|editar miembro|edytuj cz\u0142onka/i)).toHaveCount(0);
|
|
48
|
-
} finally {
|
|
49
|
-
if (token && resourceId) {
|
|
50
|
-
await apiRequest(request, "DELETE", `/api/resources/resources?id=${encodeURIComponent(resourceId)}`, {
|
|
51
|
-
token
|
|
52
|
-
}).catch(() => {
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
if (token && teamMemberId) {
|
|
56
|
-
await apiRequest(request, "DELETE", `/api/staff/team-members?id=${encodeURIComponent(teamMemberId)}`, {
|
|
57
|
-
token
|
|
58
|
-
}).catch(() => {
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
//# sourceMappingURL=TC-INT-006.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/staff/__integration__/TC-INT-006.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test';\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';\nimport { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';\n\n/**\n * TC-INT-006: Embedded Settings Headings on Resource and Team Member Detail\n */\ntest.describe('TC-INT-006: Embedded Settings Headings on Resource and Team Member Detail', () => {\n test('should render embedded settings sections without the old edit-form header rows', async ({ page, request }) => {\n test.setTimeout(25_000);\n const stamp = Date.now();\n const resourceName = `QA Resource ${stamp}`;\n const memberName = `QA Team Member ${stamp}`;\n\n let token: string | null = null;\n let resourceId: string | null = null;\n let teamMemberId: string | null = null;\n\n try {\n token = await getAuthToken(request, 'admin');\n await login(page, 'admin');\n\n const resourceCreateResponse = await apiRequest(request, 'POST', '/api/resources/resources', {\n token,\n data: { name: resourceName },\n });\n expect(resourceCreateResponse.ok(), 'Resource fixture should be created').toBeTruthy();\n const resourceCreateBody = (await resourceCreateResponse.json()) as { id?: string | null };\n resourceId = typeof resourceCreateBody.id === 'string' ? resourceCreateBody.id : null;\n expect(resourceId, 'Resource id should be returned by create response').toBeTruthy();\n\n const teamMemberCreateResponse = await apiRequest(request, 'POST', '/api/staff/team-members', {\n token,\n data: { displayName: memberName },\n });\n expect(teamMemberCreateResponse.ok(), 'Team member fixture should be created').toBeTruthy();\n const teamMemberCreateBody = (await teamMemberCreateResponse.json()) as { id?: string | null };\n teamMemberId = typeof teamMemberCreateBody.id === 'string' ? teamMemberCreateBody.id : null;\n expect(teamMemberId, 'Team member id should be returned by create response').toBeTruthy();\n\n await page.goto(`/backend/resources/resources/${encodeURIComponent(resourceId ?? '')}`);\n const resourceSettingsHeading = page.getByRole('heading', {\n name: /resource settings|ressourceneinstellungen|configuraci\\u00f3n del recurso|ustawienia zasobu/i,\n });\n await expect(resourceSettingsHeading).toBeVisible();\n const resourceCard = page.locator('div.rounded-lg.border.bg-card.p-4').filter({ has: resourceSettingsHeading }).first();\n await expect(resourceCard.locator('button[type=\"submit\"]')).toBeVisible({ timeout: 45_000 });\n await expect(resourceCard.getByText(/edit resource|ressource bearbeiten|editar recurso|edytuj zas\\u00f3b/i)).toHaveCount(0);\n\n await page.goto(`/backend/staff/team-members/${encodeURIComponent(teamMemberId ?? '')}`);\n const memberSettingsHeading = page.getByRole('heading', {\n name: /member settings|mitgliedseinstellungen|configuraci\\u00f3n del miembro|ustawienia cz\\u0142onka/i,\n });\n await expect(memberSettingsHeading).toBeVisible();\n const memberCard = page.locator('div.rounded-lg.border.bg-card.p-4').filter({ has: memberSettingsHeading }).first();\n await expect(memberCard.locator('button[type=\"submit\"]')).toBeVisible({ timeout: 45_000 });\n await expect(memberCard.getByText(/edit team member|teammitglied bearbeiten|editar miembro|edytuj cz\\u0142onka/i)).toHaveCount(0);\n } finally {\n if (token && resourceId) {\n await apiRequest(request, 'DELETE', `/api/resources/resources?id=${encodeURIComponent(resourceId)}`, {\n token,\n }).catch(() => {});\n }\n if (token && teamMemberId) {\n await apiRequest(request, 'DELETE', `/api/staff/team-members?id=${encodeURIComponent(teamMemberId)}`, {\n token,\n }).catch(() => {});\n }\n }\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,aAAa;AACtB,SAAS,YAAY,oBAAoB;AAKzC,KAAK,SAAS,6EAA6E,MAAM;AAC/F,OAAK,kFAAkF,OAAO,EAAE,MAAM,QAAQ,MAAM;AAClH,SAAK,WAAW,IAAM;AACtB,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,eAAe,eAAe,KAAK;AACzC,UAAM,aAAa,kBAAkB,KAAK;AAE1C,QAAI,QAAuB;AAC3B,QAAI,aAA4B;AAChC,QAAI,eAA8B;AAElC,QAAI;AACF,cAAQ,MAAM,aAAa,SAAS,OAAO;AAC3C,YAAM,MAAM,MAAM,OAAO;AAEzB,YAAM,yBAAyB,MAAM,WAAW,SAAS,QAAQ,4BAA4B;AAAA,QAC3F;AAAA,QACA,MAAM,EAAE,MAAM,aAAa;AAAA,MAC7B,CAAC;AACD,aAAO,uBAAuB,GAAG,GAAG,oCAAoC,EAAE,WAAW;AACrF,YAAM,qBAAsB,MAAM,uBAAuB,KAAK;AAC9D,mBAAa,OAAO,mBAAmB,OAAO,WAAW,mBAAmB,KAAK;AACjF,aAAO,YAAY,mDAAmD,EAAE,WAAW;AAEnF,YAAM,2BAA2B,MAAM,WAAW,SAAS,QAAQ,2BAA2B;AAAA,QAC5F;AAAA,QACA,MAAM,EAAE,aAAa,WAAW;AAAA,MAClC,CAAC;AACD,aAAO,yBAAyB,GAAG,GAAG,uCAAuC,EAAE,WAAW;AAC1F,YAAM,uBAAwB,MAAM,yBAAyB,KAAK;AAClE,qBAAe,OAAO,qBAAqB,OAAO,WAAW,qBAAqB,KAAK;AACvF,aAAO,cAAc,sDAAsD,EAAE,WAAW;AAExF,YAAM,KAAK,KAAK,gCAAgC,mBAAmB,cAAc,EAAE,CAAC,EAAE;AACtF,YAAM,0BAA0B,KAAK,UAAU,WAAW;AAAA,QACxD,MAAM;AAAA,MACR,CAAC;AACD,YAAM,OAAO,uBAAuB,EAAE,YAAY;AAClD,YAAM,eAAe,KAAK,QAAQ,mCAAmC,EAAE,OAAO,EAAE,KAAK,wBAAwB,CAAC,EAAE,MAAM;AACtH,YAAM,OAAO,aAAa,QAAQ,uBAAuB,CAAC,EAAE,YAAY,EAAE,SAAS,KAAO,CAAC;AAC3F,YAAM,OAAO,aAAa,UAAU,sEAAsE,CAAC,EAAE,YAAY,CAAC;AAE1H,YAAM,KAAK,KAAK,+BAA+B,mBAAmB,gBAAgB,EAAE,CAAC,EAAE;AACvF,YAAM,wBAAwB,KAAK,UAAU,WAAW;AAAA,QACtD,MAAM;AAAA,MACR,CAAC;AACD,YAAM,OAAO,qBAAqB,EAAE,YAAY;AAChD,YAAM,aAAa,KAAK,QAAQ,mCAAmC,EAAE,OAAO,EAAE,KAAK,sBAAsB,CAAC,EAAE,MAAM;AAClH,YAAM,OAAO,WAAW,QAAQ,uBAAuB,CAAC,EAAE,YAAY,EAAE,SAAS,KAAO,CAAC;AACzF,YAAM,OAAO,WAAW,UAAU,8EAA8E,CAAC,EAAE,YAAY,CAAC;AAAA,IAClI,UAAE;AACA,UAAI,SAAS,YAAY;AACvB,cAAM,WAAW,SAAS,UAAU,+BAA+B,mBAAmB,UAAU,CAAC,IAAI;AAAA,UACnG;AAAA,QACF,CAAC,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,MACnB;AACA,UAAI,SAAS,cAAc;AACzB,cAAM,WAAW,SAAS,UAAU,8BAA8B,mBAAmB,YAAY,CAAC,IAAI;AAAA,UACpG;AAAA,QACF,CAAC,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { apiRequest, getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
3
|
-
import { getLocales, setLocales } from "./helpers/translationFixtures.js";
|
|
4
|
-
test.describe("TC-TRANS-001: Locale Configuration CRUD", () => {
|
|
5
|
-
test("should return default locales for authenticated user", async ({ request }) => {
|
|
6
|
-
const token = await getAuthToken(request, "superadmin");
|
|
7
|
-
const response = await apiRequest(request, "GET", "/api/translations/locales", { token });
|
|
8
|
-
expect(response.ok()).toBeTruthy();
|
|
9
|
-
const body = await response.json();
|
|
10
|
-
expect(Array.isArray(body.locales)).toBeTruthy();
|
|
11
|
-
expect(body.locales.length).toBeGreaterThan(0);
|
|
12
|
-
});
|
|
13
|
-
test("should update locales and confirm via GET", async ({ request }) => {
|
|
14
|
-
const token = await getAuthToken(request, "superadmin");
|
|
15
|
-
const originalLocales = await getLocales(request, token);
|
|
16
|
-
try {
|
|
17
|
-
const putResponse = await apiRequest(request, "PUT", "/api/translations/locales", {
|
|
18
|
-
token,
|
|
19
|
-
data: { locales: ["en", "de", "fr"] }
|
|
20
|
-
});
|
|
21
|
-
expect(putResponse.ok()).toBeTruthy();
|
|
22
|
-
const putBody = await putResponse.json();
|
|
23
|
-
expect(putBody.locales).toEqual(["en", "de", "fr"]);
|
|
24
|
-
const confirmedLocales = await getLocales(request, token);
|
|
25
|
-
expect(confirmedLocales).toEqual(["en", "de", "fr"]);
|
|
26
|
-
} finally {
|
|
27
|
-
await setLocales(request, token, originalLocales).catch(() => {
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
test("should reject invalid ISO 639-1 codes with 400", async ({ request }) => {
|
|
32
|
-
const token = await getAuthToken(request, "superadmin");
|
|
33
|
-
const response = await apiRequest(request, "PUT", "/api/translations/locales", {
|
|
34
|
-
token,
|
|
35
|
-
data: { locales: ["en", "xx"] }
|
|
36
|
-
});
|
|
37
|
-
expect(response.status()).toBe(400);
|
|
38
|
-
});
|
|
39
|
-
test("should reject empty locales array with 400", async ({ request }) => {
|
|
40
|
-
const token = await getAuthToken(request, "superadmin");
|
|
41
|
-
const response = await apiRequest(request, "PUT", "/api/translations/locales", {
|
|
42
|
-
token,
|
|
43
|
-
data: { locales: [] }
|
|
44
|
-
});
|
|
45
|
-
expect(response.status()).toBe(400);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=TC-TRANS-001.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/translations/__integration__/TC-TRANS-001.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test'\nimport { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api'\nimport { getLocales, setLocales } from './helpers/translationFixtures'\n\n/**\n * TC-TRANS-001: Locale Configuration CRUD\n * Covers GET/PUT /api/translations/locales \u2014 read defaults, update, validation.\n */\ntest.describe('TC-TRANS-001: Locale Configuration CRUD', () => {\n test('should return default locales for authenticated user', async ({ request }) => {\n const token = await getAuthToken(request, 'superadmin')\n const response = await apiRequest(request, 'GET', '/api/translations/locales', { token })\n\n expect(response.ok()).toBeTruthy()\n const body = (await response.json()) as { locales: string[] }\n expect(Array.isArray(body.locales)).toBeTruthy()\n expect(body.locales.length).toBeGreaterThan(0)\n })\n\n test('should update locales and confirm via GET', async ({ request }) => {\n const token = await getAuthToken(request, 'superadmin')\n const originalLocales = await getLocales(request, token)\n\n try {\n const putResponse = await apiRequest(request, 'PUT', '/api/translations/locales', {\n token,\n data: { locales: ['en', 'de', 'fr'] },\n })\n expect(putResponse.ok()).toBeTruthy()\n const putBody = (await putResponse.json()) as { locales: string[] }\n expect(putBody.locales).toEqual(['en', 'de', 'fr'])\n\n const confirmedLocales = await getLocales(request, token)\n expect(confirmedLocales).toEqual(['en', 'de', 'fr'])\n } finally {\n await setLocales(request, token, originalLocales).catch(() => {})\n }\n })\n\n test('should reject invalid ISO 639-1 codes with 400', async ({ request }) => {\n const token = await getAuthToken(request, 'superadmin')\n const response = await apiRequest(request, 'PUT', '/api/translations/locales', {\n token,\n data: { locales: ['en', 'xx'] },\n })\n expect(response.status()).toBe(400)\n })\n\n test('should reject empty locales array with 400', async ({ request }) => {\n const token = await getAuthToken(request, 'superadmin')\n const response = await apiRequest(request, 'PUT', '/api/translations/locales', {\n token,\n data: { locales: [] },\n })\n expect(response.status()).toBe(400)\n })\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,YAAY,oBAAoB;AACzC,SAAS,YAAY,kBAAkB;AAMvC,KAAK,SAAS,2CAA2C,MAAM;AAC7D,OAAK,wDAAwD,OAAO,EAAE,QAAQ,MAAM;AAClF,UAAM,QAAQ,MAAM,aAAa,SAAS,YAAY;AACtD,UAAM,WAAW,MAAM,WAAW,SAAS,OAAO,6BAA6B,EAAE,MAAM,CAAC;AAExF,WAAO,SAAS,GAAG,CAAC,EAAE,WAAW;AACjC,UAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,WAAO,MAAM,QAAQ,KAAK,OAAO,CAAC,EAAE,WAAW;AAC/C,WAAO,KAAK,QAAQ,MAAM,EAAE,gBAAgB,CAAC;AAAA,EAC/C,CAAC;AAED,OAAK,6CAA6C,OAAO,EAAE,QAAQ,MAAM;AACvE,UAAM,QAAQ,MAAM,aAAa,SAAS,YAAY;AACtD,UAAM,kBAAkB,MAAM,WAAW,SAAS,KAAK;AAEvD,QAAI;AACF,YAAM,cAAc,MAAM,WAAW,SAAS,OAAO,6BAA6B;AAAA,QAChF;AAAA,QACA,MAAM,EAAE,SAAS,CAAC,MAAM,MAAM,IAAI,EAAE;AAAA,MACtC,CAAC;AACD,aAAO,YAAY,GAAG,CAAC,EAAE,WAAW;AACpC,YAAM,UAAW,MAAM,YAAY,KAAK;AACxC,aAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC;AAElD,YAAM,mBAAmB,MAAM,WAAW,SAAS,KAAK;AACxD,aAAO,gBAAgB,EAAE,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC;AAAA,IACrD,UAAE;AACA,YAAM,WAAW,SAAS,OAAO,eAAe,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAClE;AAAA,EACF,CAAC;AAED,OAAK,kDAAkD,OAAO,EAAE,QAAQ,MAAM;AAC5E,UAAM,QAAQ,MAAM,aAAa,SAAS,YAAY;AACtD,UAAM,WAAW,MAAM,WAAW,SAAS,OAAO,6BAA6B;AAAA,MAC7E;AAAA,MACA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE;AAAA,IAChC,CAAC;AACD,WAAO,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,EACpC,CAAC;AAED,OAAK,8CAA8C,OAAO,EAAE,QAAQ,MAAM;AACxE,UAAM,QAAQ,MAAM,aAAa,SAAS,YAAY;AACtD,UAAM,WAAW,MAAM,WAAW,SAAS,OAAO,6BAA6B;AAAA,MAC7E;AAAA,MACA,MAAM,EAAE,SAAS,CAAC,EAAE;AAAA,IACtB,CAAC;AACD,WAAO,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,EACpC,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { apiRequest, getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
3
|
-
import { createProductFixture, deleteCatalogProductIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/catalogFixtures";
|
|
4
|
-
import { deleteTranslationIfExists } from "./helpers/translationFixtures.js";
|
|
5
|
-
const ENTITY_TYPE = "catalog:catalog_product";
|
|
6
|
-
test.describe("TC-TRANS-002: Translation CRUD Lifecycle", () => {
|
|
7
|
-
test("should return 404 for non-existent translation", async ({ request }) => {
|
|
8
|
-
const adminToken = await getAuthToken(request, "admin");
|
|
9
|
-
const saToken = await getAuthToken(request, "superadmin");
|
|
10
|
-
const productTitle = `QA TC-TRANS-002-1 ${Date.now()}`;
|
|
11
|
-
const sku = `QA-TRANS-002-1-${Date.now()}`;
|
|
12
|
-
let productId = null;
|
|
13
|
-
try {
|
|
14
|
-
productId = await createProductFixture(request, adminToken, { title: productTitle, sku });
|
|
15
|
-
const response = await apiRequest(request, "GET", `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken });
|
|
16
|
-
expect(response.status()).toBe(404);
|
|
17
|
-
} finally {
|
|
18
|
-
await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId);
|
|
19
|
-
await deleteCatalogProductIfExists(request, adminToken, productId);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
test("should create and retrieve a translation", async ({ request }) => {
|
|
23
|
-
const adminToken = await getAuthToken(request, "admin");
|
|
24
|
-
const saToken = await getAuthToken(request, "superadmin");
|
|
25
|
-
const productTitle = `QA TC-TRANS-002-2 ${Date.now()}`;
|
|
26
|
-
const sku = `QA-TRANS-002-2-${Date.now()}`;
|
|
27
|
-
let productId = null;
|
|
28
|
-
try {
|
|
29
|
-
productId = await createProductFixture(request, adminToken, { title: productTitle, sku });
|
|
30
|
-
const putResponse = await apiRequest(request, "PUT", `/api/translations/${ENTITY_TYPE}/${productId}`, {
|
|
31
|
-
token: saToken,
|
|
32
|
-
data: { de: { title: "Deutscher Titel" } }
|
|
33
|
-
});
|
|
34
|
-
expect(putResponse.ok()).toBeTruthy();
|
|
35
|
-
const putBody = await putResponse.json();
|
|
36
|
-
expect(putBody.translations.de.title).toBe("Deutscher Titel");
|
|
37
|
-
const getResponse = await apiRequest(request, "GET", `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken });
|
|
38
|
-
expect(getResponse.ok()).toBeTruthy();
|
|
39
|
-
const getBody = await getResponse.json();
|
|
40
|
-
expect(getBody.translations.de.title).toBe("Deutscher Titel");
|
|
41
|
-
} finally {
|
|
42
|
-
await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId);
|
|
43
|
-
await deleteCatalogProductIfExists(request, adminToken, productId);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
test("should upsert translations (add locale, update existing)", async ({ request }) => {
|
|
47
|
-
const adminToken = await getAuthToken(request, "admin");
|
|
48
|
-
const saToken = await getAuthToken(request, "superadmin");
|
|
49
|
-
const productTitle = `QA TC-TRANS-002-3 ${Date.now()}`;
|
|
50
|
-
const sku = `QA-TRANS-002-3-${Date.now()}`;
|
|
51
|
-
let productId = null;
|
|
52
|
-
try {
|
|
53
|
-
productId = await createProductFixture(request, adminToken, { title: productTitle, sku });
|
|
54
|
-
await apiRequest(request, "PUT", `/api/translations/${ENTITY_TYPE}/${productId}`, {
|
|
55
|
-
token: saToken,
|
|
56
|
-
data: { de: { title: "Original" } }
|
|
57
|
-
});
|
|
58
|
-
const upsertResponse = await apiRequest(request, "PUT", `/api/translations/${ENTITY_TYPE}/${productId}`, {
|
|
59
|
-
token: saToken,
|
|
60
|
-
data: { de: { title: "Aktualisiert" }, fr: { title: "Titre Fran\xE7ais" } }
|
|
61
|
-
});
|
|
62
|
-
expect(upsertResponse.ok()).toBeTruthy();
|
|
63
|
-
const getResponse = await apiRequest(request, "GET", `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken });
|
|
64
|
-
const body = await getResponse.json();
|
|
65
|
-
expect(body.translations.de.title).toBe("Aktualisiert");
|
|
66
|
-
expect(body.translations.fr.title).toBe("Titre Fran\xE7ais");
|
|
67
|
-
} finally {
|
|
68
|
-
await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId);
|
|
69
|
-
await deleteCatalogProductIfExists(request, adminToken, productId);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
test("should delete translations and confirm 404", async ({ request }) => {
|
|
73
|
-
const adminToken = await getAuthToken(request, "admin");
|
|
74
|
-
const saToken = await getAuthToken(request, "superadmin");
|
|
75
|
-
const productTitle = `QA TC-TRANS-002-4 ${Date.now()}`;
|
|
76
|
-
const sku = `QA-TRANS-002-4-${Date.now()}`;
|
|
77
|
-
let productId = null;
|
|
78
|
-
try {
|
|
79
|
-
productId = await createProductFixture(request, adminToken, { title: productTitle, sku });
|
|
80
|
-
await apiRequest(request, "PUT", `/api/translations/${ENTITY_TYPE}/${productId}`, {
|
|
81
|
-
token: saToken,
|
|
82
|
-
data: { de: { title: "Zu l\xF6schen" } }
|
|
83
|
-
});
|
|
84
|
-
const deleteResponse = await apiRequest(request, "DELETE", `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken });
|
|
85
|
-
expect(deleteResponse.status()).toBe(204);
|
|
86
|
-
const getResponse = await apiRequest(request, "GET", `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken });
|
|
87
|
-
expect(getResponse.status()).toBe(404);
|
|
88
|
-
} finally {
|
|
89
|
-
await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId);
|
|
90
|
-
await deleteCatalogProductIfExists(request, adminToken, productId);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
//# sourceMappingURL=TC-TRANS-002.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/translations/__integration__/TC-TRANS-002.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test'\nimport { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api'\nimport { createProductFixture, deleteCatalogProductIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/catalogFixtures'\nimport { deleteTranslationIfExists } from './helpers/translationFixtures'\n\nconst ENTITY_TYPE = 'catalog:catalog_product'\n\n/**\n * TC-TRANS-002: Translation CRUD Lifecycle\n * Covers GET/PUT/DELETE /api/translations/:entityType/:entityId \u2014 full create-read-update-delete flow.\n */\ntest.describe('TC-TRANS-002: Translation CRUD Lifecycle', () => {\n test('should return 404 for non-existent translation', async ({ request }) => {\n const adminToken = await getAuthToken(request, 'admin')\n const saToken = await getAuthToken(request, 'superadmin')\n const productTitle = `QA TC-TRANS-002-1 ${Date.now()}`\n const sku = `QA-TRANS-002-1-${Date.now()}`\n let productId: string | null = null\n\n try {\n productId = await createProductFixture(request, adminToken, { title: productTitle, sku })\n const response = await apiRequest(request, 'GET', `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken })\n expect(response.status()).toBe(404)\n } finally {\n await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId)\n await deleteCatalogProductIfExists(request, adminToken, productId)\n }\n })\n\n test('should create and retrieve a translation', async ({ request }) => {\n const adminToken = await getAuthToken(request, 'admin')\n const saToken = await getAuthToken(request, 'superadmin')\n const productTitle = `QA TC-TRANS-002-2 ${Date.now()}`\n const sku = `QA-TRANS-002-2-${Date.now()}`\n let productId: string | null = null\n\n try {\n productId = await createProductFixture(request, adminToken, { title: productTitle, sku })\n\n const putResponse = await apiRequest(request, 'PUT', `/api/translations/${ENTITY_TYPE}/${productId}`, {\n token: saToken,\n data: { de: { title: 'Deutscher Titel' } },\n })\n expect(putResponse.ok()).toBeTruthy()\n const putBody = (await putResponse.json()) as { translations: Record<string, Record<string, string>> }\n expect(putBody.translations.de.title).toBe('Deutscher Titel')\n\n const getResponse = await apiRequest(request, 'GET', `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken })\n expect(getResponse.ok()).toBeTruthy()\n const getBody = (await getResponse.json()) as { translations: Record<string, Record<string, string>> }\n expect(getBody.translations.de.title).toBe('Deutscher Titel')\n } finally {\n await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId)\n await deleteCatalogProductIfExists(request, adminToken, productId)\n }\n })\n\n test('should upsert translations (add locale, update existing)', async ({ request }) => {\n const adminToken = await getAuthToken(request, 'admin')\n const saToken = await getAuthToken(request, 'superadmin')\n const productTitle = `QA TC-TRANS-002-3 ${Date.now()}`\n const sku = `QA-TRANS-002-3-${Date.now()}`\n let productId: string | null = null\n\n try {\n productId = await createProductFixture(request, adminToken, { title: productTitle, sku })\n\n await apiRequest(request, 'PUT', `/api/translations/${ENTITY_TYPE}/${productId}`, {\n token: saToken,\n data: { de: { title: 'Original' } },\n })\n\n const upsertResponse = await apiRequest(request, 'PUT', `/api/translations/${ENTITY_TYPE}/${productId}`, {\n token: saToken,\n data: { de: { title: 'Aktualisiert' }, fr: { title: 'Titre Fran\u00E7ais' } },\n })\n expect(upsertResponse.ok()).toBeTruthy()\n\n const getResponse = await apiRequest(request, 'GET', `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken })\n const body = (await getResponse.json()) as { translations: Record<string, Record<string, string>> }\n expect(body.translations.de.title).toBe('Aktualisiert')\n expect(body.translations.fr.title).toBe('Titre Fran\u00E7ais')\n } finally {\n await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId)\n await deleteCatalogProductIfExists(request, adminToken, productId)\n }\n })\n\n test('should delete translations and confirm 404', async ({ request }) => {\n const adminToken = await getAuthToken(request, 'admin')\n const saToken = await getAuthToken(request, 'superadmin')\n const productTitle = `QA TC-TRANS-002-4 ${Date.now()}`\n const sku = `QA-TRANS-002-4-${Date.now()}`\n let productId: string | null = null\n\n try {\n productId = await createProductFixture(request, adminToken, { title: productTitle, sku })\n\n await apiRequest(request, 'PUT', `/api/translations/${ENTITY_TYPE}/${productId}`, {\n token: saToken,\n data: { de: { title: 'Zu l\u00F6schen' } },\n })\n\n const deleteResponse = await apiRequest(request, 'DELETE', `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken })\n expect(deleteResponse.status()).toBe(204)\n\n const getResponse = await apiRequest(request, 'GET', `/api/translations/${ENTITY_TYPE}/${productId}`, { token: saToken })\n expect(getResponse.status()).toBe(404)\n } finally {\n await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId)\n await deleteCatalogProductIfExists(request, adminToken, productId)\n }\n })\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,YAAY,oBAAoB;AACzC,SAAS,sBAAsB,oCAAoC;AACnE,SAAS,iCAAiC;AAE1C,MAAM,cAAc;AAMpB,KAAK,SAAS,4CAA4C,MAAM;AAC9D,OAAK,kDAAkD,OAAO,EAAE,QAAQ,MAAM;AAC5E,UAAM,aAAa,MAAM,aAAa,SAAS,OAAO;AACtD,UAAM,UAAU,MAAM,aAAa,SAAS,YAAY;AACxD,UAAM,eAAe,qBAAqB,KAAK,IAAI,CAAC;AACpD,UAAM,MAAM,kBAAkB,KAAK,IAAI,CAAC;AACxC,QAAI,YAA2B;AAE/B,QAAI;AACF,kBAAY,MAAM,qBAAqB,SAAS,YAAY,EAAE,OAAO,cAAc,IAAI,CAAC;AACxF,YAAM,WAAW,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI,EAAE,OAAO,QAAQ,CAAC;AACrH,aAAO,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,IACpC,UAAE;AACA,YAAM,0BAA0B,SAAS,SAAS,aAAa,SAAS;AACxE,YAAM,6BAA6B,SAAS,YAAY,SAAS;AAAA,IACnE;AAAA,EACF,CAAC;AAED,OAAK,4CAA4C,OAAO,EAAE,QAAQ,MAAM;AACtE,UAAM,aAAa,MAAM,aAAa,SAAS,OAAO;AACtD,UAAM,UAAU,MAAM,aAAa,SAAS,YAAY;AACxD,UAAM,eAAe,qBAAqB,KAAK,IAAI,CAAC;AACpD,UAAM,MAAM,kBAAkB,KAAK,IAAI,CAAC;AACxC,QAAI,YAA2B;AAE/B,QAAI;AACF,kBAAY,MAAM,qBAAqB,SAAS,YAAY,EAAE,OAAO,cAAc,IAAI,CAAC;AAExF,YAAM,cAAc,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI;AAAA,QACpG,OAAO;AAAA,QACP,MAAM,EAAE,IAAI,EAAE,OAAO,kBAAkB,EAAE;AAAA,MAC3C,CAAC;AACD,aAAO,YAAY,GAAG,CAAC,EAAE,WAAW;AACpC,YAAM,UAAW,MAAM,YAAY,KAAK;AACxC,aAAO,QAAQ,aAAa,GAAG,KAAK,EAAE,KAAK,iBAAiB;AAE5D,YAAM,cAAc,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI,EAAE,OAAO,QAAQ,CAAC;AACxH,aAAO,YAAY,GAAG,CAAC,EAAE,WAAW;AACpC,YAAM,UAAW,MAAM,YAAY,KAAK;AACxC,aAAO,QAAQ,aAAa,GAAG,KAAK,EAAE,KAAK,iBAAiB;AAAA,IAC9D,UAAE;AACA,YAAM,0BAA0B,SAAS,SAAS,aAAa,SAAS;AACxE,YAAM,6BAA6B,SAAS,YAAY,SAAS;AAAA,IACnE;AAAA,EACF,CAAC;AAED,OAAK,4DAA4D,OAAO,EAAE,QAAQ,MAAM;AACtF,UAAM,aAAa,MAAM,aAAa,SAAS,OAAO;AACtD,UAAM,UAAU,MAAM,aAAa,SAAS,YAAY;AACxD,UAAM,eAAe,qBAAqB,KAAK,IAAI,CAAC;AACpD,UAAM,MAAM,kBAAkB,KAAK,IAAI,CAAC;AACxC,QAAI,YAA2B;AAE/B,QAAI;AACF,kBAAY,MAAM,qBAAqB,SAAS,YAAY,EAAE,OAAO,cAAc,IAAI,CAAC;AAExF,YAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI;AAAA,QAChF,OAAO;AAAA,QACP,MAAM,EAAE,IAAI,EAAE,OAAO,WAAW,EAAE;AAAA,MACpC,CAAC;AAED,YAAM,iBAAiB,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI;AAAA,QACvG,OAAO;AAAA,QACP,MAAM,EAAE,IAAI,EAAE,OAAO,eAAe,GAAG,IAAI,EAAE,OAAO,oBAAiB,EAAE;AAAA,MACzE,CAAC;AACD,aAAO,eAAe,GAAG,CAAC,EAAE,WAAW;AAEvC,YAAM,cAAc,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI,EAAE,OAAO,QAAQ,CAAC;AACxH,YAAM,OAAQ,MAAM,YAAY,KAAK;AACrC,aAAO,KAAK,aAAa,GAAG,KAAK,EAAE,KAAK,cAAc;AACtD,aAAO,KAAK,aAAa,GAAG,KAAK,EAAE,KAAK,mBAAgB;AAAA,IAC1D,UAAE;AACA,YAAM,0BAA0B,SAAS,SAAS,aAAa,SAAS;AACxE,YAAM,6BAA6B,SAAS,YAAY,SAAS;AAAA,IACnE;AAAA,EACF,CAAC;AAED,OAAK,8CAA8C,OAAO,EAAE,QAAQ,MAAM;AACxE,UAAM,aAAa,MAAM,aAAa,SAAS,OAAO;AACtD,UAAM,UAAU,MAAM,aAAa,SAAS,YAAY;AACxD,UAAM,eAAe,qBAAqB,KAAK,IAAI,CAAC;AACpD,UAAM,MAAM,kBAAkB,KAAK,IAAI,CAAC;AACxC,QAAI,YAA2B;AAE/B,QAAI;AACF,kBAAY,MAAM,qBAAqB,SAAS,YAAY,EAAE,OAAO,cAAc,IAAI,CAAC;AAExF,YAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI;AAAA,QAChF,OAAO;AAAA,QACP,MAAM,EAAE,IAAI,EAAE,OAAO,gBAAa,EAAE;AAAA,MACtC,CAAC;AAED,YAAM,iBAAiB,MAAM,WAAW,SAAS,UAAU,qBAAqB,WAAW,IAAI,SAAS,IAAI,EAAE,OAAO,QAAQ,CAAC;AAC9H,aAAO,eAAe,OAAO,CAAC,EAAE,KAAK,GAAG;AAExC,YAAM,cAAc,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI,EAAE,OAAO,QAAQ,CAAC;AACxH,aAAO,YAAY,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,IACvC,UAAE;AACA,YAAM,0BAA0B,SAAS,SAAS,aAAa,SAAS;AACxE,YAAM,6BAA6B,SAAS,YAAY,SAAS;AAAA,IACnE;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { apiRequest, getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
3
|
-
import { createProductFixture, deleteCatalogProductIfExists } from "@open-mercato/core/modules/core/__integration__/helpers/catalogFixtures";
|
|
4
|
-
import { deleteTranslationIfExists } from "./helpers/translationFixtures.js";
|
|
5
|
-
const ENTITY_TYPE = "catalog:catalog_product";
|
|
6
|
-
const BASE_URL = process.env.BASE_URL || "http://localhost:3000";
|
|
7
|
-
test.describe("TC-TRANS-003: Validation & Authorization", () => {
|
|
8
|
-
test("should reject invalid entityType format with 400", async ({ request }) => {
|
|
9
|
-
const token = await getAuthToken(request, "superadmin");
|
|
10
|
-
const response = await apiRequest(request, "PUT", "/api/translations/INVALID/some-id", {
|
|
11
|
-
token,
|
|
12
|
-
data: { en: { title: "test" } }
|
|
13
|
-
});
|
|
14
|
-
expect(response.status()).toBe(400);
|
|
15
|
-
});
|
|
16
|
-
test("should reject field value exceeding 10000 characters with 400", async ({ request }) => {
|
|
17
|
-
const adminToken = await getAuthToken(request, "admin");
|
|
18
|
-
const saToken = await getAuthToken(request, "superadmin");
|
|
19
|
-
const productTitle = `QA TC-TRANS-003-2 ${Date.now()}`;
|
|
20
|
-
const sku = `QA-TRANS-003-2-${Date.now()}`;
|
|
21
|
-
let productId = null;
|
|
22
|
-
try {
|
|
23
|
-
productId = await createProductFixture(request, adminToken, { title: productTitle, sku });
|
|
24
|
-
const longValue = "x".repeat(10001);
|
|
25
|
-
const response = await apiRequest(request, "PUT", `/api/translations/${ENTITY_TYPE}/${productId}`, {
|
|
26
|
-
token: saToken,
|
|
27
|
-
data: { en: { title: longValue } }
|
|
28
|
-
});
|
|
29
|
-
expect(response.status()).toBe(400);
|
|
30
|
-
} finally {
|
|
31
|
-
await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId);
|
|
32
|
-
await deleteCatalogProductIfExists(request, adminToken, productId);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
test("should reject locale key exceeding max length with 400", async ({ request }) => {
|
|
36
|
-
const adminToken = await getAuthToken(request, "admin");
|
|
37
|
-
const saToken = await getAuthToken(request, "superadmin");
|
|
38
|
-
const productTitle = `QA TC-TRANS-003-3 ${Date.now()}`;
|
|
39
|
-
const sku = `QA-TRANS-003-3-${Date.now()}`;
|
|
40
|
-
let productId = null;
|
|
41
|
-
try {
|
|
42
|
-
productId = await createProductFixture(request, adminToken, { title: productTitle, sku });
|
|
43
|
-
const response = await apiRequest(request, "PUT", `/api/translations/${ENTITY_TYPE}/${productId}`, {
|
|
44
|
-
token: saToken,
|
|
45
|
-
data: { abcdefghijk: { title: "test" } }
|
|
46
|
-
});
|
|
47
|
-
expect(response.status()).toBe(400);
|
|
48
|
-
} finally {
|
|
49
|
-
await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId);
|
|
50
|
-
await deleteCatalogProductIfExists(request, adminToken, productId);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
test("should reject unauthenticated requests with 401", async ({ request }) => {
|
|
54
|
-
const response = await request.fetch(`${BASE_URL}/api/translations/locales`, {
|
|
55
|
-
method: "GET",
|
|
56
|
-
headers: { "Content-Type": "application/json" }
|
|
57
|
-
});
|
|
58
|
-
expect(response.status()).toBe(401);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=TC-TRANS-003.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/translations/__integration__/TC-TRANS-003.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test'\nimport { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api'\nimport { createProductFixture, deleteCatalogProductIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/catalogFixtures'\nimport { deleteTranslationIfExists } from './helpers/translationFixtures'\n\nconst ENTITY_TYPE = 'catalog:catalog_product'\nconst BASE_URL = process.env.BASE_URL || 'http://localhost:3000'\n\n/**\n * TC-TRANS-003: Validation & Authorization\n * Covers input validation (entityType, body limits) and basic access control.\n */\ntest.describe('TC-TRANS-003: Validation & Authorization', () => {\n test('should reject invalid entityType format with 400', async ({ request }) => {\n const token = await getAuthToken(request, 'superadmin')\n const response = await apiRequest(request, 'PUT', '/api/translations/INVALID/some-id', {\n token,\n data: { en: { title: 'test' } },\n })\n expect(response.status()).toBe(400)\n })\n\n test('should reject field value exceeding 10000 characters with 400', async ({ request }) => {\n const adminToken = await getAuthToken(request, 'admin')\n const saToken = await getAuthToken(request, 'superadmin')\n const productTitle = `QA TC-TRANS-003-2 ${Date.now()}`\n const sku = `QA-TRANS-003-2-${Date.now()}`\n let productId: string | null = null\n\n try {\n productId = await createProductFixture(request, adminToken, { title: productTitle, sku })\n const longValue = 'x'.repeat(10001)\n const response = await apiRequest(request, 'PUT', `/api/translations/${ENTITY_TYPE}/${productId}`, {\n token: saToken,\n data: { en: { title: longValue } },\n })\n expect(response.status()).toBe(400)\n } finally {\n await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId)\n await deleteCatalogProductIfExists(request, adminToken, productId)\n }\n })\n\n test('should reject locale key exceeding max length with 400', async ({ request }) => {\n const adminToken = await getAuthToken(request, 'admin')\n const saToken = await getAuthToken(request, 'superadmin')\n const productTitle = `QA TC-TRANS-003-3 ${Date.now()}`\n const sku = `QA-TRANS-003-3-${Date.now()}`\n let productId: string | null = null\n\n try {\n productId = await createProductFixture(request, adminToken, { title: productTitle, sku })\n const response = await apiRequest(request, 'PUT', `/api/translations/${ENTITY_TYPE}/${productId}`, {\n token: saToken,\n data: { abcdefghijk: { title: 'test' } },\n })\n expect(response.status()).toBe(400)\n } finally {\n await deleteTranslationIfExists(request, saToken, ENTITY_TYPE, productId)\n await deleteCatalogProductIfExists(request, adminToken, productId)\n }\n })\n\n test('should reject unauthenticated requests with 401', async ({ request }) => {\n const response = await request.fetch(`${BASE_URL}/api/translations/locales`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n })\n expect(response.status()).toBe(401)\n })\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,YAAY,oBAAoB;AACzC,SAAS,sBAAsB,oCAAoC;AACnE,SAAS,iCAAiC;AAE1C,MAAM,cAAc;AACpB,MAAM,WAAW,QAAQ,IAAI,YAAY;AAMzC,KAAK,SAAS,4CAA4C,MAAM;AAC9D,OAAK,oDAAoD,OAAO,EAAE,QAAQ,MAAM;AAC9E,UAAM,QAAQ,MAAM,aAAa,SAAS,YAAY;AACtD,UAAM,WAAW,MAAM,WAAW,SAAS,OAAO,qCAAqC;AAAA,MACrF;AAAA,MACA,MAAM,EAAE,IAAI,EAAE,OAAO,OAAO,EAAE;AAAA,IAChC,CAAC;AACD,WAAO,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,EACpC,CAAC;AAED,OAAK,iEAAiE,OAAO,EAAE,QAAQ,MAAM;AAC3F,UAAM,aAAa,MAAM,aAAa,SAAS,OAAO;AACtD,UAAM,UAAU,MAAM,aAAa,SAAS,YAAY;AACxD,UAAM,eAAe,qBAAqB,KAAK,IAAI,CAAC;AACpD,UAAM,MAAM,kBAAkB,KAAK,IAAI,CAAC;AACxC,QAAI,YAA2B;AAE/B,QAAI;AACF,kBAAY,MAAM,qBAAqB,SAAS,YAAY,EAAE,OAAO,cAAc,IAAI,CAAC;AACxF,YAAM,YAAY,IAAI,OAAO,KAAK;AAClC,YAAM,WAAW,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI;AAAA,QACjG,OAAO;AAAA,QACP,MAAM,EAAE,IAAI,EAAE,OAAO,UAAU,EAAE;AAAA,MACnC,CAAC;AACD,aAAO,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,IACpC,UAAE;AACA,YAAM,0BAA0B,SAAS,SAAS,aAAa,SAAS;AACxE,YAAM,6BAA6B,SAAS,YAAY,SAAS;AAAA,IACnE;AAAA,EACF,CAAC;AAED,OAAK,0DAA0D,OAAO,EAAE,QAAQ,MAAM;AACpF,UAAM,aAAa,MAAM,aAAa,SAAS,OAAO;AACtD,UAAM,UAAU,MAAM,aAAa,SAAS,YAAY;AACxD,UAAM,eAAe,qBAAqB,KAAK,IAAI,CAAC;AACpD,UAAM,MAAM,kBAAkB,KAAK,IAAI,CAAC;AACxC,QAAI,YAA2B;AAE/B,QAAI;AACF,kBAAY,MAAM,qBAAqB,SAAS,YAAY,EAAE,OAAO,cAAc,IAAI,CAAC;AACxF,YAAM,WAAW,MAAM,WAAW,SAAS,OAAO,qBAAqB,WAAW,IAAI,SAAS,IAAI;AAAA,QACjG,OAAO;AAAA,QACP,MAAM,EAAE,aAAa,EAAE,OAAO,OAAO,EAAE;AAAA,MACzC,CAAC;AACD,aAAO,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,IACpC,UAAE;AACA,YAAM,0BAA0B,SAAS,SAAS,aAAa,SAAS;AACxE,YAAM,6BAA6B,SAAS,YAAY,SAAS;AAAA,IACnE;AAAA,EACF,CAAC;AAED,OAAK,mDAAmD,OAAO,EAAE,QAAQ,MAAM;AAC7E,UAAM,WAAW,MAAM,QAAQ,MAAM,GAAG,QAAQ,6BAA6B;AAAA,MAC3E,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAChD,CAAC;AACD,WAAO,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG;AAAA,EACpC,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "@playwright/test";
|
|
2
|
-
import { getAuthToken } from "@open-mercato/core/modules/core/__integration__/helpers/api";
|
|
3
|
-
import { login } from "@open-mercato/core/modules/core/__integration__/helpers/auth";
|
|
4
|
-
import { getLocales, setLocales } from "./helpers/translationFixtures.js";
|
|
5
|
-
test.describe("TC-TRANS-004: Locale Management Page", () => {
|
|
6
|
-
test("should navigate to translations config page", async ({ page }) => {
|
|
7
|
-
await login(page, "superadmin");
|
|
8
|
-
await page.goto("/backend/config/translations");
|
|
9
|
-
await expect(page.getByText("Supported locales")).toBeVisible();
|
|
10
|
-
await expect(page.getByRole("heading", { name: "Translations" })).toBeVisible();
|
|
11
|
-
});
|
|
12
|
-
test("should add a locale via UI and verify via API", async ({ page, request }) => {
|
|
13
|
-
const token = await getAuthToken(request, "admin");
|
|
14
|
-
const originalLocales = await getLocales(request, token);
|
|
15
|
-
try {
|
|
16
|
-
await login(page, "superadmin");
|
|
17
|
-
await page.goto("/backend/config/translations");
|
|
18
|
-
await expect(page.getByText("Supported locales")).toBeVisible();
|
|
19
|
-
const searchInput = page.getByPlaceholder("e.g. fr, it, ja...");
|
|
20
|
-
await searchInput.fill("Japanese");
|
|
21
|
-
await page.getByText(/JA — Japanese/i).click();
|
|
22
|
-
await page.getByRole("button", { name: "Add" }).click();
|
|
23
|
-
await expect(page.locator("span").filter({ hasText: /^JA/ })).toBeVisible();
|
|
24
|
-
const updatedLocales = await getLocales(request, token);
|
|
25
|
-
expect(updatedLocales).toContain("ja");
|
|
26
|
-
} finally {
|
|
27
|
-
await setLocales(request, token, originalLocales).catch(() => {
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
test("should remove a locale via UI and verify via API", async ({ page, request }) => {
|
|
32
|
-
const token = await getAuthToken(request, "admin");
|
|
33
|
-
const originalLocales = await getLocales(request, token);
|
|
34
|
-
try {
|
|
35
|
-
await setLocales(request, token, [.../* @__PURE__ */ new Set([...originalLocales, "ja"])]);
|
|
36
|
-
await login(page, "superadmin");
|
|
37
|
-
await page.goto("/backend/config/translations");
|
|
38
|
-
await expect(page.getByText("Supported locales")).toBeVisible();
|
|
39
|
-
const jaBadge = page.locator("span").filter({ hasText: /^JA/ });
|
|
40
|
-
await expect(jaBadge).toBeVisible();
|
|
41
|
-
const removeButton = jaBadge.getByRole("button");
|
|
42
|
-
await removeButton.click();
|
|
43
|
-
await expect(jaBadge).not.toBeVisible();
|
|
44
|
-
const updatedLocales = await getLocales(request, token);
|
|
45
|
-
expect(updatedLocales).not.toContain("ja");
|
|
46
|
-
} finally {
|
|
47
|
-
await setLocales(request, token, originalLocales).catch(() => {
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=TC-TRANS-004.spec.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/translations/__integration__/TC-TRANS-004.spec.ts"],
|
|
4
|
-
"sourcesContent": ["import { expect, test } from '@playwright/test'\nimport { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api'\nimport { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth'\nimport { getLocales, setLocales } from './helpers/translationFixtures'\n\n/**\n * TC-TRANS-004: Locale Management Page\n * Covers navigation to translations config, adding and removing locales via the UI.\n */\ntest.describe('TC-TRANS-004: Locale Management Page', () => {\n test('should navigate to translations config page', async ({ page }) => {\n await login(page, 'superadmin')\n await page.goto('/backend/config/translations')\n\n await expect(page.getByText('Supported locales')).toBeVisible()\n await expect(page.getByRole('heading', { name: 'Translations' })).toBeVisible()\n })\n\n test('should add a locale via UI and verify via API', async ({ page, request }) => {\n const token = await getAuthToken(request, 'admin')\n const originalLocales = await getLocales(request, token)\n\n try {\n await login(page, 'superadmin')\n await page.goto('/backend/config/translations')\n await expect(page.getByText('Supported locales')).toBeVisible()\n\n const searchInput = page.getByPlaceholder('e.g. fr, it, ja...')\n await searchInput.fill('Japanese')\n await page.getByText(/JA \u2014 Japanese/i).click()\n await page.getByRole('button', { name: 'Add' }).click()\n\n await expect(page.locator('span').filter({ hasText: /^JA/ })).toBeVisible()\n\n const updatedLocales = await getLocales(request, token)\n expect(updatedLocales).toContain('ja')\n } finally {\n await setLocales(request, token, originalLocales).catch(() => {})\n }\n })\n\n test('should remove a locale via UI and verify via API', async ({ page, request }) => {\n const token = await getAuthToken(request, 'admin')\n const originalLocales = await getLocales(request, token)\n\n try {\n await setLocales(request, token, [...new Set([...originalLocales, 'ja'])])\n\n await login(page, 'superadmin')\n await page.goto('/backend/config/translations')\n await expect(page.getByText('Supported locales')).toBeVisible()\n\n const jaBadge = page.locator('span').filter({ hasText: /^JA/ })\n await expect(jaBadge).toBeVisible()\n const removeButton = jaBadge.getByRole('button')\n await removeButton.click()\n\n await expect(jaBadge).not.toBeVisible()\n\n const updatedLocales = await getLocales(request, token)\n expect(updatedLocales).not.toContain('ja')\n } finally {\n await setLocales(request, token, originalLocales).catch(() => {})\n }\n })\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AACtB,SAAS,YAAY,kBAAkB;AAMvC,KAAK,SAAS,wCAAwC,MAAM;AAC1D,OAAK,+CAA+C,OAAO,EAAE,KAAK,MAAM;AACtE,UAAM,MAAM,MAAM,YAAY;AAC9B,UAAM,KAAK,KAAK,8BAA8B;AAE9C,UAAM,OAAO,KAAK,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAC9D,UAAM,OAAO,KAAK,UAAU,WAAW,EAAE,MAAM,eAAe,CAAC,CAAC,EAAE,YAAY;AAAA,EAChF,CAAC;AAED,OAAK,iDAAiD,OAAO,EAAE,MAAM,QAAQ,MAAM;AACjF,UAAM,QAAQ,MAAM,aAAa,SAAS,OAAO;AACjD,UAAM,kBAAkB,MAAM,WAAW,SAAS,KAAK;AAEvD,QAAI;AACF,YAAM,MAAM,MAAM,YAAY;AAC9B,YAAM,KAAK,KAAK,8BAA8B;AAC9C,YAAM,OAAO,KAAK,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAE9D,YAAM,cAAc,KAAK,iBAAiB,oBAAoB;AAC9D,YAAM,YAAY,KAAK,UAAU;AACjC,YAAM,KAAK,UAAU,gBAAgB,EAAE,MAAM;AAC7C,YAAM,KAAK,UAAU,UAAU,EAAE,MAAM,MAAM,CAAC,EAAE,MAAM;AAEtD,YAAM,OAAO,KAAK,QAAQ,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,CAAC,CAAC,EAAE,YAAY;AAE1E,YAAM,iBAAiB,MAAM,WAAW,SAAS,KAAK;AACtD,aAAO,cAAc,EAAE,UAAU,IAAI;AAAA,IACvC,UAAE;AACA,YAAM,WAAW,SAAS,OAAO,eAAe,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAClE;AAAA,EACF,CAAC;AAED,OAAK,oDAAoD,OAAO,EAAE,MAAM,QAAQ,MAAM;AACpF,UAAM,QAAQ,MAAM,aAAa,SAAS,OAAO;AACjD,UAAM,kBAAkB,MAAM,WAAW,SAAS,KAAK;AAEvD,QAAI;AACF,YAAM,WAAW,SAAS,OAAO,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,iBAAiB,IAAI,CAAC,CAAC,CAAC;AAEzE,YAAM,MAAM,MAAM,YAAY;AAC9B,YAAM,KAAK,KAAK,8BAA8B;AAC9C,YAAM,OAAO,KAAK,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAE9D,YAAM,UAAU,KAAK,QAAQ,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,CAAC;AAC9D,YAAM,OAAO,OAAO,EAAE,YAAY;AAClC,YAAM,eAAe,QAAQ,UAAU,QAAQ;AAC/C,YAAM,aAAa,MAAM;AAEzB,YAAM,OAAO,OAAO,EAAE,IAAI,YAAY;AAEtC,YAAM,iBAAiB,MAAM,WAAW,SAAS,KAAK;AACtD,aAAO,cAAc,EAAE,IAAI,UAAU,IAAI;AAAA,IAC3C,UAAE;AACA,YAAM,WAAW,SAAS,OAAO,eAAe,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAClE;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|