aboutsummaryrefslogtreecommitdiff
path: root/tests/test-music-config--art-cache-key.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-music-config--art-cache-key.el')
-rw-r--r--tests/test-music-config--art-cache-key.el69
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/test-music-config--art-cache-key.el b/tests/test-music-config--art-cache-key.el
new file mode 100644
index 00000000..bc869808
--- /dev/null
+++ b/tests/test-music-config--art-cache-key.el
@@ -0,0 +1,69 @@
+;;; test-music-config--art-cache-key.el --- Tests for cover-art cache key -*- coding: utf-8; lexical-binding: t; -*-
+;;
+;; Author: Craig Jennings <c@cjennings.net>
+;;
+;;; Commentary:
+;; Unit tests for `cj/music-art--cache-key': the stable cache-file basename for
+;; a track. A url with a known #RADIOBROWSERUUID keys on the uuid (so the same
+;; station shares one cached logo); any other url keys on a hash of its address;
+;; a file keys on a hash of its path.
+;;
+;;; Code:
+
+(require 'ert)
+
+(defvar-keymap cj/custom-keymap :doc "Stub keymap for testing")
+
+(let ((emms-dir (car (file-expand-wildcards
+ (expand-file-name "elpa/emms-*" user-emacs-directory)))))
+ (when emms-dir (add-to-list 'load-path emms-dir)))
+
+(require 'emms)
+(require 'music-config)
+
+(ert-deftest test-music-config--art-cache-key-normal-uuid ()
+ "Normal: a url with a UUID in the entries keys on the UUID."
+ (let ((track (emms-track 'url "https://ck.somafm.com/gs"))
+ (entries '(("https://ck.somafm.com/gs" :name "GS" :uuid "uuid-42" :favicon nil))))
+ (should (string= (cj/music-art--cache-key track entries) "uuid-42"))))
+
+(ert-deftest test-music-config--art-cache-key-boundary-url-no-uuid ()
+ "Boundary: a url with no UUID keys on a stable url- hash, not the raw URL."
+ (let* ((url "https://ck2.example.net/live")
+ (track (emms-track 'url url))
+ (key (cj/music-art--cache-key track nil)))
+ (should (string-prefix-p "url-" key))
+ (should (string= key (concat "url-" (sha1 url))))))
+
+(ert-deftest test-music-config--art-cache-key-normal-file ()
+ "Normal: a file keys on a file- hash of its path."
+ (let* ((path "/music/Kind of Blue/01.flac")
+ (track (emms-track 'file path)))
+ (should (string= (cj/music-art--cache-key track nil)
+ (concat "file-" (sha1 path))))))
+
+(ert-deftest test-music-config--art-cache-key-boundary-empty-uuid-falls-to-hash ()
+ "Boundary: an empty-string UUID is treated as absent, so the url hashes."
+ (let* ((url "https://ck3.example.net/x")
+ (track (emms-track 'url url))
+ (entries (list (list url :name "X" :uuid "" :favicon nil))))
+ (should (string= (cj/music-art--cache-key track entries)
+ (concat "url-" (sha1 url))))))
+
+(ert-deftest test-music-config--art-cache-key-normal-track-property ()
+ "Normal: a queued lookup station carries its uuid as a track property and
+needs no entries at all."
+ (let ((track (emms-track 'url "https://ck4.example.net/live")))
+ (emms-track-set track 'radio-uuid "prop-uuid")
+ (should (string= (cj/music-art--cache-key track nil) "prop-uuid"))))
+
+(ert-deftest test-music-config--art-cache-key-normal-property-beats-entries ()
+ "Normal: the track property wins over a conflicting entries uuid."
+ (let* ((url "https://ck5.example.net/live")
+ (track (emms-track 'url url))
+ (entries (list (list url :name "X" :uuid "entries-uuid" :favicon nil))))
+ (emms-track-set track 'radio-uuid "prop-uuid")
+ (should (string= (cj/music-art--cache-key track entries) "prop-uuid"))))
+
+(provide 'test-music-config--art-cache-key)
+;;; test-music-config--art-cache-key.el ends here