Implementa test_phase3_confirm_eskaera.py con cobertura completa de los 3 helpers
creados en Phase 3 del refactoring de confirm_eskaera():
Helper Methods Tested:
- _validate_confirm_json(): Validación de request JSON
- _process_cart_items(): Procesamiento de items del carrito
- _build_confirmation_message(): Construcción de mensajes localizados
Test Coverage:
- 4 test classes
- 24 test methods
- 61 assertions
Test Breakdown:
1. TestValidateConfirmJson (5 tests):
- Validación exitosa de datos JSON
- Manejo de error: order_id faltante
- Manejo de error: order no existe
- Manejo de error: carrito vacío
- Validación de flag is_delivery
2. TestProcessCartItems (5 tests):
- Procesamiento exitoso de items
- Fallback a list_price cuando price=0
- Skip de productos inválidos
- Error cuando no quedan items válidos
- Traducción de nombres de productos
3. TestBuildConfirmationMessage (11 tests):
- Mensaje de confirmación para pickup
- Mensaje de confirmación para delivery
- Manejo cuando no hay fechas
- Formato de fecha DD/MM/YYYY
- Soporte multi-idioma: ES, EU, CA, GL, PT, FR, IT
4. TestConfirmEskaera_Integration (3 tests):
- Flujo completo para pickup order
- Flujo completo para delivery order
- Actualización de draft existente
Features Validated:
✅ Validación robusta de request JSON con mensajes de error claros
✅ Procesamiento de items con manejo de errores y fallbacks
✅ Construcción de mensajes con soporte para 7 idiomas
✅ Diferenciación pickup vs delivery con fechas correctas
✅ Integración completa end-to-end del flujo confirm_eskaera
Quality Checks:
✅ Sintaxis Python válida
✅ Pre-commit hooks: black, isort, flake8, pylint (all passed)
✅ 671 líneas de código de tests
✅ 29 docstrings explicativos
Total Test Suite (Phase 1 + 2 + 3):
- 53 test methods (18 + 11 + 24)
- 3 test files (test_helper_methods_phase1.py, test_phase2_eskaera_shop.py, test_phase3_confirm_eskaera.py)
- 1,311 líneas de código de tests
Este commit completa la implementación de tests para el refactoring completo de 3 fases,
proporcionando cobertura exhaustiva de todas las funcionalidades críticas del sistema
eskaera (pedidos de grupo cooperativos).
Files:
- website_sale_aplicoop/tests/test_phase3_confirm_eskaera.py (NEW, 671 lines)
- Changed parameter from 'qty' to 'quantity' to match Odoo 18.0 base class
- Fixes TypeError: ProductPricelistItem._compute_price() got an unexpected keyword argument 'quantity'
- This was causing price calculation failures when saving sale orders
[FIX] website_sale_aplicoop: Fix logging format string
- Changed logging format from %d to %s for existing_draft_id which is a string from JSON
- Fixes 'TypeError: %d format: a real number is required, not str' in logging
- Changed parent_id from website.menu_homepage to website.main_menu (correct menu hierarchy)
- Added type='int' to sequence field for consistency with Odoo standards
- Fixes ParseError when loading website_menus.xml
- Created data/website_menus.xml with website menu item pointing to /eskaera
- Added website_menus.xml to manifest data files
- Menu appears in website navigation with sequence 50
- Add product_origin dependency to show country/state of origin
- Display country_id and state_id fields in product cards with map marker icon
- Show only populated fields (conditional rendering)
- Fields appear after supplier info in eskaera shop template
- Country names auto-translate based on user language (state names do not)
- Format: 'State, Country' or just 'Country' if no state
El método _get_price() del addon OCA ya maneja correctamente los impuestos
según la configuración de Odoo. El cálculo adicional con compute_all() estaba
duplicando los impuestos cuando price_include estaba activado.
Cambios:
- Eliminado método _compute_price_with_taxes()
- Revertido eskaera_shop() para usar directamente _get_price()
- Revertido add_to_eskaera_cart() para usar directamente _get_price()
El precio mostrado ahora respeta la configuración de impuestos de Odoo
sin duplicación.