Skip to content

Commit 22c4418

Browse files
committed
feat: cell reader writer test and improv
1 parent 2eb21a1 commit 22c4418

File tree

3 files changed

+140
-8
lines changed

3 files changed

+140
-8
lines changed

collab-database/src/fields/type_option/number_type_option.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl From<NumberTypeOption> for TypeOptionData {
6868
impl TypeOptionCellReader for NumberTypeOption {
6969
fn json_cell(&self, cell: &Cell) -> Value {
7070
// Returns the formated number string.
71-
Value::String(self.stringify_cell(cell))
71+
self.stringify_cell(cell).into()
7272
}
7373

7474
fn numeric_cell(&self, cell: &Cell) -> Option<f64> {
@@ -763,6 +763,10 @@ impl NumberFormat {
763763

764764
#[cfg(test)]
765765
mod tests {
766+
use collab::util::AnyMapExt;
767+
768+
use crate::template::entity::CELL_DATA;
769+
766770
use super::*;
767771
/// Testing when the input is not a number.
768772
#[test]
@@ -831,4 +835,34 @@ mod tests {
831835
let output = type_option.convert_raw_cell_data(input_str);
832836
assert_eq!(output, expected_str.to_owned());
833837
}
838+
839+
#[test]
840+
fn number_cell_to_serde() {
841+
let number_type_option = NumberTypeOption::default();
842+
let cell_writer: Box<dyn TypeOptionCellReader> = Box::new(number_type_option);
843+
{
844+
let mut cell: Cell = new_cell_builder(FieldType::RichText);
845+
cell.insert(CELL_DATA.into(), "42".into());
846+
let serde_val = cell_writer.json_cell(&cell);
847+
assert_eq!(serde_val, Value::String("42".into()));
848+
}
849+
}
850+
851+
#[test]
852+
fn number_serde_to_cell() {
853+
let number_type_option = NumberTypeOption::default();
854+
let cell_writer: Box<dyn TypeOptionCellWriter> = Box::new(number_type_option);
855+
{
856+
// js string
857+
let cell: Cell = cell_writer.convert_json_to_cell(Value::String("42.195".to_string()));
858+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
859+
assert_eq!(data, "42.195");
860+
}
861+
{
862+
// js number
863+
let cell: Cell = cell_writer.convert_json_to_cell(Value::Number(10.into()));
864+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
865+
assert_eq!(data, "10");
866+
}
867+
}
834868
}

collab-database/src/fields/type_option/select_type_option.rs

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ mod tests {
614614
}
615615

616616
#[test]
617-
fn test_single_select_option_serialization() {
617+
fn single_select_cell_to_serde() {
618618
let options = vec![SelectOption::new("Option 1"), SelectOption::new("Option 2")];
619619
let option_1_id = options[0].id.clone();
620620
let select_type_option = SelectTypeOption {
@@ -630,7 +630,7 @@ mod tests {
630630
}
631631

632632
#[test]
633-
fn test_multi_select_option_serialization() {
633+
fn multi_select_cell_to_serde() {
634634
let options = vec![SelectOption::new("Option 1"), SelectOption::new("Option 2")];
635635
let option_1_id = options[0].id.clone();
636636
let option_2_id = options[1].id.clone();
@@ -640,13 +640,13 @@ mod tests {
640640
};
641641

642642
let multi_selection_type_option = MultiSelectTypeOption(select_type_option);
643-
let single_select_cell_reader: Box<dyn TypeOptionCellReader> =
643+
let multi_select_cell_reader: Box<dyn TypeOptionCellReader> =
644644
Box::new(multi_selection_type_option);
645645
{
646646
// single select
647647
let mut cell: Cell = new_cell_builder(FieldType::MultiSelect);
648648
cell.insert(CELL_DATA.into(), option_1_id.clone().into());
649-
let serde_val = single_select_cell_reader.json_cell(&cell);
649+
let serde_val = multi_select_cell_reader.json_cell(&cell);
650650
assert_eq!(
651651
serde_val,
652652
Value::Array(vec![Value::String("Option 1".to_string())])
@@ -656,7 +656,7 @@ mod tests {
656656
// double select
657657
let mut cell: Cell = new_cell_builder(FieldType::MultiSelect);
658658
cell.insert(CELL_DATA.into(), (option_1_id + "," + &option_2_id).into());
659-
let serde_val = single_select_cell_reader.json_cell(&cell);
659+
let serde_val = multi_select_cell_reader.json_cell(&cell);
660660
assert_eq!(
661661
serde_val,
662662
Value::Array(vec![
@@ -668,8 +668,62 @@ mod tests {
668668
{
669669
// no select
670670
let cell: Cell = new_cell_builder(FieldType::MultiSelect);
671-
let serde_val = single_select_cell_reader.json_cell(&cell);
671+
let serde_val = multi_select_cell_reader.json_cell(&cell);
672672
assert_eq!(serde_val, Value::Array(vec![]));
673673
}
674674
}
675+
676+
#[test]
677+
fn single_select_serde_to_cell() {
678+
let options = vec![SelectOption::new("Option 1"), SelectOption::new("Option 2")];
679+
let option_1_id = options[0].id.clone();
680+
let select_type_option = SelectTypeOption {
681+
options,
682+
disable_color: false,
683+
};
684+
let single_select = SingleSelectTypeOption(select_type_option);
685+
686+
let cell_writer: Box<dyn TypeOptionCellWriter> = Box::new(single_select);
687+
{
688+
let cell: Cell = cell_writer.convert_json_to_cell(Value::String("Option 1".to_string()));
689+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
690+
assert_eq!(data, option_1_id);
691+
}
692+
}
693+
694+
#[test]
695+
fn multi_select_serde_to_cell() {
696+
let options = vec![SelectOption::new("Option 1"), SelectOption::new("Option 2")];
697+
let option_1_id = options[0].id.clone();
698+
let option_2_id = options[1].id.clone();
699+
let select_type_option = SelectTypeOption {
700+
options,
701+
disable_color: false,
702+
};
703+
let single_select = SingleSelectTypeOption(select_type_option);
704+
705+
let cell_writer: Box<dyn TypeOptionCellWriter> = Box::new(single_select);
706+
{
707+
// No select
708+
let cell: Cell = cell_writer.convert_json_to_cell(Value::Array(vec![]));
709+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
710+
assert_eq!(data, "");
711+
}
712+
{
713+
// 1 select
714+
let cell: Cell =
715+
cell_writer.convert_json_to_cell(Value::Array(vec![Value::String("Option 1".to_string())]));
716+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
717+
assert_eq!(data, option_1_id);
718+
}
719+
{
720+
// 2 select
721+
let cell: Cell = cell_writer.convert_json_to_cell(Value::Array(vec![
722+
Value::String("Option 1".to_string()),
723+
Value::String("Option 2".to_string()),
724+
]));
725+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
726+
assert_eq!(data, option_1_id + "," + &option_2_id);
727+
}
728+
}
675729
}

collab-database/src/fields/type_option/text_type_option.rs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,14 @@ impl TypeOptionCellReader for RichTextTypeOption {
2727
impl TypeOptionCellWriter for RichTextTypeOption {
2828
fn convert_json_to_cell(&self, json_value: Value) -> Cell {
2929
let mut cell = new_cell_builder(FieldType::RichText);
30-
cell.insert(CELL_DATA.into(), json_value.to_string().into());
30+
match json_value {
31+
Value::String(value_str) => {
32+
cell.insert(CELL_DATA.into(), value_str.into());
33+
},
34+
_ => {
35+
cell.insert(CELL_DATA.into(), json_value.to_string().into());
36+
},
37+
}
3138
cell
3239
}
3340
}
@@ -43,3 +50,40 @@ impl From<RichTextTypeOption> for TypeOptionData {
4350
TypeOptionDataBuilder::new()
4451
}
4552
}
53+
54+
#[cfg(test)]
55+
mod tests {
56+
use super::*;
57+
use collab::util::AnyMapExt;
58+
use serde_json::Value;
59+
60+
#[test]
61+
fn rich_text_cell_to_serde() {
62+
let rich_text_type_option = RichTextTypeOption {};
63+
let cell_writer: Box<dyn TypeOptionCellReader> = Box::new(rich_text_type_option);
64+
{
65+
let mut cell: Cell = new_cell_builder(FieldType::RichText);
66+
cell.insert(CELL_DATA.into(), "helloworld".into());
67+
let serde_val = cell_writer.json_cell(&cell);
68+
assert_eq!(serde_val, Value::String("helloworld".to_string()));
69+
}
70+
}
71+
72+
#[test]
73+
fn rich_text_serde_to_cell() {
74+
let rich_text_type_option = RichTextTypeOption {};
75+
let cell_writer: Box<dyn TypeOptionCellWriter> = Box::new(rich_text_type_option);
76+
{
77+
// js string
78+
let cell: Cell = cell_writer.convert_json_to_cell(Value::String("helloworld".to_string()));
79+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
80+
assert_eq!(data, "helloworld");
81+
}
82+
{
83+
// js number
84+
let cell: Cell = cell_writer.convert_json_to_cell(Value::Number(10.into()));
85+
let data = cell.get_as::<String>(CELL_DATA).unwrap();
86+
assert_eq!(data, "10");
87+
}
88+
}
89+
}

0 commit comments

Comments
 (0)