Added language inforation into session.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
2026-03-20 09:31:56 -04:00
parent 9e81e17a23
commit 5ec1330a73
5 changed files with 117 additions and 24 deletions

View File

@@ -1,4 +1,5 @@
use chrono::{DateTime, Utc};
use isolang::Language;
use morethantext::{
action::{Addition, CalcValue, Calculation, Field, FieldType, Operand, Query, Record},
Action, ErrorID, Include, MTTError, MoreThanText, Name, Path, TestMoreThanText, Update,
@@ -29,7 +30,7 @@ fn are_session_ids_unique() {
let count = 10;
let mut result: Vec<Uuid> = Vec::new();
for _ in 0..count {
let id = mtt.validate_session(None);
let id = mtt.validate_session(None, None);
assert!(!result.contains(&id), "found {} in {:?}", id, result);
result.push(id);
}
@@ -38,24 +39,24 @@ fn are_session_ids_unique() {
#[test]
fn bad_session_id_returns_new_id() {
let mut mtt = MoreThanText::new();
let id1 = mtt.validate_session(Some("stuff".to_string()));
let id2 = mtt.validate_session(Some("stuff".to_string()));
let id1 = mtt.validate_session(Some("stuff".to_string()), None);
let id2 = mtt.validate_session(Some("stuff".to_string()), None);
assert_ne!(id1, id2);
}
#[test]
fn creates_new_session_if_bad_or_expired() {
let mut mtt = MoreThanText::new();
let id1 = mtt.validate_session(Some(Uuid::nil().to_string()));
let id2 = mtt.validate_session(Some(Uuid::nil().to_string()));
let id1 = mtt.validate_session(Some(Uuid::nil().to_string()), None);
let id2 = mtt.validate_session(Some(Uuid::nil().to_string()), None);
assert_ne!(id1, id2);
}
#[test]
fn returns_same_session_id_when_valid() {
let mut mtt = MoreThanText::new();
let id = mtt.validate_session(None);
let result = mtt.validate_session(Some(id.to_string()));
let id = mtt.validate_session(None, None);
let result = mtt.validate_session(Some(id.to_string()), None);
assert_eq!(result, id);
}
@@ -63,7 +64,7 @@ fn returns_same_session_id_when_valid() {
fn is_expiration_date_set_in_the_future() {
let mut mtt = MoreThanText::new();
let start_time = Utc::now() + Duration::from_hours(1);
let id = mtt.validate_session(None);
let id = mtt.validate_session(None, None);
let end_time = Utc::now() + Duration::from_hours(1);
let rec = get_session(&mut mtt, &id).unwrap();
let holder = rec.get(Name::english("expire")).unwrap();
@@ -80,7 +81,7 @@ fn is_expiration_date_set_in_the_future() {
fn are_session_ids_unique_on_update() {
let mut mtt = MoreThanText::new();
let id_name = Name::english("id");
let id = mtt.validate_session(None);
let id = mtt.validate_session(None, None);
let mut addition = Addition::new(doc_name());
addition.add_field(id_name.clone(), id);
let mut error = MTTError::new(ErrorID::IndexEntryAlreadyExists(id.into()));
@@ -98,7 +99,7 @@ fn does_expire_updates_on_query() {
let expire_name = Name::english("expire");
let mut test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let id = mtt.validate_session(None);
let id = mtt.validate_session(None, None);
let path = Path::new(
Include::All,
Include::Just(doc_name().into()),
@@ -106,7 +107,7 @@ fn does_expire_updates_on_query() {
);
test_env.register_channel(vec![path]);
let start_time: Field = (Utc::now() + Duration::from_secs(3600)).into();
mtt.validate_session(Some(id.to_string()));
mtt.validate_session(Some(id.to_string()), None);
let end_time: Field = (Utc::now() + Duration::from_secs(3601)).into();
let result = test_env.get_trigger_records(Action::OnUpdate);
assert_eq!(result.len(), 1);
@@ -123,9 +124,9 @@ fn are_expired_sessions_removed() {
let mut test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
for _ in 0..5 {
mtt.validate_session(None);
mtt.validate_session(None, None);
}
let id = mtt.validate_session(None);
let id = mtt.validate_session(None, None);
let mut update = Update::new(doc_name());
let mut calc = Calculation::new(Operand::Equal);
calc.add_value(CalcValue::Existing(FieldType::Uuid))
@@ -149,3 +150,62 @@ fn are_expired_sessions_removed() {
let rec = result.iter().last().unwrap();
assert_eq!(rec.get(id_name).unwrap(), id.into());
}
#[test]
fn is_english_the_default_language() {
let lang_name = Name::english("language");
let lang = Language::from_639_1("en").unwrap();
let mut test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let path = Path::new(
Include::All,
Include::Just(doc_name().into()),
Include::Just(Action::OnAddition),
);
test_env.register_channel(vec![path]);
let id = mtt.validate_session(None, None);
let result = test_env.get_trigger_records(Action::OnAddition);
assert_eq!(result.len(), 1, "incorrect number of records");
let rec = result.iter().last().unwrap();
assert_eq!(rec.get(&lang_name).unwrap(), lang.into());
}
#[test]
fn can_language_be_assigned() {
let lang_name = Name::english("language");
let lang = Language::from_639_1("ja").unwrap();
let mut test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let path = Path::new(
Include::All,
Include::Just(doc_name().into()),
Include::Just(Action::OnAddition),
);
test_env.register_channel(vec![path]);
let id = mtt.validate_session(None, Some(lang.clone()));
let result = test_env.get_trigger_records(Action::OnAddition);
assert_eq!(result.len(), 1, "incorrect number of records");
let rec = result.iter().last().unwrap();
assert_eq!(rec.get(&lang_name).unwrap(), lang.into());
}
#[test]
fn does_not_change_language() {
let lang_name = Name::english("language");
let elang = Language::from_639_1("en").unwrap();
let jlang = Language::from_639_1("ja").unwrap();
let mut test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let id = mtt.validate_session(None, Some(jlang.clone()));
let path = Path::new(
Include::All,
Include::Just(doc_name().into()),
Include::Just(Action::OnUpdate),
);
test_env.register_channel(vec![path]);
mtt.validate_session(Some(id.to_string()), Some(elang.clone()));
let result = test_env.get_trigger_records(Action::OnUpdate);
assert_eq!(result.len(), 1, "incorrect number of records");
let rec = result.iter().last().unwrap();
assert_eq!(rec.get(&lang_name).unwrap(), jlang.into());
}