aboutsummaryrefslogtreecommitdiff
path: root/test/mastodon-auth-tests.el
diff options
context:
space:
mode:
Diffstat (limited to 'test/mastodon-auth-tests.el')
-rw-r--r--test/mastodon-auth-tests.el133
1 files changed, 86 insertions, 47 deletions
diff --git a/test/mastodon-auth-tests.el b/test/mastodon-auth-tests.el
index 69c34a4..6a090b7 100644
--- a/test/mastodon-auth-tests.el
+++ b/test/mastodon-auth-tests.el
@@ -1,66 +1,105 @@
+;;; mastodon-auth-test.el --- Tests for mastodon-auth.el -*- lexical-binding: nil -*-
+
(require 'el-mock)
-(ert-deftest generate-token--no-storing-credentials ()
+(ert-deftest mastodon-auth--handle-token-response--good ()
+ "Should extract the access token from a good response."
+ (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 ()
+ "Should throw an error when the response is unparsable."
+ (should
+ (equal
+ '(error "Unknown response from mastodon-auth--get-token!")
+ (condition-case error
+ (progn
+ (mastodon-auth--handle-token-response '(:herp "derp"))
+ nil)
+ (t error)))))
+
+(ert-deftest mastodon-auth--handle-token-response--failure ()
+ "Should throw an error when the response indicates an error."
+ (let ((error-message "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."))
+ (should
+ (equal
+ `(error ,(format "Mastodon-auth--access-token: invalid_grant: %s" error-message))
+ (condition-case error
+ (mastodon-auth--handle-token-response
+ `(: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))))
+ (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 generate-token--storing-credentials ()
+(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))))
+ (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 get-token ()
+(ert-deftest mastodon-auth--get-token ()
"Should generate token and return JSON response."
(with-temp-buffer
(with-mock
- (mock (mastodon-auth--generate-token) => (progn
- (insert "\n\n{\"access_token\":\"abcdefg\"}")
- (current-buffer)))
- (should (equal (mastodon-auth--get-token) '(:access_token "abcdefg"))))))
+ (mock (mastodon-auth--generate-token) => (progn
+ (insert "\n\n{\"access_token\":\"abcdefg\"}")
+ (current-buffer)))
+ (should
+ (equal (mastodon-auth--get-token)
+ '(:access_token "abcdefg"))))))
-(ert-deftest access-token-found ()
+(ert-deftest mastodon-auth--access-token-found ()
"Should return value in `mastodon-auth--token-alist' if found."
(let ((mastodon-instance-url "https://instance.url")
(mastodon-auth--token-alist '(("https://instance.url" . "foobar")) ))
- (should (string= (mastodon-auth--access-token) "foobar"))))
+ (should
+ (string= (mastodon-auth--access-token) "foobar"))))
-(ert-deftest access-token-2 ()
+(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-auth--token nil))
+ (mastodon-auth--token-alist nil))
(with-mock
- (mock (mastodon-auth--get-token) => '(:access_token "foobaz"))
- (should (string= (mastodon-auth--access-token) "foobaz"))
- (should (equal mastodon-auth--token-alist '(("https://instance.url" . "foobaz")))))))
+ (mock (mastodon-auth--get-token) => '(:access_token "foobaz"))
+ (should
+ (string= (mastodon-auth--access-token)
+ "foobaz"))
+ (should
+ (equal mastodon-auth--token-alist
+ '(("https://instance.url" . "foobaz")))))))