瀏覽代碼

User is redirected to his/her own library page

Benoît Hubert 7 年之前
父節點
當前提交
1aeeedb4a0
共有 7 個文件被更改,包括 79 次插入4 次删除
  1. 2 0
      accounts/templates/register.html
  2. 28 0
      accounts/tests.py
  3. 10 1
      accounts/views.py
  4. 37 0
      functional_tests/tests.py
  5. 1 1
      movielib/urls.py
  6. 0 1
      movies/tests.py
  7. 1 1
      movies/views.py

+ 2 - 0
accounts/templates/register.html

@@ -5,8 +5,10 @@
 
       <h2>Register</h2>
       <form method="POST" action="/register">
+        <input name="username" id="input-username" placeholder="Enter your username" required />
         <input name="email" id="input-email" placeholder="Enter your email" required />
         <input type="password" name="password" id="input-password" placeholder="Enter your password" required />
+        <input type="submit" value="Register">
         {% csrf_token %}
       </form>
   </body>

+ 28 - 0
accounts/tests.py

@@ -1,8 +1,14 @@
 from django.urls import resolve
 from django.test import TestCase
+from django.contrib.auth.models import User
 
 from accounts.views import register
 
+def id():
+    id.counter += 1
+    return str(id.counter)
+id.counter = 0
+
 # Create your tests here.
 class RegisterPageTest(TestCase):
 
@@ -22,3 +28,25 @@ class RegisterPageTest(TestCase):
 
         self.assertTemplateUsed(response, 'register.html')
 
+    def test_can_save_a_POST_request(self):
+        username = 'johndifool' + id()
+        response = self.client.post('/register', data={
+            'username': username,
+            'email': username + '@example.com',
+            'password': 'abc123'
+        })
+
+        self.assertEqual(User.objects.count(), 1)
+        new_user = User.objects.first()
+        self.assertEqual(new_user.username, 'johndifool1')
+        self.assertEqual(new_user.email, 'johndifool1@example.com')
+
+    def test_redirects_after_POST(self):
+        username = 'johndifool' + id()
+        response = self.client.post('/register', data={
+           'username': username,
+            'email': username + '@example.com',
+            'password': 'abc123'
+        })
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(response['location'], '/libraries/johndifool2/')

+ 10 - 1
accounts/views.py

@@ -1,5 +1,14 @@
-from django.shortcuts import render
+from django.shortcuts import redirect, render
+from django.contrib.auth.models import User
 
 # Create your views here.
 def register(request):
+    if request.method == 'POST':
+        User.objects.create(
+            username=request.POST['username'],
+            email=request.POST['email'],
+            password=request.POST['password'],
+        )
+        return redirect('/libraries/' + request.POST['username'] + '/')
+
     return render(request, 'register.html')

+ 37 - 0
functional_tests/tests.py

@@ -34,6 +34,43 @@ class NewVisitorTest(LiveServerTestCase):
         header_text = self.browser.find_element_by_tag_name('h2').text
         self.assertIn('Register', header_text)
 
+        # She is invited to enter a to-do item straight away
+        inputbox = self.browser.find_element_by_id('input-username')
+        self.assertEqual(
+            inputbox.get_attribute('placeholder'),
+            'Enter your username'
+        )
+
+        # She types "Inception" into a text box
+        inputbox.send_keys('foobar')
+
+        inputbox = self.browser.find_element_by_id('input-email')
+        self.assertEqual(
+            inputbox.get_attribute('placeholder'),
+            'Enter your email'
+        )
+
+        # She types "Inception" into a text box
+        inputbox.send_keys('foobar@example.com')
+
+        inputbox = self.browser.find_element_by_id('input-password')
+        self.assertEqual(
+            inputbox.get_attribute('placeholder'),
+            'Enter your password'
+        )
+
+        # She types "Inception" into a text box
+        inputbox.send_keys('foobar')
+
+        # 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(0.5)
+
+        edith_list_url = self.browser.current_url
+        self.assertRegex(edith_list_url, '/libraries/foobar/')
+
 
     def test_can_start_a_list_for_one_user(self):
         # Edith has heard about a cool new online to-do app. She goes

+ 1 - 1
movielib/urls.py

@@ -22,6 +22,6 @@ from accounts import views as account_views
 urlpatterns = [
     path('admin/', admin.site.urls),
     url(r'^$', movie_views.home_page, name='home'),
-    url(r'^libraries/benoit-hubert/$', movie_views.view_list, name='view_list'),
+    path('libraries/<str:username>/', movie_views.view_list),
     url(r'^register/?$', account_views.register, name='register'),
 ]

+ 0 - 1
movies/tests.py

@@ -24,7 +24,6 @@ class HomePageTest(TestCase):
 
         self.assertTemplateUsed(response, 'home.html')
 
-
     def test_can_save_a_POST_request(self):
         response = self.client.post('/', data={'movie-title': 'X-Men'})
 

+ 1 - 1
movies/views.py

@@ -9,6 +9,6 @@ def home_page(request):
 
     return render(request, 'home.html', { 'name': 'Guest' })
 
-def view_list(request):
+def view_list(request, username):
     movies = Movie.objects.all()
     return render(request, 'library.html', {'movies': movies})