@@ -2,13 +2,51 @@ use crate::util::{RequestHelper, Response};
22use crate :: TestApp ;
33
44use crate :: util:: encode_session_header;
5+ use cargo_registry:: controllers:: user:: session:: session_cookie;
6+ use cargo_registry:: util:: token:: SecureToken ;
7+ use cargo_registry:: util:: token:: SecureTokenKind ;
58use conduit:: { header, Body , Method , StatusCode } ;
69
710static URL : & str = "/api/v1/me/updates" ;
811static MUST_LOGIN : & [ u8 ] = br#"{"errors":[{"detail":"must be logged in to perform that action"}]}"# ;
912static INTERNAL_ERROR_NO_USER : & str =
1013 "user_id from cookie not found in database caused by NotFound" ;
1114
15+ #[ test]
16+ fn persistent_session_user ( ) {
17+ let ( app, _) = TestApp :: init ( ) . empty ( ) ;
18+ let user = app. db_new_user ( "user1" ) . with_session ( ) ;
19+ let request = user. request_builder ( Method :: GET , URL ) ;
20+ let response: Response < Body > = user. run ( request) ;
21+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
22+ }
23+
24+ #[ test]
25+ fn incorrect_session_is_forbidden ( ) {
26+ let ( _, anon) = TestApp :: init ( ) . empty ( ) ;
27+
28+ let token = SecureToken :: generate ( SecureTokenKind :: Session ) ;
29+ // Create a cookie that isn't in the database.
30+ let cookie = session_cookie ( & token, false ) . to_string ( ) ;
31+ let mut request = anon. request_builder ( Method :: GET , URL ) ;
32+ request. header ( header:: COOKIE , & cookie) ;
33+ let response: Response < Body > = anon. run ( request) ;
34+ assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
35+ assert_eq ! (
36+ response. into_json( ) ,
37+ json!( { "errors" : [ { "detail" : "must be logged in to perform that action" } ] } )
38+ ) ;
39+ }
40+
41+ #[ test]
42+ fn cookie_user ( ) {
43+ let ( _, _, cookie_user) = TestApp :: init ( ) . with_user ( ) ;
44+ let request = cookie_user. request_builder ( Method :: GET , URL ) ;
45+
46+ let response: Response < Body > = cookie_user. run ( request) ;
47+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
48+ }
49+
1250#[ test]
1351fn anonymous_user_unauthorized ( ) {
1452 let ( _, anon) = TestApp :: init ( ) . empty ( ) ;
0 commit comments