|
71 | 71 | {:name "request" :server "web"} |
72 | 72 | {:name "download" :server "web"}]] |
73 | 73 | (testing "tool has require-approval-fn which returns true" |
74 | | - (is (true? (f.tools/manual-approval? all-tools "eca_shell" {} {} {})))) |
| 74 | + (is (= :ask (f.tools/approval all-tools "eca_shell" {} {} {})))) |
75 | 75 | (testing "tool has require-approval-fn which returns false we ignore it" |
76 | | - (is (true? (f.tools/manual-approval? all-tools "eca_plan" {} {} {})))) |
| 76 | + (is (= :ask (f.tools/approval all-tools "eca_plan" {} {} {})))) |
77 | 77 | (testing "if legacy-manual-approval present, considers it" |
78 | | - (is (true? (f.tools/manual-approval? all-tools "request" {} {} {:toolCall {:manualApproval true}})))) |
| 78 | + (is (= :ask (f.tools/approval all-tools "request" {} {} {:toolCall {:manualApproval true}})))) |
79 | 79 | (testing "if approval config is provided" |
80 | | - (testing "when matches allow config, return false" |
81 | | - (is (false? (f.tools/manual-approval? all-tools "request" {} {} {:toolCall {:approval {:allow {"web__request" {}}}}}))) |
82 | | - (is (false? (f.tools/manual-approval? all-tools "eca_read" {} {} {:toolCall {:approval {:allow {"eca_read" {}}}}}))) |
83 | | - (is (false? (f.tools/manual-approval? all-tools "request" {} {} {:toolCall {:approval {:allow {"web" {}}}}})))) |
84 | | - (testing "when matches ask config, return true" |
85 | | - (is (true? (f.tools/manual-approval? all-tools "request" {} {} {:toolCall {:approval {:ask {"web__request" {}}}}}))) |
86 | | - (is (true? (f.tools/manual-approval? all-tools "eca_read" {} {} {:toolCall {:approval {:ask {"eca_read" {}}}}}))) |
87 | | - (is (true? (f.tools/manual-approval? all-tools "request" {} {} {:toolCall {:approval {:ask {"web" {}}}}})))) |
| 80 | + (testing "when matches allow config" |
| 81 | + (is (= :allow (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:allow {"web__request" {}}}}}))) |
| 82 | + (is (= :allow (f.tools/approval all-tools "eca_read" {} {} {:toolCall {:approval {:allow {"eca_read" {}}}}}))) |
| 83 | + (is (= :allow (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:allow {"web" {}}}}})))) |
| 84 | + (testing "when matches ask config" |
| 85 | + (is (= :ask (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:ask {"web__request" {}}}}}))) |
| 86 | + (is (= :ask (f.tools/approval all-tools "eca_read" {} {} {:toolCall {:approval {:ask {"eca_read" {}}}}}))) |
| 87 | + (is (= :ask (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:ask {"web" {}}}}})))) |
| 88 | + (testing "when matches deny config" |
| 89 | + (is (= :deny (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:deny {"web__request" {}}}}}))) |
| 90 | + (is (= :deny (f.tools/approval all-tools "eca_read" {} {} {:toolCall {:approval {:deny {"eca_read" {}}}}}))) |
| 91 | + (is (= :deny (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:deny {"web" {}}}}})))) |
88 | 92 | (testing "when contains argsMatchers" |
89 | 93 | (testing "has arg but not matches" |
90 | | - (is (true? (f.tools/manual-approval? all-tools "request" {"url" "http://bla.com"} {} |
91 | | - {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" [".*foo.*"]}}}}}})))) |
92 | | - (testing "has arg and matches" |
93 | | - (is (false? (f.tools/manual-approval? all-tools "request" {"url" "http://foo.com"} {} |
94 | | - {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" [".*foo.*"]}}}}}}))) |
95 | | - (is (false? (f.tools/manual-approval? all-tools "request" {"url" "foobar"} {} |
96 | | - {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" ["foo.*"]}}}}}})))) |
| 94 | + (is (= :ask (f.tools/approval all-tools "request" {"url" "http://bla.com"} {} |
| 95 | + {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" [".*foo.*"]}}}}}})))) |
| 96 | + (testing "has arg and matches for allow" |
| 97 | + (is (= :allow (f.tools/approval all-tools "request" {"url" "http://foo.com"} {} |
| 98 | + {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" [".*foo.*"]}}}}}}))) |
| 99 | + (is (= :allow (f.tools/approval all-tools "request" {"url" "foobar"} {} |
| 100 | + {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" ["foo.*"]}}}}}})))) |
| 101 | + (testing "has arg and matches for deny" |
| 102 | + (is (= :deny (f.tools/approval all-tools "request" {"url" "http://foo.com"} {} |
| 103 | + {:toolCall {:approval {:deny {"web__request" {:argsMatchers {"url" [".*foo.*"]}}}}}}))) |
| 104 | + (is (= :deny (f.tools/approval all-tools "request" {"url" "foobar"} {} |
| 105 | + {:toolCall {:approval {:deny {"web__request" {:argsMatchers {"url" ["foo.*"]}}}}}})))) |
97 | 106 | (testing "has not that arg" |
98 | | - (is (true? (f.tools/manual-approval? all-tools "request" {"crazy-url" "http://foo.com"} {} |
99 | | - {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" [".*foo.*"]}}}}}})))))) |
| 107 | + (is (= :ask (f.tools/approval all-tools "request" {"crazy-url" "http://foo.com"} {} |
| 108 | + {:toolCall {:approval {:allow {"web__request" {:argsMatchers {"url" [".*foo.*"]}}}}}})))))) |
100 | 109 | (testing "if no approval config matches" |
101 | 110 | (testing "checks byDefault" |
102 | 111 | (testing "when 'ask', return true" |
103 | | - (is (true? (f.tools/manual-approval? all-tools "request" {} {} {:toolCall {:approval {:byDefault "ask"}}})))) |
| 112 | + (is (= :ask (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:byDefault "ask"}}})))) |
104 | 113 | (testing "when 'allow', return false" |
105 | | - (is (false? (f.tools/manual-approval? all-tools "request" {} {} {:toolCall {:approval {:byDefault "allow"}}}))))) |
| 114 | + (is (= :allow (f.tools/approval all-tools "request" {} {} {:toolCall {:approval {:byDefault "allow"}}}))))) |
106 | 115 | (testing "fallback to manual approval" |
107 | | - (is (true? (f.tools/manual-approval? all-tools "request" {} {} {}))))))) |
| 116 | + (is (= :ask (f.tools/approval all-tools "request" {} {} {}))))))) |
0 commit comments