From b44ac55bc26ab993eea2e683941c0d98277f6d57 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Sat, 4 Oct 2025 05:47:00 -0700 Subject: [PATCH] Fix broken environment migration --- plugins/importer-yaak/src/index.ts | 4 ++-- src-tauri/yaak-sync/src/models.rs | 31 +++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/plugins/importer-yaak/src/index.ts b/plugins/importer-yaak/src/index.ts index e5907c8a..4dc72724 100644 --- a/plugins/importer-yaak/src/index.ts +++ b/plugins/importer-yaak/src/index.ts @@ -68,11 +68,11 @@ export function migrateImport(contents: string) { // Migrate v4 to v5 for (const environment of parsed.resources.environments ?? []) { - if ('base' in environment && environment.base) { + if ('base' in environment && environment.base && environment.parentModel == null) { environment.parentModel = 'workspace'; environment.parentId = null; delete environment.base; - } else if ('base' in environment && !environment.base) { + } else if ('base' in environment && !environment.base && environment.parentModel == null) { environment.parentModel = 'environment'; environment.parentId = null; delete environment.base; diff --git a/src-tauri/yaak-sync/src/models.rs b/src-tauri/yaak-sync/src/models.rs index 1d0ccad5..ee5d8c6d 100644 --- a/src-tauri/yaak-sync/src/models.rs +++ b/src-tauri/yaak-sync/src/models.rs @@ -84,8 +84,9 @@ impl<'de> Deserialize<'de> for SyncModel { } fn migrate_environment(obj: &mut Mapping) { - match obj.get("base") { - Some(Value::Bool(base)) => { + match (obj.get("base"), obj.get("parentModel")) { + (Some(Value::Bool(base)), None) => { + println!("Migrating legacy environment {}", serde_yaml::to_string(obj).unwrap()); if *base { obj.insert("parentModel".into(), "workspace".into()); } else { @@ -220,7 +221,7 @@ impl TryFrom for SyncModel { } #[cfg(test)] -mod placeholder_tests { +mod migration_tests { use crate::error::Result; use crate::models::SyncModel; @@ -271,6 +272,30 @@ color: null _ => panic!("expected sub environment"), } + let raw = r#" +type: environment +model: environment +id: ev_fAUS49FUN2 +parentId: fld_123 +parentModel: folder +workspaceId: wk_kfSI3JDHd7 +createdAt: 2025-01-11T17:02:58.012792 +updatedAt: 2025-07-23T20:00:46.049649 +name: Folder Environment +public: true +base: false +variables: [] +color: null +"#; + let m: SyncModel = serde_yaml::from_str(raw)?; + match m { + SyncModel::Environment(env) => { + assert_eq!(env.parent_model, "folder".to_string()); + assert_eq!(env.parent_id, Some("fld_123".to_string())); + } + _ => panic!("expected folder environment"), + } + Ok(()) } }