Add a test for including an ID in the content body (#4849)

This commit is contained in:
Rushmore Mushambi 2024-09-20 22:51:42 +01:00 committed by GitHub
parent eff4936dc3
commit 18eb778720
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 70 additions and 3 deletions

View file

@ -114,6 +114,5 @@ fn escaped_params_backtick() {
#[test]
fn parse_immediate_insert_subquery() {
let res =
test_parse!(parse_query, r#"LET $insert = INSERT INTO t (SELECT true FROM 1);"#).unwrap();
test_parse!(parse_query, r#"LET $insert = INSERT INTO t (SELECT true FROM 1);"#).unwrap();
}

View file

@ -54,7 +54,7 @@ mod api_integration {
name: String,
}
#[derive(Debug, Clone, Deserialize, PartialEq, PartialOrd)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd)]
struct RecordBuf {
id: RecordId,
name: String,

View file

@ -502,6 +502,74 @@ async fn create_record_with_id_with_content() {
);
}
#[test_log::test(tokio::test)]
async fn create_record_with_id_in_content() {
#[derive(Debug, Serialize, Deserialize)]
pub struct Person {
pub id: u32,
pub name: &'static str,
pub job: &'static str,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Record {
#[allow(dead_code)]
pub id: RecordId,
}
let (permit, db) = new_db().await;
db.use_ns(NS).use_db(Ulid::new().to_string()).await.unwrap();
drop(permit);
let record: Option<RecordBuf> = db
.create(("user", "john"))
.content(RecordBuf {
id: RecordId::from_table_key("user", "john"),
name: "John Doe".to_owned(),
})
.await
.unwrap();
assert_eq!(record.unwrap().id, "user:john".parse::<RecordId>().unwrap());
let error = db
.create::<Option<RecordBuf>>(("user", "john"))
.content(RecordBuf {
id: RecordId::from_table_key("user", "jane"),
name: "John Doe".to_owned(),
})
.await
.unwrap_err();
match error {
surrealdb::Error::Db(DbError::IdMismatch {
..
}) => {}
surrealdb::Error::Api(ApiError::Query {
..
}) => {}
error => panic!("unexpected error; {error:?}"),
}
let _: Option<Record> = db
.create("person")
.content(Person {
id: 1010,
name: "Max Mustermann",
job: "chef",
})
.await
.unwrap();
let _: Option<Record> = db
.update(("person", 1010))
.content(Person {
id: 1010,
name: "Max Mustermann",
job: "IT Tech",
})
.await
.unwrap();
}
#[test_log::test(tokio::test)]
async fn insert_table() {
let (permit, db) = new_db().await;