Skip to content

Commit 33dbf4f

Browse files
committed
test: add yosemite-decimal-grade scalar tests
1 parent 8874f22 commit 33dbf4f

File tree

1 file changed

+95
-1
lines changed

1 file changed

+95
-1
lines changed

src/schema/yosemite_decimal_grade.rs

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use async_graphql::{Scalar, ScalarType, Value, InputValueError, InputValueResult
22
use postgres_types::{FromSql, ToSql};
33
use regex::Regex;
44

5-
#[derive(Clone, Debug)]
5+
#[derive(Clone, Debug, PartialEq)]
66
pub struct YosemiteDecimalGrade {
77
pub grade: u8,
88
pub letter: Option<YosemiteDecimalLetter>,
@@ -62,3 +62,97 @@ impl ScalarType for YosemiteDecimalGrade {
6262
}
6363
}
6464

65+
#[cfg(test)]
66+
mod tests {
67+
use super::*;
68+
69+
#[test]
70+
fn parse_good() {
71+
let values = [
72+
Value::String("5.9".into()),
73+
Value::String("5.10a".into()),
74+
Value::String("5.10b".into()),
75+
Value::String("5.10c".into()),
76+
Value::String("5.10d".into()),
77+
Value::String("6".into()),
78+
Value::String("11b".into()),
79+
];
80+
81+
let expected = [
82+
YosemiteDecimalGrade {
83+
grade: 9,
84+
letter: None,
85+
},
86+
YosemiteDecimalGrade {
87+
grade: 10,
88+
letter: Some(YosemiteDecimalLetter::A),
89+
},
90+
YosemiteDecimalGrade {
91+
grade: 10,
92+
letter: Some(YosemiteDecimalLetter::B),
93+
},
94+
YosemiteDecimalGrade {
95+
grade: 10,
96+
letter: Some(YosemiteDecimalLetter::C),
97+
},
98+
YosemiteDecimalGrade {
99+
grade: 10,
100+
letter: Some(YosemiteDecimalLetter::D),
101+
},
102+
YosemiteDecimalGrade {
103+
grade: 6,
104+
letter: None,
105+
},
106+
YosemiteDecimalGrade {
107+
grade: 11,
108+
letter: Some(YosemiteDecimalLetter::B),
109+
},
110+
];
111+
112+
for (v, e) in values.iter().zip(expected.iter()) {
113+
assert_eq!(YosemiteDecimalGrade::parse(v.clone()).unwrap(), *e);
114+
}
115+
}
116+
117+
#[test]
118+
fn parse_bad() {
119+
let values = [
120+
Value::Number(0.into()), // only string-values accepted
121+
Value::String("f8a".into()), // invalid format
122+
Value::String("5.0".into()), // grades start a 1
123+
Value::String("5.9a".into()), // grades 9 and below must not have a letter
124+
Value::String("5.10".into()), // grades 10 and above must have a letter
125+
];
126+
127+
for v in values.iter() {
128+
// An error is an error, regardless of fields (for now)
129+
assert!(
130+
matches!(YosemiteDecimalGrade::parse(v.clone()), Err(InputValueError { .. })),
131+
"{} expected to fail parsing but didn't", v
132+
);
133+
}
134+
}
135+
136+
#[test]
137+
fn to_value() {
138+
let grades = [
139+
YosemiteDecimalGrade { grade: 9, letter: None },
140+
YosemiteDecimalGrade { grade: 10, letter: Some(YosemiteDecimalLetter::A) },
141+
YosemiteDecimalGrade { grade: 10, letter: Some(YosemiteDecimalLetter::B) },
142+
YosemiteDecimalGrade { grade: 10, letter: Some(YosemiteDecimalLetter::C) },
143+
YosemiteDecimalGrade { grade: 10, letter: Some(YosemiteDecimalLetter::D) },
144+
];
145+
146+
let expected = [
147+
"5.9",
148+
"5.10a",
149+
"5.10b",
150+
"5.10c",
151+
"5.10d",
152+
];
153+
154+
for (g, e) in grades.iter().zip(expected.iter()) {
155+
assert_eq!(g.to_value(), Value::String(e.to_string()));
156+
}
157+
}
158+
}

0 commit comments

Comments
 (0)