mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-05 09:48:44 +00:00
paging works correctly.
This commit is contained in:
1 parent
cda690773f
commit
130e0daa08
1 file changed
+290
-99
@@ -3,8 +3,9 @@ mod tests {
|
||||
use std::result;
|
||||
|
||||
use anyhow::Ok;
|
||||
use enums::by_table::model_weights::{weights_types, weights_category};
|
||||
use sqlx::{MySqlPool, Acquire};
|
||||
use chrono::offset;
|
||||
use enums::by_table::model_weights::{ weights_types, weights_category };
|
||||
use sqlx::{ MySqlPool, Acquire };
|
||||
use rand::Rng;
|
||||
|
||||
use tokio;
|
||||
@@ -24,7 +25,12 @@ mod tests {
|
||||
use crate::queries::model_weights::create_weight::create_weight;
|
||||
use crate::queries::model_weights::get_weight::get_weight_by_token;
|
||||
|
||||
use crate::queries::model_weights::delete_weights::{ delete_weights_as_user, delete_weights_as_mod, undelete_weights_as_mod , undelete_weights_as_user};
|
||||
use crate::queries::model_weights::delete_weights::{
|
||||
delete_weights_as_user,
|
||||
delete_weights_as_mod,
|
||||
undelete_weights_as_mod,
|
||||
undelete_weights_as_user,
|
||||
};
|
||||
use crate::queries::model_weights::list_weights_by_user::list_weights_by_creator_username;
|
||||
|
||||
use crate::queries::model_weights::list_weights_query_builder::ListWeightsQueryBuilder;
|
||||
@@ -45,23 +51,19 @@ mod tests {
|
||||
|
||||
pub async fn delete_all_weights_for_table(mysql_pool: &MySqlPool) -> AnyhowResult<()> {
|
||||
// write a query that deletes all weights
|
||||
let _r = sqlx::query("DELETE FROM model_weights")
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
let _r = sqlx::query("DELETE FROM model_weights").execute(mysql_pool).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn test_create_weights() -> AnyhowResult<()> {
|
||||
|
||||
let pool = setup().await;
|
||||
// create a random token for the model weight
|
||||
let mut rng = rand::thread_rng();
|
||||
let random_number: u32 = rng.gen();
|
||||
let model_weight_token1 = ModelWeightToken(random_number.to_string());
|
||||
|
||||
|
||||
let creator_token1 = UserToken("creatorToken!1".to_string());
|
||||
|
||||
let args = CreateModelWeightsArgs {
|
||||
@@ -131,7 +133,6 @@ mod tests {
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn test_delete_and_undelete_weights_user() -> AnyhowResult<()> {
|
||||
|
||||
let pool = setup().await;
|
||||
// create a random token for the model weight
|
||||
let mut rng = rand::thread_rng();
|
||||
@@ -170,7 +171,7 @@ mod tests {
|
||||
create_weight(args).await?;
|
||||
|
||||
delete_weights_as_user(&model_weight_token1, &pool).await?;
|
||||
|
||||
|
||||
let result = get_weight_by_token(&model_weight_token1, true, &pool).await?;
|
||||
let result = result.unwrap();
|
||||
|
||||
@@ -261,7 +262,6 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
undelete_weights_as_mod(&model_weight_token1, &pool).await?;
|
||||
let result = get_weight_by_token(&model_weight_token1, true, &pool).await?;
|
||||
let result = result.unwrap();
|
||||
@@ -285,13 +285,22 @@ mod tests {
|
||||
#[serial]
|
||||
async fn list_all_weights_by_user() -> AnyhowResult<()> {
|
||||
let pool = setup().await;
|
||||
|
||||
|
||||
let creator_username = "hanashi".to_string();
|
||||
let can_see_deleted = true;
|
||||
|
||||
seed_weights_with_category_and_type(WeightsType::LoRA,WeightsCategory::ImageGeneration,5,&creator_username).await?;
|
||||
seed_weights_with_category_and_type(
|
||||
WeightsType::LoRA,
|
||||
WeightsCategory::ImageGeneration,
|
||||
5,
|
||||
&creator_username
|
||||
).await?;
|
||||
|
||||
let weights_by_username = list_weights_by_creator_username(&pool, &creator_username, can_see_deleted).await?;
|
||||
let weights_by_username = list_weights_by_creator_username(
|
||||
&pool,
|
||||
&creator_username,
|
||||
can_see_deleted
|
||||
).await?;
|
||||
for weight in weights_by_username.iter() {
|
||||
// print weight
|
||||
println!("weight: {:?}", weight.creator_username);
|
||||
@@ -301,23 +310,29 @@ mod tests {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn seed_weights_with_category_and_type(weights_type:WeightsType,weights_category:WeightsCategory,number_of_items:u32,creator_username:&str) -> AnyhowResult<()> {
|
||||
|
||||
async fn seed_weights_with_category_and_type(
|
||||
weights_type: WeightsType,
|
||||
weights_category: WeightsCategory,
|
||||
number_of_items: u32,
|
||||
creator_username: &str
|
||||
) -> AnyhowResult<()> {
|
||||
let pool = setup().await;
|
||||
let creator_token = get_user_token_by_username(&creator_username, &pool).await?.unwrap_or_else(
|
||||
|| panic!("Could not find user with username {}", creator_username)
|
||||
let creator_token = get_user_token_by_username(
|
||||
&creator_username,
|
||||
&pool
|
||||
).await?.unwrap_or_else(||
|
||||
panic!("Could not find user with username {}", creator_username)
|
||||
);
|
||||
|
||||
for i in 0..number_of_items {
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
let number: u32 = rng.gen();
|
||||
|
||||
let model_weight_token = ModelWeightToken(number.to_string());
|
||||
|
||||
|
||||
let args = CreateModelWeightsArgs {
|
||||
token: &model_weight_token, // replace with actual ModelWeightToken
|
||||
weights_type:weights_type, // replace with actual WeightsType
|
||||
weights_type: weights_type, // replace with actual WeightsType
|
||||
weights_category: weights_category, // replace with actual WeightsCategory
|
||||
title: format!("Title {}", i),
|
||||
maybe_thumbnail_token: Some(format!("Thumbnail {}", i)),
|
||||
@@ -346,7 +361,6 @@ mod tests {
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
}
|
||||
|
||||
// Tests paging for the list weights query builder
|
||||
@@ -356,40 +370,45 @@ mod tests {
|
||||
let pool = setup().await;
|
||||
let creator_username = "hanashi".to_string();
|
||||
|
||||
seed_weights_with_category_and_type(WeightsType::LoRA,WeightsCategory::ImageGeneration,20,&creator_username).await?;
|
||||
|
||||
seed_weights_with_category_and_type(
|
||||
WeightsType::LoRA,
|
||||
WeightsCategory::ImageGeneration,
|
||||
20,
|
||||
&creator_username
|
||||
).await?;
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false);
|
||||
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
|
||||
// let result = qb.perform_query_for_page(&pool).await?;
|
||||
assert_eq!(result.weights.len(), 10);
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.offset(Some(10))
|
||||
.limit(10);
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.offset(Some(10))
|
||||
.limit(10);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
assert_eq!(result.weights.len(), 10);
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.offset(Some(10))
|
||||
.limit(10);
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.offset(Some(10))
|
||||
.limit(10);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
@@ -398,27 +417,31 @@ mod tests {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn list_weights_query_build_test_asc_desc_cursor_reverse() -> AnyhowResult<()> {
|
||||
let pool = setup().await;
|
||||
let creator_username = "hanashi".to_string();
|
||||
|
||||
seed_weights_with_category_and_type(WeightsType::LoRA,WeightsCategory::ImageGeneration,10,&creator_username).await?;
|
||||
|
||||
seed_weights_with_category_and_type(
|
||||
WeightsType::LoRA,
|
||||
WeightsCategory::ImageGeneration,
|
||||
10,
|
||||
&creator_username
|
||||
).await?;
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(true)
|
||||
.cursor_is_reversed(false);
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(true)
|
||||
.cursor_is_reversed(false);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
|
||||
// write code that will loop through the result and check if the ids are in ascending order
|
||||
let mut previous_id = 0;
|
||||
for weight in result.weights.iter() {
|
||||
@@ -428,19 +451,18 @@ mod tests {
|
||||
}
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(false)
|
||||
.cursor_is_reversed(true);
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(false)
|
||||
.cursor_is_reversed(true);
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
// write code that will loop through the result and check if the ids are in descending order
|
||||
let mut previous_id
|
||||
= 10000;
|
||||
let mut previous_id = 10000;
|
||||
for weight in result.weights.iter() {
|
||||
let current_id = weight.weight_id;
|
||||
assert!(current_id < previous_id);
|
||||
@@ -456,18 +478,23 @@ mod tests {
|
||||
let pool = setup().await;
|
||||
let creator_username = "hanashi".to_string();
|
||||
|
||||
seed_weights_with_category_and_type(WeightsType::LoRA,WeightsCategory::ImageGeneration,10,&creator_username).await?;
|
||||
|
||||
seed_weights_with_category_and_type(
|
||||
WeightsType::LoRA,
|
||||
WeightsCategory::ImageGeneration,
|
||||
10,
|
||||
&creator_username
|
||||
).await?;
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(true);
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(true);
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
|
||||
// write code that will loop through the result and check if the ids are in ascending order
|
||||
let mut previous_id = 0;
|
||||
for weight in result.weights.iter() {
|
||||
@@ -477,19 +504,18 @@ mod tests {
|
||||
}
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(false);
|
||||
.offset(Some(0))
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10)
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(false);
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
// write code that will loop through the result and check if the ids are in descending order
|
||||
|
||||
let mut previous_id
|
||||
= 10000;
|
||||
let mut previous_id = 10000;
|
||||
for weight in result.weights.iter() {
|
||||
let current_id = weight.weight_id;
|
||||
assert!(current_id < previous_id);
|
||||
@@ -503,11 +529,14 @@ mod tests {
|
||||
#[serial]
|
||||
async fn list_weights_query_build_test() -> AnyhowResult<()> {
|
||||
let pool = setup().await;
|
||||
|
||||
|
||||
let creator_username = "hanashi".to_string();
|
||||
|
||||
let creator_token = get_user_token_by_username(&creator_username, &pool).await?.unwrap_or_else(
|
||||
|| panic!("Could not find user with username {}", creator_username)
|
||||
let creator_token = get_user_token_by_username(
|
||||
&creator_username,
|
||||
&pool
|
||||
).await?.unwrap_or_else(||
|
||||
panic!("Could not find user with username {}", creator_username)
|
||||
);
|
||||
|
||||
for i in 0..6 {
|
||||
@@ -519,7 +548,7 @@ mod tests {
|
||||
WeightsType::RvcV2
|
||||
} else if i % 5 == 3 {
|
||||
WeightsType::StableDiffusionXL
|
||||
} else if i ^ 5 == 4 {
|
||||
} else if (i ^ 5) == 4 {
|
||||
WeightsType::SoVitsSvc
|
||||
} else {
|
||||
WeightsType::StableDiffusion15
|
||||
@@ -533,7 +562,7 @@ mod tests {
|
||||
WeightsCategory::VoiceConversion
|
||||
} else if i % 5 == 3 {
|
||||
WeightsCategory::ImageGeneration
|
||||
} else if i ^ 5 == 4 {
|
||||
} else if (i ^ 5) == 4 {
|
||||
WeightsCategory::VoiceConversion
|
||||
} else {
|
||||
WeightsCategory::ImageGeneration
|
||||
@@ -543,10 +572,10 @@ mod tests {
|
||||
let number: u32 = rng.gen();
|
||||
|
||||
let model_weight_token = ModelWeightToken(number.to_string());
|
||||
|
||||
|
||||
let args = CreateModelWeightsArgs {
|
||||
token: &model_weight_token, // replace with actual ModelWeightToken
|
||||
weights_type:weights_type, // replace with actual WeightsType
|
||||
weights_type: weights_type, // replace with actual WeightsType
|
||||
weights_category: weights_category, // replace with actual WeightsCategory
|
||||
title: format!("Title {}", i),
|
||||
maybe_thumbnail_token: Some(format!("Thumbnail {}", i)),
|
||||
@@ -581,18 +610,18 @@ mod tests {
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false);
|
||||
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
assert_eq!(result.weights.len(), 2);
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false);
|
||||
.weights_type(Some(WeightsType::LoRA))
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
assert_eq!(result.weights.len(), 1);
|
||||
assert_eq!(result.weights[0].weights_category, WeightsCategory::ImageGeneration);
|
||||
assert_eq!(result.weights[0].weights_type, WeightsType::LoRA);
|
||||
@@ -600,6 +629,168 @@ mod tests {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn list_weights_query_builder_page_type_and_category() -> AnyhowResult<()> {
|
||||
let db_connection_string = DEFAULT_MYSQL_CONNECTION_STRING;
|
||||
let pool = MySqlPoolOptions::new()
|
||||
.max_connections(3)
|
||||
.connect(&db_connection_string).await
|
||||
.unwrap();
|
||||
// using the seeded weights from the previous test
|
||||
let creator_username = "hanashi".to_string();
|
||||
|
||||
for i in 0..4 {
|
||||
let weights_types = vec![
|
||||
WeightsType::HifiganTacotron2,
|
||||
WeightsType::LoRA,
|
||||
WeightsType::RvcV2,
|
||||
WeightsType::StableDiffusionXL
|
||||
];
|
||||
|
||||
let weights_type = weights_types[i as usize];
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.weights_type(Some(weights_type))
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false);
|
||||
|
||||
println!("weights_type: {:?}", weights_type);
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
assert_eq!(result.weights.len(), 20, "Should be 20 weights");
|
||||
assert_eq!(
|
||||
result.weights[0].weights_type,
|
||||
weights_type,
|
||||
"Should be the same weights type"
|
||||
);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn list_weight_query_builder_all() -> AnyhowResult<()> {
|
||||
let db_connection_string = DEFAULT_MYSQL_CONNECTION_STRING;
|
||||
let pool = MySqlPoolOptions::new()
|
||||
.max_connections(3)
|
||||
.connect(&db_connection_string).await
|
||||
.unwrap();
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.limit(11);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
assert_eq!(result.weights.len(), 11);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn list_limits() -> AnyhowResult<()> {
|
||||
let db_connection_string = DEFAULT_MYSQL_CONNECTION_STRING;
|
||||
|
||||
let pool = MySqlPoolOptions::new()
|
||||
.max_connections(3)
|
||||
.connect(&db_connection_string).await
|
||||
.unwrap();
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(10);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
assert_eq!(result.weights.len(), 10);
|
||||
assert_eq!(result.weights[0].weights_category, WeightsCategory::ImageGeneration);
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
// by default 25
|
||||
assert_eq!(result.weights.len(), 25);
|
||||
assert_eq!(result.weights[0].weights_category, WeightsCategory::ImageGeneration);
|
||||
// over query limit
|
||||
let qb: ListWeightsQueryBuilder = ListWeightsQueryBuilder::new()
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(80);
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
assert_eq!(result.weights.len(), 60);
|
||||
// pick a random value in here
|
||||
assert_eq!(result.weights[9].weights_category, WeightsCategory::ImageGeneration);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn page_across_a_category() -> AnyhowResult<()> {
|
||||
// paging across a category and it works
|
||||
let db_connection_string = DEFAULT_MYSQL_CONNECTION_STRING;
|
||||
// how we implement paging.
|
||||
let page:u16 = 0;
|
||||
let page_size: u16 = 20;
|
||||
|
||||
let pool = MySqlPoolOptions::new()
|
||||
.max_connections(3)
|
||||
.connect(&db_connection_string).await
|
||||
.unwrap();
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.sort_ascending(true)
|
||||
.limit(page_size);
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
assert_eq!(result.weights.len(), page_size as usize);
|
||||
assert_eq!(result.weights[0].weights_category, WeightsCategory::ImageGeneration);
|
||||
|
||||
let page = 1;
|
||||
let offset = page * page_size;
|
||||
|
||||
assert_eq!(result.weights.len(), page_size as usize);
|
||||
assert_eq!(result.weights[0].weights_category, WeightsCategory::ImageGeneration);
|
||||
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(page_size)
|
||||
.sort_ascending(true)
|
||||
.offset(Some(offset.into()));
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
let page = 2;
|
||||
let offset = page * page_size;
|
||||
|
||||
assert_eq!(result.weights.len(), page_size as usize);
|
||||
assert_eq!(result.weights[0].weights_category, WeightsCategory::ImageGeneration);
|
||||
|
||||
let qb = ListWeightsQueryBuilder::new()
|
||||
.scope_creator_username(Some("hanashi"))
|
||||
.include_user_deleted_results(false)
|
||||
.sort_ascending(true)
|
||||
.weights_category(Some(WeightsCategory::ImageGeneration))
|
||||
.limit(page_size)
|
||||
.offset(Some(offset.into()));
|
||||
|
||||
let result = qb.perform_query_for_page(&pool).await?;
|
||||
|
||||
assert_eq!(result.weights.len(), page_size as usize);
|
||||
assert_eq!(result.weights[0].weights_category, WeightsCategory::ImageGeneration);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user