- 
        Couldn't load subscription status. 
- Fork 9.4k
Description
This issue is automatically created based on existing pull request: #40203: Fix error visiting compare page without items
Description (*)
Going incognito and visiting /catalog/product_compare/index/ will cause an
Item (Magento\Catalog\Model\Product\Interceptor) with the same ID "xxx" already exists.
Error on many live webshops. This is because the database table looks somewhat like this
| catalog_compare_item_id | visitor_id | customer_id | product_id | store_id | list_id | 
|---|---|---|---|---|---|
| 23159 | 4690502 | 19028 | 1 | ||
| 22917 | 0 | 18906 | 1 | 711 | |
| 23034 | 0 | 18868 | 1 | 732 | |
| 22916 | 0 | 18851 | 1 | 711 | |
| 21991 | 0 | 18783 | 1 | 537 | |
| 21573 | 0 | 18747 | 1 | 451 | |
| 22196 | 0 | 18740 | 1 | 585 | |
| 22485 | 0 | 18706 | 1 | 644 | |
| 22111 | 0 | 18705 | 1 | 568 | |
| 22259 | 0 | 18689 | 1 | 596 | |
| 22133 | 0 | 18689 | 1 | 573 | |
| 21802 | 0 | 18689 | 1 | 492 | 
Thus if we only get items with visitor_id 0 and customer_id NULL we will get duplicate products (and compare product from other customers...)
Manual testing scenarios (*)
- Ensure your catalog_compare_itemssomewhat matches the example above (duplicate product id's on different lists)
- Visit the /catalog/product_compare/index/route in incognito, so no visitor id, customer id, or list id is assigned to you
- See the error that occurs.
Additional Steps
It'd be quite simple to trigger this behavior using graphql:
curl 'https://magento.test/graphql' \
  -H 'accept: application/json' \
  -H 'content-type: application/json' \
  --data-raw '{"query":"mutation createCompareList($input: CreateCompareListInput) {\n  createCompareList(input: $input) {\n    item_count\n    uid\n  }\n}","variables":{"input":{"products":[23]}},"operationName":"createCompareList"}'
Call this query a couple of times (to emulate multiple users adding this product to their compare list), navigate to the /catalog/product_compare/index/ page and you should get this error.
Contribution checklist (*)
- Pull request has a meaningful description of its purpose
- All commits are accompanied by meaningful commit messages
- All new or changed code is covered with unit/integration tests (if applicable)
- README.md files for modified modules are updated and included in the pull request if any README.md predefined sections require an update
- All automated tests passed successfully (all builds are green)
Metadata
Metadata
Assignees
Labels
Type
Projects
Status