1pub const TOOLS: &[&str] = &[
14 "auth_test",
16 "auth_status",
17 "auth_login",
18 "auth_logout",
19 "bucket_list",
21 "bucket_create",
22 "bucket_get",
23 "bucket_delete",
24 "object_list",
26 "object_delete",
27 "object_signed_url",
28 "object_urn",
29 "object_upload",
31 "object_upload_batch",
32 "object_download",
33 "object_info",
34 "object_copy",
35 "object_delete_batch",
36 "translate_start",
38 "translate_status",
39 "hub_list",
41 "hub_info",
42 "project_list",
43 "project_info",
45 "project_users_list",
46 "folder_contents",
47 "admin_project_list",
49 "admin_user_add",
50 "admin_user_remove",
51 "admin_user_update_role",
52 "admin_folder_rights",
53 "admin_operation_list",
54 "admin_operation_status",
55 "admin_operation_resume",
56 "admin_operation_cancel",
57 "project_create",
59 "project_update",
60 "project_archive",
61 "project_user_add",
62 "project_user_remove",
63 "project_user_update",
64 "project_users_import",
65 "template_list",
67 "template_info",
68 "template_create",
69 "template_update",
70 "template_archive",
71 "template_convert",
72 "folder_list",
74 "folder_create",
75 "item_info",
76 "item_versions",
77 "item_create",
78 "item_delete",
79 "item_rename",
80 "issue_list",
82 "issue_get",
83 "issue_create",
84 "issue_update",
85 "issue_comments_list",
87 "issue_comment_add",
88 "issue_comment_delete",
89 "rfi_list",
91 "rfi_get",
92 "rfi_create",
93 "rfi_update",
94 "acc_assets_list",
96 "asset_create",
97 "asset_update",
98 "asset_delete",
99 "asset_get",
100 "acc_submittals_list",
101 "submittal_create",
102 "submittal_update",
103 "acc_checklists_list",
104 "checklist_create",
105 "checklist_update",
106 "checklist_templates_list",
107 "api_request",
109 "admin_user_list",
111 "report_rfi_summary",
113 "report_issues_summary",
114 "webhook_list",
116 "webhook_create",
117 "webhook_get",
118 "webhook_update",
119 "webhook_delete",
120 "webhook_events",
121 "da_engines_list",
123 "da_appbundles_list",
124 "da_activities_list",
125 "da_workitem_create",
126 "da_workitem_status",
127 "da_workitems_list",
128 "reality_list",
130 "reality_create",
131 "reality_process",
132 "reality_status",
133 "reality_result",
134 "reality_delete",
135 "reality_formats",
136];
137
138#[cfg(test)]
139mod tests {
140 use super::*;
141
142 #[test]
143 fn test_tools_array_count() {
144 assert_eq!(
145 TOOLS.len(),
146 101,
147 "TOOLS array has {} entries, expected 101 — sync with get_tools() in server.rs",
148 TOOLS.len()
149 );
150 }
151
152 #[test]
153 fn test_tools_array_no_duplicates() {
154 let mut seen = std::collections::HashSet::new();
155 for tool in TOOLS {
156 assert!(seen.insert(tool), "Duplicate tool name: {}", tool);
157 }
158 }
159
160 #[test]
161 fn test_tools_array_naming_convention() {
162 for tool in TOOLS {
163 assert!(!tool.is_empty(), "Empty tool name found");
164 assert!(!tool.contains(' '), "Tool name contains space: {}", tool);
165 assert!(!tool.contains('-'), "Tool name contains dash: {}", tool);
166 assert!(
167 tool.chars()
168 .all(|c| c.is_ascii_lowercase() || c == '_' || c.is_ascii_digit()),
169 "Tool name not snake_case: {}",
170 tool
171 );
172 }
173 }
174
175 #[test]
176 fn test_essential_tools_present() {
177 let tools: Vec<&&str> = TOOLS.iter().collect();
178 assert!(tools.contains(&&"auth_test"));
180 assert!(tools.contains(&&"auth_login"));
181 assert!(tools.contains(&&"auth_logout"));
182 assert!(tools.contains(&&"bucket_list"));
184 assert!(tools.contains(&&"webhook_list"));
186 assert!(tools.contains(&&"da_engines_list"));
188 assert!(tools.contains(&&"reality_create"));
190 assert!(tools.contains(&&"issue_list"));
192 assert!(tools.contains(&&"hub_list"));
194 assert!(tools.contains(&&"admin_user_list"));
196 assert!(tools.contains(&&"project_update"));
198 assert!(tools.contains(&&"project_archive"));
199 assert!(tools.contains(&&"template_convert"));
200 }
201}