///|
fn main raise {
// Orders and users share a DTO, while health is independent.
let workspace = @contracts.compile_workspace({
"documents": {
"identity": { "type": "string", "minLength": 1 },
"shared": {
"type": "object",
"properties": { "owner": { "$ref": "identity" } },
"required": ["owner"],
},
},
"operations": [
{
"operationId": "orders",
"method": "POST",
"path": "/orders",
"requestBody": {
"content": { "application/json": { "schema": { "$ref": "shared" } } },
},
"responses": { "204": {} },
},
{
"operationId": "users",
"method": "POST",
"path": "/users",
"requestBody": {
"content": { "application/json": { "schema": { "$ref": "shared" } } },
},
"responses": { "204": {} },
},
{
"operationId": "health",
"method": "GET",
"path": "/health",
"responses": { "204": {} },
},
],
})
assert_eq(workspace.operations_using("identity"), ["orders", "users"])
let update = workspace.update_documents([
{ name: "identity", document: Some({ "type": "string", "minLength": 2 }), },
])
assert_eq(update.rebuilt_operations(), ["orders", "users"])
let request : @contracts.Request = {
parameters: [],
body: Some({ "owner": "a" }),
media_type: Some("application/json"),
}
assert_true(workspace.validate_request("orders", request).is_empty())
assert_true(
!update.workspace().validate_request("orders", request).is_empty(),
)
let failed = try {
let _ = update
.workspace()
.update_documents([
{ name: "identity", document: Some({ "$ref": "missing" }), },
])
false
} catch {
_ => true
}
assert_true(failed)
let cold = @contracts.compile_workspace(update.workspace().manifest())
for name in cold.operation_names() {
assert_eq(
cold.resolved_operation(name),
update.workspace().resolved_operation(name),
)
}
println(
"Shared DTO workspace: 2/3 operations rebuilt; failed update rolled back; cold equivalence passed",
)
}