Name: [FIX] ai17: Vietnamese catalogues, the locale regressions they caused, and the defects that surfaced - Post install tests: from account to l10n_vn_viin_hr_payroll_meal_account

State: Killed

PR State: merged

PR Author: David Tran

PR Author Email:

PR: #103

Committer: David Tran

Committer Email: davidtran.hp@gmail.com

Commit: 2d2ae78371faac5812a2585bde2d3959cae55bf0

Description:

                                [FIX] viin_ai_chat: 62 strings the extractor could never see

Two assertions this PR added could not fail. 'Agent error: %s' is always a
non-empty string and the controller never emits a traceback, so both held no
matter what the code did - written while making tests locale-stable, and breaking
the exact property that work existed to protect. They now assert the CAUSE
survives into the reply. Proven twice: red when the content is emptied, and red
when the friendly wording is kept but the cause dropped - the second is the
regression the old form structurally could not catch.

A fixture string was still wrapped in _(), shipping "No credits left." into the
released catalogue. It is an opaque sentinel now, and the assertion binds to the
exception CLASS surviving the round trip rather than to prose.

The bigger item: 62 user-facing strings across six templates were written as
t-esc="_t('...')" or t-att-title="...", neither of which Odoo's extractor can
see - it reads element text and a fixed attribute allow-list, and the t-att-
form is not in it. The tool-confirm dialog, the first-run banner, the session
rail and the feedback widget were entirely absent from the catalogue. This PR
had demonstrated the fix on ONE string and left the rest, and the new vi_VN.po
then MASKED the gap by making the module look translated. All 62 move into
component getters, and the escape hatch that enabled the pattern is deleted so it
cannot return quietly. Catalogue: viin_ai_chat 95 -> 142 msgids, viin_ai_brain
77 -> 85, every new entry translated.

Three comments this PR added were false. sql_template.description IS rendered -
it has its own notebook page - so the decision to keep it non-translatable stands
but the stated reason did not. And the note added to four manifests claimed a
non-application module gets no Apps tile: core annotates 'images' as a WEBSITE
key, its only reader is the theme-image updater, update_list never copies it, and
the backend tile is icon_image for every module. The reviewer was right and the
comment was wrong; it now says what is true.

Two reds found while working and fixed: a dashboard test that had become
ambient-DB-dependent since the usable-provider resolver landed - it resolves a
provider before reaching the stub, and every provider on the test database is
keyless - now carries its own fixture; and making "Reported" extractable would
have reddened a tour selecting on that word, so the tour binds to a class instead.
                                

Branch: 17.0

Instance ID: 0

Age: Not started

Up-time: Not finished

Odoo 17 Test Suite Using Docker

