-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.rs
More file actions
91 lines (80 loc) · 2.93 KB
/
main.rs
File metadata and controls
91 lines (80 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use serde_json::json;
use std::collections::HashMap;
use taurus_core::context::{context::Context, executor::Executor, registry::FunctionStore};
use tests_core::{Case, CaseResult, Cases, print_failure, print_success};
use tucana::shared::{
NodeFunction,
helper::value::{from_json_value, to_json_value},
};
pub trait Testable {
fn run(&self) -> CaseResult;
}
fn run_tests(cases: Cases) {
for case in &cases.cases {
match case.run() {
CaseResult::Success => print_success(case),
CaseResult::Failure(input, result) => print_failure(case, &input, result),
}
}
}
impl Testable for Case {
fn run(&self) -> CaseResult {
let store = FunctionStore::default();
let node_functions: HashMap<i64, NodeFunction> = self
.clone()
.flow
.node_functions
.into_iter()
.map(|node| (node.database_id, node))
.collect();
for input in self.inputs.clone() {
let mut context = match input.clone().input {
Some(inp) => Context::new(from_json_value(inp)),
None => Context::default(),
};
let res = Executor::new(&store, node_functions.clone()).execute(
self.flow.starting_node_id,
&mut context,
false,
);
match res {
taurus_core::context::signal::Signal::Failure(err) => {
let json = json!({
"name": err.name,
"message": err.message,
});
if json != input.clone().expected_result {
return CaseResult::Failure(input, json);
}
}
taurus_core::context::signal::Signal::Success(value) => {
let json = to_json_value(value);
if json != input.clone().expected_result {
return CaseResult::Failure(input, json);
}
}
taurus_core::context::signal::Signal::Return(value) => {
let json = to_json_value(value);
if json != input.clone().expected_result {
return CaseResult::Failure(input, json);
}
}
taurus_core::context::signal::Signal::Respond(value) => {
let json = to_json_value(value);
if json != input.clone().expected_result {
return CaseResult::Failure(input, json);
}
}
taurus_core::context::signal::Signal::Stop => continue,
}
}
CaseResult::Success
}
}
fn main() {
env_logger::Builder::from_default_env()
.filter_level(log::LevelFilter::Info)
.init();
let cases = Cases::from_path("./flows/");
run_tests(cases);
}