aboutsummaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/mastodon-auth--test.el47
-rw-r--r--lisp/mastodon-auth.el23
-rw-r--r--lisp/mastodon-toot.el1
3 files changed, 64 insertions, 7 deletions
diff --git a/lisp/mastodon-auth--test.el b/lisp/mastodon-auth--test.el
new file mode 100644
index 0000000..8082536
--- /dev/null
+++ b/lisp/mastodon-auth--test.el
@@ -0,0 +1,47 @@
+;;; mastodon-auth--test.el --- Tests for mastodon-auth -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Ian Eure
+
+;; Author: Ian Eure <ian@retrospec.tv>
+;; Version: 0.9.0
+;; Homepage: https://github.com/jdenen/mastodon.el
+;; Package-Requires: ((emacs "24.4"))
+
+;; This file is not part of GNU Emacs.
+
+;; This file is part of mastodon.el.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; mastodon-auth--test.el provides ERT tests for mastodon-auth.el
+
+;;; Code:
+
+(require 'ert)
+
+(ert-deftest mastodon-auth--handle-token-response--good ()
+ (should (string= "foo" (mastodon-auth--handle-token-response '(:access_token "foo" :token_type "Bearer" :scope "read write follow" :created_at 0)))))
+
+(ert-deftest mastodon-auth--handle-token-response--unknown ()
+ :expected-result :failed
+ (mastodon-auth--handle-token-response '(:herp "derp")))
+
+(ert-deftest mastodon-auth--handle-token-response--failure ()
+ :expected-result :failed
+ (mastodon-auth--handle-token-response '(:error "invalid_grant" :error_description "The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.")))
+
+(provide 'mastodon-auth--test)
+;;; mastodon-auth--test.el ends here
diff --git a/lisp/mastodon-auth.el b/lisp/mastodon-auth.el
index 231bb70..cfe89b5 100644
--- a/lisp/mastodon-auth.el
+++ b/lisp/mastodon-auth.el
@@ -124,13 +124,22 @@ Reads and/or stores secres in `MASTODON-AUTH-SOURCE-FILE'."
"Return the access token to use with the current `mastodon-instance-url'.
Generate token and set if none known yet."
- (let ((token
- (cdr (assoc mastodon-instance-url mastodon-auth--token-alist))))
- (unless token
- (let ((json (mastodon-auth--get-token)))
- (setq token (plist-get json :access_token))
- (push (cons mastodon-instance-url token) mastodon-auth--token-alist)))
- token))
+ (if-let ((token (cdr (assoc mastodon-instance-url mastodon-auth--token-alist))))
+ token
+
+ (mastodon-auth--handle-token-response (mastodon-auth--get-token))))
+
+(defun mastodon-auth--handle-token-response (response)
+ (pcase response
+ ((and (let token (plist-get response :access_token))
+ (guard token))
+ (cdar (push (cons mastodon-instance-url token)
+ mastodon-auth--token-alist)))
+
+ (`(:error ,class :error_description ,error)
+ (error "mastodon-auth--access-token: %s: %s" class error))
+
+ (_ (error "Unknown response from mastodon-auth--get-token!"))))
(defun mastodon-auth--get-account-name ()
"Request user credentials and return an account name."
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index 14264dc..e339c4d 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -401,6 +401,7 @@ If REPLY-TO-ID is provided, set the MASTODON-TOOT--REPLY-TO-ID var."
(when (not buffer-exists)
(mastodon-toot--display-docs-and-status-fields)
(mastodon-toot--setup-as-reply reply-to-user reply-to-id))
+ (make-local-variable 'after-change-functions)
(push #'mastodon-toot--update-status-fields after-change-functions)
(mastodon-toot--update-status-fields)
(mastodon-toot-mode t)))