def test_add_page_when_logged(self): #Create categories test_utils.create_categories() # Access login page self.browser.get(self.live_server_url + reverse('login')) # Log in test_utils.login(self) # Click category self.browser.find_element_by_partial_link_text('Category').click() # Click add page self.browser.find_element_by_partial_link_text("Add a Page").click() # Types new page name username_field = self.browser.find_element_by_name('title') username_field.send_keys('New Page') # Types url for the page username_field = self.browser.find_element_by_name('url') username_field.send_keys('http://www.newpage.com') # Click on Create Page self.browser.find_element_by_css_selector( "input[type='submit']" ).click() body = self.browser.find_element_by_tag_name('body') # Check if New Page appears in the category page self.assertIn('New Page', body.text)
def test_category_page_using_template(self): #Create categories in database test_utils.create_categories() # Access category page response = self.client.get( reverse('show_category', args=['category-1'])) # check was used the right template self.assertTemplateUsed(response, 'rango/category.html')
def test_index_displays_five_most_liked_categories(self): #Create categories test_utils.create_categories() # Access index response = self.client.get(reverse('index')) # Check if the 5 pages with most likes are displayed for i in xrange(10, 5, -1): self.assertIn("Category " + str(i), response.content)
def test_url_reference_in_category_page(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories test_utils.create_categories() # Check for add_page in category page response = self.client.get(reverse('category', args=['category-1'])) self.assertIn(reverse('add_page', args=['category-1']), response.content)
def test_url_reference_in_category_page(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories test_utils.create_categories() # Check for add_page in category page response = self.client.get(reverse('show_category', args=['category-1'])) self.assertIn(reverse('add_page', args=['category-1']), response.content)
def test_template_uses_sidebar(self): # Create some categories test_utils.create_categories() #Access index response = self.client.get(reverse('index')) #Check for sidebar class self.assertContains(response, 'class="col-sm-3 col-md-2 sidebar"') # Check it uses sidebar class when there are some categories self.assertContains(response, 'class="nav nav-sidebar"')
def test_add_page_is_bootstrapped(self): # Create user and login test_utils.create_user() self.client.login(username='******', password='******') # Create categories test_utils.create_categories() # Access add category page response = self.client.get(reverse('add_page', args=['category-1'])) #Check it uses bootstrap classes self.assertIn('<h2 class="form-signin-heading">', response.content) self.assertIn('<button class="btn btn-primary"', response.content)
def test_add_page_form_is_displayed_correctly(self): # Create categories categories = test_utils.create_categories() for category in categories: # Access add category page try: response = self.client.get(reverse('index')) response = self.client.get(reverse('add_page', args=[category.slug])) except: try: response = self.client.get(reverse('rango:index')) response = self.client.get(reverse('rango:add_page', args=[category.slug])) except: return False # Check form in response context is instance of CategoryForm self.assertTrue(isinstance(response.context['form'], PageForm)) # Check form is displayed correctly # Label 1 self.assertIn('Please enter the title of the page.'.lower(), response.content.lower()) # Label 2 self.assertIn('Please enter the URL of the page.'.lower(), response.content.lower()) # Text input 1 self.assertIn('id="id_title" maxlength="128" name="title" type="text"'.lower(), response.content.lower()) # Text input 2 self.assertIn('id="id_url" maxlength="200" name="url" type="url"'.lower(), response.content.lower()) # Button self.assertIn('type="submit" name="submit" value="Add Page"'.lower(), response.content.lower())
def test_pages_using_templates(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories categories = test_utils.create_categories() # Create a list of pages to access pages = [ reverse('index'), reverse('about'), reverse('add_category'), reverse('register'), reverse('login'), reverse('show_category', args=[categories[0].slug]), reverse('add_page', args=[categories[0].slug]) ] #, reverse('restricted')] # Create a list of pages to access templates = [ 'rango/index.html', 'rango/about.html', 'rango/add_category.html', 'rango/register.html', 'rango/login.html', 'rango/category.html', 'rango/add_page.html' ] #, 'rango/restricted.html'] # For each page in the page list, check if it extends from base template for template, page in zip(templates, pages): response = self.client.get(page) self.assertTemplateUsed(response, template)
def test_add_page_form_is_displayed_correctly(self): # Create categories categories = test_utils.create_categories() for category in categories: # Access add category page response = self.client.get(reverse('add_page', args=[category.slug])) # Check form in response context is instance of CategoryForm self.assertTrue(isinstance(response.context['form'], PageForm)) # Check form is displayed correctly # Label 1 self.assertIn('Please enter the title of the page.', response.content) # Label 2 self.assertIn('Please enter the URL of the page.', response.content) # Text input 1 self.assertIn('id="id_title" maxlength="128" name="title" type="text"', response.content) # Text input 2 self.assertIn('id="id_url" maxlength="200" name="url" type="url"', response.content) # Button self.assertIn('type="submit" name="submit" value="Create Page"', response.content)
def test_form_is_saving_new_page(self): #Create categories and pages categories = test_utils.create_categories() i = 0 for category in categories: i = i + 1 # Access link to add page for the category self.browser.get(self.live_server_url + reverse('add_page', args=[category.slug])) # Types new page name username_field = self.browser.find_element_by_name('title') username_field.send_keys('New Page ' + str(i)) # Types url for the page username_field = self.browser.find_element_by_name('url') username_field.send_keys('http://www.newpage1.com') # Click on Create Page self.browser.find_element_by_css_selector( "input[type='submit']" ).click() body = self.browser.find_element_by_tag_name('body') # Check if New Page appears in the category page self.assertIn('New Page', body.text)
def test_category_contains_link_to_add_page(self): # Crete categories categories = test_utils.create_categories() # For each category in the database check if contains link to add page for category in categories: response = self.client.get(reverse('category', args=[category.slug])) self.assertIn(reverse('add_page', args=[category.slug]), response.content)
def test_active_category_is_highlighted(self): # Create some categories categories = test_utils.create_categories() #Access each category and check whether it is the active category for category in categories: response = self.client.get(reverse('category', args=[category.slug])) self.assertContains(response, ' <li class="active" > <a href="' + reverse('category', args=[category.slug]) + '">' + category.name + '</a></li>', count=1, html=True)
def test_list_item_in_index_are_presented_using_list_group(self): #Create categories and pages categories = test_utils.create_categories() test_utils.create_pages(categories) #Access index page response = self.client.get(reverse('index')) #Check for usage of list-group self.assertIn('<ul class="list-group">', response.content) self.assertIn('<li class="list-group-item">', response.content)
def test_category_page_displays_empty_message(self): #Create categories in database categories = test_utils.create_categories() # For each category, access its page and check there are no pages associated with it for category in categories: # Access category page response = self.client.get( reverse('show_category', args=[category.slug])) self.assertIn("No pages currently in category.".lower(), response.content.lower())
def test_category_context(self): #Create categories and pages for categories categories = test_utils.create_categories() pages = test_utils.create_pages(categories) # For each category check the context dictionary passed via render() function for category in categories: response = self.client.get( reverse('show_category', args=[category.slug])) pages = Page.objects.filter(category=category) self.assertItemsEqual(response.context['pages'], pages) self.assertEquals(response.context['category'], category)
def test_template_tags(self): #Create categories categories = test_utils.create_categories() #Create template and context template = Template('{% load rango_extras %} {% get_category_list category %}') context = Context({'category': Category.objects.get(pk=1)}) rendered = template.render(context) # If template tags are working, then it is possible to see all categories for category in categories: self.assertIn(category.slug, rendered) self.assertIn(category.name, rendered)
def test_index_displays_five_most_viewed_pages(self): #Create categories categories = test_utils.create_categories() #Create pages for categories test_utils.create_pages(categories) # Access index response = self.client.get(reverse('index')) # Check if the 5 pages with most views are displayed for i in xrange(20, 15, -1): self.assertIn("Page " + str(i), response.content)
def test_index_contains_link_to_categories(self): #Create categories categories = test_utils.create_categories() # Access index response = self.client.get(reverse('index')) # Check if the 5 pages with most likes are displayed for i in xrange(10, 5, -1): category = categories[i - 1] self.assertIn( reverse('show_category', args=[category.slug])[:-1], response.content)
def test_category_contains_link_to_add_page(self): # Crete categories categories = test_utils.create_categories() # For each category in the database check if contains link to add page for category in categories: try: response = self.client.get(reverse('show_category', args=[category.slug])) self.assertIn(reverse('add_page', args=[category.slug]), response.content) except: try: response = self.client.get(reverse('rango:show_category', args=[category.slug])) self.assertIn(reverse('rango:add_page', args=[category.slug]), response.content) except: return False
def test_add_page_when_not_logged(self): #Create categories test_utils.create_categories() # Access index self.browser.get(self.live_server_url + reverse('index')) # Click category self.browser.find_element_by_partial_link_text('Category').click() # Check it does not have a link to add page body = self.browser.find_element_by_tag_name('body') self.assertNotIn('Add a Page', body.text) # Access add page directly category = Category.objects.all()[0] self.browser.get(self.live_server_url + reverse('add_page', args=[category.slug])) # Check login form is displayed # username self.browser.find_element_by_name('username') # password self.browser.find_element_by_name('password')
def test_all_templates_contain_a_page_header(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories categories = test_utils.create_categories() # Create a list of pages to access pages = [reverse('index'), reverse('about'), reverse('add_category'), reverse('registration_register'), reverse('auth_login'), reverse('category', args=[categories[0].slug]), reverse('add_page', args=[categories[0].slug]), reverse('restricted')] # For each page in the page list, check if it has a page header for page in pages: response = self.client.get(page) self.assertIn('<div class="page-header">', response.content)
def test_templates_inherits_from_base_template(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories categories = test_utils.create_categories() # Create a list of pages to access pages = [reverse('index'), reverse('about'), reverse('add_category'), reverse('register'), reverse('login'), reverse('category', args=[categories[0].slug]), reverse('add_page', args=[categories[0].slug]), reverse('restricted')] # For each page in the page list, check if it extends from base template for page in pages: response = self.client.get(page) base_html = loader.get_template('base.html') self.assertTrue(any(base_html.name == template.name for template in response.templates))
def test_titles_displayed(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories categories = test_utils.create_categories() # Access index and check the title displayed response = self.client.get(reverse('index')) self.assertIn('Rango -'.lower(), response.content.lower()) # Access category page and check the title displayed response = self.client.get( reverse('show_category', args=[categories[0].slug])) self.assertIn(categories[0].name.lower(), response.content.lower()) # Access about page and check the title displayed response = self.client.get(reverse('about')) self.assertIn('About'.lower(), response.content.lower()) # Access login page and check the title displayed response = self.client.get(reverse('login')) self.assertIn('Login'.lower(), response.content.lower()) # Access register page and check the title displayed response = self.client.get(reverse('register')) self.assertIn('Register'.lower(), response.content.lower()) # Access restricted page and check the title displayed response = self.client.get(reverse('restricted')) self.assertIn("Since you're logged in".lower(), response.content.lower()) # Access add page and check the title displayed response = self.client.get( reverse('add_page', args=[categories[0].slug])) self.assertIn('Add Page'.lower(), response.content.lower()) # Access add new category page and check the title displayed response = self.client.get(reverse('add_category')) self.assertIn('Add Category'.lower(), response.content.lower())
def test_pages_using_templates(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories categories = test_utils.create_categories() # Create a list of pages to access pages = [reverse('index'), reverse('about'), reverse('add_category'), reverse('register'), reverse('login'), reverse('category', args=[categories[0].slug]), reverse('add_page', args=[categories[0].slug]), reverse('restricted')] # Create a list of pages to access templates = ['rango/index.html', 'rango/about.html', 'rango/add_category.html', 'rango/register.html', 'rango/login.html','rango/category.html', 'rango/add_page.html', 'rango/restricted.html'] # For each page in the page list, check if it extends from base template for template, page in zip(templates, pages): response = self.client.get(page) self.assertTemplateUsed(response, template)
def test_category_page_displays_pages(self): #Create categories in database categories = test_utils.create_categories() # Create pages for categories test_utils.create_pages(categories) # For each category, access its page and check for the pages associated with it for category in categories: # Access category page response = self.client.get( reverse('show_category', args=[category.slug])) # Retrieve pages for that category pages = Page.objects.filter(category=category) # Check pages are displayed and they have a link for page in pages: self.assertIn(page.title, response.content) self.assertIn(page.url, response.content)
def test_index_context(self): # Access index with empty database response = self.client.get(reverse('index')) # Context dictionary is then empty self.assertItemsEqual(response.context['categories'], []) self.assertItemsEqual(response.context['pages'], []) categories = test_utils.create_categories() test_utils.create_pages(categories) #Access index with database filled response = self.client.get(reverse('index')) #Retrieve categories and pages from database categories = Category.objects.order_by('-likes')[:5] pages = Page.objects.order_by('-views')[:5] # Check context dictionary filled self.assertItemsEqual(response.context['categories'], categories) self.assertItemsEqual(response.context['pages'], pages)
def test_titles_displayed(self): # Create user and log in test_utils.create_user() self.client.login(username='******', password='******') # Create categories categories = test_utils.create_categories() # Access index and check the title displayed response = self.client.get(reverse('index')) self.assertIn('<title>Rango - How to Tango with Django!</title>', response.content) # Access category page and check the title displayed response = self.client.get(reverse('category', args=[categories[0].slug])) self.assertIn('<title>Rango - ' + categories[0].name + '</title>', response.content) # Access about page and check the title displayed response = self.client.get(reverse('about')) self.assertIn('<title>Rango - About</title>', response.content) # Access login page and check the title displayed response = self.client.get(reverse('login')) self.assertIn('<title>Rango - Login</title>', response.content) # Access register page and check the title displayed response = self.client.get(reverse('register')) self.assertIn('<title>Rango - Register</title>', response.content) # Access restricted page and check the title displayed response = self.client.get(reverse('restricted')) self.assertIn('<title>Rango - Restricted Page</title>', response.content) # Access add page and check the title displayed response = self.client.get(reverse('add_page', args=[categories[0].slug])) self.assertIn('<title>Rango - Add Page</title>', response.content) # Access add new category page and check the title displayed response = self.client.get(reverse('add_category')) self.assertIn('<title>Rango - Add Category</title>', response.content)