1
0
Fork 0

Added tests for kagi-translate

This commit is contained in:
Bram Schoenmakers 2024-02-13 08:40:09 +01:00
parent ec63275484
commit 4bb7a1d63e
Signed by: bram
GPG key ID: 0CCD19DFDC63258F

View file

@ -61,40 +61,41 @@ TEXT is the output text, optionally with a list of REFERENCES."
:var ((dummy-output "text")) :var ((dummy-output "text"))
(before-each (before-each
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output dummy-output))) (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output dummy-output)))
(it "converts *bold* markup to a bold face" (describe "kagi-fastgpt-prompt"
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "**bold**")) (it "converts *bold* markup to a bold face"
(expect (kagi-fastgpt-prompt "foo") (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "**bold**"))
:to-be-equal-including-properties (expect (kagi-fastgpt-prompt "foo")
(propertize "bold" 'font-lock-face 'kagi-bold))) :to-be-equal-including-properties
(it "converts <b>bold</b> markup to a bold face" (propertize "bold" 'font-lock-face 'kagi-bold)))
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "<b>bold</b>")) (it "converts <b>bold</b> markup to a bold face"
(expect (kagi-fastgpt-prompt "foo") (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "<b>bold</b>"))
:to-be-equal-including-properties (expect (kagi-fastgpt-prompt "foo")
(propertize "bold" 'font-lock-face 'kagi-bold))) :to-be-equal-including-properties
(it "converts $italic$ markup to an italic face" (propertize "bold" 'font-lock-face 'kagi-bold)))
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "$italic$")) (it "converts $italic$ markup to an italic face"
(expect (kagi-fastgpt-prompt "foo") (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "$italic$"))
:to-be-equal-including-properties (expect (kagi-fastgpt-prompt "foo")
(propertize "italic" 'font-lock-face 'kagi-italic))) :to-be-equal-including-properties
(it "converts ```code``` markup to a code face" (propertize "italic" 'font-lock-face 'kagi-italic)))
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "```echo $*```")) (it "converts ```code``` markup to a code face"
(expect (kagi-fastgpt-prompt "foo") (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output "```echo $*```"))
:to-be-equal-including-properties (expect (kagi-fastgpt-prompt "foo")
(propertize "echo $*" 'font-lock-face 'kagi-code))) :to-be-equal-including-properties
(it "formats references properly" (propertize "echo $*" 'font-lock-face 'kagi-code)))
(spy-on #'kagi--call-api (it "formats references properly"
:and-return-value (spy-on #'kagi--call-api
(kagi-test--dummy-output :and-return-value
"Main text" (kagi-test--dummy-output
'(((title . "First title") "Main text"
(snippet . "**Snippet 1**") '(((title . "First title")
(url . "https://www.example.org")) (snippet . "**Snippet 1**")
((title . "Second title") (url . "https://www.example.org"))
(snippet . "Snippet $2$") ((title . "Second title")
(url . "https://www.example.com"))))) (snippet . "Snippet $2$")
(expect (kagi-fastgpt-prompt "foo") (url . "https://www.example.com")))))
:to-be-equal-including-properties (expect (kagi-fastgpt-prompt "foo")
(format "Main text :to-be-equal-including-properties
(format "Main text
%s First title %s First title
%s %s
@ -103,30 +104,55 @@ https://www.example.org
%s Second title %s Second title
Snippet %s Snippet %s
https://www.example.com" https://www.example.com"
(propertize "[1]" 'font-lock-face 'kagi-bold) (propertize "[1]" 'font-lock-face 'kagi-bold)
(propertize "Snippet 1" 'font-lock-face 'kagi-bold) (propertize "Snippet 1" 'font-lock-face 'kagi-bold)
(propertize "[2]" 'font-lock-face 'kagi-bold) (propertize "[2]" 'font-lock-face 'kagi-bold)
(propertize "2" 'font-lock-face 'kagi-italic)))) (propertize "2" 'font-lock-face 'kagi-italic))))
(it "inserts the output when requested" (it "inserts the output when requested"
(spy-on #'insert) (spy-on #'insert)
(kagi-fastgpt-prompt "foo" t) (kagi-fastgpt-prompt "foo" t)
;; one additional insert call is to fill the temporary buffer for POST data ;; one additional insert call is to fill the temporary buffer for POST data
(expect #'insert :to-have-been-called-times 2) (expect #'insert :to-have-been-called-times 2)
(expect #'insert :to-have-been-called-with dummy-output)) (expect #'insert :to-have-been-called-with dummy-output))
(it "does not insert the output by default" (it "does not insert the output by default"
(spy-on #'insert) (spy-on #'insert)
(kagi-fastgpt-prompt "foo") (kagi-fastgpt-prompt "foo")
;; one insert call is to fill the temporary buffer for POST data ;; one insert call is to fill the temporary buffer for POST data
(expect #'insert :to-have-been-called-times 1)) (expect #'insert :to-have-been-called-times 1))
(it "shows short output in the echo area when called interactively" (it "shows short output in the echo area when called interactively"
(spy-on #'message) (spy-on #'message)
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output dummy-output)) (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output dummy-output))
(kagi-fastgpt-prompt "foo" nil t)) (kagi-fastgpt-prompt "foo" nil t)
(it "shows longer output in a separate buffer when called interactively" (expect #'message :to-have-been-called-with dummy-output))
(spy-on #'kagi--fastgpt-display-result) (it "shows longer output in a separate buffer when called interactively"
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output (format "%s\n%s" dummy-output dummy-output))) (spy-on #'kagi--fastgpt-display-result)
(kagi-fastgpt-prompt "foo" nil t) (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output (format "%s\n%s" dummy-output dummy-output)))
(expect #'kagi--fastgpt-display-result :to-have-been-called))) (kagi-fastgpt-prompt "foo" nil t)
(expect #'kagi--fastgpt-display-result :to-have-been-called)))
(describe "kagi-translate"
(before-each
(spy-on #'message)
(spy-on #'kagi--fastgpt-display-result))
(it "returns output on minimal input"
(kagi-translate "foo" "English")
(expect #'kagi--call-api :to-have-been-called)
(expect #'message :not :to-have-been-called)
(expect #'kagi--fastgpt-display-result :not :to-have-been-called))
(it "returns output with a source language"
(kagi-translate "foo" "English" "Spanish")
(expect #'kagi--call-api :to-have-been-called))
(it "shows short output in the echo area when called interactively"
(spy-on #'message)
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output dummy-output))
(kagi-translate "foo" "English" nil t)
(expect #'message :to-have-been-called-with dummy-output)
(expect #'kagi--fastgpt-display-result :not :to-have-been-called))
(it "shows longer output in a separate buffer when called interactively"
(spy-on #'kagi--fastgpt-display-result)
(spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output (format "%s\n%s" dummy-output dummy-output)))
(kagi-translate "foo" "English" nil t)
(expect #'message :not :to-have-been-called)
(expect #'kagi--fastgpt-display-result :to-have-been-called))))
(xdescribe "Kagi Summarizer" (xdescribe "Kagi Summarizer"
(before-each (before-each