Commit Graph

203 Commits

Author SHA1 Message Date
Claudio Ortolina 621b35d824 Open universal search modal instantly via client-side JS
Replace phx-click server event with Fluxon.open_dialog for zero-latency
modal opening. The modal DOM is now always present (no :if conditional) so
it can be shown instantly; the server syncs state in the background.

Fix test selectors that now match the always-present modal form by scoping
to forms without phx-target (which the modal form always has).
2026-05-07 20:43:15 +01:00
Claudio Ortolina 0784fc5e0c Fix page title for scrobble anything release page 2026-04-23 21:06:32 +01:00
Claudio Ortolina 1bd5707cb4 Fix page title for scrobble anything index and release group route 2026-04-23 21:06:12 +01:00
Claudio Ortolina 8911afad94 Add tests for Top Albums component 2026-04-23 16:41:44 +01:00
Claudio Ortolina c7c7e1fe4e Navigate from scrobble search to release-group page 2026-04-23 14:47:50 +01:00
Claudio Ortolina 0dcd6eab83 Replace /scrobble/:release_id with nested route 2026-04-23 14:39:26 +01:00
Claudio Ortolina d8041dc0dd Add /scrobble/:rg_id release-group page 2026-04-23 14:35:58 +01:00
Claudio Ortolina f7f38d580e Enable unaliased modules ex_slop check 2026-04-22 20:37:09 +01:00
Claudio Ortolina 0776700170 ML-142: Improve scrobble UI in the release component
- Sticky bar for easier track-based scrobbling
- Support setting custom finish time
2026-04-22 17:19:35 +01:00
Claudio Ortolina 9851a5c6bf Use cart with barcode scanner 2026-04-20 15:46:40 +01:00
Claudio Ortolina eaece07193 Count formats in results 2026-04-20 15:15:29 +01:00
Claudio Ortolina c4ebe636ff Fix ML-143 review: security, worker, and test improvements
Closes ML-143 review findings:
- cast_id/1 uses Integer.parse instead of String.to_integer
- add_to_cart validates against server-side release_groups
- JS.push payload trimmed to {id, format} only
- Oban.insert_all result checked for partial failures
- handle_async success resets @importing? to false
- ImportFromMusicbrainzReleaseGroup gets unique constraint
- Record.parse_datetime/1 made public with safe match
- Workers delegate to Record.parse_datetime/1
- Test coverage: change_format, clear_cart, wishlist single import
2026-04-20 15:15:29 +01:00
Claudio Ortolina 3f5ce060b1 Implement ML-143: Cart-style multi record import
Closes ML-143.
2026-04-20 15:15:29 +01:00
Claudio Ortolina a6319d55df Pin artist_live/show image_data_hash assertions
Refs #176
2026-04-20 06:50:04 +01:00
Claudio Ortolina 0dcfecf741 Increase render_async timeout to cater for slower CI 2026-04-19 09:29:04 +01:00
Claudio Ortolina f4db063298 Test artist edit form and record set picker flows
Closes #180
2026-04-19 09:00:06 +01:00
Claudio Ortolina 22a47f4ca9 Add tests for previously uncovered modules 2026-04-19 07:47:20 +01:00
Claudio Ortolina 94143010c0 Fix doubly-wrapped safe tuple in artist bio render 2026-04-17 16:00:22 +01:00
Claudio Ortolina 851cb36858 Fix dl accessibility violations on stats dashboard 2026-04-15 14:16:24 +01:00
Claudio Ortolina 405235e2b3 Add picker to create scrobble rules on the fly 2026-04-15 10:53:58 +01:00
Claudio Ortolina 726b7d5ef8 Add tests for chat auto-open via query param 2026-04-13 13:16:28 +01:00
Claudio Ortolina 3b8415d8c4 Add Collection Chat to universal search 2026-04-13 10:15:43 +01:00
Claudio Ortolina a509248625 Wire up Chat component in CollectionLive.Index 2026-04-13 10:12:49 +01:00
Claudio Ortolina 88906e10ad Add ex_slop, configure it, run it and fix issues 2026-04-12 22:07:27 +01:00
Claudio Ortolina 49d26e1fd0 Switch the release component to a form to enable recovery 2026-04-08 18:22:44 +01:00
Claudio Ortolina 8f8eb0a656 Enable quick actions from universal search 2026-03-29 23:07:53 +01:00
Claudio Ortolina 61dd3f45c7 Move refresh config and callers to ListeningStats 2026-03-27 23:14:09 +00:00
Claudio Ortolina 1301f888f3 Remove "it" from the test descriptions 2026-03-27 08:38:41 +00:00
Claudio Ortolina f5d3d90043 Use correct fixture for test 2026-03-26 11:55:44 +00:00
Claudio Ortolina dec564b840 Move test in correct describe block 2026-03-26 11:55:27 +00:00
Claudio Ortolina c9283d7f28 Compute artist play count from db 2026-03-24 15:07:50 +00:00
Claudio Ortolina 0edd5f317c Extract biography helpers from ArtistLive.Show
Closes #124
2026-03-22 08:07:06 +00:00
Claudio Ortolina f1e3b22f91 Make online store templates searchable 2026-03-16 11:56:39 +00:00
Claudio Ortolina 654b172ddb Fix UI inconsistencies across templates
- Replace .separator with .dropdown_separator in 4 dropdown menus
- Change gray-* to zinc-* color classes in online store templates
- Wrap hardcoded page titles in gettext() in online store templates
- Add consistent dark:text-zinc-200 to maintenance h3 subsections
- Add text-zinc-900 dark:text-zinc-200 to scrobble section headers
- Fix heading hierarchy (h1/h2 → h2/h3) in record set items
- Align artist form modal header to text-lg font-semibold
- Use size="xs" prop instead of class override on format badge
- Add external link icon to wishlist online store buttons
2026-03-16 11:37:29 +00:00
Claudio Ortolina 5752d1fe27 Add tests for scrobble rules search/sort 2026-03-16 08:06:48 +00:00
Claudio Ortolina 43b054b34a Search scrobble rules, improved layout 2026-03-16 07:58:21 +00:00
Claudio Ortolina abb6a5f8f4 Update dependencies
fluxon 2.3.4 => 2.3.5