Post install tests: from account to l10n_vn_viin_hr_payroll_meal_account

  • install_module account,account_add_gln,account_audit_trail,account_check_printing,account_debit_note,account_debit_note_sequence,account_edi,account_edi_proxy_client,account_edi_ubl_cii,account_edi_ubl_cii_tax_extension,account_fleet,account_lock,account_payment,account_payment_term,account_peppol,account_peppol_selfbilling,account_qr_code_emv,account_qr_code_sepa,account_tax_python,account_test,account_update_tax_tags,analytic,attachment_indexation,auth_oauth,auth_password_policy,auth_password_policy_portal,auth_password_policy_signup,auth_signup,auth_totp,auth_totp_mail,auth_totp_mail_enforce,auth_totp_portal,barcodes,barcodes_gs1_nomenclature,base,base_address_extended,base_automation,base_geolocalize,base_iban,base_import,base_import_module,base_install_request,base_setup,base_sparse_field,base_vat,board,bus,calendar,calendar_sms,contacts,crm,crm_iap_enrich,crm_iap_mine,crm_livechat,crm_mail_plugin,crm_sms,data_recycle,delivery,delivery_mondialrelay,delivery_stock_picking_batch,digest,event,event_booth,event_booth_sale,event_crm,event_crm_sale,event_sale,event_sms,fleet,gamification,gamification_sale_crm,google_account,google_calendar,google_gmail,google_recaptcha,hr,hr_attendance,hr_contract,hr_expense,hr_fleet,hr_gamification,hr_holidays,hr_holidays_attendance,hr_homeworking,hr_hourly_cost,hr_livechat,hr_maintenance,hr_org_chart,hr_presence,hr_recruitment,hr_recruitment_skills,hr_recruitment_sms,hr_recruitment_survey,hr_skills,hr_skills_slides,hr_skills_survey,hr_timesheet,hr_timesheet_attendance,hr_work_entry,hr_work_entry_contract,hr_work_entry_holidays,http_routing,iap,iap_crm,iap_mail,im_livechat,im_livechat_mail_bot,l10n_vn_edi_summary,l10n_vn_edi_viettel,l10n_vn_viin,l10n_vn_viin_account_asset,l10n_vn_viin_account_auto_transfer,l10n_vn_viin_account_reports,l10n_vn_viin_accounting_meinvoice,l10n_vn_viin_accounting_meinvoice_pos,l10n_vn_viin_accounting_sinvoice,l10n_vn_viin_accounting_sinvoice_pos,l10n_vn_viin_accounting_vninvoice,l10n_vn_viin_accounting_vninvoice_summary,l10n_vn_viin_ai_account,l10n_vn_viin_base_ward,l10n_vn_viin_edi,l10n_vn_viin_edi_patch1,l10n_vn_viin_edi_pos,l10n_vn_viin_einvoice_sale,l10n_vn_viin_foreign_trade,l10n_vn_viin_foreign_trade_account_reports,l10n_vn_viin_freight_project,l10n_vn_viin_hr_account,l10n_vn_viin_hr_payroll,l10n_vn_viin_hr_payroll_account,l10n_vn_viin_hr_payroll_account_overtime,l10n_vn_viin_hr_payroll_administrative_region,l10n_vn_viin_hr_payroll_meal,l10n_vn_viin_hr_payroll_meal_account,l10n_vn_viin_hr_payroll_overtime,l10n_vn_viin_loan_management,l10n_vn_viin_mrp_subcontracting_account,l10n_vn_viin_mrp_subcontracting_settlement,l10n_vn_viin_picking_operation,l10n_vn_viin_pos,l10n_vn_viin_stock_reports,l10n_vn_viin_stock_reports_multi_warehouse_access_control,l10n_vn_viin_update_address,l10n_vn_viin_vat_counterpart,link_tracker,loyalty,lunch,mail,mail_bot,mail_bot_hr,mail_group,mail_plugin,maintenance,mass_mailing,mass_mailing_crm,mass_mailing_crm_sms,mass_mailing_event,mass_mailing_event_sms,mass_mailing_event_track,mass_mailing_event_track_sms,mass_mailing_sale,mass_mailing_sale_sms,mass_mailing_slides,mass_mailing_sms,mass_mailing_themes,membership,microsoft_account,microsoft_calendar,microsoft_outlook,mrp,mrp_account,mrp_landed_costs,mrp_product_expiry,mrp_repair,mrp_subcontracting,mrp_subcontracting_account,mrp_subcontracting_dropshipping,mrp_subcontracting_purchase,mrp_subcontracting_repair,mrp_subonctracting_landed_costs,onboarding,partner_autocomplete,payment,payment_adyen,payment_alipay,payment_aps,payment_asiapay,payment_authorize,payment_bidv_viin,payment_buckaroo,payment_custom,payment_demo,payment_flutterwave,payment_mercado_pago,payment_mollie,payment_momo_viin,payment_nganluong,payment_ogone,payment_paypal,payment_payulatam,payment_payumoney,payment_polar,payment_razorpay,payment_razorpay_oauth,payment_sips,payment_stripe,payment_vnpay,payment_worldline,payment_xendit,payment_zalopay,phone_validation,point_of_sale,portal,portal_rating,pos_adyen,pos_discount,pos_epson_printer,pos_hr,pos_hr_restaurant,pos_loyalty,pos_mercado_pago,pos_mercury,pos_mrp,pos_online_payment,pos_online_payment_self_order,pos_paytm,pos_razorpay,pos_restaurant,pos_restaurant_adyen,pos_restaurant_loyalty,pos_restaurant_stripe,pos_sale,pos_sale_loyalty,pos_sale_margin,pos_sale_product_configurator,pos_self_order,pos_self_order_adyen,pos_self_order_epson_printer,pos_self_order_sale,pos_self_order_stripe,pos_stripe,pos_viva_wallet,privacy_lookup,product,product_email_template,product_expiry,product_images,product_margin,product_matrix,project,project_account,project_hr_expense,project_mail_plugin,project_mrp,project_purchase,project_sale_expense,project_sms,project_timesheet_holidays,project_todo,purchase,purchase_mrp,purchase_product_matrix,purchase_requisition,purchase_requisition_sale,purchase_requisition_stock,purchase_stock,rating,repair,resource,sale,sale_async_emails,sale_crm,sale_expense,sale_expense_margin,sale_loyalty,sale_loyalty_delivery,sale_management,sale_margin,sale_mrp,sale_mrp_margin,sale_pdf_quote_builder,sale_product_configurator,sale_product_matrix,sale_project,sale_project_stock,sale_purchase,sale_purchase_stock,sale_service,sale_sms,sale_stock,sale_stock_margin,sale_timesheet,sale_timesheet_margin,sales_team,sms,sms_twilio,snailmail,snailmail_account,social_media,spreadsheet,spreadsheet_account,spreadsheet_dashboard,spreadsheet_dashboard_account,spreadsheet_dashboard_event_sale,spreadsheet_dashboard_hr_expense,spreadsheet_dashboard_hr_timesheet,spreadsheet_dashboard_im_livechat,spreadsheet_dashboard_pos_hr,spreadsheet_dashboard_purchase,spreadsheet_dashboard_purchase_stock,spreadsheet_dashboard_sale,spreadsheet_dashboard_sale_timesheet,spreadsheet_dashboard_stock_account,spreadsheet_dashboard_website_sale,spreadsheet_dashboard_website_sale_slides,stock,stock_account,stock_delivery,stock_dropshipping,stock_landed_costs,stock_landed_costs_company,stock_picking_batch,stock_sms,survey,test_access_rights,test_action_bindings,test_apikeys,test_assetsbundle,test_auth_custom,test_base_automation,test_base_import,test_convert,test_converter,test_crm_full,test_data_module,test_data_module_install,test_discuss_full,test_event_full,test_exceptions,test_html_field_history,test_http,test_impex,test_inherit,test_inherit_depends,test_inherits,test_inherits_depends,test_limits,test_lint,test_mail,test_mail_full,test_mail_sms,test_mail_tracking_value_multilang,test_main_flows,test_mass_mailing,test_mimetypes,test_new_api,test_performance,test_populate,test_read_group,test_resource,test_rpc,test_sale_product_configurators,test_search_panel,test_spreadsheet,test_testing_utilities,test_to_signup_email_verification,test_translation_import,test_uninstall,test_viin_ai,test_viin_approval,test_viin_mail_route,test_viin_web_cohort,test_website,test_website_modules,test_website_slides_full,test_xlsx_export,theme_default,to_account_accountant,to_account_asset,to_account_asset_purchase,to_account_budget,to_account_budget_hr_timesheet,to_account_counterpart,to_account_counterpart_account_update_tax_tags,to_account_payment,to_account_reports,to_account_reports_report_off,to_accounting_bi,to_accounting_entry_report_flag,to_approvals,to_attendance_device,to_backdate,to_backend_theme,to_bank_currency_rate,to_bank_currency_rate_purchase_stock,to_base,to_common_uom,to_config_management,to_currency_conversion_diff,to_employee_changes_tracking,to_employee_documents,to_equipment_maintenance_schedule,to_equipment_woking_frequency,to_erponline_utility,to_event_project,to_event_timesheet,to_fee_definition,to_fee_definition_sale,to_fleet_driver,to_geo_routes,to_geo_routes_account,to_geo_routes_google,to_geo_routes_here,to_geo_routes_mapbox,to_geo_routes_searoutes,to_geo_routes_vietmap,to_git,to_git_odoo_version,to_git_project,to_hide_ent_modules,to_hide_ent_modules_payment,to_hide_ent_modules_website_theme,to_hr_barcode_in_emp_name,to_hr_employee_advance,to_hr_employee_grade,to_hr_employee_grade_patch1,to_hr_employee_relative,to_hr_expense,to_hr_expense_employee_advance,to_hr_expense_payroll,to_hr_meal,to_hr_payroll,to_hr_payroll_account,to_hr_payroll_attendance,to_hr_payroll_meal,to_hr_project_timesheet_timeoff_payroll,to_hr_timesheet_approval,to_hr_timesheet_payroll,to_hr_training,to_inter_company_base,to_inter_company_invoice,to_inter_company_sale_purchase,to_inter_company_sale_purchase_stock,to_invoice_line_summary,to_invoice_tax_details,to_legal_invoice_number,to_loan_management,to_mail_template_multilang_fix,to_maintenance_approval,to_maintenance_by_working_hours,to_maintenance_notification,to_maintenance_request_simple_mediate,to_mrp_account_standard_consumption,to_mrp_backdate,to_mrp_bom_component_percentage,to_mrp_bom_stock_value,to_mrp_maintenance,to_mrp_mps,to_mrp_plm,to_mrp_workorder,to_multi_warehouse_access_control,to_multi_warehouse_access_control_mrp,to_multi_warehouse_access_control_purchase,to_multi_warehouse_access_control_sale,to_multi_warehouse_access_control_sms,to_odoo_module,to_odoo_module_loc,to_odoo_module_sale,to_odoo_module_sale_project,to_odoo_module_sale_template,to_odoo_version,to_okr,to_okr_project,to_partner_dob,to_partner_dob_send_email,to_partner_equity_range,to_partner_multilang,to_partner_multilang_partner_autocomplete,to_partner_nationality,to_partner_track_change,to_payment_transaction_protection,to_paypal_unsupported_currencies,to_payroll_payment_acb_templates,to_pos_analytics,to_pos_delivery,to_pos_note,to_pos_order_to_sales_order,to_procurement_approval,to_product_code_sequence,to_product_collection,to_product_collection_pos,to_product_collection_sale,to_product_dimensions,to_product_function,to_product_function_pos,to_product_function_sale,to_product_license,to_product_license_sale,to_product_maintenance_schedule,to_product_milestone,to_product_odoo_version,to_product_return_reason,to_product_return_reason_stock,to_product_standard_price_access,to_product_standard_price_access_account,to_product_standard_price_access_purchase,to_purchase_backdate,to_purchase_landed_cost,to_purchase_line_numbering,to_purchase_order_advance,to_purchase_receipt,to_quality,to_quality_mrp,to_quality_stock,to_refund_account,to_registration_email_blacklist,to_repair_request_from_maintenance,to_repair_with_maintenance_schedule,to_safe_confirm_button,to_sale_backdate,to_sale_desc_short_link,to_sale_line_numbering,to_sale_order_advance,to_sale_price_lock,to_sales_stock_schedule,to_sales_target,to_sales_target_pos,to_sales_target_sale,to_sales_team_advanced,to_sales_team_advanced_crm,to_sales_team_advanced_sale,to_signup_email_verification,to_sshkey,to_stock_account_moves_link,to_stock_age_report,to_stock_asset,to_stock_asset_equipment,to_stock_barcode,to_stock_block_quantity,to_stock_equipment,to_stock_equipment_bom_kit,to_stock_equipment_hierarchy,to_token_expiration,to_token_expiration_test,to_unique_product_code,to_upload_file,to_vat_counterpart,to_vendor_price_lock,to_wallet,to_warranty_management,to_warranty_purchase,to_warranty_purchase_stock,to_warranty_sale,to_warranty_sale_stock,to_warranty_stock,to_web_thousand_sep,to_website_apps_store,to_website_apps_store_loc,to_website_base,to_website_docs,to_website_docs_odoo,to_website_docs_odoo_data,to_website_odoo_version,to_website_slides_event,transifex,uom,utm,viin_account,viin_account_auto_transfer,viin_account_bank_statement_import,viin_account_bank_statement_import_rje,viin_account_budget_project,viin_account_counterpart_reconciliation,viin_account_followup,viin_account_followup_sale,viin_account_onbehalf_payment,viin_account_onbehalf_payment_currency_conversion_diff,viin_account_reconciliation,viin_account_recurring,viin_administrative_region,viin_affiliate,viin_affiliate_crm,viin_affiliate_loyalty,viin_affiliate_loyalty_pos,viin_affiliate_loyalty_sale,viin_affiliate_marketplace_sale,viin_affiliate_multi_level,viin_affiliate_multi_level_pos,viin_affiliate_multi_level_sale,viin_affiliate_pos,viin_affiliate_pos_discount,viin_affiliate_pos_sale,viin_affiliate_sale,viin_affiliate_sale_crm,viin_affiliate_website,viin_affiliate_website_crm_livechat,viin_affiliate_website_project,viin_affilitate_purchase,viin_ai,viin_ai_account,viin_ai_agent,viin_ai_approval,viin_ai_approval_account,viin_ai_approval_purchase,viin_ai_approval_sale,viin_ai_brain,viin_ai_chat,viin_ai_crm,viin_ai_documents,viin_ai_editor,viin_ai_expense,viin_ai_helpdesk,viin_ai_hr,viin_ai_livechat,viin_ai_marketing,viin_ai_memory,viin_ai_memory_brain,viin_ai_mrp,viin_ai_ops,viin_ai_ops_brain,viin_ai_project,viin_ai_pulse,viin_ai_pulse_memory,viin_ai_purchase,viin_ai_rag,viin_ai_sale,viin_ai_sale_crm,viin_ai_search,viin_ai_skill,viin_ai_skill_memory,viin_ai_stock,viin_ai_website,viin_ai_workflow,viin_ai_workflow_automation,viin_amazon,viin_amazon_ses,viin_api_request_logger,viin_appointment,viin_appointment_crm,viin_appointment_sale,viin_appointment_sale_crm,viin_appointment_website,viin_appointment_website_hr,viin_appointment_website_patch1,viin_approval,viin_approval_account,viin_approval_analytic,viin_approval_flexible_flow,viin_approval_hr_contract,viin_approval_marketplace,viin_approval_mrp,viin_approval_project,viin_approval_purchase,viin_approval_purchase_stock,viin_approval_purpose_routing,viin_approval_sale,viin_approval_sale_project,viin_approval_stock,viin_auth_password_policy,viin_auth_password_policy_portal,viin_auth_password_policy_signup,viin_auto_currency_rate,viin_auto_currency_rate_acb,viin_auto_currency_rate_bidv,viin_auto_currency_rate_vcb,viin_auto_currency_rate_xe,viin_bank_connector,viin_base_addendum,viin_base_district,viin_base_import_tracking,viin_base_state_group,viin_base_ward,viin_bidv_connector,viin_brain,viin_brain_account,viin_brain_account_reports,viin_brain_crm,viin_brain_helpdesk,viin_brain_hr,viin_brain_hr_recruitment,viin_brain_project,viin_brain_purchase,viin_brain_sale,viin_brain_stock,viin_brand,viin_brand_account,viin_brand_auth_oauth,viin_brand_auth_totp,viin_brand_auth_totp_mail_enforce,viin_brand_auth_totp_portal,viin_brand_base_import,viin_brand_base_setup,viin_brand_calendar,viin_brand_common,viin_brand_contacts,viin_brand_crm,viin_brand_digest,viin_brand_fleet,viin_brand_hr,viin_brand_hr_expense,viin_brand_hr_recruitment,viin_brand_hr_skills,viin_brand_im_livechat,viin_brand_im_livechat_mail_bot,viin_brand_l10n_vn,viin_brand_mail,viin_brand_mail_bot,viin_brand_mail_plugin,viin_brand_mass_mailing,viin_brand_mass_mailing_crm,viin_brand_mass_mailing_sale,viin_brand_mass_mailing_sms,viin_brand_mass_mailing_themes,viin_brand_membership,viin_brand_mrp,viin_brand_onboarding,viin_brand_payment,viin_brand_payment_paypal,viin_brand_portal,viin_brand_pos,viin_brand_pos_mercury,viin_brand_product,viin_brand_purchase,viin_brand_sale,viin_brand_sale_management,viin_brand_sale_pdf_quote_builder,viin_brand_snailmail,viin_brand_social_media,viin_brand_stock,viin_brand_web,viin_brand_web_editor,viin_brand_web_unsplash,viin_brand_website,viin_brand_website_event,viin_brand_website_event_exhibitor,viin_brand_website_forum,viin_brand_website_jitsi,viin_brand_website_links,viin_brand_website_profile,viin_brand_website_sale,viin_brand_website_slides,viin_built_in_help,viin_business_trip,viin_business_trip_approval,viin_business_trip_fleet,viin_business_trip_hr_expense,viin_check_company_discrepancy,viin_coach_approvals,viin_contacts_district,viin_contacts_ethnicity_religion,viin_contacts_map,viin_contacts_ward,viin_country_target_market,viin_crm,viin_crm_business_nature,viin_crm_business_nature_isic,viin_crm_business_nature_patch1,viin_crm_customer_recognition,viin_crm_dob,viin_crm_sankey,viin_customizer,viin_customizer_web_responsive,viin_discuss_channel_privacy,viin_document,viin_document_account,viin_document_freight,viin_document_freight_air,viin_document_freight_consol,viin_document_hr,viin_document_hr_contract,viin_document_hr_payroll,viin_document_hr_recruitment,viin_document_mrp,viin_document_parsing,viin_document_project,viin_document_purchase,viin_document_sale,viin_document_stock,viin_duns,viin_employee_map,viin_equipment_warranty_partner_infor,viin_estimate,viin_estimate_approval,viin_estimate_budget,viin_estimate_hr,viin_estimate_project,viin_estimate_purchase,viin_estimate_sale,viin_event_checkin_website,viin_event_partner_barcodes,viin_features_activate_account,viin_features_activate_approvals,viin_features_activate_contacts,viin_features_activate_freight,viin_features_activate_hr,viin_features_activate_hr_attendance,viin_features_activate_hr_expense,viin_features_activate_hr_payroll,viin_features_activate_hr_recruitment,viin_features_activate_inter_company,viin_features_activate_mrp,viin_features_activate_pos,viin_features_activate_product,viin_features_activate_project,viin_features_activate_purchase,viin_features_activate_sale,viin_features_activate_stock,viin_features_activate_survey,viin_features_activate_website,viin_fleet,viin_fleet_account,viin_fleet_booking,viin_fleet_booking_account,viin_fleet_booking_approval,viin_fleet_booking_cargo,viin_fleet_booking_map,viin_fleet_booking_passenger,viin_fleet_insurance,viin_fleet_loading_capacity,viin_fleet_planning,viin_fleet_planning_account,viin_fleet_planning_hr_expense,viin_fleet_planning_map,viin_fleet_purchase,viin_fleet_sale,viin_fleet_sale_cargo,viin_fleet_sale_management,viin_fleet_sale_passenger,viin_fleet_stock,viin_foreign_trade,viin_foreign_trade_currency_rate,viin_foreign_trade_export,viin_foreign_trade_import,viin_foreign_trade_import_currency_rate,viin_freight_air,viin_freight_air_consol,viin_freight_complete_suite,viin_freight_consol,viin_freight_document_parsing,viin_freight_gantt,viin_freight_management,viin_freight_mixed_container_patch1,viin_freight_project,viin_freight_road,viin_freight_sale,viin_freight_sale_onbehalf,viin_freight_sale_purchase,viin_geo_route_map,viin_geography_info,viin_geography_info_contact,viin_geography_info_world_bank,viin_google_drive,viin_google_translate_api,viin_helpdesk,viin_helpdesk_crm,viin_helpdesk_hr,viin_helpdesk_livechat,viin_helpdesk_odoo_module,viin_helpdesk_odoo_version,viin_helpdesk_project,viin_helpdesk_sale,viin_helpdesk_severity,viin_helpdesk_timesheet,viin_helpdesk_timesheet_timer,viin_hide_detailed_tax_in_pos_receipt,viin_hr,viin_hr_account,viin_hr_appraisal,viin_hr_attendance_validation,viin_hr_contract,viin_hr_contract_skill,viin_hr_contract_suspension,viin_hr_contract_suspension_payroll,viin_hr_contract_suspension_seniority,viin_hr_employee_birthday,viin_hr_employee_relative_birthdate,viin_hr_ethnicity_religion,viin_hr_holidays,viin_hr_maintenance,viin_hr_management_tiers,viin_hr_multi_position,viin_hr_overtime,viin_hr_overtime_approval,viin_hr_overtime_approval_compensatory_time_off,viin_hr_overtime_approval_payroll,viin_hr_overtime_attendance,viin_hr_overtime_compensatory_time_off,viin_hr_overtime_payroll,viin_hr_overtime_payroll_compensatory_time_off,viin_hr_overtime_timesheet,viin_hr_overtime_timesheet_approval,viin_hr_overtime_timesheet_attendance,viin_hr_payroll_administrative_region,viin_hr_payroll_timesheet_wfh,viin_hr_project,viin_hr_project_timesheet_account,viin_hr_rank,viin_hr_recognition_discipline,viin_hr_recognition_discipline_approval,viin_hr_recruitment,viin_hr_recruitment_approval,viin_hr_recruitment_sankey,viin_hr_recruitment_skills_resume,viin_hr_retirement_age,viin_hr_role,viin_hr_role_patch1,viin_hr_seniority,viin_hr_skill_framework,viin_hr_skill_framework_recruitment,viin_hr_skills_slides,viin_hr_timesheet_timer,viin_hr_work_entry,viin_hr_work_entry_contract,viin_hr_work_entry_contract_attendance,viin_hr_work_entry_contract_attendance_holiday,viin_hr_work_entry_contract_suspension,viin_hr_work_entry_holidays,viin_inventory_adjustment_with_cost_price,viin_lang_detection,viin_link_tracker_qr_code,viin_loan_import,viin_loan_management_bank_currency_rate,viin_logistics,viin_logistics_account,viin_logistics_cargo_template,viin_logistics_package_type,viin_logistics_route,viin_logistics_sale,viin_logistics_sales_team,viin_loyalty,viin_loyalty_pos,viin_loyalty_pos_sale,viin_loyalty_sale,viin_mail_mention_with_avatar,viin_mail_route,viin_mail_route_hr,viin_mail_show_recipient,viin_mail_thread_account,viin_mail_thread_product,viin_mail_thread_purchase,viin_mail_thread_stock,viin_mail_thread_stock_account,viin_mail_thread_uom,viin_mail_tracking,viin_maintenance,viin_maintenance_preventive_mode,viin_marketplace,viin_marketplace_event_sale,viin_marketplace_loyalty,viin_marketplace_rating,viin_marketplace_sale,viin_marketplace_sale_currency_conversion_diff,viin_marketplace_sale_loyalty,viin_marketplace_sale_product_configurator,viin_marketplace_sale_purchase,viin_marketplace_sale_stock,viin_marketplace_snailmail,viin_marketplace_stock,viin_marketplace_website_sale,viin_marketplace_website_sale_stock,viin_meeting_room,viin_message_edit_lock,viin_mrp,viin_mrp_account,viin_mrp_filter,viin_mrp_landed_costs,viin_mrp_plm_approval,viin_mrp_plm_subcontracting_purchase,viin_mrp_plm_test_full,viin_mrp_progress,viin_mrp_standard_consumption,viin_mrp_subcontracting_link,viin_mrp_subcontracting_loss_report,viin_mrp_subcontracting_report,viin_mrp_subcontracting_request,viin_mrp_subcontracting_request_approval,viin_mrp_subcontracting_request_plm,viin_mrp_subcontracting_request_requisition,viin_multi_warehouse_access_control_purchase_requisition,viin_partner_approval,viin_partner_approval_marketplace,viin_partner_approval_marketplace_website,viin_partner_approval_website,viin_partner_budget_code,viin_partner_business_nature,viin_partner_business_nature_patch1,viin_partner_calendar,viin_partner_country_recognition,viin_partner_filter,viin_partner_gender,viin_partner_identity,viin_partner_industry_isic,viin_partner_shareholder,viin_partner_tax_code,viin_pdf_print_preview,viin_pos_account_qr_code_emv,viin_pos_custom_bill_logo,viin_pos_product_multi_barcodes,viin_pos_qr,viin_pos_qr_bidv,viin_pos_refund,viin_pos_return,viin_pos_sales_receipt_title,viin_pos_scale,viin_pos_vnpay,viin_pricelist_validity_advance,viin_product_approval,viin_product_approval_account,viin_product_approval_marketplace,viin_product_approval_marketplace_website_sale,viin_product_approval_purchase,viin_product_approval_sale,viin_product_approval_website_sale,viin_product_multi_barcodes,viin_project,viin_project_access_timesheet,viin_project_gantt,viin_project_progress,viin_project_scrum,viin_project_scrum_gantt,viin_project_scrum_helpdesk,viin_project_timesheet_leave,viin_project_todo,viin_purchase,viin_qrcode,viin_quality_stock_access_control,viin_rental,viin_rental_stock,viin_repair,viin_repair_access_group,viin_repair_request_from_warranty,viin_repair_supply,viin_resource,viin_safe_field_model_selector,viin_sale,viin_sale_addendum,viin_sale_business_nature,viin_sale_business_nature_isic,viin_sale_crm,viin_sale_crm_business_nature,viin_sale_onbehalf_management,viin_sale_onbehalf_vendorprice,viin_sale_product_duplication_warning,viin_sale_project,viin_sale_project_technician,viin_sale_quotation_template_access,viin_sale_recurring,viin_sale_sankey,viin_sale_subscription,viin_sale_subscription_loyalty,viin_sale_supplier_pricelist,viin_sales_team_collaboration,viin_sales_team_collaboration_crm,viin_sales_team_collaboration_sale,viin_sales_unlink,viin_sales_unlink_stock,viin_sem,viin_sem_crawler,viin_sem_crawler_helpdesk,viin_sem_heatmap,viin_sem_helpdesk,viin_sem_helpdesk_timesheet,viin_sem_project,viin_sign,viin_sign_document,viin_sign_sim,viin_sign_sim_viettel,viin_social,viin_social_facebook,viin_social_lead,viin_social_linkedin,viin_spreadsheet_dashboard_crm,viin_spreadsheet_dashboard_finance,viin_spreadsheet_dashboard_freight,viin_spreadsheet_dashboard_helpdesk,viin_stock,viin_stock_account_backdate,viin_stock_approval,viin_stock_backdate,viin_stock_internal_transfer,viin_stock_internal_transit_valuation,viin_stock_internal_transit_valuation_specific_identification,viin_stock_landed_costs,viin_stock_lot_dropshipping_partner_infor,viin_stock_lot_partner_infor,viin_stock_specific_identification,viin_stock_specific_identification_landed_costs,viin_stock_specific_identification_mrp,viin_stock_specific_identification_purchase_stock,viin_stringee,viin_survey,viin_survey_exam,viin_survey_recompute_results,viin_tracking_location,viin_tracking_location_route,viin_transfer_address,viin_wallet_loyalty,viin_wallet_marketplace_sale,viin_wallet_sale_loyalty,viin_web_cohort,viin_web_countup_timer,viin_web_editor,viin_web_gantt,viin_web_map,viin_web_sankey,viin_website,viin_website_auto_translation,viin_website_auto_translation_blog,viin_website_auto_translation_google,viin_website_blog_access_right,viin_website_blog_toc,viin_website_forum_security_groups,viin_website_gtm,viin_website_helpdesk,viin_website_hr_recruitment_website_editor,viin_website_multilingual_multimedia,viin_website_nofollow,viin_website_page_access_right,viin_website_partner_business_nature,viin_website_partner_business_nature_patch1,viin_website_sale_recurring,viin_website_sale_subscription,viin_website_seo,viin_website_seo_advisor,viin_website_seo_advisor_blog,viin_website_seo_blog,viin_website_seo_event,viin_website_seo_forum,viin_website_seo_hr_recruitment,viin_website_seo_sale,viin_website_seo_sale_stock,viin_website_seo_slides,viin_website_slides,viin_website_slides_survey,viin_workflow_automation,viin_workflow_automation_hr,viin_workflow_marketing_sale,viin_workflow_marketing_sale_event,viin_workflow_marketing_sale_livechat,viin_workflow_marketing_sale_sms,viin_workflow_marketing_sale_social,viin_workflow_marketing_sale_survey,viin_workflow_marketing_sale_website,viin_workflow_marketing_sale_zalo,viin_zalo,viin_zalo_account,viin_zalo_auth_oauth,viin_zalo_chatter_sync,viin_zalo_crm,viin_zalo_helpdesk,viin_zalo_sale,viin_zalo_website_livechat,viin_zalo_zbs,web,web_editor,web_hierarchy,web_responsive,web_tour,web_unsplash,website,website_blog,website_cf_turnstile,website_crm,website_crm_iap_reveal,website_crm_livechat,website_crm_partner_assign,website_crm_sms,website_customer,website_event,website_event_booth,website_event_booth_exhibitor,website_event_booth_sale,website_event_booth_sale_exhibitor,website_event_crm,website_event_exhibitor,website_event_jitsi,website_event_meet,website_event_meet_quiz,website_event_sale,website_event_track,website_event_track_live,website_event_track_live_quiz,website_event_track_quiz,website_form_project,website_forum,website_google_map,website_hr_recruitment,website_jitsi,website_links,website_livechat,website_mail,website_mail_group,website_mass_mailing,website_mass_mailing_sms,website_membership,website_partner,website_payment,website_payment_authorize,website_profile,website_sale,website_sale_autocomplete,website_sale_comparison,website_sale_comparison_wishlist,website_sale_loyalty,website_sale_mondialrelay,website_sale_mrp,website_sale_picking,website_sale_product_configurator,website_sale_slides,website_sale_stock,website_sale_stock_wishlist,website_sale_wishlist,website_slides,website_slides_forum,website_slides_survey,website_sms,website_twitter
  • exec_odoo --db_port 5432 --log-level=test --max-cron-threads=0 --http-interface=127.0.0.1 --load=base,web,to_base --stop-after-init --test-enable --test-tags=/account,/account_add_gln,/account_audit_trail,/account_check_printing,/account_debit_note,/account_debit_note_sequence,/account_edi,/account_edi_proxy_client,/account_edi_ubl_cii,/account_edi_ubl_cii_tax_extension,/account_fleet,/account_lock,/account_payment,/account_payment_term,/account_peppol,/account_peppol_selfbilling,/account_qr_code_emv,/account_qr_code_sepa,/account_tax_python,/account_test,/account_update_tax_tags,/analytic,/attachment_indexation,/auth_oauth,/auth_password_policy,/auth_password_policy_portal,/auth_password_policy_signup,/auth_signup,/auth_totp,/auth_totp_mail,/auth_totp_mail_enforce,/auth_totp_portal,/barcodes,/barcodes_gs1_nomenclature,/base,/base_address_extended,/base_automation,/base_geolocalize,/base_iban,/base_import,/base_import_module,/base_install_request,/base_setup,/base_sparse_field,/base_vat,/board,/bus,/calendar,/calendar_sms,/contacts,/crm,/crm_iap_enrich,/crm_iap_mine,/crm_livechat,/crm_mail_plugin,/crm_sms,/data_recycle,/delivery,/delivery_mondialrelay,/delivery_stock_picking_batch,/digest,/event,/event_booth,/event_booth_sale,/event_crm,/event_crm_sale,/event_sale,/event_sms,/fleet,/gamification,/gamification_sale_crm,/google_account,/google_calendar,/google_gmail,/google_recaptcha,/hr,/hr_attendance,/hr_contract,/hr_expense,/hr_fleet,/hr_gamification,/hr_holidays,/hr_holidays_attendance,/hr_homeworking,/hr_hourly_cost,/hr_livechat,/hr_maintenance,/hr_org_chart,/hr_presence,/hr_recruitment,/hr_recruitment_skills,/hr_recruitment_sms,/hr_recruitment_survey,/hr_skills,/hr_skills_slides,/hr_skills_survey,/hr_timesheet,/hr_timesheet_attendance,/hr_work_entry,/hr_work_entry_contract,/hr_work_entry_holidays,/http_routing,/iap,/iap_crm,/iap_mail,/im_livechat,/im_livechat_mail_bot,/l10n_vn_edi_summary,/l10n_vn_edi_viettel,/l10n_vn_viin,/l10n_vn_viin_account_asset,/l10n_vn_viin_account_auto_transfer,/l10n_vn_viin_account_reports,/l10n_vn_viin_accounting_meinvoice,/l10n_vn_viin_accounting_meinvoice_pos,/l10n_vn_viin_accounting_sinvoice,/l10n_vn_viin_accounting_sinvoice_pos,/l10n_vn_viin_accounting_vninvoice,/l10n_vn_viin_accounting_vninvoice_summary,/l10n_vn_viin_ai_account,/l10n_vn_viin_base_ward,/l10n_vn_viin_edi,/l10n_vn_viin_edi_patch1,/l10n_vn_viin_edi_pos,/l10n_vn_viin_einvoice_sale,/l10n_vn_viin_foreign_trade,/l10n_vn_viin_foreign_trade_account_reports,/l10n_vn_viin_freight_project,/l10n_vn_viin_hr_account,/l10n_vn_viin_hr_payroll,/l10n_vn_viin_hr_payroll_account,/l10n_vn_viin_hr_payroll_account_overtime,/l10n_vn_viin_hr_payroll_administrative_region,/l10n_vn_viin_hr_payroll_meal,/l10n_vn_viin_hr_payroll_meal_account,-at_install,-.test_so_and_multicurrency,-:TestUi.test_02_crm_tour_rainbowman,-.test_assign_perf_duplicates,-/l10n_it_edi_sdicoop,-:TestExamples.test_with_car_with_atn_with_car,-:TestExamples.test_with_car_with_atn_with_child,-/project_enterprise.test_01_ui,-.test_generate_fec_sanitize_pieceref,-:TestEventPerformance.test_event_create_single_notype_website,-:TestInventory.test_cyclic_inventory,-:TestUi.test_04_mass_mailing_snippets_menu_hide,-:WebSuite.test_check_suite,-:TestResConfigSettings.test_set_default_analytic_plan,-:TestWebsiteSaleDeliveryExpressCheckoutFlows.test_express_checkout_registered_user_with_shipping_option_new_address,-:TestBatchPicking02.test_backorder_batching_2,-:.test_account_line_entry_kit_bom_dropship,-:TestPosMargin.test_avco_margin_closing_time,-:TestAccountMoveOutInvoiceOnchanges.test_before_initial_rate,-:TestCurrencyRatePurchaseStock.test_supply_po_rate_have_bank_default,-:TestCurrencyRatePurchaseStock.test_supply_po_rate_have_bank_default_no_rate,-:TestCurrencyRatePurchaseStock.test_supply_po_rate_no_have_bank_default,-:TestWebEditorController.test_modify_image,-:TestPurchaseOrder.test_foreign_bill_autocomplete_with_payment_term,-:TestImLivechatMessage.test_feedback_message,-:TestImLivechatMessage.test_message_to_store,-:TestChannelInternals.test_channel_members,-:TestDiscussFullPerformance.test_30_discuss_channels,-:TestPurchaseOrder.test_foreign_bill_tax_included,-:TestMessageToStorePerformance.test_message_to_store_multi_followers_inbox,-:TestDiscussFullPerformance.test_10_init_store_data,-:TestGetDiscussChannel.test_channel_get_livechat_visitor_info,-:TestReportsRendering.test_report_specific_paperformat_args,-:.test_partial_billing_interaction_with_invoicing_switch_threshold,-:.test_partial_invoicing_interaction_with_invoicing_switch_threshold,-:.test_invoice_with_already_invoiced_timesheets,-:TestProjectSubtasks.test_subtask_project
