blob: ffb0a47773181228da35060b64260ba279c15993 (
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
;;; test-music-config--save-helpers.el --- save default-name + directory tests -*- coding: utf-8; lexical-binding: t; -*-
;;
;; Author: Craig Jennings <c@cjennings.net>
;;
;;; Commentary:
;; The pure helpers behind the queue-first save flow: which name the save
;; prompt pre-fills (`cj/music--save-default-name') and which directory the
;; file lands in (`cj/music--save-directory'). An all-stream queue saves into
;; the radio playlist home (`cj/music-radio-save-dir'); anything else saves
;; into `cj/music-m3u-root'.
;;; Code:
(require 'ert)
;; Stub dependencies before loading the module.
(defvar cj/custom-keymap (make-sparse-keymap)
"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)
(declare-function cj/music--save-default-name "music-config" (tracks file entries))
(declare-function cj/music--save-directory "music-config" (tracks))
(declare-function cj/music-radio--station-track "music-config" (st))
;;; --------------------------- save-default-name -------------------------------
(ert-deftest test-music-save-default-name-normal-associated-file-wins ()
"Normal: an associated playlist file names the save, station or not."
(let ((tr (cj/music-radio--station-track '(:name "S" :url "https://s.example/x"))))
(should (equal (cj/music--save-default-name (list tr) "/pl/jazz.m3u" nil)
"jazz"))))
(ert-deftest test-music-save-default-name-normal-station-title ()
"Normal: with no file, the first url track's station name pre-fills."
(let ((tr (cj/music-radio--station-track
'(:name "Groove Salad" :url "https://gs.example/x"))))
(should (equal (cj/music--save-default-name (list tr) nil nil)
"Groove Salad"))))
(ert-deftest test-music-save-default-name-normal-first-url-track-wins ()
"Normal: a file track ahead of the station doesn't block the station name;
the first URL track with a name wins."
(let ((f (emms-track 'file "/music/a.flac"))
(tr (cj/music-radio--station-track
'(:name "Second Pick" :url "https://sp.example/x"))))
(should (equal (cj/music--save-default-name (list f tr) nil nil)
"Second Pick"))))
(ert-deftest test-music-save-default-name-normal-entries-fallback ()
"Normal: a propertyless url track resolves its name from ENTRIES."
(let* ((url "https://legacy.example/s")
(tr (emms-track 'url url))
(entries (list (list url :name "Legacy FM" :uuid nil :favicon nil))))
(should (equal (cj/music--save-default-name (list tr) nil entries)
"Legacy FM"))))
(ert-deftest test-music-save-default-name-boundary-no-candidates-nil ()
"Boundary: no file, no url tracks -> nil (caller falls back to a timestamp)."
(should-not (cj/music--save-default-name
(list (emms-track 'file "/music/a.flac")) nil nil))
(should-not (cj/music--save-default-name nil nil nil)))
;;; ---------------------------- save-directory ---------------------------------
(ert-deftest test-music-save-directory-normal-all-streams-radio-dir ()
"Normal: an all-stream queue saves into the radio playlist dir."
(let ((u1 (emms-track 'url "https://a.example/1"))
(u2 (emms-track 'url "https://b.example/2")))
(should (equal (cj/music--save-directory (list u1 u2))
cj/music-radio-save-dir))))
(ert-deftest test-music-save-directory-normal-mixed-goes-to-m3u-root ()
"Normal: any non-stream track routes the save to the music playlist root."
(let ((u (emms-track 'url "https://a.example/1"))
(f (emms-track 'file "/music/a.flac")))
(should (equal (cj/music--save-directory (list u f))
cj/music-m3u-root))))
(ert-deftest test-music-save-directory-boundary-empty-goes-to-m3u-root ()
"Boundary: an empty queue defaults to the music playlist root."
(should (equal (cj/music--save-directory nil) cj/music-m3u-root)))
(provide 'test-music-config--save-helpers)
;;; test-music-config--save-helpers.el ends here
|