Просмотр исходного кода

Render using a template, add title, input and table

Benoît Hubert 7 лет назад
Родитель
Сommit
a567ee8b1d
5 измененных файлов с 45 добавлено и 5 удалено
  1. 28 1
      functional_tests.py
  2. 1 0
      movielib/settings.py
  3. 10 0
      movies/templates/home.html
  4. 5 3
      movies/tests.py
  5. 1 1
      movies/views.py

+ 28 - 1
functional_tests.py

@@ -1,4 +1,6 @@
 from selenium import webdriver
+from selenium.webdriver.common.keys import Keys
+import time
 import unittest
 
 class NewVisitorTest(unittest.TestCase):
@@ -16,8 +18,33 @@ class NewVisitorTest(unittest.TestCase):
 
         # She notices the page title and header mention to-do lists
         self.assertIn('MovieLib', self.browser.title)
-        self.fail('Finish the test!')
+        header_text = self.browser.find_element_by_tag_name('h1').text
+        self.assertIn('Your Movie list', header_text)
+
+        # She is invited to enter a to-do item straight away
+        inputbox = self.browser.find_element_by_id('input-new-movie')
+        self.assertEqual(
+            inputbox.get_attribute('placeholder'),
+            'Enter a movie title'
+        )
+
+        # She types "Inception" into a text box
+        inputbox.send_keys('Inception')
 
+        # When she hits enter, the page updates, and now the page lists
+        # "1: Inception" as an item in a to-do list table
+        inputbox.send_keys(Keys.ENTER)
+        time.sleep(1)
+
+        table = self.browser.find_element_by_id('movie-table')
+        rows = table.find_elements_by_tag_name('tr')
+        self.assertTrue(
+            any(row.text == '1: Inception' for row in rows)
+        )
+
+        # There is still a text box inviting her to add another item. She
+        # enters "Armageddon"
+        self.fail('Finish the test!')
         # She is invited to enter a to-do item straight away
 
 if __name__ == '__main__':

+ 1 - 0
movielib/settings.py

@@ -37,6 +37,7 @@ INSTALLED_APPS = [
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
+    'movies',
 ]
 
 MIDDLEWARE = [

+ 10 - 0
movies/templates/home.html

@@ -0,0 +1,10 @@
+<html>
+  <title>MovieLib</title>
+    <body>
+    	<h1>Your Movie list</h1>
+    	<input id="input-new-movie" placeholder="Enter a movie title" />
+
+    	<table id="movie-table">
+    	</table>
+  </body>
+</html>

+ 5 - 3
movies/tests.py

@@ -12,9 +12,11 @@ class HomePageTest(TestCase):
 
 
     def test_home_page_returns_correct_html(self):
-        request = HttpRequest()
-        response = home_page(request)
+        response = self.client.get('/')
         html = response.content.decode('utf8')
+
         self.assertTrue(html.startswith('<html>'))
         self.assertIn('<title>MovieLib</title>', html)
-        self.assertTrue(html.endswith('</html>'))
+        self.assertTrue(html.strip().endswith('</html>'))
+
+        self.assertTemplateUsed(response, 'home.html')

+ 1 - 1
movies/views.py

@@ -3,4 +3,4 @@ from django.http import HttpResponse
 
 # Create your views here.
 def home_page(request):
-    return HttpResponse('<html><title>MovieLib</title></html>')
+    return render(request, 'home.html')