aboutsummaryrefslogtreecommitdiff
path: root/tests/test-music-config--art-favicon-url.el
blob: 9e7b92f8a57f31e9efd6ddfd60281f434b0056ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
;;; test-music-config--art-favicon-url.el --- Tests for stream favicon URL -*- coding: utf-8; lexical-binding: t; -*-
;;
;; Author: Craig Jennings <c@cjennings.net>
;;
;;; Commentary:
;; Unit tests for `cj/music-art--favicon-url': the direct favicon image URL for
;; a url track, taken from the #RADIOBROWSERFAVICON captured at station creation.
;; A station with only a UUID resolves its favicon via a separate byuuid lookup
;; (done in the impure orchestrator), so this pure helper returns nil there.
;;
;;; 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-favicon-url-normal-captured ()
  "Normal: a captured #RADIOBROWSERFAVICON is returned directly."
  (let ((track (emms-track 'url "https://fav.somafm.com/gs"))
        (entries '(("https://fav.somafm.com/gs"
                    :name "GS" :uuid "u1" :favicon "https://cdn.example/gs.png"))))
    (should (string= (cj/music-art--favicon-url track entries)
                     "https://cdn.example/gs.png"))))

(ert-deftest test-music-config--art-favicon-url-boundary-uuid-only ()
  "Boundary: a station with a UUID but no captured favicon returns nil
\(the byuuid lookup is the orchestrator's job)."
  (let ((track (emms-track 'url "https://fav2.example.net/live"))
        (entries '(("https://fav2.example.net/live"
                    :name "X" :uuid "u2" :favicon nil))))
    (should (null (cj/music-art--favicon-url track entries)))))

(ert-deftest test-music-config--art-favicon-url-boundary-empty-favicon ()
  "Boundary: an empty-string favicon is treated as absent."
  (let ((track (emms-track 'url "https://fav3.example.net/live"))
        (entries '(("https://fav3.example.net/live" :name "X" :uuid "u3" :favicon ""))))
    (should (null (cj/music-art--favicon-url track entries)))))

(ert-deftest test-music-config--art-favicon-url-error-file-track ()
  "Error: a file track has no stream favicon URL."
  (let ((track (emms-track 'file "/music/x.flac")))
    (should (null (cj/music-art--favicon-url track nil)))))

(ert-deftest test-music-config--art-favicon-url-normal-track-property ()
  "Normal: a queued lookup station carries its favicon as a track property."
  (let ((track (emms-track 'url "https://fp.example.net/live")))
    (emms-track-set track 'radio-favicon "https://fp.example.net/icon.png")
    (should (string= (cj/music-art--favicon-url track nil)
                     "https://fp.example.net/icon.png"))))

(ert-deftest test-music-config--art-favicon-url-normal-property-beats-entries ()
  "Normal: the track property wins over a conflicting entries favicon."
  (let* ((url "https://fp2.example.net/live")
         (track (emms-track 'url url))
         (entries (list (list url :name "X" :uuid nil
                              :favicon "https://entries.example/e.png"))))
    (emms-track-set track 'radio-favicon "https://prop.example/p.png")
    (should (string= (cj/music-art--favicon-url track entries)
                     "https://prop.example/p.png"))))

(provide 'test-music-config--art-favicon-url)
;;; test-music-config--art-favicon-url.el ends here