in components/places/src/storage/history.rs [3097:3269]
fn test_get_visit_page_with_bound() {
use std::time::SystemTime;
let conn = PlacesDb::open_in_memory(ConnectionType::ReadWrite).expect("no memory db");
let now: Timestamp = SystemTime::now().into();
let now_u64 = now.0;
let now_i64 = now.0 as i64;
// (url, title, when, is_remote, (expected_always, expected_only_local)
let to_add = [
(
"https://www.example.com/0",
"older 2",
now_u64 - 200_200,
false,
(true, false),
),
(
"https://www.example.com/1",
"older 1",
now_u64 - 200_100,
true,
(true, false),
),
(
"https://www.example.com/2",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/3",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/4",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/5",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/6",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/7",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/8",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/9",
"same time",
now_u64 - 200_000,
false,
(true, false),
),
(
"https://www.example.com/10",
"more recent 2",
now_u64 - 199_000,
false,
(true, false),
),
(
"https://www.example.com/11",
"more recent 1",
now_u64 - 198_000,
false,
(true, false),
),
];
for &(url, title, when, remote, _) in &to_add {
apply_observation(
&conn,
VisitObservation::new(Url::parse(url).unwrap())
.with_title(title.to_owned())
.with_at(Timestamp(when))
.with_is_remote(remote)
.with_visit_type(VisitType::Link),
)
.expect("Should apply visit");
}
// test when offset fall on a point where visited_date changes
let infos_with_bound =
get_visit_page_with_bound(&conn, now_i64 - 200_000, 8, 2, VisitTransitionSet::empty())
.unwrap();
let infos = infos_with_bound.infos;
assert_eq!(infos[0].title.as_ref().unwrap().as_str(), "older 1",);
assert!(infos[0].is_remote); // "older 1" is remote
assert_eq!(infos[1].title.as_ref().unwrap().as_str(), "older 2",);
assert!(!infos[1].is_remote); // "older 2" is local
assert_eq!(infos_with_bound.bound, now_i64 - 200_200,);
assert_eq!(infos_with_bound.offset, 1,);
// test when offset fall on one item before visited_date changes
let infos_with_bound =
get_visit_page_with_bound(&conn, now_i64 - 200_000, 7, 1, VisitTransitionSet::empty())
.unwrap();
assert_eq!(
infos_with_bound.infos[0].url,
Url::parse("https://www.example.com/9").unwrap(),
);
// test when offset fall on one item after visited_date changes
let infos_with_bound =
get_visit_page_with_bound(&conn, now_i64 - 200_000, 9, 1, VisitTransitionSet::empty())
.unwrap();
assert_eq!(
infos_with_bound.infos[0].title.as_ref().unwrap().as_str(),
"older 2",
);
// with a small page length, loop through items that have the same visited date
let count = 2;
let mut bound = now_i64 - 199_000;
let mut offset = 1;
for _i in 0..4 {
let infos_with_bound =
get_visit_page_with_bound(&conn, bound, offset, count, VisitTransitionSet::empty())
.unwrap();
assert_eq!(
infos_with_bound.infos[0].title.as_ref().unwrap().as_str(),
"same time",
);
assert_eq!(
infos_with_bound.infos[1].title.as_ref().unwrap().as_str(),
"same time",
);
bound = infos_with_bound.bound;
offset = infos_with_bound.offset;
}
// bound and offset should have skipped the 8 items that have the same visited date
assert_eq!(bound, now_i64 - 200_000,);
assert_eq!(offset, 8,);
// when bound is now and offset is zero
let infos_with_bound =
get_visit_page_with_bound(&conn, now_i64, 0, 2, VisitTransitionSet::empty()).unwrap();
assert_eq!(
infos_with_bound.infos[0].title.as_ref().unwrap().as_str(),
"more recent 1",
);
assert_eq!(
infos_with_bound.infos[1].title.as_ref().unwrap().as_str(),
"more recent 2",
);
assert_eq!(infos_with_bound.bound, now_i64 - 199_000);
assert_eq!(infos_with_bound.offset, 1);
}