git-auto-commit-mode/tests/git-auto-commit-mode-tests.el
Tom Willemse 50cb58b11d Make git a little quieter
On my system whenever I run the tests without specifying an initial branch name,
I get a lot of messages about setting the default branch name globally. This is
just noise for these tests, so this specifies a branch name manually to make it
go away.

The name ‘gac-test’ was chosen to make it clear that we're dealing with a
repository created specifically for ‘git-auto-commit-mode’ in case somehow a
repository gets left behind.
2022-12-07 08:38:01 -08:00

188 lines
6.7 KiB
EmacsLisp
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; git-auto-commit-mode-tests.el --- Tests for git-auto-commit-mode -*- lexical-binding: t; -*-
;; Copyright (C) 2019 Tom Willemse
;; Author: Tom Willemse <tom@ryuslash.org>
;; Keywords:
;; 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:
;;
;;; Code:
(require 'buttercup)
(require 'git-auto-commit-mode)
(defun git-auto-commit-mode-tests--get-last-commit-message ()
"Get the last commit message from git."
(shell-command-to-string "git log --format=format:%s"))
(describe "In a git repository"
:var (temp-dir current-directory)
(before-each
(setq temp-dir (make-temp-file "gac-" t)
current-directory default-directory
default-directory temp-dir)
(shell-command "git init --initial-branch=gac-test")
(shell-command "git config user.email user@example.com")
(shell-command "git config user.name \"User Example\""))
(after-each
(delete-directory temp-dir t)
(setq temp-dir nil
default-directory current-directory
current-directory nil))
(describe "New files"
(describe "When gac-automatically-add-new-files is t"
(it "Should be added to git"
(let* ((gac-automatically-add-new-files-p t)
(temp-file (expand-file-name "test" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (git-auto-commit-mode-tests--get-last-commit-message)
:to-match (rx string-start "test" string-end)))))
(describe "When gac-automatically-add-new-files is nil"
(it "Shouldnt be added to git"
(let* ((gac-automatically-add-new-files-p nil)
(temp-file (expand-file-name "test" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (git-auto-commit-mode-tests--get-last-commit-message)
:not :to-match (rx string-start "test" string-end))))))
(describe "Getting a relative path"
(it "should return the file name for files in the project root"
(let* ((temp-file (expand-file-name "test" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (gac-relative-file-name temp-file)
:to-equal "test")))
(it "should return the file name and directory name for nested files"
(mkdir (expand-file-name "test" temp-dir))
(let* ((temp-file (expand-file-name "test/test.txt" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (gac-relative-file-name temp-file)
:to-equal "test/test.txt")))
(it "should handle [] in the filename"
(let* ((temp-file (expand-file-name "[test]-test.txt" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (gac-relative-file-name temp-file)
:to-equal "[test]-test.txt")))
(it "should handle [] in the directory name"
(mkdir (expand-file-name "[test]-test" temp-dir))
(let* ((temp-file (expand-file-name "[test]-test/testing.txt" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (gac-relative-file-name temp-file)
:to-equal "[test]-test/testing.txt")))
(it "should handle [ in the directory name"
(let* ((temp-file (expand-file-name "testing.txt" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (gac-relative-file-name temp-file)
:to-equal "testing.txt")))
(it "should handle [ in the file name"
(let* ((temp-file (expand-file-name "[test-test.txt" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (gac-relative-file-name temp-file)
:to-equal "[test-test.txt"))))
(describe "Getting a commit message"
(it "should default to the relative file name"
(let* ((temp-file (expand-file-name "test.txt" temp-dir))
(buffer (find-file-noselect temp-file)))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (git-auto-commit-mode-tests--get-last-commit-message)
:to-equal "test.txt")))
(it "should use the message specified in gac-default-message"
(let* ((temp-file (expand-file-name "test.txt" temp-dir))
(buffer (find-file-noselect temp-file))
(gac-default-message "I made a commit!"))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (git-auto-commit-mode-tests--get-last-commit-message)
:to-equal "I made a commit!")))
(it "should use the function result if gac-default-message is a function"
(let* ((temp-file (expand-file-name "test.txt" temp-dir))
(buffer (find-file-noselect temp-file))
(gac-default-message
(lambda (f)
(concat "wip " (gac-relative-file-name f)))))
(with-current-buffer buffer
(git-auto-commit-mode)
(insert "test")
(save-buffer))
(expect (git-auto-commit-mode-tests--get-last-commit-message)
:to-equal "wip test.txt")))))
(provide 'git-auto-commit-mode-tests)
;;; git-auto-commit-mode-tests.el ends here