diff --git a/kagi-test.el b/kagi-test.el index 0c00824..84a5325 100644 --- a/kagi-test.el +++ b/kagi-test.el @@ -61,40 +61,41 @@ TEXT is the output text, optionally with a list of REFERENCES." :var ((dummy-output "text")) (before-each (spy-on #'kagi--call-api :and-return-value (kagi-test--dummy-output dummy-output))) - (it "converts *bold* markup to a bold face" - (spy-on #'kagi--call-api :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 bold markup to a bold face" - (spy-on #'kagi--call-api :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-api :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-api :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-api - :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 + (describe "kagi-fastgpt-prompt" + (it "converts *bold* markup to a bold face" + (spy-on #'kagi--call-api :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 bold markup to a bold face" + (spy-on #'kagi--call-api :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-api :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-api :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-api + :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 @@ -103,30 +104,55 @@ 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)))) - (it "inserts the output when requested" - (spy-on #'insert) - (kagi-fastgpt-prompt "foo" t) - ;; 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-with dummy-output)) - (it "does not insert the output by default" - (spy-on #'insert) - (kagi-fastgpt-prompt "foo") - ;; one insert call is to fill the temporary buffer for POST data - (expect #'insert :to-have-been-called-times 1)) - (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-fastgpt-prompt "foo" nil t)) - (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-fastgpt-prompt "foo" nil t) - (expect #'kagi--fastgpt-display-result :to-have-been-called))) + (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)))) + (it "inserts the output when requested" + (spy-on #'insert) + (kagi-fastgpt-prompt "foo" t) + ;; 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-with dummy-output)) + (it "does not insert the output by default" + (spy-on #'insert) + (kagi-fastgpt-prompt "foo") + ;; one insert call is to fill the temporary buffer for POST data + (expect #'insert :to-have-been-called-times 1)) + (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-fastgpt-prompt "foo" nil t) + (expect #'message :to-have-been-called-with dummy-output)) + (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-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" (before-each