Skip to main content

rumtk_web/
lib.rs

1/*
2 * rumtk attempts to implement HL7 and medical protocols for interoperability in medicine.
3 * This toolkit aims to be reliable, simple, performant, and standards compliant.
4 * Copyright (C) 2025  Luis M. Santos, M.D. <lsantos@medicalmasses.com>
5 * Copyright (C) 2025  Ethan Dixon
6 * Copyright (C) 2025  MedicalMasses L.L.C. <contact@medicalmasses.com>
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20 */
21#![feature(once_cell_get_mut)]
22extern crate core;
23
24pub mod api;
25pub mod components;
26pub mod css;
27pub mod pages;
28pub mod static_components;
29pub mod utils;
30
31pub use app::*;
32pub use utils::*;
33
34///
35/// Add utils unit tests here to ensure internal functions work.
36///
37#[cfg(test)]
38mod tests {
39    use crate::defaults::PARAMS_TITLE;
40    use crate::testdata::{
41        create_test_form, TESTDATA_EXPECTED_FORMDATA, TESTDATA_FORMDATA_REQUEST,
42        TRIMMED_HTML_TITLE_RENDER,
43    };
44    use crate::{
45        rumtk_web_init_components, rumtk_web_render_component, rumtk_web_render_html,
46        rumtk_web_render_redirect, RUMWebRedirect, SharedAppState,
47    };
48    use crate::{RUMWebResponse, RUMWebTemplate};
49    use rumtk_core::strings::RUMStringConversions;
50
51    ///////////////////////////////////FormData/////////////////////////////////////////////////
52    #[test]
53    fn test_compile_form() {
54        let expected_form = TESTDATA_EXPECTED_FORMDATA();
55        let form_data = create_test_form(TESTDATA_FORMDATA_REQUEST).expect("Form");
56
57        assert_eq!(form_data, expected_form, "Form results mismatch!");
58    }
59
60    ///////////////////////////////////Response/////////////////////////////////////////////////
61    #[test]
62    fn test_render_redirect_response() {
63        let url = "http://localhost/redirected";
64        let redirect =
65            rumtk_web_render_redirect!(RUMWebRedirect::Redirect(url.to_rumstring())).unwrap();
66        let redirect_code = redirect.get_code();
67        let redirect_url = redirect.get_url();
68        assert_eq!(redirect_url, url, "Redirect url mismatch!");
69        assert_eq!(redirect_code, 303, "Wrong redirect code!");
70    }
71
72    #[test]
73    fn test_render_redirect_response_temporary() {
74        let url = "http://localhost/redirected";
75        let redirect =
76            rumtk_web_render_redirect!(RUMWebRedirect::RedirectTemporary(url.to_rumstring()))
77                .unwrap();
78        let redirect_code = redirect.get_code();
79        let redirect_url = redirect.get_url();
80        assert_eq!(redirect_url, url, "Redirect url mismatch!");
81        assert_eq!(redirect_code, 307, "Wrong redirect code!");
82    }
83
84    #[test]
85    fn test_render_redirect_response_permanent() {
86        let url = "http://localhost/redirected";
87        let redirect =
88            rumtk_web_render_redirect!(RUMWebRedirect::RedirectPermanent(url.to_rumstring()))
89                .unwrap();
90        let redirect_code = redirect.get_code();
91        let redirect_url = redirect.get_url();
92        assert_eq!(redirect_url, url, "Redirect url mismatch!");
93        assert_eq!(redirect_code, 308, "Wrong redirect code!");
94    }
95
96    #[test]
97    fn test_render_standard_web_component() {
98        rumtk_web_init_components!(None);
99
100        let params = [(PARAMS_TITLE, "Hello World!")];
101        let state = SharedAppState::default();
102        let rendered = rumtk_web_render_component!("title", params, state).unwrap().to_rumstring();
103
104        assert_eq!(
105            rendered, TRIMMED_HTML_TITLE_RENDER,
106            "Commponent rendered improperly!"
107        );
108    }
109
110    #[test]
111    fn test_render() {
112        #[derive(RUMWebTemplate)]
113        #[template(source = "<div></div>", ext = "html")]
114        struct Div {}
115
116        let result = rumtk_web_render_html(Div {}, RUMWebRedirect::None).unwrap();
117        let expected = RUMWebResponse::into_get_response("<div></div>");
118
119        assert_eq!(result, expected, "Test Div template rendered improperly!");
120    }
121
122    ///////////////////////////////////HTML/////////////////////////////////////////////////
123    #[test]
124    fn test_render_html_component() {}
125}