feat(openapi): complete upload preview and UI evidence

This commit is contained in:
2026-08-28 15:38:14 +03:00
parent d2849ea3fe
commit 2c94af6791
35 changed files with 3655 additions and 537 deletions
@@ -1,4 +1,4 @@
use admin_api::service::{OpenApiImportCreatePayload, OpenApiImportPreviewPayload};
use admin_api::service::{OpenApiImportCreatePayload, OpenApiUpload, OpenApiUploadLocale};
use crank_core::WorkspaceId;
use crank_registry::ImportJobStatus;
use serial_test::serial;
@@ -51,12 +51,7 @@ async fn previews_openapi_and_creates_draft_operations() {
let workspace_id = WorkspaceId::new("ws_default");
let preview = service
.preview_openapi_import(
&workspace_id,
OpenApiImportPreviewPayload {
document: OPENAPI3.to_owned(),
},
)
.preview_openapi_import(&workspace_id, openapi_upload())
.await
.unwrap();
@@ -89,6 +84,24 @@ async fn previews_openapi_and_creates_draft_operations() {
assert_eq!(created.created[0].name, "latest_rates");
assert!(created.skipped.is_empty());
let replayed = service
.create_openapi_import(
&workspace_id,
&preview.job_id.as_str().into(),
OpenApiImportCreatePayload {
selected_operation_keys: vec!["GET /v2/latest".to_owned()],
server_url: Some("https://api.frankfurter.dev".to_owned()),
conflict_mode: "skip".to_owned(),
},
)
.await
.unwrap();
assert_eq!(replayed.created.len(), 1);
assert_eq!(
replayed.created[0].operation_id,
created.created[0].operation_id
);
let operations = service.list_operations(&workspace_id).await.unwrap();
assert!(
operations
@@ -120,12 +133,7 @@ async fn previews_openapi_and_creates_draft_operations() {
);
let skip_preview = service
.preview_openapi_import(
&workspace_id,
OpenApiImportPreviewPayload {
document: OPENAPI3.to_owned(),
},
)
.preview_openapi_import(&workspace_id, openapi_upload())
.await
.unwrap();
let skipped = service
@@ -147,12 +155,7 @@ async fn previews_openapi_and_creates_draft_operations() {
assert_eq!(skipped.findings[0].code, "operation_name_conflict");
let rename_preview = service
.preview_openapi_import(
&workspace_id,
OpenApiImportPreviewPayload {
document: OPENAPI3.to_owned(),
},
)
.preview_openapi_import(&workspace_id, openapi_upload())
.await
.unwrap();
let renamed = service
@@ -185,12 +188,7 @@ async fn concurrent_openapi_import_replays_the_same_atomic_result() {
);
let workspace_id = WorkspaceId::new("ws_default");
let preview = service
.preview_openapi_import(
&workspace_id,
OpenApiImportPreviewPayload {
document: OPENAPI3.to_owned(),
},
)
.preview_openapi_import(&workspace_id, openapi_upload())
.await
.unwrap();
let job_id = preview.job_id.as_str().into();
@@ -232,3 +230,11 @@ async fn concurrent_openapi_import_replays_the_same_atomic_result() {
.await;
assert!(conflicting_replay.is_err());
}
fn openapi_upload() -> OpenApiUpload {
OpenApiUpload {
bytes: OPENAPI3.as_bytes().to_vec(),
mime_type: "application/yaml".to_owned(),
locale: OpenApiUploadLocale::En,
}
}