Skip to content

Commit

Permalink
Implement get-statements-csv protocol function
Browse files Browse the repository at this point in the history
  • Loading branch information
kelvinqian00 committed Feb 11, 2025
1 parent 247b66c commit d60579a
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/main/lrsql/admin/protocol.clj
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,5 @@
"Soft-delete a reaction."))

(defprotocol AdminLRSManager
(-delete-actor [this params]))
(-delete-actor [this params])
(-get-statements-csv [this csv-headers params]))
14 changes: 11 additions & 3 deletions src/main/lrsql/system/lrs.clj
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,6 @@
stmt-res))))
;; No more statement inputs - return
stmt-res)))))

(-get-statements
[lrs auth-identity params ltags]
(let [conn (lrs-conn lrs)
Expand Down Expand Up @@ -395,7 +394,16 @@

adp/AdminLRSManager
(-delete-actor [this {:keys [actor-ifi]}]
(let [conn (lrs-conn this)
(let [conn (lrs-conn this)
input (agent-input/delete-actor-input actor-ifi)]
(jdbc/with-transaction [tx conn]
(stmt-cmd/delete-actor! backend tx input)))))
(stmt-cmd/delete-actor! backend tx input))))
(-get-statements-csv [lrs headers params]
(let [conn (lrs-conn lrs)]
(jdbc/with-transaction [tx conn]
(let [config (:config lrs)
input (-> params ; TODO: Higher limit for CSV stream?
(stmt-util/ensure-default-max-limit config)
(stmt-input/query-statement-input nil))
stmt-seq (stmt-q/query-all-statements backend tx input {})]
(stmt-util/statements->csv-seq headers stmt-seq))))))
39 changes: 39 additions & 0 deletions src/test/lrsql/admin/protocol_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,45 @@
(is (empty? (arb-query ["select * from statement_to_activity where statement_id = ?" stmt-id]))))))))
(finally (component/stop sys')))))

(deftest download-csv-test
(let [sys (support/test-system)
sys' (component/start sys)
lrs (:lrs sys')
hdrs [["id"] ["actor" "mbox"] ["verb" "id"] ["object" "id"]]]
(try
(lrsp/-store-statements lrs auth-ident [stmt-0 stmt-1] [])
(testing "CSV Seq - no params"
(let [stmt-seq (adp/-get-statements-csv lrs hdrs {})]
(is (not (realized? stmt-seq)))
(is (= ["id" "actor_mbox" "verb_id" "object_id"]
(first stmt-seq)))
(is (= [(get stmt-1 "id")
(get-in stmt-1 ["actor" "mbox"])
(get-in stmt-1 ["verb" "id"])
(get-in stmt-1 ["object" "id"])]
(first (rest stmt-seq))))
(is (= [(get stmt-0 "id")
(get-in stmt-0 ["actor" "mbox"])
(get-in stmt-0 ["verb" "id"])
(get-in stmt-0 ["object" "id"])]
(first (rest (rest stmt-seq)))))))
(testing "CSV Seq - ascending set to true"
(let [stmt-seq (adp/-get-statements-csv lrs hdrs {:ascending true})]
(is (not (realized? stmt-seq)))
(is (= ["id" "actor_mbox" "verb_id" "object_id"]
(first stmt-seq)))
(is (= [(get stmt-0 "id")
(get-in stmt-0 ["actor" "mbox"])
(get-in stmt-0 ["verb" "id"])
(get-in stmt-0 ["object" "id"])]
(first (rest stmt-seq))))
(is (= [(get stmt-1 "id")
(get-in stmt-1 ["actor" "mbox"])
(get-in stmt-1 ["verb" "id"])
(get-in stmt-1 ["object" "id"])]
(first (rest (rest stmt-seq)))))))
(finally (component/stop sys')))))

;; TODO: Add tests for creds with no explicit scopes, once
;; `statements/read/mine` is implemented

Expand Down

0 comments on commit d60579a

Please sign in to comment.