blob: 894dbfdd3884b44aa0a19cf9f9cb1c54e4ab39ca (
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
91
92
93
|
;;; test-telega-config--docker-pin.el --- Tests for the telega docker image pin -*- lexical-binding: t; -*-
;;; Commentary:
;; Tests for pinning the telega-server container image.
;;
;; telega infers its image from `telega-tdlib-min-version' and only pins to a
;; version tag when min and max versions are equal and the version ends in
;; ".0". This config has min "1.8.64" and max nil, so the inference always
;; falls through to "zevlg/telega-server:latest" -- a moving tag that can
;; swap the server out from under a fixed elisp version without notice.
;;; Code:
(require 'ert)
(require 'cl-lib)
(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
(require 'telega-config)
;; -- cj/--telega-docker-pinned-image -----------------------------------------
(ert-deftest test-telega-config-pin-returns-configured-reference ()
"Normal: a configured pin is returned verbatim."
(let ((cj/telega-docker-image "zevlg/telega-server@sha256:abc123"))
(should (equal (cj/--telega-docker-pinned-image)
"zevlg/telega-server@sha256:abc123"))))
(ert-deftest test-telega-config-pin-nil-when-unset ()
"Boundary: no pin returns nil so telega's own inference stays in charge."
(let ((cj/telega-docker-image nil))
(should-not (cj/--telega-docker-pinned-image))))
(ert-deftest test-telega-config-pin-nil-for-empty-string ()
"Boundary: an empty or whitespace pin is not a reference.
An empty string would otherwise reach the docker command line as a blank
image argument, which fails in a way that looks unrelated to this setting."
(let ((cj/telega-docker-image ""))
(should-not (cj/--telega-docker-pinned-image)))
(let ((cj/telega-docker-image " "))
(should-not (cj/--telega-docker-pinned-image))))
(ert-deftest test-telega-config-pin-nil-for-non-string ()
"Error: a non-string pin is ignored rather than passed to the shell."
(let ((cj/telega-docker-image 'latest))
(should-not (cj/--telega-docker-pinned-image)))
(let ((cj/telega-docker-image 42))
(should-not (cj/--telega-docker-pinned-image))))
(ert-deftest test-telega-config-pin-trims-surrounding-whitespace ()
"Boundary: a pin with stray whitespace is trimmed, not rejected.
A trailing newline is easy to introduce when pasting a digest from docker."
(let ((cj/telega-docker-image " zevlg/telega-server@sha256:abc123\n"))
(should (equal (cj/--telega-docker-pinned-image)
"zevlg/telega-server@sha256:abc123"))))
;; -- cj/--telega-docker-image-name (the advice) ------------------------------
(ert-deftest test-telega-config-image-advice-prefers-the-pin ()
"Normal: with a pin set, the advice returns it instead of calling telega."
(let ((cj/telega-docker-image "zevlg/telega-server@sha256:abc123")
(called nil))
(should (equal (cj/--telega-docker-image-name
(lambda () (setq called t) "zevlg/telega-server:latest"))
"zevlg/telega-server@sha256:abc123"))
(should-not called)))
(ert-deftest test-telega-config-image-advice-delegates-without-a-pin ()
"Boundary: with no pin, telega's own inference is used unchanged.
Removing the pin must restore stock behavior rather than break the image
name, so this stays a reversible setting."
(let ((cj/telega-docker-image nil))
(should (equal (cj/--telega-docker-image-name
(lambda () "zevlg/telega-server:latest"))
"zevlg/telega-server:latest"))))
(ert-deftest test-telega-config-image-advice-is-named-and-removable ()
"Normal: the advice is a named function so it can be removed by reference."
(should (fboundp 'cj/--telega-docker-image-name)))
(ert-deftest test-telega-config-pin-default-is-a-digest-reference ()
"Normal: the shipped default pins by digest, not by a floating tag.
A tag pin (:latest, or even a version tag upstream can re-push) still
moves; a digest names one immutable image.
Reads the defcustom's standard value rather than the live variable, so
customizing the pin (including to nil, handing the choice back to telega)
is not a test failure -- only changing the shipped default is."
(let ((default (eval (car (get 'cj/telega-docker-image 'standard-value)) t)))
(should (stringp default))
(should (string-match-p "@sha256:[0-9a-f]\\{64\\}\\'" default))))
(provide 'test-telega-config--docker-pin)
;;; test-telega-config--docker-pin.el ends here
|