From cea44be67059a5270a892566323e9055809676de Mon Sep 17 00:00:00 2001
From: Rob Ede <robjtede@icloud.com>
Date: Sat, 11 Dec 2021 16:18:28 +0000
Subject: [PATCH] add test for returning App from function

---
 src/app.rs           | 21 +++++++++++++++++++++
 tests/test_server.rs | 13 +++++++------
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/app.rs b/src/app.rs
index ab2081c1..5323cb33 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -706,4 +706,25 @@ mod tests {
         let body = read_body(resp).await;
         assert_eq!(body, Bytes::from_static(b"https://youtube.com/watch/12345"));
     }
+
+    /// compile-only test for returning app type from function
+    pub fn foreign_app_type() -> App<
+        impl ServiceFactory<
+            ServiceRequest,
+            Response = ServiceResponse<impl MessageBody>,
+            Config = (),
+            InitError = (),
+            Error = Error,
+        >,
+    > {
+        App::new()
+            // logger can be removed without affecting the return type
+            .wrap(crate::middleware::Logger::default())
+            .route("/", web::to(|| async { "hello" }))
+    }
+
+    #[test]
+    fn return_foreign_app_type() {
+        let _app = foreign_app_type();
+    }
 }
diff --git a/tests/test_server.rs b/tests/test_server.rs
index 51a78eb2..9b7ef6e1 100644
--- a/tests/test_server.rs
+++ b/tests/test_server.rs
@@ -10,8 +10,13 @@ use std::{
     task::{Context, Poll},
 };
 
-use actix_http::header::{
-    ContentEncoding, ACCEPT_ENCODING, CONTENT_ENCODING, CONTENT_LENGTH, TRANSFER_ENCODING,
+use actix_web::{
+    dev::BodyEncoding,
+    http::header::{
+        ContentEncoding, ACCEPT_ENCODING, CONTENT_ENCODING, CONTENT_LENGTH, TRANSFER_ENCODING,
+    },
+    middleware::{Compress, NormalizePath, TrailingSlash},
+    web, App, Error, HttpResponse,
 };
 use brotli2::write::{BrotliDecoder, BrotliEncoder};
 use bytes::Bytes;
@@ -31,10 +36,6 @@ use openssl::{
 use rand::{distributions::Alphanumeric, Rng};
 use zstd::stream::{read::Decoder as ZstdDecoder, write::Encoder as ZstdEncoder};
 
-use actix_web::dev::BodyEncoding;
-use actix_web::middleware::{Compress, NormalizePath, TrailingSlash};
-use actix_web::{web, App, Error, HttpResponse};
-
 const STR: &str = "Hello World Hello World Hello World Hello World Hello World \
                    Hello World Hello World Hello World Hello World Hello World \
                    Hello World Hello World Hello World Hello World Hello World \