From fa63fc91ccc08b20ed4ca45e73f7aad2b38d9171 Mon Sep 17 00:00:00 2001
From: Chris Lamb <chris@chris-lamb.co.uk>
Date: Wed, 31 May 2017 15:25:09 +0100
Subject: [PATCH] [1.11.x] Fixed #26755 -- Fixed
 test_middleware_classes_headers if Django source isn't writable.

Backport of 2ec56bb78237ebf58494d7a7f3262482399f0be6 from master
---
 tests/project_template/test_settings.py | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/tests/project_template/test_settings.py b/tests/project_template/test_settings.py
index a0047dd836..791c42e03a 100644
--- a/tests/project_template/test_settings.py
+++ b/tests/project_template/test_settings.py
@@ -1,11 +1,12 @@
 import os
 import shutil
+import tempfile
 import unittest
 
 from django import conf
 from django.test import TestCase
+from django.test.utils import extend_sys_path
 from django.utils import six
-from django.utils._os import upath
 
 
 @unittest.skipIf(
@@ -15,16 +16,16 @@ from django.utils._os import upath
 )
 class TestStartProjectSettings(TestCase):
     def setUp(self):
-        # Ensure settings.py exists
-        project_dir = os.path.join(
-            os.path.dirname(upath(conf.__file__)),
+        self.temp_dir = tempfile.TemporaryDirectory()
+        self.addCleanup(self.temp_dir.cleanup)
+        template_settings_py = os.path.join(
+            os.path.dirname(conf.__file__),
             'project_template',
             'project_name',
+            'settings.py-tpl',
         )
-        template_settings_py = os.path.join(project_dir, 'settings.py-tpl')
-        test_settings_py = os.path.join(project_dir, 'settings.py')
+        test_settings_py = os.path.join(self.temp_dir.name, 'test_settings.py')
         shutil.copyfile(template_settings_py, test_settings_py)
-        self.addCleanup(os.remove, test_settings_py)
 
     def test_middleware_headers(self):
         """
@@ -32,7 +33,8 @@ class TestStartProjectSettings(TestCase):
         change. For example, we never want "Vary: Cookie" to appear in the list
         since it prevents the caching of responses.
         """
-        from django.conf.project_template.project_name.settings import MIDDLEWARE
+        with extend_sys_path(self.temp_dir.name):
+            from test_settings import MIDDLEWARE
 
         with self.settings(
             MIDDLEWARE=MIDDLEWARE,