test(core/caesar): visit menu only on last `ButtonPage`
What changed, and why it matters
This is a minor test-only adjustment for the Caesar user interface layout. It changes a test helper so that it only tries to open the menu on the last page of a multi-page screen, because earlier pages do not have a menu/info button. There is no change to production firmware behavior or security.
No security action required. Treat as a normal test/maintenance commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit modifies the trace/debug serialization of ButtonPage in the Caesar Rust UI layout. The has_menu field is now emitted as self.has_menu && self.pager().is_last(), reflecting that non-last pages lack an info button. The accompanying fixtures.json updates are expected hash changes for UI screenshot tests. No runtime logic, input handling, or security boundary is altered.
Changed components
core/embed/rust/src/ui/layout_caesar/component/page.rstests/ui_tests/fixtures.jsonInspect captured patch +7 / −7
diff --git a/core/embed/rust/src/ui/layout_caesar/component/page.rs b/core/embed/rust/src/ui/layout_caesar/component/page.rs
index fae06668..21f6c016 100644
--- a/core/embed/rust/src/ui/layout_caesar/component/page.rs
+++ b/core/embed/rust/src/ui/layout_caesar/component/page.rs
@@ -213,6 +213,6 @@ where
t.int("page_count", self.pager().total() as i64);
t.child("buttons", &self.buttons);
t.child("content", &self.content);
- t.bool("has_menu", self.has_menu);
+ t.bool("has_menu", self.has_menu && self.pager().is_last());
}
}
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 0a7698fc..5ad0c896 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -13637,7 +13637,7 @@
"T3B1_cs_ethereum-test_signtx.py::test_signtx_payment_req[True-False-True]": "927abfa1be704f6b356d06a79395b8fc17d0a31ac399a45bc80b7bae2425026a",
"T3B1_cs_ethereum-test_signtx.py::test_signtx_payment_req[True-True-False]": "bc8fce056101f7362ec1877866c7e4f9e616aa110d3eb64492997622f7f3ff76",
"T3B1_cs_ethereum-test_signtx.py::test_signtx_payment_req[True-True-True]": "4b3c2b7754b736d755b1302b57608bf2439b8cd2c754653dea46f4bf4e4d1952",
-"T3B1_cs_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "f807376c342ee21bb00761e5b7d1da4533de06235582255b995fb49d9e512435",
+"T3B1_cs_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "33bc541332192b96311565f7946edf40360028aa391caa47a2a2559892f9ea5c",
"T3B1_cs_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "d0a278c2aab3ea9dd3b4e7fe887d4d5d349cb87e95c3997592009d4d3ac05f5a",
"T3B1_cs_ethereum-test_signtx.py::test_signtx_staking[False-hoodi]": "e6682dbf48df4976ad5e960bedc548f09a921df3d736ab92780039a5ae14c48c",
"T3B1_cs_ethereum-test_signtx.py::test_signtx_staking[False-stake_hoodi]": "0dc91656cf87f36b258355d8f00722c48eb7cb5d8d3ccd677ace7ed09eeb6a54",
@@ -15396,7 +15396,7 @@
"T3B1_de_ethereum-test_signtx.py::test_signtx_payment_req[True-False-True]": "825ecf120896d2494deb93be7f51822347a7971a04a90f367451d49521469126",
"T3B1_de_ethereum-test_signtx.py::test_signtx_payment_req[True-True-False]": "dc74944cadfd857e10e21b4f260652992b64b834a407e31d9e5ccdcff1aa819c",
"T3B1_de_ethereum-test_signtx.py::test_signtx_payment_req[True-True-True]": "9f6ff473940a57e79757ac5affdae056428bbdd038452a8e6053cd82f3cd8405",
-"T3B1_de_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "02a7849c35ddd70217a6a4c1d9cc57f550371dab3a209ceec1f646b7ec771dc8",
+"T3B1_de_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "fbd101c308015670129aa95d0a3a613ada02ecde8cc62d897844f345a8183650",
"T3B1_de_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "e7d23d061c214f2eacc862f42f1045555b46dc6224d3daab45003114c086dbb7",
"T3B1_de_ethereum-test_signtx.py::test_signtx_staking[False-hoodi]": "bb05df8d77fcefcb81dd599a7dde568aecce3839d1ae0fc1e9586d4cebe22b46",
"T3B1_de_ethereum-test_signtx.py::test_signtx_staking[False-stake_hoodi]": "443c68a2bcc867cf39ebf187e15e7914a9cd0bc1b7a5ecc0c46712a6d2e23d69",
@@ -17155,7 +17155,7 @@
"T3B1_en_ethereum-test_signtx.py::test_signtx_payment_req[True-False-True]": "2a0ef687300de2aa75a13e2f8c0cb65e7ce366c23891228a1b7c74be322f2a08",
"T3B1_en_ethereum-test_signtx.py::test_signtx_payment_req[True-True-False]": "0d763a3048a3705d9ec2ec4c525e2d7fc4a1960366b18b25bb240b28c496acd3",
"T3B1_en_ethereum-test_signtx.py::test_signtx_payment_req[True-True-True]": "a2e3dead9738fed4a9c3fe442e0ba71009e7914feca624ac7a54ff1322a4da54",
-"T3B1_en_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "304878cdbfb3b631120fce8851bbb59fc573b66d9b498d5c1c3c73db41811c41",
+"T3B1_en_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "0acfae8bd1248e237fc4512ee45ba600c2c19fb1f34a544c4bb65e0207bdd852",
"T3B1_en_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "dd4c984e00f8a13a03859663e0b96d7c3b20e98f4d48f8238991abc72a2e0e2d",
"T3B1_en_ethereum-test_signtx.py::test_signtx_staking[False-hoodi]": "2e5c281e2c27fe6db7ed716a6409fdb97c1a06c190792ecd0832adfe3b4bb0ee",
"T3B1_en_ethereum-test_signtx.py::test_signtx_staking[False-stake_hoodi]": "4d3f5d375a3c92a8963449f05258fc74e67b94c13f517c1310b9d479e12ac5a4",
@@ -18914,7 +18914,7 @@
"T3B1_es_ethereum-test_signtx.py::test_signtx_payment_req[True-False-True]": "cdc5f2cf9a97189880f531c3c6c8fe8c108fe6da09d08b755d2d6b92628df328",
"T3B1_es_ethereum-test_signtx.py::test_signtx_payment_req[True-True-False]": "a6be9e8133161405e778e04400d2c82f16324ea30b6f0c1b60ae0b37955d887d",
"T3B1_es_ethereum-test_signtx.py::test_signtx_payment_req[True-True-True]": "75daf2179862d099c2b6040456488574d0e98c413e3d8c52874f87a2638e8584",
-"T3B1_es_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "cef3e4ce5a2ef5cb43affd9a549cc69ed7d023b6473e3f386c9e3c90e9b1468e",
+"T3B1_es_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "5bf3f80625d58564f536b6befaf9de38ebd38ed0b888d1eb518a2d25b2242adb",
"T3B1_es_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "e1d574e4637dc5f1a2d3bc02e10fce0d0a36aa8a4fcf892147a0ba93dcc5fdae",
"T3B1_es_ethereum-test_signtx.py::test_signtx_staking[False-hoodi]": "861cc834c45225e1cb9b916061d8083555bd7a95ef7fb2f498a048ea3b784201",
"T3B1_es_ethereum-test_signtx.py::test_signtx_staking[False-stake_hoodi]": "e1c98318e68cc724e6e02452544ea41ca5e86167212cb9687ede03aff923c3aa",
@@ -20673,7 +20673,7 @@
"T3B1_fr_ethereum-test_signtx.py::test_signtx_payment_req[True-False-True]": "52972d7ea9214e14d0958c305ae122c114e2cc3956e308f2ed4975e98bdc8e83",
"T3B1_fr_ethereum-test_signtx.py::test_signtx_payment_req[True-True-False]": "11d50659b6cde3a8d0fa347cd80f205e9bd2c688eb5b2de3d82e131e026b96ed",
"T3B1_fr_ethereum-test_signtx.py::test_signtx_payment_req[True-True-True]": "57b2a1d484473e78c0f92194e11ec57a93f93f34dc76fc8401d7df077561b88b",
-"T3B1_fr_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "4d2b0ae581439102b635c51a5704d7b702618fad8ade0610d255b6df6798ebea",
+"T3B1_fr_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "ddc12914e1861ae21fde9d95852fd61fe0858749ae5d0b5d4a974727ae309e93",
"T3B1_fr_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "72fa4decfbb6ac9c7eba235f7e6682f1b3f43ae77261cb0183240e83f279c713",
"T3B1_fr_ethereum-test_signtx.py::test_signtx_staking[False-hoodi]": "b68e818bf266a7a6268857bc8ea8d5d5c40891bf8124de2d0d2c1ad5dfdaab47",
"T3B1_fr_ethereum-test_signtx.py::test_signtx_staking[False-stake_hoodi]": "8694a974e5d0b80c5a63dec686c5b805a1c4321f3df7cdf80019966be7860514",
@@ -22432,7 +22432,7 @@
"T3B1_pt_ethereum-test_signtx.py::test_signtx_payment_req[True-False-True]": "f083b4aaec42a6de87a744ffa4581fdf5f1f77c9f65da5bd080eda363f1a6611",
"T3B1_pt_ethereum-test_signtx.py::test_signtx_payment_req[True-True-False]": "b7c1bff570138549ea52ca32b12bb7faa83e01c082e7acebd6c00e81edbc9e35",
"T3B1_pt_ethereum-test_signtx.py::test_signtx_payment_req[True-True-True]": "ab02289af236e7981e62c8103902518bf5e7f01948b8d8c62d27f6149a988000",
-"T3B1_pt_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "b8d501c7478ebb065b10bc53f0cf2b91b3b0ef5e674901af3e5348f944379ec3",
+"T3B1_pt_ethereum-test_signtx.py::test_signtx_payment_req_long_value": "9dc3777de71bd956483b6899d54f809c254ee8febd8059f5158e70f626776b0a",
"T3B1_pt_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "e56a9fad12f7984dbdc774c0c5c1ea3fbe5ea18280b98447189838e22adbd12a",
"T3B1_pt_ethereum-test_signtx.py::test_signtx_staking[False-hoodi]": "43ee2dddad799158db08fa3a20d2ff704bae9a5d389047e4165d22407bdc9222",
"T3B1_pt_ethereum-test_signtx.py::test_signtx_staking[False-stake_hoodi]": "bf22e82ca41f68de08a9c3170b3bf9d7daf95c1c2cd35cfc6d0aab9e2a1d2471",
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.