|
|
@@ -22,7 +22,7 @@ use gitr::{
|
|
|
models::{
|
|
|
AccessMode, ApiCollaboratorResponse, ApiLoginResponse, ApiPullRequestDetailResponse,
|
|
|
ApiPullRequestResponse, ApiRepositoryResponse, ApiUser, Branch, CompareResponse,
|
|
|
- CreateAccessTokenResponse, PullRequestStatus,
|
|
|
+ CreateAccessTokenResponse, AccessTokenResponse, PullRequestStatus,
|
|
|
},
|
|
|
};
|
|
|
use serde_json::Value;
|
|
|
@@ -228,6 +228,36 @@ async fn login_rejects_bad_password() {
|
|
|
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
|
|
}
|
|
|
|
|
|
+#[actix_web::test]
|
|
|
+async fn login_replaces_existing_login_token() {
|
|
|
+ let env = TestEnv::new("repeat-login");
|
|
|
+ let app = env.app().await;
|
|
|
+
|
|
|
+ create_user(&app, "grace").await;
|
|
|
+
|
|
|
+ let first = login(&app, "grace").await;
|
|
|
+ let second = login(&app, "grace").await;
|
|
|
+
|
|
|
+ assert_ne!(first.token, second.token);
|
|
|
+
|
|
|
+ let first_request = test::TestRequest::get()
|
|
|
+ .uri("/api/user/tokens")
|
|
|
+ .insert_header(("authorization", format!("Bearer {}", first.token)))
|
|
|
+ .to_request();
|
|
|
+ let first_response = test::call_service(&app, first_request).await;
|
|
|
+ assert_eq!(first_response.status(), StatusCode::UNAUTHORIZED);
|
|
|
+
|
|
|
+ let second_request = test::TestRequest::get()
|
|
|
+ .uri("/api/user/tokens")
|
|
|
+ .insert_header(("authorization", format!("Bearer {}", second.token)))
|
|
|
+ .to_request();
|
|
|
+ let second_response = test::call_service(&app, second_request).await;
|
|
|
+ assert_eq!(second_response.status(), StatusCode::OK);
|
|
|
+ let tokens: Vec<AccessTokenResponse> = test::read_body_json(second_response).await;
|
|
|
+ assert_eq!(tokens.len(), 1);
|
|
|
+ assert_eq!(tokens[0].name, "login");
|
|
|
+}
|
|
|
+
|
|
|
#[actix_web::test]
|
|
|
async fn token_endpoint_creates_second_token() {
|
|
|
let env = TestEnv::new("token-endpoint");
|