Compiling 1 file (.ex) Generated music_library app 11:30:46.549 [debug] Exqlite: loading extension `/Users/cloud/github.com/cloud8421/music_library/_build/test/lib/music_library/priv/sqlite_extensions/darwin-aarch64/unicode.dylib` 11:30:46.549 [debug] Exqlite: loading extension `/Users/cloud/github.com/cloud8421/music_library/_build/test/lib/music_library/priv/sqlite_extensions/darwin-aarch64/unicode.dylib` Running ExUnit with seed: 648807, max_cases: 1 MusicLibrary.Records.SearchParserTest [test/music_library/records/search_parser_test.exs] * doctest MusicLibrary.Records.SearchParser.parse/1 (1) [L#4] * doctest MusicLibrary.Records.SearchParser.parse/1 (1) (12.6ms) [L#4] MusicLibrary.Records.CoverTest [test/music_library/records/cover_test.exs] * test resize/1 it resizes to the desired size [L#7] * test resize/1 it resizes to the desired size (98.1ms) [L#7] LastFm.ConfigTest [test/last_fm/config_test.exs] * test resolve/1 reads data from application configuration [L#5] * test resolve/1 reads data from application configuration (0.01ms) [L#5] MusicLibraryWeb.ErrorJSONTest [test/music_library_web/controllers/error_json_test.exs] * test renders 500 [L#8] * test renders 500 (9.8ms) [L#8] * test renders 404 [L#4] * test renders 404 (0.1ms) [L#4] LastFm.FeedTest [test/last_fm/feed_test.exs] * test update and broadcast it returns tracks in descending order of scrobble [L#45] * test update and broadcast it returns tracks in descending order of scrobble (0.02ms) [L#45] * test update and broadcast it returns artists in descending order of scrobble [L#50] * test update and broadcast it returns artists in descending order of scrobble (0.01ms) [L#50] * test update and broadcast it returns albums in descending order of scrobble [L#55] * test update and broadcast it returns albums in descending order of scrobble (0.01ms) [L#55] * test update and broadcast it stores the track and broadcasts the update [L#38] * test update and broadcast it stores the track and broadcasts the update (0.01ms) [L#38] MusicLibraryWeb.AuthTest [test/music_library_web/plug/auth_test.exs] * test require_logged_in/2 when logged in, it passes through [L#33] * test require_logged_in/2 when logged in, it passes through (0.8ms) [L#33] * test require_logged_in/2 when logged out, it redirects to /login [L#19] * test require_logged_in/2 when logged out, it redirects to /login (2.4ms) [L#19] Obsidian.ParserTest [test/obsidian/parser_test.exs] * test handles special characters in titles [L#32] * test handles special characters in titles (7.0ms) [L#32] * test parses the content of the Obsidian album entry [L#8] * test parses the content of the Obsidian album entry (0.4ms) [L#8] LastFm.ArtistTest [test/last_fm/artist_test.exs] * test from_api_response/1 returns correct data [L#7] * test from_api_response/1 returns correct data (2.2ms) [L#7] LastFm.TrackTest [test/last_fm/track_test.exs] * test from_api_response/1 returns correct data [L#7] * test from_api_response/1 returns correct data (0.2ms) [L#7] MusicLibraryWeb.ErrorHTMLTest [test/music_library_web/controllers/error_html_test.exs] * test renders 500.html [L#11] * test renders 500.html (1.5ms) [L#11] * test renders 404.html [L#7] * test renders 404.html (0.1ms) [L#7] MusicLibraryWeb.WishlistLive.IndexTest [test/music_library_web/live/wishlist_live/index_test.exs] * test Wishlist can purchase a record and move it to the collection [L#14] * test Wishlist can purchase a record and move it to the collection (107.1ms) [L#14] MusicLibraryWeb.SessionControllerTest [test/music_library_web/controllers/session_controller_test.exs] * test GET /login it resets the session [L#15] * test GET /login it resets the session (2.1ms) [L#15] * test POST /sessions/create it refuses an invalid password [L#26] * test POST /sessions/create it refuses an invalid password (0.1ms) [L#26] * test POST /sessions/create it accepts a valid password [L#42] * test POST /sessions/create it accepts a valid password (0.1ms) [L#42] * test GET /login it shows the login form [L#6] * test GET /login it shows the login form (0.9ms) [L#6] MusicLibrary.CollectionTest [test/music_library/collection_test.exs] * test count_records_by_type/0 returns the count of records in the collection by type, excluding wishlisted records [L#84] * test count_records_by_type/0 returns the count of records in the collection by type, excluding wishlisted records (3.2ms) [L#84] * test get_latest_record!/0 returns the most recently purchased record [L#92] * test get_latest_record!/0 returns the most recently purchased record (2.7ms) [L#92] * test search_records/2 it respects limit [L#46] * test search_records/2 it respects limit (2.3ms) [L#46] * test search_records/2 it respects offset [L#50] * test search_records/2 it respects offset (2.5ms) [L#50] * test get_random_record!/0 returns a random record [L#103] * test get_random_record!/0 returns a random record (2.3ms) [L#103] * test count_records_by_format/0 returns the count of records in the collection by format, excluding wishlisted records [L#76] * test count_records_by_format/0 returns the count of records in the collection by format, excluding wishlisted records (2.3ms) [L#76] * test search_records/2 it respects order [L#56] * test search_records/2 it respects order (2.3ms) [L#56] * test search_records_count/1 returns the count of matching records, excluding wishlisted records [L#68] * test search_records_count/1 returns the count of matching records, excluding wishlisted records (2.2ms) [L#68] * test search_records/2 returns matching records, excluding wishlisted records [L#41] * test search_records/2 returns matching records, excluding wishlisted records (2.3ms) [L#41] MusicLibraryWeb.CollectionControllerTest [test/music_library_web/controllers/collection_controller_test.exs] * test GET /api/collection/latest it returns the latest record [L#24] * test GET /api/collection/latest it returns the latest record (2.1ms) [L#24] * test GET /api/collection/random it requires authentication [L#44] * test GET /api/collection/random it requires authentication (0.7ms) [L#44] * test GET /api/collection/random it returns a random record [L#51] * test GET /api/collection/random it returns a random record (0.9ms) [L#51] * test GET /api/collection/latest it requires authentication [L#18] * test GET /api/collection/latest it requires authentication (0.6ms) [L#18] MusicLibraryWeb.StatsLive.IndexTest [test/music_library_web/live/stats_live/index_test.exs] * test Stats home page it shows the latest purchase [L#56] * test Stats home page it shows the latest purchase (31.6ms) [L#56] * test Stats home page it shows the wishlist total count [L#71] * test Stats home page it shows the wishlist total count (26.8ms) [L#71] * test Stats home page it shows the scrobble activity [L#77] * test Stats home page it shows the scrobble activity (73.7ms) [L#77] * test Stats home page it shows the collection counts (total, format, and type) [L#32] * test Stats home page it shows the collection counts (total, format, and type) (49.3ms) [L#32] MusicLibrary.WishlistTest [test/music_library/wishlist_test.exs] * test search_records/2 it respects limit [L#25] * test search_records/2 it respects limit (2.6ms) [L#25] * test search_records/2 it respects offset [L#29] * test search_records/2 it respects offset (2.2ms) [L#29] * test search_records_count/1 returns the count of matching records, excluding purchased records [L#39] * test search_records_count/1 returns the count of matching records, excluding purchased records (2.3ms) [L#39] * test count/0 returns the count of records in the wishlist, excluding purchased records [L#47] * test count/0 returns the count of records in the wishlist, excluding purchased records (2.0ms) [L#47] * test search_records/2 returns matching records, excluding purchased records [L#21] * test search_records/2 returns matching records, excluding purchased records (2.2ms) [L#21] MusicLibraryWeb.CoverControllerTest [test/music_library_web/controllers/cover_controller_test.exs] * test GET /covers/:record_id serves the cover without etag [L#21] * test GET /covers/:record_id serves the cover without etag (1.7ms) [L#21] * test GET /covers/:record_id serves the cover when etag doesn't match [L#32] * test GET /covers/:record_id serves the cover when etag doesn't match (0.8ms) [L#32] * test GET /covers/:record_id serves a 304 when etag matches [L#46] * test GET /covers/:record_id serves a 304 when etag matches (0.8ms) [L#46] * test GET /covers/:record_id accepts a size attribute for resizing [L#60] * test GET /covers/:record_id accepts a size attribute for resizing (3.8ms) [L#60] * test GET /covers/:record_id 404s when record doesn't exist [L#14] * test GET /covers/:record_id 404s when record doesn't exist (0.8ms) [L#14] MusicLibrary.RepoTest [test/music_library/repo_test.exs] * test correctly loads the unicode extension unaccent function [L#5] * test correctly loads the unicode extension unaccent function (0.1ms) [L#5] MusicLibrary.ArtistsTest [test/music_library/artists_test.exs] * test get_artist/1 it returns records with essential data [L#8] * test get_artist/1 it returns records with essential data (0.7ms) [L#8] MusicLibrary.RecordsTest [test/music_library/records_test.exs] * test search_records/2 tagged search - type [L#101] * test search_records/2 tagged search - type (2.7ms) [L#101] * test search_records/2 tagged search - mbid [L#105] * test search_records/2 tagged search - mbid (3.0ms) [L#105] * test refresh_musicbrainz_data/1 updates release_ids and included_release_group_ids [L#54] * test refresh_musicbrainz_data/1 updates release_ids and included_release_group_ids (1.1ms) [L#54] * test get_record!/1 it fetches the record by id [L#150] * test get_record!/1 it fetches the record by id (0.9ms) [L#150] * test search_records/2 untagged search (with limit and offset) [L#80] * test search_records/2 untagged search (with limit and offset) (2.9ms) [L#80] * test get_artists_records/1 it returns records with essential data [L#160] * test get_artists_records/1 it returns records with essential data (0.7ms) [L#160] * test search_records_count/2 untagged search [L#117] * test search_records_count/2 untagged search (2.5ms) [L#117] * test refresh cover/1 it fetches and stores the updated cover [L#296] * test refresh cover/1 it fetches and stores the updated cover (4.8ms) [L#296] * test search_records/2 tagged search - format [L#97] * test search_records/2 tagged search - format (2.7ms) [L#97] * test import_from_musicbrainz_release/2 it saves a record with its cover art [L#243] * test import_from_musicbrainz_release/2 it saves a record with its cover art (4.4ms) [L#243] * test search_records_count/2 tagged search - format [L#130] * test search_records_count/2 tagged search - format (2.7ms) [L#130] * test search_records_count/2 tagged search - artist [L#125] * test search_records_count/2 tagged search - artist (2.8ms) [L#125] * test search_records_count/2 tagged search - type [L#134] * test search_records_count/2 tagged search - type (2.5ms) [L#134] * test import_from_musicbrainz_release_group/2 it saves a record with its cover art [L#197] * test import_from_musicbrainz_release_group/2 it saves a record with its cover art (4.2ms) [L#197] * test search_records_count/2 tagged search - album [L#121] * test search_records_count/2 tagged search - album (2.7ms) [L#121] * test search_records/2 tagged search - album [L#88] * test search_records/2 tagged search - album (2.5ms) [L#88] * test search_records/2 tagged search - artist [L#92] * test search_records/2 tagged search - artist (2.8ms) [L#92] * test create_record/1 populates computed values [L#35] * test create_record/1 populates computed values (0.5ms) [L#35] * test get_cover/1 it returns the record cover by id [L#172] * test get_cover/1 it returns the record cover by id (0.6ms) [L#172] * test search_records_count/2 tagged search - mbid [L#138] * test search_records_count/2 tagged search - mbid (2.6ms) [L#138] * test search_release_group/2 it returns results with correct limit and offset [L#182] * test search_release_group/2 it returns results with correct limit and offset (0.08ms) [L#182] MusicLibraryWeb.CollectionLive.ShowTest [test/music_library_web/live/collection_live/show_test.exs] * test Show record it includes all needed information [L#31] * test Show record it includes all needed information (18.5ms) [L#31] * test Edit record from show page can navigate to the record edit form [L#19] * test Edit record from show page can navigate to the record edit form (16.2ms) [L#19] MusicLibraryWeb.ArtistLive.ShowTest [test/music_library_web/live/artist_live/show_test.exs] * test Show artist it gracefully handles errors in fetching bio and play count [L#54] * test Show artist it gracefully handles errors in fetching bio and play count (7.5ms) [L#54] * test Show artist it shows records from the collection and the wishlist [L#72] * test Show artist it shows records from the collection and the wishlist (5.2ms) [L#72] * test Show artist it shows the artist bio and play count [L#34] * test Show artist it shows the artist bio and play count (5.5ms) [L#34] MusicLibraryWeb.CollectionLive.IndexTest [test/music_library_web/live/collection_live/index_test.exs] * test Updating record metadata can change the record cover [L#227] * test Updating record metadata can change the record cover (40.1ms) [L#227] * test Importing a new record it shows the import modal [L#259] * test Importing a new record it shows the import modal (4.8ms) [L#259] * test Collection shows purchased records (first page only) [L#50] * test Collection shows purchased records (first page only) (485.0ms) [L#50] * test Search and pagination uses query string params [L#92] * test Search and pagination uses query string params (76.6ms) [L#92] * test Importing a new record it imports a record when selected [L#268] * test Importing a new record it imports a record when selected (25.2ms) [L#268] * test Updating record metadata can navigate to the record edit form [L#217] * test Updating record metadata can navigate to the record edit form (5.6ms) [L#217] * test Tagged search supports raw queries [L#143] * test Tagged search supports raw queries (27.6ms) [L#143] * test Tagged search supports filters [L#168] * test Tagged search supports filters (163.5ms) [L#168] * test Collection does not show wishlist records [L#39] * test Collection does not show wishlist records (172.8ms) [L#39] Finished in 1.6 seconds (0.2s async, 1.4s sync) Top 5 slowest (1.0s), 60.4% of total time: * test Collection shows purchased records (first page only) (MusicLibraryWeb.CollectionLive.IndexTest) (485.0ms) [test/music_library_web/live/collection_live/index_test.exs:50] * test Collection does not show wishlist records (MusicLibraryWeb.CollectionLive.IndexTest) (172.8ms) [test/music_library_web/live/collection_live/index_test.exs:39] * test Tagged search supports filters (MusicLibraryWeb.CollectionLive.IndexTest) (163.5ms) [test/music_library_web/live/collection_live/index_test.exs:168] * test Wishlist can purchase a record and move it to the collection (MusicLibraryWeb.WishlistLive.IndexTest) (107.1ms) [test/music_library_web/live/wishlist_live/index_test.exs:14] * test resize/1 it resizes to the desired size (MusicLibrary.Records.CoverTest) (98.1ms) [test/music_library/records/cover_test.exs:7] 1 doctest, 85 tests, 0 failures