1#![feature(once_cell_get_mut)]
22#![feature(macro_metavar_expr)]
23#![feature(str_as_str)]
24extern crate core;
25
26pub mod api;
27pub mod components;
28pub mod css;
29pub mod pages;
30pub mod static_components;
31pub mod utils;
32pub mod js;
33
34pub use app::*;
35pub use utils::*;
36
37#[cfg(test)]
41mod tests {
42 use crate::defaults::{DEFAULT_NO_TEXT, DEFAULT_TEXT_ITEM, PARAMS_CSS_CLASS, PARAMS_ID, PARAMS_TITLE};
43 use crate::jobs::JobResult;
44 use crate::testdata::data::{create_test_form, RAW_HTML_PREFORMATTED, TESTDATA_EXPECTED_FORMDATA, TESTDATA_EXPECTED_FORMDATA_EMPTY, TESTDATA_FORMDATA_EMPTY_REQUEST, TESTDATA_FORMDATA_EMPTY_REQUEST_WITH_BOUNDARIES, TESTDATA_FORMDATA_REQUEST, TRIMMED_HTML_PREFORMATTED, TRIMMED_HTML_TITLE_RENDER};
45 use crate::{rumtk_web_check_on_job, rumtk_web_get_job_manager, rumtk_web_get_text_item, rumtk_web_init_components, rumtk_web_init_job_manager, rumtk_web_post_process_html, rumtk_web_render, rumtk_web_render_component, rumtk_web_render_redirect, rumtk_web_render_template, rumtk_web_trim_rendered_html, AppState, HTMLResult, RUMWebData, RUMWebRedirect, SharedAppState, URLParams, URLPath};
46 use crate::{RUMWebResponse, RUMWebTemplate};
47 use rumtk_core::strings::{RUMString, RUMStringConversions};
48 use rumtk_core::{rumtk_new_lock, rumtk_sleep};
49
50 #[test]
52 fn test_compile_form() {
53 let expected_form = TESTDATA_EXPECTED_FORMDATA();
54 let form_data = create_test_form(TESTDATA_FORMDATA_REQUEST).expect("Form");
55
56 assert_eq!(form_data, expected_form, "Form results mismatch!");
57 }
58
59 #[test]
60 fn test_compile_empty_form() {
61 let expected_form = TESTDATA_EXPECTED_FORMDATA_EMPTY();
62 let form_data = create_test_form(TESTDATA_FORMDATA_EMPTY_REQUEST).expect("Form");
63
64 assert_eq!(form_data, expected_form, "Form results mismatch!");
65 }
66
67 #[test]
68 fn test_compile_empty_form_with_boundaries() {
69 let expected_form = TESTDATA_EXPECTED_FORMDATA_EMPTY();
70 let form_data = create_test_form(TESTDATA_FORMDATA_EMPTY_REQUEST_WITH_BOUNDARIES).expect("Form");
71
72 assert_eq!(form_data, expected_form, "Form results mismatch!");
73 }
74
75 #[test]
77 fn test_render_redirect_response() {
78 let url = "http://localhost/redirected";
79 let redirect =
80 rumtk_web_render_redirect!(RUMWebRedirect::Redirect(url.to_string())).unwrap();
81 let redirect_code = redirect.get_code();
82 let redirect_url = redirect.get_url();
83 assert_eq!(redirect_url, url, "Redirect url mismatch!");
84 assert_eq!(redirect_code, 303, "Wrong redirect code!");
85 }
86
87 #[test]
88 fn test_render_redirect_response_temporary() {
89 let url = "http://localhost/redirected";
90 let redirect =
91 rumtk_web_render_redirect!(RUMWebRedirect::RedirectTemporary(url.to_string()))
92 .unwrap();
93 let redirect_code = redirect.get_code();
94 let redirect_url = redirect.get_url();
95 assert_eq!(redirect_url, url, "Redirect url mismatch!");
96 assert_eq!(redirect_code, 307, "Wrong redirect code!");
97 }
98
99 #[test]
100 fn test_render_redirect_response_permanent() {
101 let url = "http://localhost/redirected";
102 let redirect =
103 rumtk_web_render_redirect!(RUMWebRedirect::RedirectPermanent(url.to_string()))
104 .unwrap();
105 let redirect_code = redirect.get_code();
106 let redirect_url = redirect.get_url();
107 assert_eq!(redirect_url, url, "Redirect url mismatch!");
108 assert_eq!(redirect_code, 308, "Wrong redirect code!");
109 }
110
111 #[test]
112 fn test_render_standard_web_component() {
113 rumtk_web_init_components!(None);
114
115 let params = [(PARAMS_TITLE, "Hello World!")];
116 let state = SharedAppState::default();
117 let rendered = rumtk_web_render_component!("title", params, state).unwrap().to_string();
118
119 assert_eq!(
120 rendered, TRIMMED_HTML_TITLE_RENDER,
121 "Commponent rendered improperly!"
122 );
123 }
124
125 #[test]
126 fn test_render() {
127 #[derive(RUMWebTemplate)]
128 #[template(source = "<div></div>", ext = "html")]
129 struct Div {}
130
131 let result = rumtk_web_render(Div {}, RUMWebRedirect::None).unwrap();
132 let expected = RUMWebResponse::into_get_response("<div></div>");
133
134 assert_eq!(result, expected, "Test Div template rendered improperly!");
135 }
136
137
138 #[test]
139 fn test_trim_preformatted_component() {
140 let result = rumtk_web_trim_rendered_html(RAW_HTML_PREFORMATTED.to_string()).unwrap();
141
142 assert_eq!(result, TRIMMED_HTML_PREFORMATTED.to_string(), "Preformatted html string was filtered inappropriately.!");
143 }
144
145 #[test]
147 fn test_job_run() {
148 const HELLO_STR: &str = "Hello World";
149
150 let workers: usize = 5;
151 rumtk_web_init_job_manager!(&workers);
152 rumtk_web_init_components!(
153 Some(vec![
154 ("my_element", my_element)
155 ])
156 );
157
158 async fn basic_processor() -> JobResult {
159 Ok(Some(rumtk_web_post_process_html!(RUMString::from(HELLO_STR))))
160 }
161
162 fn my_element(_path_components: URLPath, params: URLParams, state: SharedAppState) -> HTMLResult {
163 let job_id = rumtk_web_get_text_item!(params, PARAMS_ID, DEFAULT_NO_TEXT);
164 let css_class = rumtk_web_get_text_item!(params, PARAMS_CSS_CLASS, DEFAULT_TEXT_ITEM);
165
166 let job_result = rumtk_web_check_on_job!("my_element", job_id, state);
167
168 let job_data = job_result.unwrap()?;
169
170 rumtk_web_post_process_html!(job_data)
171 }
172
173 let app_state = rumtk_new_lock!(AppState::default());
174 let mut params = RUMWebData::new();
175 let job_id = rumtk_web_get_job_manager!().unwrap().spawn_task(basic_processor()).unwrap();
176 params.insert(RUMString::from(PARAMS_ID), job_id.to_string());
177
178 rumtk_sleep!(1);
179 let rendered = my_element(&[], ¶ms, app_state.clone()).unwrap().to_string();
180
181 assert!(rendered.is_empty(), "Element results survived the rendering process's filtering!");
182 }
183}