branch: externals/debbugs commit e7c6633204850f81fcea67f8cb01423c23fe8f85 Author: Morgan Smith <morgan.j.sm...@outlook.com> Commit: Michael Albinus <michael.albi...@gmx.de>
Add tests * Makefile: New file. * test/test-debbugs.el: New file. --- Makefile | 20 ++++++++ test/debbugs-tests.el | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..86cc575a2b --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +EMACS ?= emacs + +SOURCE=$(wildcard *.el) +TESTSOURCE=$(wildcard test/*.el) +TARGET=$(patsubst %.el,%.elc,$(SOURCE)) +TESTTARGET=$(patsubst %.el,%.elc,$(TESTSOURCE)) + +.PHONY: check clean +.PRECIOUS: %.elc + +%.elc: %.el + @$(EMACS) -Q -batch -L . -f batch-byte-compile $< + +build: $(TARGET) + +check: build $(TESTTARGET) + emacs -Q --batch -L . -l $(TESTSOURCE) -f ert-run-tests-batch-and-exit + +clean: + -rm -f $(TARGET) $(TESTTARGET) diff --git a/test/debbugs-tests.el b/test/debbugs-tests.el new file mode 100644 index 0000000000..e22aadc14d --- /dev/null +++ b/test/debbugs-tests.el @@ -0,0 +1,132 @@ +;;; debbugs-tests.el --- tests for debbugs.el -*- lexical-binding: t; -*- + +;; Copyright (C) 2024 Free Software Foundation, Inc. + +;; Author: Morgan Smith <morgan.j.sm...@outlook.com> +;; Package: debbugs + +;; This file is not part of GNU Emacs. + +;; 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Please ensure tests don't actually make network calls. + +;;; Code: + +(require 'debbugs) + +;;; Helper Data: + +;; Generated using this: +;; (soap-invoke debbugs-wsdl debbugs-port "get_status" [64064]) +(defconst debbugs-test--bug-status-soap-return + '(((item + (key . 64064) + (value + (package . "emacs") (found_date) (last_modified . 1689593050) + (affects) (date . 1686745022) (fixed_versions) + (originator . "Morgan Smith <morgan.j.sm...@outlook.com>") + (blocks) (archived . 1) (found) (unarchived) (tags . "patch") + (severity . "normal") (location . "archive") (owner) (fixed) + (blockedby) (pending . "done") (keywords . "patch") (id . 64064) + (found_versions) (mergedwith) (summary) (forwarded) + (log_modified . 1689593050) + (done . "Michael Albinus <michael.albi...@gmx.de>") + (source . "unknown") + (msgid + . "<dm5pr03mb31632e3a4fe170c62e7d4b0cc5...@dm5pr03mb3163.namprd03.prod.outlook.com>") + (bug_num . 64064) (subject . "[PATCH 0/4] debbugs improvements") + (fixed_date)))))) + +;; Generated using this: +;; (debbugs-get-status 64064) +(defconst debbugs-test--bug-status + '(((cache_time . 5000) (source . "unknown") (unarchived) + (keywords "patch") (blocks) (pending . "done") (severity . "normal") + (done . "Michael Albinus <michael.albi...@gmx.de>") (location . "archive") + (log_modified . 1689593050) (subject . "[PATCH 0/4] debbugs improvements") + (last_modified . 1689593050) (found) (tags "patch") (package "emacs") + (originator . "Morgan Smith <morgan.j.sm...@outlook.com>") (archived . t) + (blockedby) (affects) (mergedwith) (summary) (date . 1686745022) + (fixed_versions) (id . 64064) (fixed) (found_date) (forwarded) + (msgid + . "<dm5pr03mb31632e3a4fe170c62e7d4b0cc5...@dm5pr03mb3163.namprd03.prod.outlook.com>") + (owner) (found_versions) (fixed_date) (bug_num . 64064)))) + +;;; Helper Functions: + +(defvar debbugs-test--soap-operation-name nil) +(defvar debbugs-test--soap-parameters nil) +(defun debbugs-test--soap-invoke-internal (callback _cbargs _wsdl _service + operation-name + &rest parameters) + "Over-ride for testing" + (setq debbugs-test--soap-operation-name operation-name) + (setq debbugs-test--soap-parameters parameters) + (let ((return + (cond ((string-equal operation-name "get_status") + debbugs-test--bug-status-soap-return) + ((string-equal operation-name "get_usertag") + '(((hi)))) + (t '((0)))))) + (if callback + (progn + (funcall callback return) + nil) + return))) + +(add-function + :override (symbol-function #'soap-invoke-internal) + #'debbugs-test--soap-invoke-internal) + +;;; Tests: + +(ert-deftest debbugs-test-get-bugs () + (let (debbugs-test--soap-operation-name debbugs-test--soap-parameters) + (debbugs-get-bugs + :tag "patch" + :severity "critical" + :status "open" + :status "forwarded") + (should (string-equal debbugs-test--soap-operation-name "get_bugs")) + (should (equal debbugs-test--soap-parameters + '(["tag" "patch" "severity" "critical" + "status" "open" "status" "forwarded"]))))) + +(ert-deftest debbugs-test-newest-bugs () + (let (debbugs-test--soap-operation-name debbugs-test--soap-parameters) + (debbugs-newest-bugs 4) + (should (string-equal debbugs-test--soap-operation-name "newest_bugs")) + (should (equal debbugs-test--soap-parameters '(4))))) + +(ert-deftest debbugs-test-get-status () + (let (debbugs-test--soap-operation-name debbugs-test--soap-parameters) + (cl-letf (((symbol-function #'float-time) + (lambda (&optional _specified-time) 5000))) + (should (= (float-time) 5000)) + (should (equal (sort (car (debbugs-get-status 64064))) + (sort (car debbugs-test--bug-status)))) + (should (string-equal debbugs-test--soap-operation-name "get_status")) + (should (equal debbugs-test--soap-parameters '([64064])))))) + +(ert-deftest debbugs-test-get-usertag () + (let (debbugs-test--soap-operation-name debbugs-test--soap-parameters) + (should (equal (debbugs-get-usertag :user "emacs") '("hi"))) + (should (string-equal debbugs-test--soap-operation-name "get_usertag")) + (should (equal debbugs-test--soap-parameters '("emacs"))))) + +(provide 'debbugs-tests) +;;; debbugs-tests.el ends here