44 lines
1.8 KiB
Clojure
44 lines
1.8 KiB
Clojure
(ns tbd.chat.db-test
|
|
(:require [clojure.java.io :as io]
|
|
[clojure.test :refer [deftest is testing]]
|
|
[tbd.chat.db :as db]
|
|
[tbd.sqlite-test :refer [temp-db-path]]))
|
|
|
|
(deftest open-test
|
|
(testing "creates the file and its directory"
|
|
(let [path (temp-db-path)]
|
|
(db/open path)
|
|
(is (.exists (io/file path)))))
|
|
(testing "reopening keeps the data"
|
|
(let [path (temp-db-path)
|
|
messages [{:role "user" :content "hi"}]]
|
|
(db/save-history! (db/open path) 7 messages 1000)
|
|
(is (= messages (db/get-history (db/open path) 7))))))
|
|
|
|
(deftest crud-test
|
|
(let [ds (db/open (temp-db-path))]
|
|
(testing "nothing stored yet"
|
|
(is (= [] (db/get-history ds 7))))
|
|
(testing "save and load"
|
|
(db/save-history! ds 7 [{:role "user" :content "hi"}] 1000)
|
|
(is (= [{:role "user" :content "hi"}] (db/get-history ds 7))))
|
|
(testing "saving again replaces the whole conversation"
|
|
(db/save-history! ds 7 [{:role "user" :content "hi"}
|
|
{:role "assistant" :content "hello"}]
|
|
2000)
|
|
(is (= [{:role "user" :content "hi"} {:role "assistant" :content "hello"}]
|
|
(db/get-history ds 7))))
|
|
(testing "clear"
|
|
(db/clear-history! ds 7)
|
|
(is (= [] (db/get-history ds 7))))))
|
|
|
|
(deftest owner-scoping-test
|
|
(let [ds (db/open (temp-db-path))]
|
|
(db/save-history! ds 7 [{:role "user" :content "mine"}] 1000)
|
|
(db/save-history! ds 8 [{:role "user" :content "theirs"}] 1000)
|
|
(is (= [{:role "user" :content "mine"}] (db/get-history ds 7)))
|
|
(is (= [{:role "user" :content "theirs"}] (db/get-history ds 8)))
|
|
(db/clear-history! ds 7)
|
|
(is (= [] (db/get-history ds 7)))
|
|
(is (= [{:role "user" :content "theirs"}] (db/get-history ds 8)) "clearing one owner's history leaves the other's")))
|