mirror of
https://github.com/actix/actix-extras.git
synced 2025-06-26 10:27:42 +02:00
Rework actix session (#212)
Co-authored-by: Rob Ede <robjtede@icloud.com> Co-authored-by: Luca P <rust@lpalmieri.com> Co-authored-by: Sebastian Rollén <38324289+SebRollen@users.noreply.github.com>
This commit is contained in:
56
actix-session/tests/middleware.rs
Normal file
56
actix-session/tests/middleware.rs
Normal file
@ -0,0 +1,56 @@
|
||||
use actix_session::{storage::CookieSessionStore, Session, SessionMiddleware};
|
||||
use actix_web::{
|
||||
cookie::{time::Duration, Key},
|
||||
test, web, App, Responder,
|
||||
};
|
||||
|
||||
async fn login(session: Session) -> impl Responder {
|
||||
session.insert("user_id", "id").unwrap();
|
||||
"Logged in"
|
||||
}
|
||||
|
||||
async fn logout(session: Session) -> impl Responder {
|
||||
session.purge();
|
||||
"Logged out"
|
||||
}
|
||||
|
||||
#[actix_web::test]
|
||||
async fn cookie_storage() -> std::io::Result<()> {
|
||||
let signing_key = Key::generate();
|
||||
let app = test::init_service(
|
||||
App::new()
|
||||
.wrap(
|
||||
SessionMiddleware::builder(CookieSessionStore::default(), signing_key.clone())
|
||||
.cookie_path("/test".to_string())
|
||||
.cookie_domain(Some("localhost".to_string()))
|
||||
.build(),
|
||||
)
|
||||
.route("/login", web::post().to(login))
|
||||
.route("/logout", web::post().to(logout)),
|
||||
)
|
||||
.await;
|
||||
|
||||
let login_request = test::TestRequest::post().uri("/login").to_request();
|
||||
let login_response = test::call_service(&app, login_request).await;
|
||||
let session_cookie = login_response.response().cookies().next().unwrap();
|
||||
assert_eq!(session_cookie.name(), "id");
|
||||
assert_eq!(session_cookie.path().unwrap(), "/test");
|
||||
assert!(session_cookie.secure().unwrap());
|
||||
assert!(session_cookie.http_only().unwrap());
|
||||
assert!(session_cookie.max_age().is_none());
|
||||
assert_eq!(session_cookie.domain().unwrap(), "localhost");
|
||||
|
||||
let logout_request = test::TestRequest::post()
|
||||
.cookie(session_cookie)
|
||||
.uri("/logout")
|
||||
.to_request();
|
||||
let logout_response = test::call_service(&app, logout_request).await;
|
||||
let deletion_cookie = logout_response.response().cookies().next().unwrap();
|
||||
assert_eq!(deletion_cookie.name(), "id");
|
||||
assert_eq!(deletion_cookie.path().unwrap(), "/test");
|
||||
assert!(deletion_cookie.secure().is_none());
|
||||
assert!(deletion_cookie.http_only().unwrap());
|
||||
assert_eq!(deletion_cookie.max_age().unwrap(), Duration::ZERO);
|
||||
assert_eq!(deletion_cookie.domain().unwrap(), "localhost");
|
||||
Ok(())
|
||||
}
|
70
actix-session/tests/session.rs
Normal file
70
actix-session/tests/session.rs
Normal file
@ -0,0 +1,70 @@
|
||||
use actix_session::{SessionExt, SessionStatus};
|
||||
use actix_web::{test, HttpResponse};
|
||||
|
||||
#[actix_web::test]
|
||||
async fn session() {
|
||||
let req = test::TestRequest::default().to_srv_request();
|
||||
let session = req.get_session();
|
||||
session.insert("key", "value").unwrap();
|
||||
let res = session.get::<String>("key").unwrap();
|
||||
assert_eq!(res, Some("value".to_string()));
|
||||
|
||||
session.insert("key2", "value2").unwrap();
|
||||
session.remove("key");
|
||||
|
||||
let res = req.into_response(HttpResponse::Ok().finish());
|
||||
let state: Vec<_> = res.get_session().entries().clone().into_iter().collect();
|
||||
assert_eq!(
|
||||
state.as_slice(),
|
||||
[("key2".to_string(), "\"value2\"".to_string())]
|
||||
);
|
||||
}
|
||||
|
||||
#[actix_web::test]
|
||||
async fn get_session() {
|
||||
let req = test::TestRequest::default().to_srv_request();
|
||||
|
||||
let session = req.get_session();
|
||||
session.insert("key", true).unwrap();
|
||||
let res = session.get("key").unwrap();
|
||||
assert_eq!(res, Some(true));
|
||||
}
|
||||
|
||||
#[actix_web::test]
|
||||
async fn get_session_from_request_head() {
|
||||
let req = test::TestRequest::default().to_srv_request();
|
||||
|
||||
let session = req.get_session();
|
||||
session.insert("key", 10).unwrap();
|
||||
let res = session.get::<u32>("key").unwrap();
|
||||
assert_eq!(res, Some(10));
|
||||
}
|
||||
|
||||
#[actix_web::test]
|
||||
async fn purge_session() {
|
||||
let req = test::TestRequest::default().to_srv_request();
|
||||
let session = req.get_session();
|
||||
assert_eq!(session.status(), SessionStatus::Unchanged);
|
||||
session.purge();
|
||||
assert_eq!(session.status(), SessionStatus::Purged);
|
||||
}
|
||||
|
||||
#[actix_web::test]
|
||||
async fn renew_session() {
|
||||
let req = test::TestRequest::default().to_srv_request();
|
||||
let session = req.get_session();
|
||||
assert_eq!(session.status(), SessionStatus::Unchanged);
|
||||
session.renew();
|
||||
assert_eq!(session.status(), SessionStatus::Renewed);
|
||||
}
|
||||
|
||||
#[actix_web::test]
|
||||
async fn session_entries() {
|
||||
let req = test::TestRequest::default().to_srv_request();
|
||||
let session = req.get_session();
|
||||
session.insert("test_str", "val").unwrap();
|
||||
session.insert("test_str", 1).unwrap();
|
||||
let map = session.entries();
|
||||
map.contains_key("test_str");
|
||||
map.contains_key("test_num");
|
||||
}
|
Reference in New Issue
Block a user