Skip to content

Commit d4b2b9b

Browse files
committed
Fixed return value of get object
1 parent dd21097 commit d4b2b9b

3 files changed

Lines changed: 214 additions & 25 deletions

File tree

vcs-worker/src/operations/object/object_get_op.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::providers::refs::RefsProvider;
1111
use crate::types::{User, VcsObjectType};
1212
use moor_compiler::{CompileOptions, ObjFileContext, compile_object_definitions};
1313
use moor_objdef::dump_object;
14-
use moor_var::{E_INVARG, v_error};
14+
use moor_var::{E_INVARG, v_error, v_list, v_str, Var};
1515

1616
/// Request structure for object get operations
1717
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -336,7 +336,7 @@ end""#,
336336
]
337337
}
338338

339-
fn execute(&self, args: Vec<String>, _user: &User) -> moor_var::Var {
339+
fn execute(&self, args: Vec<String>, _user: &User) -> Var {
340340
// For RPC calls, we expect the args to contain:
341341
// args[0] = object_name
342342
// args[1] = change_id (optional)
@@ -361,7 +361,12 @@ end""#,
361361
match self.process_object_get(request) {
362362
Ok(result) => {
363363
info!("Object get operation completed successfully");
364-
moor_var::v_str(&result)
364+
// Split the result by newlines and convert to a list of v_str
365+
let lines: Vec<Var> = result
366+
.lines()
367+
.map(|line| v_str(line))
368+
.collect();
369+
v_list(&lines)
365370
}
366371
Err(e) => {
367372
error!("Object get operation failed: {}", e);

vcs-worker/tests/operations/meta/filtering_get.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
//! Tests for filtering ignored properties and verbs during object get operations
22
33
use crate::common::*;
4+
use serde_json::Value;
5+
6+
/// Helper function to convert object/get response (list of strings) to a single string
7+
fn list_to_string(response: &Value) -> String {
8+
if let Some(list) = response.get_result_list() {
9+
list.iter()
10+
.filter_map(|v| v.as_str())
11+
.collect::<Vec<_>>()
12+
.join("\n")
13+
} else {
14+
// Fallback for errors which are still strings
15+
response.get_result_str().unwrap_or("").to_string()
16+
}
17+
}
418

519
#[tokio::test]
620
async fn test_object_get_filters_ignored_properties() {
@@ -22,7 +36,7 @@ async fn test_object_get_filters_ignored_properties() {
2236
.expect("Failed to get object");
2337

2438
get_response_before.assert_success("Get object");
25-
let content_before = get_response_before.require_result_str("Get object");
39+
let content_before = list_to_string(&get_response_before);
2640

2741
// The object should contain 'test_property' in property definitions
2842
assert!(
@@ -43,7 +57,7 @@ async fn test_object_get_filters_ignored_properties() {
4357
.expect("Failed to get object");
4458

4559
get_response_after.assert_success("Get object after adding meta");
46-
let content_after = get_response_after.require_result_str("Get object");
60+
let content_after = list_to_string(&get_response_after);
4761

4862
// The filtered object should NOT contain 'test_property'
4963
assert!(
@@ -71,7 +85,7 @@ async fn test_object_get_filters_ignored_verbs() {
7185
.await
7286
.expect("Failed to get object");
7387

74-
let content_before = get_response_before.require_result_str("Get object");
88+
let content_before = list_to_string(&get_response_before);
7589

7690
// The object should contain 'test_verb' in verb definitions
7791
assert!(
@@ -91,7 +105,7 @@ async fn test_object_get_filters_ignored_verbs() {
91105
.await
92106
.expect("Failed to get object");
93107

94-
let content_after = get_response_after.require_result_str("Get object");
108+
let content_after = list_to_string(&get_response_after);
95109

96110
// The filtered object should NOT contain 'test_verb'
97111
assert!(
@@ -131,7 +145,7 @@ async fn test_object_get_filters_multiple_properties_and_verbs() {
131145
.expect("Failed to get object");
132146

133147
get_response.assert_success("Get object");
134-
let content = get_response.require_result_str("Get object");
148+
let content = list_to_string(&get_response);
135149

136150
// Verify both property and verb are filtered out
137151
assert!(

0 commit comments

Comments
 (0)