diff --git a/server/src/html/garden/vote.rs b/server/src/html/garden/vote.rs index 8e6e1a76e1932a43dd3ce06256c1515201ee41b9..9ae2073cdfc89a6a3ced891cb5f3fb5eb41c9aa0 100644 --- a/server/src/html/garden/vote.rs +++ b/server/src/html/garden/vote.rs @@ -25,7 +25,7 @@ use crate::{ middleware::canonical_view_url, path_types::ItemId, reducer::{ContentState, ScopeId}, - scope_rank::{comparable_items, is_comparable_item, suggest_next_pair_in_pool}, + scope_rank::{comparable_items, suggest_next_pair_in_pool}, state::AppState, }; @@ -464,13 +464,6 @@ async fn vote_compare_inner( let reduced = state.reduced.read().await; let content = content_for_garden_view(&reduced, &nav.scope()); - if !is_comparable_item(content, &left) || !is_comparable_item(content, &right) { - return ( - StatusCode::BAD_REQUEST, - "comparison items must be defined with non-empty bodies; folder paths are scopes, not vote targets", - ) - .into_response(); - } let viewer = optional_principal(&headers, &jar, &reduced); let logged_in = viewer.is_some(); let can_post = match &nav.scope() { diff --git a/test/integration.clj b/test/integration.clj index 179e5f6b1f48f06ec074085fade14a61800e1012..933fa3e129a416dca780734af55db59d1bc4dcd9 100644 --- a/test/integration.clj +++ b/test/integration.clj @@ -305,20 +305,23 @@ (is (zero? (:exit grank-result)) "cli garden rank exits 0") (bind grank-resp (json/parse-string (:out grank-result) true)) (is (pos? (:ranked_total grank-resp)) "global rank has ranked items") - (is (not-empty (:items grank-resp)) "global rank returns items") - (is (str/ends-with? (:item (first (:items grank-resp))) "languages/rust") - (str "rust is #1 globally (got " (:item (first (:items grank-resp))) ")")) + (bind grank-items (vec (mapcat :ranking (:components grank-resp)))) + (is (not-empty grank-items) "global rank returns ranked components") + (is (str/ends-with? (:item (first grank-items)) "languages/rust") + (str "rust is first in its component (got " (:item (first grank-items)) ")")) (bind grank-pct-result (common/run-cli cli-bin base-url ["public" "garden" "rank" "--percent" "--limit" "2" "--json"])) (is (zero? (:exit grank-pct-result)) "cli garden rank --percent --limit 2 exits 0") (bind grank-pct-resp (json/parse-string (:out grank-pct-result) true)) - (is (= 2 (count (:items grank-pct-resp))) "limit=2 returns 2 items") - (is (= 100.0 (:percent (first (:items grank-pct-resp)))) "top item has 100.0% score") + (bind grank-pct-items (vec (mapcat :ranking (:components grank-pct-resp)))) + (is (= 2 (count grank-pct-items)) "limit=2 returns 2 items") + (is (= 100.0 (:percent (first grank-pct-items))) "top item has 100.0% score") (bind grank-off-result (common/run-cli cli-bin base-url ["public" "garden" "rank" "--limit" "1" "--offset" "1" "--json"])) (is (zero? (:exit grank-off-result)) "cli garden rank --offset 1 exits 0") (bind grank-off-resp (json/parse-string (:out grank-off-result) true)) - (is (= (:item (second (:items grank-pct-resp))) (:item (first (:items grank-off-resp)))) + (bind grank-off-items (vec (mapcat :ranking (:components grank-off-resp)))) + (is (= (:item (second grank-pct-items)) (:item (first grank-off-items))) "offset=1 aligns with page 0 item index 1") ;; 10. rank history endpoint