Create Date Level Message
07/27/2026 21:00:57 INFO
Using Docker Image Odoo 17 Ubuntu 22.04 Python 3.10:

FROM ubuntu:jammy

ENV LANG C.UTF-8
ENV ODOO_TEST_FAILURE_RETRIES=2

USER root

SHELL ["/bin/bash", "-c"]

# Install debian packages
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends apt-transport-https build-essential ca-certificates curl ffmpeg file fonts-freefont-ttf fonts-noto-cjk gawk gnupg gsfonts libldap2-dev libjpeg9-dev libsasl2-dev libxslt1-dev lsb-release node-less ocrmypdf sed sudo unzip xfonts-75dpi zip zlib1g-dev git build-essential cython3 libffi-dev libev-dev \
&& rm -rf /var/lib/apt/lists/*

# Install Python3 packages
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends python3 python3-dbfread python3-dev python3-pip python3-setuptools python3-wheel python3-markdown python3-mock python3-phonenumbers python3-websocket python3-cffi libpq-dev \
&& rm -rf /var/lib/apt/lists/*

# Install wkhtml
RUN curl -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb -o /tmp/wkhtmltox_0.12.6-1.focal_amd64.deb \
&& curl -sSL http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb -o /tmp/libssl1.1_1.1.0g-2ubuntu4_amd64.deb \
&& apt-get update \
&& dpkg -i /tmp/libssl1.1_1.1.0g-2ubuntu4_amd64.deb \
&& apt install -y -f --no-install-recommends /tmp/wkhtmltox_0.12.6-1.focal_amd64.deb \
&& rm /tmp/libssl1.1_1.1.0g-2ubuntu4_amd64.deb /tmp/wkhtmltox_0.12.6-1.focal_amd64.deb

# Install Odoo:Depends
ADD https://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.pl /usr/local/bin/flamegraph.pl
RUN chmod +rx /usr/local/bin/flamegraph.pl
ADD https://raw.githubusercontent.com/Viindoo/odoo/17.0/debian/control /tmp/control.txt
RUN apt-get update \
&& sed -n '/^Depends:/,/^[A-Z]/p' /tmp/control.txt \
| awk '/^ [a-z]/ { gsub(/,/,"") ; print $1 }' | sort -u \
| egrep -v 'postgresql-client' \
| sed 's/python-imaging/python-pil/'| sed 's/python-pypdf/python-pypdf2/' | sed 's/python3-lxml-html-clean/python3-lxml/' \
| DEBIAN_FRONTEND=noninteractive xargs apt-get install -y -qq \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install --no-cache-dir setuptools wheel && \
python3 -m pip install coverage==7.4.4 flamegraph

RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y postgresql-client-14 \
&& rm -rf /var/lib/apt/lists/*

# Install Google Chrome
ARG CHROME_VERSION=141.0.7390.54

RUN set -eux; \
echo 'repo_add_once="false"' > /etc/default/google-chrome; \
curl -sSLf "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" \
-o /tmp/chrome.deb; \
apt-get update; \
apt-get -y install --no-install-recommends /tmp/chrome.deb; \
apt-mark hold google-chrome-stable; \
rm -f /tmp/chrome.deb /etc/apt/sources.list.d/google-chrome.list; \
rm -rf /var/lib/apt/lists/*; \
google-chrome --version | grep -F "${CHROME_VERSION}"

# Install phantomjs
RUN curl -sSL https://nightly.odoo.com/resources/phantomjs.tar.bz2 -o /tmp/phantomjs.tar.bz2 \
&& tar xvfO /tmp/phantomjs.tar.bz2 phantomjs-2.1.1-linux-x86_64/bin/phantomjs > /usr/local/bin/phantomjs \
&& chmod +x /usr/local/bin/phantomjs \
&& rm -f /tmp/phantomjs.tar.bz2

ADD https://raw.githubusercontent.com/Viindoo/odoo/17.0/requirements.txt /root/requirements.txt
RUN python3 -m pip install --no-cache-dir wheel setuptools && \
python3 -m pip install --upgrade --no-cache-dir -r /root/requirements.txt && \
python3 -m pip install --no-cache-dir ebaysdk==2.1.5 pdf417gen==0.7.1

RUN python3 -m pip install --no-cache-dir requests pyOpenSSL

# Install debian packages
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends openssl iputils-ping openssh-client chromium-browser \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install --no-cache-dir --upgrade websocket-client==1.2.3 flake8==4.0.1
RUN python3 -m pip uninstall pylint pylint-odoo isort Pygments -y
RUN python3 -m pip install --no-cache-dir --upgrade pylint-odoo==9.0.5
RUN python3 -m pip install --no-cache-dir --upgrade Pygments==2.15.0 --no-deps
RUN python3 -m pip install --no-cache-dir --upgrade odoo_test_helper

# Install nodejs
RUN curl -fsSLO --compressed "https://nodejs.org/dist/v18.20.0/node-v18.20.0-linux-x64.tar.xz" \
&& tar -xJf "node-v18.20.0-linux-x64.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-v18.20.0-linux-x64.tar.xz" \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
#RUN npm install -g rtlcss es-check eslint@8
RUN python3 -m pip install --no-cache-dir --upgrade setuptools==61 # để tương thích với python-pkcs11-0.7.0

# Install cloc package
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends cloc \
&& rm -rf /var/lib/apt/lists/*

RUN npm install -g rtlcss@3.4.0 es-check@6.0.0 eslint@8.57.1 prettier@2.7.1 eslint-config-prettier@8.5.0 eslint-plugin-prettier@4.2.1 --save-dev