fix: share workspace creation wire contract

This commit is contained in:
2026-09-14 19:45:18 +09:00
parent 3995561220
commit c08152d069
6 changed files with 70 additions and 53 deletions
+9 -23
View File
@@ -1,32 +1,18 @@
use crate::{BackendApiClient, BackendApiClientError};
use reqwest::Method;
use serde::{Deserialize, Serialize};
use std::fmt;
use workspace_api::{
RepositoryListResponse, RepositorySummary, WorkspaceCatalogListResponse,
WorkspaceCreateResponse, WorkspaceSummary,
InitialRepositoryIntent, RepositoryListResponse, RepositorySummary,
WorkspaceCatalogListResponse, WorkspaceCreateRequest, WorkspaceCreateResponse,
WorkspaceSummary,
};
const DEFAULT_WORKSPACE_LIMIT: usize = 200;
pub type BackendWorkspace = WorkspaceSummary;
pub type CreateBackendWorkspaceResponse = WorkspaceCreateResponse;
#[derive(Debug, Clone, Serialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct CreateBackendWorkspaceRequest {
pub operation_id: String,
pub display_name: String,
pub repository: CreateBackendWorkspaceRepository,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct CreateBackendWorkspaceRepository {
pub repository_key: String,
pub source: String,
pub default_ref: Option<String>,
}
pub type CreateBackendWorkspaceRequest = WorkspaceCreateRequest;
pub type CreateBackendWorkspaceRepository = InitialRepositoryIntent;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BackendWorkspaceCatalogTarget {
@@ -185,19 +171,19 @@ mod tests {
}
#[test]
fn create_request_keeps_operation_id_for_exact_retry() {
fn create_request_keeps_operation_key_for_exact_retry() {
let request = CreateBackendWorkspaceRequest {
operation_id: "workspace-create-1".to_string(),
operation_key: "workspace-create-1".to_string(),
display_name: "Alpha".to_string(),
repository: CreateBackendWorkspaceRepository {
repository_key: "main".to_string(),
source: "/srv/repos/alpha".to_string(),
uri: "/srv/repos/alpha".to_string(),
default_ref: Some("develop".to_string()),
},
};
let retry = request.clone();
assert_eq!(retry.operation_id, "workspace-create-1");
assert_eq!(retry.operation_key, "workspace-create-1");
assert_eq!(retry, request);
}
}
+8 -8
View File
@@ -4,26 +4,26 @@ use client::{
};
#[test]
fn workspace_creation_request_preserves_operation_id_for_retry() {
fn workspace_creation_request_preserves_operation_key_for_retry() {
let request = CreateBackendWorkspaceRequest {
operation_id: "workspace-create-1".to_string(),
operation_key: "workspace-create-1".to_string(),
display_name: "Alpha".to_string(),
repository: CreateBackendWorkspaceRepository {
repository_key: "main".to_string(),
source: "/srv/repos/alpha".to_string(),
uri: "/srv/repos/alpha".to_string(),
default_ref: Some("develop".to_string()),
},
};
assert_eq!(request.clone(), request);
assert_eq!(request.operation_id, "workspace-create-1");
assert_eq!(request.operation_key, "workspace-create-1");
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json["operation_id"], "workspace-create-1");
assert_eq!(json["operation_key"], "workspace-create-1");
assert_eq!(json["repository"]["repository_key"], "main");
assert_eq!(json["repository"]["source"], "/srv/repos/alpha");
assert!(json.get("operation_key").is_none());
assert_eq!(json["repository"]["uri"], "/srv/repos/alpha");
assert!(json.get("operation_id").is_none());
assert!(json["repository"].get("display_name").is_none());
assert!(json["repository"].get("uri").is_none());
assert!(json["repository"].get("source").is_none());
}
#[test]