aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/ert-helper.el3
-rw-r--r--test/mastodon-auth-tests.el52
-rw-r--r--test/mastodon-client-tests.el101
3 files changed, 98 insertions, 58 deletions
diff --git a/test/ert-helper.el b/test/ert-helper.el
index a6d6692..f65649f 100644
--- a/test/ert-helper.el
+++ b/test/ert-helper.el
@@ -1,3 +1,4 @@
+(load-file "lisp/mastodon.el")
(load-file "lisp/mastodon-search.el")
(load-file "lisp/mastodon-async.el")
(load-file "lisp/mastodon-http.el")
@@ -7,8 +8,8 @@
(load-file "lisp/mastodon-inspect.el")
(load-file "lisp/mastodon-media.el")
(load-file "lisp/mastodon-notifications.el")
+(load-file "lisp/mastodon.el")
(load-file "lisp/mastodon-profile.el")
(load-file "lisp/mastodon-search.el")
(load-file "lisp/mastodon-tl.el")
(load-file "lisp/mastodon-toot.el")
-(load-file "lisp/mastodon.el")
diff --git a/test/mastodon-auth-tests.el b/test/mastodon-auth-tests.el
index 6a090b7..2d9d6df 100644
--- a/test/mastodon-auth-tests.el
+++ b/test/mastodon-auth-tests.el
@@ -32,47 +32,6 @@
`(:error "invalid_grant" :error_description ,error-message))
(t error))))))
-(ert-deftest mastodon-auth--generate-token--no-storing-credentials ()
- "Should make `mastdon-http--post' request to generate auth token."
- (with-mock
- (let ((mastodon-auth-source-file "")
- (mastodon-instance-url "https://instance.url"))
- (mock (mastodon-client) => '(:client_id "id" :client_secret "secret"))
- (mock (read-string "Email: " user-mail-address) => "foo@bar.com")
- (mock (read-passwd "Password: ") => "password")
- (mock (mastodon-http--post "https://instance.url/oauth/token"
- '(("client_id" . "id")
- ("client_secret" . "secret")
- ("grant_type" . "password")
- ("username" . "foo@bar.com")
- ("password" . "password")
- ("scope" . "read write follow"))
- nil
- :unauthenticated))
- (mastodon-auth--generate-token))))
-
-(ert-deftest mastodon-auth--generate-token--storing-credentials ()
- "Should make `mastdon-http--post' request to generate auth token."
- (with-mock
- (let ((mastodon-auth-source-file "~/.authinfo")
- (mastodon-instance-url "https://instance.url"))
- (mock (mastodon-client) => '(:client_id "id" :client_secret "secret"))
- (mock (auth-source-search :create t
- :host "https://instance.url"
- :port 443
- :require '(:user :secret))
- => '((:user "foo@bar.com" :secret (lambda () "password"))))
- (mock (mastodon-http--post "https://instance.url/oauth/token"
- '(("client_id" . "id")
- ("client_secret" . "secret")
- ("grant_type" . "password")
- ("username" . "foo@bar.com")
- ("password" . "password")
- ("scope" . "read write follow"))
- nil
- :unauthenticated))
- (mastodon-auth--generate-token))))
-
(ert-deftest mastodon-auth--get-token ()
"Should generate token and return JSON response."
(with-temp-buffer
@@ -94,12 +53,23 @@
(ert-deftest mastodon-auth--access-token-not-found ()
"Should set and return `mastodon-auth--token' if nil."
(let ((mastodon-instance-url "https://instance.url")
+ (mastodon-active-user "user")
(mastodon-auth--token-alist nil))
(with-mock
(mock (mastodon-auth--get-token) => '(:access_token "foobaz"))
+ (mock (mastodon-client--store-access-token "foobaz"))
+ (stub mastodon-client--make-user-active)
(should
(string= (mastodon-auth--access-token)
"foobaz"))
(should
(equal mastodon-auth--token-alist
'(("https://instance.url" . "foobaz")))))))
+
+(ert-deftest mastodon-auth--user-unaware ()
+ (let ((mastodon-instance-url "https://instance.url")
+ (mastodon-active-user nil)
+ (mastodon-auth--token-alist nil))
+ (with-mock
+ (mock (mastodon-client--active-user))
+ (should-error (mastodon-auth--access-token)))))
diff --git a/test/mastodon-client-tests.el b/test/mastodon-client-tests.el
index 9123286..b302ed6 100644
--- a/test/mastodon-client-tests.el
+++ b/test/mastodon-client-tests.el
@@ -10,7 +10,7 @@
'(("client_name" . "mastodon.el")
("redirect_uris" . "urn:ietf:wg:oauth:2.0:oob")
("scopes" . "read write follow")
- ("website" . "https://github.com/jdenen/mastodon.el"))
+ ("website" . "https://codeberg.org/martianh/mastodon.el"))
nil
:unauthenticated))
(mastodon-client--register)))
@@ -24,25 +24,22 @@
(current-buffer)))
(should (equal (mastodon-client--fetch) '(:foo "bar"))))))
-(ert-deftest mastodon-client--store-1 ()
- "Should return the client plist."
+(ert-deftest mastodon-client--store ()
+ "Test the value `mastodon-client--store' returns/stores."
(let ((mastodon-instance-url "http://mastodon.example")
(plist '(:client_id "id" :client_secret "secret")))
(with-mock
(mock (mastodon-client--token-file) => "stubfile.plstore")
- (mock (mastodon-client--fetch) => '(:client_id "id" :client_secret "secret"))
- (let* ((plstore (plstore-open "stubfile.plstore"))
- (client (cdr (plstore-get plstore "mastodon-http://mastodon.example"))))
- (should (equal (mastodon-client--store) plist))))))
-
-(ert-deftest mastodon-client--store-2 ()
- "Should store client in `mastodon-client--token-file'."
- (let* ((mastodon-instance-url "http://mastodon.example")
- (plstore (plstore-open "stubfile.plstore"))
- (client (cdr (plstore-get plstore "mastodon-http://mastodon.example"))))
- (plstore-close plstore)
- (should (string= (plist-get client :client_id) "id"))
- (should (string= (plist-get client :client_secret) "secret"))))
+ (mock (mastodon-client--fetch) => plist)
+ (should (equal (mastodon-client--store) plist)))
+ (let* ((plstore (plstore-open "stubfile.plstore"))
+ (client (mastodon-client--remove-key-from-plstore
+ (plstore-get plstore "mastodon-http://mastodon.example"))))
+ (plstore-close plstore)
+ (should (equal client plist))
+ ;; clean up - delete the stubfile
+ (delete-file "stubfile.plstore"))))
+
(ert-deftest mastodon-client--read-finds-match ()
"Should return mastodon client from `mastodon-token-file' if it exists."
@@ -52,6 +49,27 @@
(should (equal (mastodon-client--read)
'(:client_id "id2" :client_secret "secret2"))))))
+(ert-deftest mastodon-client--general-read-finds-match ()
+ (with-mock
+ (mock (mastodon-client--token-file) => "fixture/client.plstore")
+ (should (equal (mastodon-client--general-read "user-test8000@mastodon.example")
+ '(:username "test8000@mastodon.example"
+ :instance "http://mastodon.example"
+ :client_id "id2" :client_secret "secret2"
+ :access_token "token2")))))
+
+(ert-deftest mastodon-client--general-read-finds-no-match ()
+ (with-mock
+ (mock (mastodon-client--token-file) => "fixture/client.plstore")
+ (should (equal (mastodon-client--general-read "nonexistant-key")
+ nil))))
+
+(ert-deftest mastodon-client--general-read-empty-store ()
+ (with-mock
+ (mock (mastodon-client--token-file) => "fixture/empty.plstore")
+ (should (equal (mastodon-client--general-read "something")
+ nil))))
+
(ert-deftest mastodon-client--read-finds-no-match ()
"Should return mastodon client from `mastodon-token-file' if it exists."
(let ((mastodon-instance-url "http://mastodon.social"))
@@ -103,3 +121,54 @@
(should (equal (mastodon-client) '(:client_id "foo" :client_secret "baz")))
(should (equal mastodon-client--client-details-alist
'(("http://mastodon.example" :client_id "foo" :client_secret "baz")))))))
+
+(ert-deftest mastodon-client--form-user-from-vars ()
+ (let ((mastodon-active-user "test9000")
+ (mastodon-instance-url "https://mastodon.example"))
+ (should
+ (equal (mastodon-client--form-user-from-vars)
+ "test9000@mastodon.example"))))
+
+(ert-deftest mastodon-client--current-user-active-p ()
+ (let ((mastodon-active-user "test9000")
+ (mastodon-instance-url "https://mastodon.example"))
+ ;; when the current user /is/ the active user
+ (with-mock
+ (mock (mastodon-client--general-read "active-user") => '(:username "test9000@mastodon.example" :client_id "id1"))
+ (should (equal (mastodon-client--current-user-active-p)
+ '(:username "test9000@mastodon.example" :client_id "id1"))))
+ ;; when the current user is /not/ the active user
+ (with-mock
+ (mock (mastodon-client--general-read "active-user") => '(:username "user@other.example" :client_id "id1"))
+ (should (null (mastodon-client--current-user-active-p))))))
+
+(ert-deftest mastodon-client--store-access-token ()
+ (let ((mastodon-instance-url "https://mastodon.example")
+ (mastodon-active-user "test8000")
+ (user-details
+ '(:username "test8000@mastodon.example"
+ :instance "https://mastodon.example"
+ :client_id "id" :client_secret "secret"
+ :access_token "token")))
+ ;; test if mastodon-client--store-access-token /returns/ right
+ ;; value
+ (with-mock
+ (mock (mastodon-client) => '(:client_id "id" :client_secret "secret"))
+ (mock (mastodon-client--token-file) => "stubfile.plstore")
+ (should (equal (mastodon-client--store-access-token "token")
+ user-details)))
+ ;; test if mastodon-client--store-access-token /stores/ right value
+ (with-mock
+ (mock (mastodon-client--token-file) => "stubfile.plstore")
+ (should (equal (mastodon-client--general-read
+ "user-test8000@mastodon.example")
+ user-details)))
+ (delete-file "stubfile.plstore")))
+
+(ert-deftest mastodon-client--make-user-active ()
+ (let ((user-details '(:username "test@mastodon.example")))
+ (with-mock
+ (mock (mastodon-client--token-file) => "stubfile.plstore")
+ (mastodon-client--make-user-active user-details)
+ (should (equal (mastodon-client--general-read "active-user")
+ user-details)))))