summaryrefslogtreecommitdiff
path: root/tests/test-wttrin-integration.el
blob: a79d7b353deeaa79bc567bc87d8b3dc151d0bfaa (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
;;; test-wttrin-integration.el --- Integration tests for wttrin package loading -*- lexical-binding: t; -*-

;; Copyright (C) 2024 Craig Jennings

;;; Commentary:
;; Integration tests to verify wttrin package loads correctly and
;; key functionality is available.

;;; Code:

(require 'ert)

;;; Package Loading Tests

(ert-deftest test-wttrin-integration-package-loads ()
  "Test that wttrin package loads without errors."
  ;; This test runs AFTER wttrin.el is loaded by the test runner
  ;; If we got here, the package loaded successfully
  (should t))

(ert-deftest test-wttrin-integration-provide-statement ()
  "Test that wttrin feature is provided."
  (should (featurep 'wttrin)))

;;; Dependency Tests

(ert-deftest test-wttrin-integration-xterm-color-available ()
  "Test that xterm-color dependency is available.
This is a REQUIRED dependency - wttrin cannot function without it."
  (should (featurep 'xterm-color)))

(ert-deftest test-wttrin-integration-url-available ()
  "Test that url library is available (built-in)."
  (should (require 'url nil t)))

;;; Function Availability Tests

(ert-deftest test-wttrin-integration-main-command-defined ()
  "Test that main wttrin command is defined."
  (should (fboundp 'wttrin)))

(ert-deftest test-wttrin-integration-main-command-is-interactive ()
  "Test that main wttrin command is interactive."
  (should (commandp 'wttrin)))

(ert-deftest test-wttrin-integration-wttrin-mode-defined ()
  "Test that wttrin-mode is defined."
  (should (fboundp 'wttrin-mode)))

(ert-deftest test-wttrin-integration-mode-line-mode-defined ()
  "Test that wttrin-mode-line-mode is defined."
  (should (fboundp 'wttrin-mode-line-mode)))

(ert-deftest test-wttrin-integration-clear-cache-defined ()
  "Test that cache clear command is defined."
  (should (fboundp 'wttrin-clear-cache)))

;;; Configuration Variable Tests

(ert-deftest test-wttrin-integration-defcustoms-exist ()
  "Test that key defcustom variables are defined."
  (should (boundp 'wttrin-default-locations))
  (should (boundp 'wttrin-unit-system))
  (should (boundp 'wttrin-cache-ttl))
  (should (boundp 'wttrin-cache-max-entries))
  (should (boundp 'wttrin-mode-line-favorite-location))
  (should (boundp 'wttrin-mode-line-refresh-interval))
  (should (boundp 'wttrin-mode-line-startup-delay)))

(ert-deftest test-wttrin-integration-internal-vars-exist ()
  "Test that internal variables are defined."
  (should (boundp 'wttrin--cache))
  (should (boundp 'wttrin--mode-line-map))
  (should (boundp 'wttrin-mode-line-string)))

;;; Keymap Tests

(ert-deftest test-wttrin-integration-wttrin-mode-map-exists ()
  "Test that wttrin-mode keymap exists."
  (should (boundp 'wttrin-mode-map))
  (should (keymapp wttrin-mode-map)))

(ert-deftest test-wttrin-integration-mode-line-map-exists ()
  "Test that mode-line keymap exists."
  (should (boundp 'wttrin--mode-line-map))
  (should (keymapp wttrin--mode-line-map)))

;;; Package Metadata Tests

(ert-deftest test-wttrin-integration-package-version ()
  "Test that package has version information."
  ;; Check if package-get-version would work (not calling it as it's not always available)
  ;; Just verify the Version header exists in the file
  (let ((version-line (with-temp-buffer
                        (insert-file-contents "wttrin.el" nil 0 500)
                        (goto-char (point-min))
                        (re-search-forward "^;; Version: \\([0-9.]+\\)" nil t)
                        (match-string 1))))
    (should version-line)
    (should (string-match-p "^[0-9]+\\.[0-9]+\\.[0-9]+$" version-line))))

;;; Autoload Tests

(ert-deftest test-wttrin-integration-autoload-cookies ()
  "Test that key functions have autoload cookies."
  ;; Verify autoload cookies exist in source (they become effective after package install)
  (let ((source (with-temp-buffer
                  (insert-file-contents "wttrin.el")
                  (buffer-string))))
    ;; Main command should have autoload
    (should (string-match-p ";;;###autoload\n(defun wttrin" source))
    ;; Mode-line mode should have autoload
    (should (string-match-p ";;;###autoload\n(define-minor-mode wttrin-mode-line-mode" source))))

;;; Smoke Test - Basic Functionality

(ert-deftest test-wttrin-integration-url-building ()
  "Test that URL building works correctly."
  (let ((wttrin-unit-system "m"))
    (should (string= "https://wttr.in/Paris?mA"
                     (wttrin--build-url "Paris")))))

(ert-deftest test-wttrin-integration-cache-operations ()
  "Test that cache operations don't error."
  ;; Clear cache
  (wttrin-clear-cache)
  (should (= 0 (hash-table-count wttrin--cache)))

  ;; Add an entry
  (puthash "test-location" (cons (float-time) "test-data") wttrin--cache)
  (should (= 1 (hash-table-count wttrin--cache)))

  ;; Clear again
  (wttrin-clear-cache)
  (should (= 0 (hash-table-count wttrin--cache))))

(ert-deftest test-wttrin-integration-mode-line-display ()
  "Test that mode-line display function doesn't error."
  (let ((wttrin-mode-line-favorite-location "Test, CA")
        (wttrin--mode-line-tooltip-data "Test weather"))
    ;; Should not error (function returns nil but sets wttrin-mode-line-string)
    (wttrin--mode-line-update-display "☀️")
    ;; Should set the mode-line string
    (should wttrin-mode-line-string)
    (should (stringp wttrin-mode-line-string))))

(provide 'test-wttrin-integration)
;;; test-wttrin-integration.el ends here