mirror of
https://github.com/lennart-k/rustical.git
synced 2026-01-30 12:58:28 +00:00
add basic addressbook import test
This commit is contained in:
68
src/integration_tests/carddav/addressbook_import.rs
Normal file
68
src/integration_tests/carddav/addressbook_import.rs
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
use crate::integration_tests::{ResponseExtractString, get_app};
|
||||||
|
use axum::body::Body;
|
||||||
|
use axum::extract::Request;
|
||||||
|
use headers::{Authorization, HeaderMapExt};
|
||||||
|
use http::StatusCode;
|
||||||
|
use rstest::rstest;
|
||||||
|
use rustical_store_sqlite::tests::{TestStoreContext, test_store_context};
|
||||||
|
use tower::ServiceExt;
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_import(
|
||||||
|
#[from(test_store_context)]
|
||||||
|
#[future]
|
||||||
|
context: TestStoreContext,
|
||||||
|
) {
|
||||||
|
let context = context.await;
|
||||||
|
let app = get_app(context.clone());
|
||||||
|
let addr_store = context.addr_store;
|
||||||
|
|
||||||
|
let (principal, addr_id) = ("user", "contacts");
|
||||||
|
let url = format!("/carddav/principal/{principal}/{addr_id}");
|
||||||
|
|
||||||
|
let request_template = || {
|
||||||
|
Request::builder()
|
||||||
|
.method("IMPORT")
|
||||||
|
.uri(&url)
|
||||||
|
.body(Body::from(
|
||||||
|
r"BEGIN:VCARD
|
||||||
|
VERSION:4.0
|
||||||
|
FN:Simon Perreault
|
||||||
|
N:Perreault;Simon;;;ing. jr,M.Sc.
|
||||||
|
BDAY:--0203
|
||||||
|
GENDER:M
|
||||||
|
EMAIL;TYPE=work:simon.perreault@viagenie.ca
|
||||||
|
END:VCARD",
|
||||||
|
))
|
||||||
|
.unwrap()
|
||||||
|
};
|
||||||
|
|
||||||
|
// Try without authentication
|
||||||
|
let request = request_template();
|
||||||
|
let response = app.clone().oneshot(request).await.unwrap();
|
||||||
|
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
||||||
|
|
||||||
|
// Try with correct credentials
|
||||||
|
let mut request = request_template();
|
||||||
|
request
|
||||||
|
.headers_mut()
|
||||||
|
.typed_insert(Authorization::basic("user", "pass"));
|
||||||
|
let response = app.clone().oneshot(request).await.unwrap();
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let body = response.extract_string().await;
|
||||||
|
insta::assert_snapshot!("import_body", body);
|
||||||
|
|
||||||
|
let mut request = Request::builder()
|
||||||
|
.method("GET")
|
||||||
|
.uri(&url)
|
||||||
|
.body(Body::empty())
|
||||||
|
.unwrap();
|
||||||
|
request
|
||||||
|
.headers_mut()
|
||||||
|
.typed_insert(Authorization::basic("user", "pass"));
|
||||||
|
let response = app.clone().oneshot(request).await.unwrap();
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let body = response.extract_string().await;
|
||||||
|
insta::assert_snapshot!("get_body", body);
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ use rustical_store_sqlite::tests::{TestStoreContext, test_store_context};
|
|||||||
use tower::ServiceExt;
|
use tower::ServiceExt;
|
||||||
|
|
||||||
mod addressbook;
|
mod addressbook;
|
||||||
|
mod addressbook_import;
|
||||||
|
|
||||||
#[rstest]
|
#[rstest]
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
source: src/integration_tests/carddav/addressbook_import.rs
|
||||||
|
expression: body
|
||||||
|
---
|
||||||
|
BEGIN:VCARD
|
||||||
|
VERSION:4.0
|
||||||
|
FN:Simon Perreault
|
||||||
|
N:Perreault;Simon;;;ing. jr,M.Sc.
|
||||||
|
BDAY:--0203
|
||||||
|
GENDER:M
|
||||||
|
EMAIL;TYPE=work:simon.perreault@viagenie.ca
|
||||||
|
UID:42ed1bd7-8538-45fb-917d-872e2466a7ce
|
||||||
|
END:VCARD
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
source: src/integration_tests/carddav/addressbook_import.rs
|
||||||
|
expression: body
|
||||||
|
---
|
||||||
|
|
||||||
Reference in New Issue
Block a user