feat: preserve nested source projects across desktop and REST
This commit is contained in:
@@ -8,6 +8,9 @@ use serde_json::{Value, json};
|
||||
use std::{path::Path, sync::Arc};
|
||||
use tokio::{sync::oneshot, task::JoinHandle};
|
||||
|
||||
#[path = "http/source_projects.rs"]
|
||||
mod source_projects;
|
||||
|
||||
fn v2_missing_ports() -> Value {
|
||||
let mut old: Value = serde_json::from_slice(include_bytes!(
|
||||
"../../oa-core/tests/fixtures/v2-coastal-rescue.json"
|
||||
@@ -1590,6 +1593,7 @@ async fn failed_atomic_replacement_preserves_the_accepted_model() {
|
||||
let after = server.get(id).await;
|
||||
assert_eq!(after.revision, before.revision);
|
||||
assert_eq!(after.model, before.model);
|
||||
assert_eq!(after.source_project, before.source_project);
|
||||
std::fs::remove_dir(&envelope).unwrap();
|
||||
std::fs::write(&envelope, bytes).unwrap();
|
||||
server.stop().await;
|
||||
@@ -1605,19 +1609,23 @@ fn storage_rejects_second_owners_corruption_and_identity_mismatch() {
|
||||
let path = directory.path().join(format!("{filename}.json"));
|
||||
std::fs::write(&path, "{broken").unwrap();
|
||||
assert!(Store::open(directory.path()).is_err());
|
||||
let model = Project::empty();
|
||||
let mismatched = StoredProject {
|
||||
migration: None,
|
||||
resource_id: Id::new_v4(),
|
||||
revision: 1,
|
||||
model: Project::empty(),
|
||||
source_project: oa_core::source_project::format_bundle(&model),
|
||||
model,
|
||||
};
|
||||
std::fs::write(&path, serde_json::to_vec(&mismatched).unwrap()).unwrap();
|
||||
assert!(Store::open(directory.path()).is_err());
|
||||
let model = Project::empty();
|
||||
let invalid = StoredProject {
|
||||
migration: None,
|
||||
resource_id: filename,
|
||||
revision: 0,
|
||||
model: Project::empty(),
|
||||
source_project: oa_core::source_project::format_bundle(&model),
|
||||
model,
|
||||
};
|
||||
std::fs::write(&path, serde_json::to_vec(&invalid).unwrap()).unwrap();
|
||||
assert!(Store::open(directory.path()).is_err());
|
||||
@@ -1773,11 +1781,13 @@ async fn fixed_store_capacity_is_enforced_on_http_and_restart() {
|
||||
let directory = tempfile::tempdir().unwrap();
|
||||
let mut last = None;
|
||||
for _ in 0..oa_server::store::MAX_PROJECTS {
|
||||
let model = Project::empty();
|
||||
let envelope = StoredProject {
|
||||
migration: None,
|
||||
resource_id: Id::new_v4(),
|
||||
revision: 1,
|
||||
model: Project::empty(),
|
||||
source_project: oa_core::source_project::format_bundle(&model),
|
||||
model,
|
||||
};
|
||||
std::fs::write(
|
||||
directory
|
||||
|
||||
Reference in New Issue
Block a user