Commit 2e5ded5
committed
Sort unrecorded years last, and stop claiming a copy that failed
Both reported by Codex on #22, both confirmed before fixing.
normaliseWine collapses a missing year to 0, and the missing-value rule
only recognised null and "". So 0 sorted as a number smaller than every
real year, and sorting by vintage ascending led with every NV bottle in
the cellar - the exact thing that rule exists to prevent. Zero now counts
as absent for Vintage, BeginConsume and EndConsume, where there is no
such year. Valuation is deliberately left alone: a bottle really can be
worth nothing recorded, and cheapest-first should still show it.
The copy button reported success unconditionally. `navigator.clipboard`
requires a secure context, and a great many Home Assistant installs are
reached over plain http on a LAN address - so `written` was undefined,
the else branch ran, and the button said "Copied" having copied nothing.
That is worse than doing nothing: the user walks to the rack and pastes
whatever was there before. There is a real execCommand fallback now, and
the label follows what actually happened.
Finding the second one meant fixing the harness first. It set
`globalThis.navigator`, which node 21+ ignores in silence because it
ships its own getter-only navigator - so every clipboard fixture was
testing the same world and the "missing" case looked like it passed. It
uses defineProperty now and throws if the stub does not take.
The copy tests assert what reached the clipboard, not just what the
button says, so "said Copied" cannot pass for "copied something".
441 tests, ruff clean, mypy clean. Re-checked in Chromium: vintage
ascending now ends with the NV bottles, and Copy bin really does put the
bin on the clipboard.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LLPEGFSy3fLEuXNUPAPWR41 parent a9ee95d commit 2e5ded5
4 files changed
Lines changed: 197 additions & 15 deletions
File tree
- custom_components/cellar_tracker/www
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
461 | 461 | | |
462 | 462 | | |
463 | 463 | | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
464 | 477 | | |
465 | 478 | | |
466 | 479 | | |
| |||
475 | 488 | | |
476 | 489 | | |
477 | 490 | | |
478 | | - | |
479 | | - | |
480 | | - | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
481 | 496 | | |
482 | 497 | | |
483 | 498 | | |
| |||
695 | 710 | | |
696 | 711 | | |
697 | 712 | | |
698 | | - | |
699 | | - | |
700 | | - | |
701 | | - | |
702 | | - | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
703 | 718 | | |
704 | | - | |
705 | | - | |
706 | | - | |
707 | | - | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
708 | 752 | | |
709 | 753 | | |
710 | 754 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
| 87 | + | |
87 | 88 | | |
88 | 89 | | |
89 | 90 | | |
| |||
114 | 115 | | |
115 | 116 | | |
116 | 117 | | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
117 | 124 | | |
118 | 125 | | |
119 | | - | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
120 | 156 | | |
121 | 157 | | |
122 | 158 | | |
| |||
138 | 174 | | |
139 | 175 | | |
140 | 176 | | |
141 | | - | |
| 177 | + | |
| 178 | + | |
142 | 179 | | |
143 | | - | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
144 | 184 | | |
145 | 185 | | |
146 | 186 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
328 | 328 | | |
329 | 329 | | |
330 | 330 | | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
216 | 216 | | |
217 | 217 | | |
218 | 218 | | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
0 commit comments