mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-30 00:01:25 +00:00
Allow importing partial backup (fixes #4672)
This commit is contained in:
parent
b152be7951
commit
6cefdaee49
2 changed files with 326 additions and 294 deletions
575
Cargo.lock
generated
575
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -40,7 +40,7 @@ use tracing::info;
|
||||||
///
|
///
|
||||||
/// Be careful with any changes to this struct, to avoid breaking changes which could prevent
|
/// Be careful with any changes to this struct, to avoid breaking changes which could prevent
|
||||||
/// importing older backups.
|
/// importing older backups.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
|
||||||
pub struct UserSettingsBackup {
|
pub struct UserSettingsBackup {
|
||||||
pub display_name: Option<String>,
|
pub display_name: Option<String>,
|
||||||
pub bio: Option<String>,
|
pub bio: Option<String>,
|
||||||
|
@ -133,7 +133,8 @@ pub async fn import_settings(
|
||||||
local_user_view.local_user.id,
|
local_user_view.local_user.id,
|
||||||
&local_user_form,
|
&local_user_form,
|
||||||
)
|
)
|
||||||
.await?;
|
.await
|
||||||
|
.ok();
|
||||||
|
|
||||||
// Update the vote display mode settings
|
// Update the vote display mode settings
|
||||||
let vote_display_mode_form = LocalUserVoteDisplayModeUpdateForm {
|
let vote_display_mode_form = LocalUserVoteDisplayModeUpdateForm {
|
||||||
|
@ -322,7 +323,7 @@ pub async fn import_settings(
|
||||||
#[allow(clippy::indexing_slicing)]
|
#[allow(clippy::indexing_slicing)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
use crate::api::user_settings_backup::{export_settings, import_settings};
|
use crate::api::user_settings_backup::{export_settings, import_settings, UserSettingsBackup};
|
||||||
use activitypub_federation::config::Data;
|
use activitypub_federation::config::Data;
|
||||||
use lemmy_api_common::context::LemmyContext;
|
use lemmy_api_common::context::LemmyContext;
|
||||||
use lemmy_db_schema::{
|
use lemmy_db_schema::{
|
||||||
|
@ -420,6 +421,44 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
#[serial]
|
||||||
|
async fn test_settings_partial_import() -> LemmyResult<()> {
|
||||||
|
let context = LemmyContext::init_test_context().await;
|
||||||
|
|
||||||
|
let export_user =
|
||||||
|
create_user("hanna".to_string(), Some("my bio".to_string()), &context).await?;
|
||||||
|
|
||||||
|
let community_form = CommunityInsertForm::builder()
|
||||||
|
.name("testcom".to_string())
|
||||||
|
.title("testcom".to_string())
|
||||||
|
.instance_id(export_user.person.instance_id)
|
||||||
|
.build();
|
||||||
|
let community = Community::create(&mut context.pool(), &community_form).await?;
|
||||||
|
let follower_form = CommunityFollowerForm {
|
||||||
|
community_id: community.id,
|
||||||
|
person_id: export_user.person.id,
|
||||||
|
pending: false,
|
||||||
|
};
|
||||||
|
CommunityFollower::follow(&mut context.pool(), &follower_form).await?;
|
||||||
|
|
||||||
|
let backup = export_settings(export_user.clone(), context.reset_request_count()).await?;
|
||||||
|
|
||||||
|
let import_user = create_user("charles".to_string(), None, &context).await?;
|
||||||
|
|
||||||
|
let backup2 = UserSettingsBackup {
|
||||||
|
followed_communities: backup.followed_communities.clone(),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
import_settings(
|
||||||
|
actix_web::web::Json(backup2),
|
||||||
|
import_user.clone(),
|
||||||
|
context.reset_request_count(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
#[serial]
|
#[serial]
|
||||||
async fn disallow_large_backup() -> LemmyResult<()> {
|
async fn disallow_large_backup() -> LemmyResult<()> {
|
||||||
|
|
Loading…
Reference in a new issue