csv-test: include cli flag to provide a test policy number

* TODO: viperus does not offer the input of usize/i64
  therefore we can't use big integer for now

Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
2020-06-29 07:55:44 +02:00
parent 10ec91f826
commit 11b5eef742
2 changed files with 67 additions and 36 deletions

View File

@@ -12,7 +12,7 @@ use serde::Deserialize;
use std::env; use std::env;
use std::{error::Error, process}; use std::{error::Error, process};
use std::collections::HashMap; use std::collections::HashMap;
use tracing::{debug, trace, Level}; use tracing::{debug, trace, span, Level};
use advotracker::data::{PolicyCode, PolicyList, PolicyDataList, PolicyData}; use advotracker::data::{PolicyCode, PolicyList, PolicyDataList, PolicyData};
@@ -83,7 +83,8 @@ fn export(p: &mut String, lang: &String) -> Result<usize, Box<dyn Error>> {
/// https://docs.rs/csv/1.1.3/csv/cookbook/index.html /// https://docs.rs/csv/1.1.3/csv/cookbook/index.html
/// https://blog.burntsushi.net/csv/ /// https://blog.burntsushi.net/csv/
fn import(p: &mut String, data_list: &mut PolicyDataList, fn import(p: &mut String, data_list: &mut PolicyDataList,
policy_numbers: &mut HashMap<usize, PolicyCode>, lang: &String) -> Result<usize, Box<dyn Error>> { policy_numbers: &mut HashMap<usize, PolicyCode>, lang: &String)
-> Result<usize, Box<dyn Error>> {
use std::fs::File; use std::fs::File;
use std::path::Path; use std::path::Path;
use std::ffi::OsStr; use std::ffi::OsStr;
@@ -155,9 +156,7 @@ fn import(p: &mut String, data_list: &mut PolicyDataList,
let dt_end: DateTime<Local> = Local::now(); let dt_end: DateTime<Local> = Local::now();
let duration = dt_end.signed_duration_since(dt_start); let duration = dt_end.signed_duration_since(dt_start);
println!("Duration: {:#?}", duration);
//let seconds = duration.secs;
//println!("Seconds: {:#?}", seconds);
trace!(target: "csv-test", record_count = ?count, duration = ?duration); trace!(target: "csv-test", record_count = ?count, duration = ?duration);
state = t!("state.finished", lang); state = t!("state.finished", lang);
@@ -167,10 +166,10 @@ fn import(p: &mut String, data_list: &mut PolicyDataList,
state = ?state, state = ?state,
date_stop = ?dt_end.to_string()); date_stop = ?dt_end.to_string());
//Ok(count, duration.seconds())
Ok(count) Ok(count)
} }
#[allow(dead_code)]
/// validate a given policy number /// validate a given policy number
/// result will return true or false /// result will return true or false
fn is_valid(policy_number: &usize, policy_list: &PolicyDataList, fn is_valid(policy_number: &usize, policy_list: &PolicyDataList,
@@ -188,7 +187,7 @@ fn is_valid(policy_number: &usize, policy_list: &PolicyDataList,
policy_list = ?policy_list.name, policy_list = ?policy_list.name,
elements = ?policy_list.policy_data.len(), elements = ?policy_list.policy_data.len(),
date_start = ?dt_start.to_string()); date_start = ?dt_start.to_string());
println!("Policy_number list: {:?}", policy_list.policy_data); //println!("Policy_number list: {:?}", policy_list.policy_data);
// WIP: testcode to collect policy_number via iterator // WIP: testcode to collect policy_number via iterator
//println!("policy_number: {:?}", policy_list.policy_data[1].policy_number); //println!("policy_number: {:?}", policy_list.policy_data[1].policy_number);
@@ -236,24 +235,28 @@ fn is_valid(policy_number: &usize, policy_list: &PolicyDataList,
//let index: usize = test.iter().enumerate().find(|&r| r.policy_number == "two".to_string()).unwrap().0; //let index: usize = test.iter().enumerate().find(|&r| r.policy_number == "two".to_string()).unwrap().0;
let result = false; let mut result = false;
match policy_numbers.get(&policy_number) { match policy_numbers.get(&policy_number) {
Some(&policy_code) => { Some(&policy_code) => {
let mut res = t!("policy.validation.success", lang); let res = t!("policy.validation.success", lang);
println!("policy_number: {} ({:?})", println!("policy_number: {} ({:?})",
policy_number, policy_code); policy_number, policy_code);
result = true; result = true;
trace!(target: "csv-test",
policy_number = ?policy_number,
validation = ?res,
policy_code = ?policy_code);
}, },
_ => { _ => {
let mut res = t!("policy.validation.failed", lang); let res = t!("policy.validation.failed", lang);
println!("Nuup! Number isn't valid!"); //println!("Noop! Number isn't valid!");
println!("{:?}", res);
trace!(target: "csv-test",
policy_number = ?policy_number,
validation = ?res);
}, },
} }
trace!(target: "csv-test",
validation = ?res,
policy_number = ?policy_number,
policy_code = ?policy_code);
let dt_end: DateTime<Local> = Local::now(); let dt_end: DateTime<Local> = Local::now();
let duration = dt_end.signed_duration_since(dt_start); let duration = dt_end.signed_duration_since(dt_start);
@@ -289,10 +292,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
//.with_max_level(tracing::Level::DEBUG) //.with_max_level(tracing::Level::DEBUG)
.finish(); .finish();
// initialize logger
//env_logger::init();
//info!("Commencing the import Test-Run!");
tracing::subscriber::with_default(subscriber, || { tracing::subscriber::with_default(subscriber, || {
// get system environment // get system environment
let mut lang = env::var("LANG").unwrap_or("en".to_string()); let mut lang = env::var("LANG").unwrap_or("en".to_string());
@@ -356,9 +355,24 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
} }
// test if policy_number is_valid // test if policy_number is_valid
let policy_number : usize = 1999999999; let test_policy_number = v.get::<i32>("test_policy_number").unwrap() as usize;
let _res = is_valid(&policy_number, &policy_data, &mut policy_numbers, &lang); trace!(target: "csv-test", test_policy_number = ?test_policy_number);
println!("given policy_number {:?} is valid!", policy_number); //let policy_number : usize = 1999999999;
//match is_valid(&policy_number, &policy_data, &mut policy_numbers, &lang) {
// Ok(true) => {
match policy_numbers.get(&test_policy_number) {
Some(&policy_code) => {
let res = t!("policy.validation.success", lang);
println!("{:?}", res);
println!("policy_number: {} ({:?})",
test_policy_number, policy_code);
}
_ => {
let res = t!("policy.validation.failed", lang);
println!("{:?}", res);
//println!("Nuup! Number isn't valid!");
},
}
// export policy code elements to csv-file // export policy code elements to csv-file
let mut csv_export_path = v.get::<String>("export_file").unwrap(); let mut csv_export_path = v.get::<String>("export_file").unwrap();

View File

@@ -1,5 +1,9 @@
/// The given Viperus structure will be muted according to the /*
/// processed default, environment and commandline arguments * advotracker - Hotline tackingtool for Advocats
*
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
* SPDX-License-Identifier: (0BSD or MIT)
*/
// parse CLI commandline arguments with clap // parse CLI commandline arguments with clap
use clap::{crate_authors, crate_description, crate_name, crate_version, App, Arg}; use clap::{crate_authors, crate_description, crate_name, crate_version, App, Arg};
@@ -9,8 +13,8 @@ use std::env;
use tracing::trace; use tracing::trace;
use viperus::Viperus; use viperus::Viperus;
// Parse the commandline arguments and preset default values /// Parse the commandline arguments and preset default values
// Precedence: defaults -> config-file -> environment -> commandline /// Precedence: defaults -> config-file -> environment -> commandline
pub fn parse_args(v: &mut Viperus) -> Result<(), Box<dyn std::error::Error>> { pub fn parse_args(v: &mut Viperus) -> Result<(), Box<dyn std::error::Error>> {
if cfg!(feature = "fmt-clap") { if cfg!(feature = "fmt-clap") {
trace!(target: "Viperus", "Viperus feature 'fmt-clap' enabled."); trace!(target: "Viperus", "Viperus feature 'fmt-clap' enabled.");
@@ -19,9 +23,9 @@ pub fn parse_args(v: &mut Viperus) -> Result<(), Box<dyn std::error::Error>> {
// preset default key/value pairs (lowest priority) // preset default key/value pairs (lowest priority)
v.add_default("config_file", String::from("csv_import.ron")); v.add_default("config_file", String::from("csv_import.ron"));
//v.add_default("import_file", String::from("POLLFNR_WOECHENTLICH.txt")); v.add_default("import_file", String::from("POLLFNR_WOECHENTLICH.txt"));
v.add_default("import_file", String::from("POLLFNR_MINI.txt"));
v.add_default("export_file", String::from("")); v.add_default("export_file", String::from(""));
v.add_default("test_policy_number", 123456789);
v.add_default("to_email_address_file", String::from("Allianz RA-Hotline <smr-rahotline@allianz.de>")); v.add_default("to_email_address_file", String::from("Allianz RA-Hotline <smr-rahotline@allianz.de>"));
v.add_default("from_email_address_file", String::from("Allianz-Hotline RA-Hiedemann <azhotline@hiedemann.de>")); v.add_default("from_email_address_file", String::from("Allianz-Hotline RA-Hiedemann <azhotline@hiedemann.de>"));
//v.add_default("username", String::from("nctalkbot")); //v.add_default("username", String::from("nctalkbot"));
@@ -64,8 +68,8 @@ SMR Unerledigt: 089 92529 60222")
.short("i") .short("i")
.long("importFile") .long("importFile")
.help("Select source file for the csv-import") .help("Select source file for the csv-import")
//.default_value("POLLFNR_WOECHENTLICH.txt") .default_value("POLLFNR_WOECHENTLICH.txt")
.default_value("POLLFNR_MINI.txt") //.default_value("POLLFNR_MINI.txt")
.takes_value(true), .takes_value(true),
) )
.arg( .arg(
@@ -76,6 +80,14 @@ SMR Unerledigt: 089 92529 60222")
.default_value("RA-Hiedemann_DirectCall.txt") .default_value("RA-Hiedemann_DirectCall.txt")
.takes_value(true), .takes_value(true),
) )
.arg(
Arg::with_name("fromEmailAddress")
.short("f")
.long("fromEmailAddress")
.help("Select the sender email-address (From:)")
.default_value("Allianz-Hotline RA-Hiedemann <azhotline@hiedemann.de>")
.takes_value(true),
)
.arg( .arg(
Arg::with_name("toEmailAddress") Arg::with_name("toEmailAddress")
.short("t") .short("t")
@@ -85,11 +97,11 @@ SMR Unerledigt: 089 92529 60222")
.takes_value(true), .takes_value(true),
) )
.arg( .arg(
Arg::with_name("fromEmailAddress") Arg::with_name("testPolicyNumber")
.short("f") .short("p")
.long("fromEmailAddress") .long("testPolicyNumber")
.help("Select the sender email-address (From:)") .help("Test validity of given policy number")
.default_value("Allianz-Hotline RA-Hiedemann <azhotline@hiedemann.de>") //.default_value("")
.takes_value(true), .takes_value(true),
) )
// .arg( // .arg(
@@ -151,6 +163,7 @@ SMR Unerledigt: 089 92529 60222")
v.bond_clap("exportFile", "export_file"); v.bond_clap("exportFile", "export_file");
v.bond_clap("toEmailAddress", "to_email_address"); v.bond_clap("toEmailAddress", "to_email_address");
v.bond_clap("fromEmailAddress", "from_email_address"); v.bond_clap("fromEmailAddress", "from_email_address");
v.bond_clap("testPolicyNumber", "test_policy_number");
//v.bond_clap("username", "username"); //v.bond_clap("username", "username");
//v.bond_clap("password", "password"); //v.bond_clap("password", "password");
v.bond_clap("verbose", "verbose"); v.bond_clap("verbose", "verbose");
@@ -177,6 +190,10 @@ SMR Unerledigt: 089 92529 60222")
"from_email_address: {:?}", "from_email_address: {:?}",
v.get::<String>("from_email_address").unwrap_or_default() v.get::<String>("from_email_address").unwrap_or_default()
); );
println!(
"test_policy_number: {:?}",
v.get::<i32>("test_policy_number").unwrap_or_default()
);
// println!( // println!(
// "username: {:?}", // "username: {:?}",
// v.get::<String>("username").unwrap_or_default() // v.get::<String>("username").unwrap_or_default()