Lines
90 %
Functions
61.54 %
Branches
100 %
use askama::Template;
use axum::{extract::Query, response::IntoResponse};
use serde::Deserialize;
use crate::pages::HtmlTemplate;
#[derive(Deserialize)]
pub struct SplitCreateParams {
display_index: usize,
}
#[derive(Template)]
#[template(path = "components/transaction/split_entry.html")]
struct SplitEntryTemplate {
tags: Option<Vec<finance::tag::Tag>>,
pub async fn split_create_handler(Query(params): Query<SplitCreateParams>) -> impl IntoResponse {
HtmlTemplate(SplitEntryTemplate {
display_index: params.display_index,
tags: None,
})
#[cfg(test)]
mod tests {
use super::*;
fn render_split(index: usize) -> String {
SplitEntryTemplate {
display_index: index,
.render()
.expect("split template should render")
#[test]
fn split_entry_has_amount_input() {
let html = render_split(0);
assert!(
html.contains(r#"name="splits[0][amount]"#),
"split entry must have amount input"
);
fn split_entry_has_from_account_input() {
html.contains(r#"name="splits[0][from_account]"#),
"split entry must have from_account hidden input"
html.contains(r#"class="account-display from-account"#),
"split entry must have from-account display input"
fn split_entry_has_to_account_input() {
html.contains(r#"name="splits[0][to_account]"#),
"split entry must have to_account hidden input"
html.contains(r#"class="account-display to-account"#),
"split entry must have to-account display input"
fn split_entry_has_commodity_inputs() {
html.contains(r#"name="splits[0][from_commodity]"#),
"split entry must have from_commodity hidden input"
html.contains(r#"name="splits[0][to_commodity]"#),
"split entry must have to_commodity hidden input"
fn split_entry_has_tag_editor() {
html.contains("split-tags-container"),
"split entry must have split tags container"
html.contains("split-tag-template"),
"split entry must have split tag template"
fn split_entry_has_remove_button() {
html.contains("remove-split-btn"),
"split entry must have remove button"
fn split_entry_indexes_match_display_index() {
let html = render_split(3);
assert!(html.contains(r#"data-split-index="3"#));
assert!(html.contains(r#"name="splits[3][amount]"#));
assert!(html.contains(r#"name="splits[3][from_account]"#));
assert!(html.contains(r#"name="splits[3][to_account]"#));
assert!(html.contains("Split 4"));