diff --git a/kagi-test.el b/kagi-test.el index b4d09a8..c70c351 100644 --- a/kagi-test.el +++ b/kagi-test.el @@ -42,8 +42,14 @@ (require 'kagi) -(defun kagi-test--dummy-output (text) - (format "{\"data\":{\"output\":\"%s\"}}" text)) +(defun kagi-test--dummy-output (text &optional references) + "Construct a fictitious result from the Kagi FastGPT API. + +TEXT is the output text, optionally with a list of REFERENCES." + (json-encode (list (cons "data" (append + (list (cons "output" text)) + (when references + (list (cons "references" references)))))))) (buttercup-define-matcher-for-binary-function :to-be-equal-including-properties equal-including-properties @@ -52,11 +58,52 @@ (describe "kagi.el" (describe "Kagi FastGPT" - (it "converts bold markup ** to a bold face" + (it "converts *bold* markup to a bold face" (spy-on #'kagi--call-fastgpt :and-return-value (kagi-test--dummy-output "**bold**")) (expect (kagi-fastgpt-prompt "foo") :to-be-equal-including-properties - (propertize "bold" 'font-lock-face 'kagi-bold)))) + (propertize "bold" 'font-lock-face 'kagi-bold))) + (it "converts bold markup to a bold face" + (spy-on #'kagi--call-fastgpt :and-return-value (kagi-test--dummy-output "bold")) + (expect (kagi-fastgpt-prompt "foo") + :to-be-equal-including-properties + (propertize "bold" 'font-lock-face 'kagi-bold))) + (it "converts $italic$ markup to an italic face" + (spy-on #'kagi--call-fastgpt :and-return-value (kagi-test--dummy-output "$italic$")) + (expect (kagi-fastgpt-prompt "foo") + :to-be-equal-including-properties + (propertize "italic" 'font-lock-face 'kagi-italic))) + (it "converts ```code``` markup to a code face" + (spy-on #'kagi--call-fastgpt :and-return-value (kagi-test--dummy-output "```echo $*```")) + (expect (kagi-fastgpt-prompt "foo") + :to-be-equal-including-properties + (propertize "echo $*" 'font-lock-face 'kagi-code))) + (it "formats references properly" + (spy-on #'kagi--call-fastgpt + :and-return-value + (kagi-test--dummy-output + "Main text" + '(((title . "First title") + (snippet . "**Snippet 1**") + (url . "https://www.example.org")) + ((title . "Second title") + (snippet . "Snippet $2$") + (url . "https://www.example.com"))))) + (expect (kagi-fastgpt-prompt "foo") + :to-be-equal-including-properties + (format "Main text + +%s First title +%s +https://www.example.org + +%s Second title +Snippet %s +https://www.example.com" + (propertize "[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-italic))))) (xdescribe "Kagi Summarizer" (it "contains a spec with an expectation"