Skip to content

Commit 6c86db2

Browse files
committed
fix(client): correct default for listing subjects
Signed-off-by: Raphael Höser <[email protected]>
1 parent 6cab303 commit 6c86db2

File tree

5 files changed

+92
-7
lines changed

5 files changed

+92
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ Based on the [compliance criteria](https://docs.eventsourcingdb.io/client-sdks/c
1212
-[Reading Events](https://docs.eventsourcingdb.io/client-sdks/compliance-criteria/#reading-events)
1313
-[Using EventQL](https://docs.eventsourcingdb.io/client-sdks/compliance-criteria/#using-eventql)
1414
-[Observing Events](https://docs.eventsourcingdb.io/client-sdks/compliance-criteria/#observing-events)
15-
- [Metadata and Discovery](https://docs.eventsourcingdb.io/client-sdks/compliance-criteria/#metadata-and-discovery)
15+
- 🚀 [Metadata and Discovery](https://docs.eventsourcingdb.io/client-sdks/compliance-criteria/#metadata-and-discovery)
1616
- 🚀 [Testcontainers Support](https://docs.eventsourcingdb.io/client-sdks/compliance-criteria/#testcontainers-support)

src/client.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
mod client_request;
2121

2222
use client_request::{
23-
list_event_types::EventType, ClientRequest, ListEventTypesRequest, ListSubjectsRequest, OneShotRequest, PingRequest, RegisterEventSchemaRequest, StreamingRequest, VerifyApiTokenRequest
23+
ClientRequest, ListEventTypesRequest, ListSubjectsRequest, OneShotRequest, PingRequest,
24+
RegisterEventSchemaRequest, StreamingRequest, VerifyApiTokenRequest,
25+
list_event_types::EventType,
2426
};
2527

2628
use futures::Stream;
@@ -214,7 +216,9 @@ impl Client {
214216
base_subject: Option<&str>,
215217
) -> Result<impl Stream<Item = Result<String, ClientError>>, ClientError> {
216218
let response = self
217-
.request_streaming(ListSubjectsRequest { base_subject })
219+
.request_streaming(ListSubjectsRequest {
220+
base_subject: base_subject.unwrap_or("/"),
221+
})
218222
.await?;
219223
Ok(response)
220224
}

src/client/client_request/list_event_types.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ use crate::error::ClientError;
77

88
use super::{ClientRequest, StreamingRequest};
99
#[derive(Deserialize, Debug)]
10+
#[serde(rename_all = "camelCase")]
1011
pub struct EventType {
12+
#[serde(rename = "eventType")]
1113
pub name: String,
1214
pub is_phantom: bool,
1315
pub schema: Option<Value>,
@@ -33,15 +35,16 @@ impl StreamingRequest for ListEventTypesRequest {
3335
response: reqwest::Response,
3436
) -> impl Stream<Item = Result<Self::ItemType, ClientError>> {
3537
#[derive(Deserialize, Debug)]
38+
#[serde(tag = "type", content = "payload", rename_all = "camelCase")]
3639
enum LineItem {
37-
Error(String),
40+
Error { error: String },
3841
EventType(EventType),
3942
}
4043

4144
impl From<LineItem> for Result<EventType, ClientError> {
4245
fn from(item: LineItem) -> Self {
4346
match item {
44-
LineItem::Error(err) => Err(ClientError::DBError(err)),
47+
LineItem::Error { error } => Err(ClientError::DBError(error)),
4548
LineItem::EventType(event_type) => Ok(event_type),
4649
}
4750
}

src/client/client_request/list_subjects.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use super::{ClientRequest, StreamingRequest};
99
#[derive(Debug, Clone, Serialize)]
1010
#[serde(rename_all = "camelCase")]
1111
pub struct ListSubjectsRequest<'a> {
12-
pub base_subject: Option<&'a str>,
12+
pub base_subject: &'a str,
1313
}
1414

1515
impl<'a> ClientRequest for ListSubjectsRequest<'a> {

tests/metadata_and_discovery.rs

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use eventsourcingdb_client_rust::container::Container;
2+
use futures::StreamExt;
23
use serde_json::json;
34

45
#[tokio::test]
@@ -25,7 +26,6 @@ async fn register_event_schema() {
2526
.expect("Failed to register event schema");
2627
}
2728

28-
2929
#[tokio::test]
3030
async fn register_invalid_event_schema() {
3131
let container = Container::start_default().await.unwrap();
@@ -40,3 +40,81 @@ async fn register_invalid_event_schema() {
4040
.await;
4141
assert!(res.is_err(), "Expected an error, but got: {:?}", res);
4242
}
43+
44+
#[tokio::test]
45+
async fn list_all_subjects() {
46+
let container = Container::start_default().await.unwrap();
47+
let client = container.get_client().await.unwrap();
48+
let res = client.list_subjects(None).await;
49+
match res {
50+
Ok(subjects) => {
51+
let subjects = subjects.collect::<Vec<_>>().await;
52+
assert!(
53+
subjects.is_empty(),
54+
"Expected no subjects, but got: {:?}",
55+
subjects
56+
);
57+
}
58+
Err(err) => panic!("Failed to list subjects: {:?}", err),
59+
}
60+
}
61+
62+
//TODO!: add list all subjects test after writing to db
63+
64+
//TODO!: add list scoped subjects test after writing to db
65+
66+
#[tokio::test]
67+
async fn list_all_event_types() {
68+
let container = Container::start_default().await.unwrap();
69+
let client = container.get_client().await.unwrap();
70+
let test_event_type = "io.eventsourcingdb.test";
71+
let schema = json!({
72+
"type": "object",
73+
"properties": {
74+
"id": {
75+
"type": "string"
76+
},
77+
"name": {
78+
"type": "string"
79+
}
80+
},
81+
"required": ["id", "name"]
82+
});
83+
client
84+
.register_event_schema(test_event_type, &schema)
85+
.await
86+
.expect("Failed to register event schema");
87+
let res = client.list_event_types().await;
88+
match res {
89+
Ok(event_types) => {
90+
let mut event_types = event_types.collect::<Vec<_>>().await;
91+
assert!(
92+
event_types.len() == 1,
93+
"Expected one event types, but got: {:?}",
94+
event_types
95+
);
96+
assert!(event_types[0].is_ok(), "Expected event type to be ok");
97+
let response_event_type = event_types.pop().unwrap().unwrap();
98+
assert_eq!(
99+
response_event_type.name, test_event_type,
100+
"Expected event type to be 'io.eventsourcingdb.test', but got: {:?}",
101+
response_event_type.name
102+
);
103+
assert_eq!(
104+
response_event_type.schema.as_ref(),
105+
Some(&schema),
106+
"Expected event type schema to be {:?}, but got: {:?}",
107+
schema,
108+
response_event_type.schema
109+
);
110+
assert!(
111+
response_event_type.is_phantom,
112+
"Expected event type is_phantom to be true, but got: {:?}",
113+
response_event_type.is_phantom
114+
);
115+
}
116+
Err(err) => panic!("Failed to list event types: {:?}", err),
117+
}
118+
}
119+
120+
// TODO!: add list event types test after writing to db

0 commit comments

Comments
 (0)