Includes a test fix due to some internal changes in Fluxon.
2026-03-15 10:18:07 +00:00
Claudio Ortolina 4d1ac9652c Link the scrobbled count in stats 2026-03-14 09:59:09 +00:00
Claudio Ortolina d057f29ba1 Split ScrobbleActivity into focused modules
Move track CRUD/listing to ListeningStats and diagnostics
to Maintenance, leaving ScrobbleActivity for scrobbling only.

Closes #111
2026-03-12 16:51:33 +00:00
Claudio Ortolina d516c6a815 Improve tests for scrobble show page 2026-03-10 21:04:19 +00:00
Claudio Ortolina fa535393e0 Fix toggling/scrobbling event handlers in scrobble anything show view 2026-03-10 20:04:39 +00:00
Claudio Ortolina f86800368d Streamline test suite
record_set_live/index_test.exs — Removed 3 describe blocks ("Delete set", "Remove record from set", "Drag-and-drop reorder") that were duplicated in ShowTest. Removed 3 tests.

record_set_live/show_test.exs — Replaced context-level assertion in "Remove record" with UI assertion (refute has_element?). Removed redundant assert_raise from "Delete set" (kept assert_redirect).

scrobble_rules_live/index_test.exs — Removed "Form validation" describe block (2 tests duplicated in "saves new scrobble_rule" and changeset tests). Kept the "updates form labels" test, moved into "Index"
  block. Replaced ScrobbleRules.get_scrobble_rule! assertions in toggle test with UI assertions checking button text.
online_store_template_live/index_test.exs — Replaced context-level assertions with UI assertions in Create, Edit, Delete, and Toggle tests. Removed OnlineStoreTemplates alias.

scrobbled_tracks_live/index_test.exs — Collapsed 3 search tests into 1. Removed 2 tests.
2026-03-09 18:55:07 +00:00
Claudio Ortolina 1bc01a2346 Fix flaky collection live index test 2026-03-09 13:38:24 +00:00
Claudio Ortolina 4584b7bcb8 Remove drop down from record set items
Have just a bin icon, and rely on drag and drop.

This solves a massive performance issue with the page, which is
traceable to the Fluxon dropdowns, particularly the Class.merge logic
used to merge Tailwind classes
2026-03-08 13:21:33 +00:00
Claudio Ortolina f75485e5db Small optimizations to speed up the test suite
Shaves off 1 second on M1
2026-03-07 09:13:02 +00:00
Claudio Ortolina c3cb510892 Convert phoenix_test assertions to simplified syntax 2026-03-06 06:41:06 +00:00
Claudio Ortolina 4b1f6bb245 Fix inconsistent toast arity in form components
Closes #94
2026-03-05 17:06:23 +00:00
Claudio Ortolina 42a51b9539 Add test coverage for ScrobbleLive Index and Show 2026-03-05 14:52:58 +00:00
Claudio Ortolina a0df11d26f Use new style for MB link and copy button in artist page 2026-03-01 20:19:46 +00:00
Claudio Ortolina bfbb74d601 BETA: new layout for record details page 2026-02-26 08:49:40 +00:00