[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.
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 |