Skip to content

Commit

Permalink
Merge pull request #57 from dzcode-io/chore/add-tests-to-serde_derive…
Browse files Browse the repository at this point in the history
…-feature

add tests to serde derive feature
  • Loading branch information
ZibanPirate authored Jan 7, 2024
2 parents c379645 + b231059 commit 5d69bb7
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 51 deletions.
1 change: 1 addition & 0 deletions .github/workflows/rust-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ jobs:
- run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }}
- run: cd rust && cargo build --verbose
- run: cd rust && cargo test --verbose
- run: cd rust && cargo test --verbose --features serde_derive
74 changes: 35 additions & 39 deletions rust/src/api/get_node_by_path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,45 +11,38 @@ mod test {

use super::get_node_by_path;

struct TestCase<'a> {
path: &'a str,
expected: Node,
}

impl<'a> TestCase<'a> {
pub fn new(path: &'a str, expected: Node) -> Self {
Self { path, expected }
}
}

#[test]
fn should_get_expected_info() {
let tests: Vec<TestCase> = vec![
TestCase::new(
fn check_three_schemas_and_non_existent() {
let tests = vec![
(
"umkb",
Node {
Some(&Node {
name: NodeName {
ar: "جامعة محمد خيضر بسكرة",
en: "University of Mohamed Khider Biskra",
fr: "Université Mohamed Khider Biskra",
},
r#type: NodeType::University,
},
}),
#[cfg(feature = "serde_derive")]
"{\"name\":{\"ar\":\"جامعة محمد خيضر بسكرة\",\"en\":\"University of Mohamed Khider Biskra\",\"fr\":\"Université Mohamed Khider Biskra\"},\"type\":\"University\"}",
),
TestCase::new(
(
"umkb/fst",
Node {
Some(&Node {
name: NodeName {
ar: "كلية العلوم والتكنلوجيا",
en: "Faculty of Science and Technology",
fr: "Faculté des Sciences et de la Technologie",
},
r#type: NodeType::Faculty,
},
}),
#[cfg(feature = "serde_derive")]
"{\"name\":{\"ar\":\"كلية العلوم والتكنلوجيا\",\"en\":\"Faculty of Science and Technology\",\"fr\":\"Faculté des Sciences et de la Technologie\"},\"type\":\"Faculty\"}",
),
TestCase::new(
(
"umkb/fst/dee/sec",
Node {
Some(&Node {
name: NodeName {
ar: "تخصص التحكم الكهربائي",
en: "Specialy of Electrical Control",
Expand All @@ -61,27 +54,30 @@ mod test {
slots: &[7, 8, 9, 10],
},
},
},
}),
#[cfg(feature = "serde_derive")]
"{\"name\":{\"ar\":\"تخصص التحكم الكهربائي\",\"en\":\"Specialy of Electrical Control\",\"fr\":\"Spécialité de commande électrique\"},\"type\":{\"Specialty\":{\"terms\":{\"per_year\":2,\"slots\":[7,8,9,10]}}}}",
),
(
"does/not/exist", None,
#[cfg(feature = "serde_derive")]
"null"
),
];

for tc in tests {
let actual = get_node_by_path(tc.path).unwrap();
assert_node(&tc.expected, &actual);
for test_case in tests {
let path = test_case.0;
let expected = test_case.1;
let actual = get_node_by_path(path);
assert_eq!(actual, expected);
#[cfg(feature = "serde_derive")]
{
let expected_stringified = test_case.2;
assert_eq!(
serde_json::to_string(&actual).unwrap(),
expected_stringified
);
}
}
}

#[test]
fn should_get_none_when_path_does_not_exist() {
let res = get_node_by_path("does/not/exist");
assert!(res.is_none());
}

fn assert_node(expected: &Node, actual: &Node) {
assert_eq!(
expected, actual,
"Expected node to be '{:?}', but got '{:?}'",
expected, actual
);
}
}
22 changes: 10 additions & 12 deletions rust/src/node/model.rs
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
#[cfg(feature = "serde_derive")]
use serde::{Deserialize, Serialize};
use serde::Serialize;

#[derive(Debug, PartialEq)]
#[cfg_attr(feature = "serde_derive", derive(Serialize, Deserialize))]
pub struct NodeName<'a> {
#[cfg_attr(feature = "serde_derive", derive(Serialize))]
pub struct NodeName {
#[cfg(feature = "const")]
pub ar: &'a str,
pub ar: &'static str,
#[cfg(feature = "const")]
pub en: &'a str,
pub en: &'static str,
#[cfg(feature = "const")]
pub fr: &'a str,
pub fr: &'static str,
}

#[derive(Debug, PartialEq)]
#[cfg_attr(feature = "serde_derive", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde_derive", derive(Serialize))]
pub enum NodeType {
University,
Academy,
Expand All @@ -26,18 +26,16 @@ pub enum NodeType {
}

#[derive(Debug, PartialEq, Clone)]
#[cfg_attr(feature = "serde_derive", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde_derive", derive(Serialize))]
pub struct NodeTerms {
pub per_year: usize,
#[cfg(feature = "const")]
#[cfg_attr(feature = "serde_derive", serde(skip_deserializing))]
pub slots: &'static [i32],
}

#[derive(Debug, PartialEq)]
#[cfg_attr(feature = "serde_derive", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde_derive", derive(Serialize))]
pub struct Node {
#[cfg_attr(feature = "serde_derive", serde(borrow))]
pub name: NodeName<'static>,
pub name: NodeName,
pub r#type: NodeType,
}

0 comments on commit 5d69bb7

Please sign in to comment.