You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

123 lines
4.9 KiB

from datetime import timedelta
from random import randint
from selenium import webdriver
from factory.faker import Faker
from django.utils import timezone
from django.test import TestCase
from django.shortcuts import reverse
from django.conf import settings
from django.utils.text import slugify
from unidecode import unidecode
from project.tests.factories import *
from project.tests import SeleniumTestCase
from project.utils.selenium_utils import SeleniumExtensions as SE
'''
class CoursesTestCase(TestCase):
@classmethod
def setUpTestData(cls):
create_admin()
create_batch_unique(CourseFactory, status=Course.STATUS_CHOICES[:3], price=[0, 1000],
age=Course.AGE_CHOICES[:2], deferred_start_at=[None, timezone.now() + timedelta(days=randint(5, 15))])
@classmethod
def tearDownClass(cls):
print('teardown CoursesTestCase')
super().tearDownClass()
def test_courses_url_accessible(self):
print('get ', reverse('courses'))
resp = self.client.get(reverse('courses'))
self.assertEqual(resp.status_code, 200)
def test_course_url_accessible(self):
for course in Course.objects.filter(status=Course.PUBLISHED):
print('get ', course.url)
resp = self.client.get(course.url)
self.assertEqual(resp.status_code, 200)
@login_admin
def test_course_edit_url_accessible(self):
for course in Course.objects.all():
print('get ', reverse('course_edit', args=[course.id]))
resp = self.client.get(reverse('course_edit', args=[course.id]))
self.assertEqual(resp.status_code, 200)
'''
class CourseEditTestCase(SeleniumTestCase):
@classmethod
def setUpTestData(cls):
create_admin()
UserFactory.create_batch(5, role=User.AUTHOR_ROLE)
# create_batch_unique(CourseFactory, status=Course.STATUS_CHOICES[:3], price=[0, 1000],
# age=Course.AGE_CHOICES[:2], deferred_start_at=[None, timezone.now() + timedelta(days=randint(5, 15))])
@classmethod
def tearDownClass(cls):
print('teardown CourseEditTestCase')
super().tearDownClass()
def test_course_edit(self):
print('go to google')
self.driver.get('http://www.google.com')
return
user = User.objects.filter(role=User.AUTHOR_ROLE).first()
self.client.force_login(user)
url = self.get_url(reverse('course_create'))
print('url', url)
self.driver.get(url)
# visible always elements
title_el = self.wait_elem_name('course-title')
slug_el = self.wait_elem_name('course-slug')
category_el = self.wait_elem_name('course-category')
is_paid_no_el = self.wait_elem_name('course-is-paid-no')
is_paid_yes_el = self.wait_elem_name('course-is-paid-yes')
is_paid_input_el = self.wait_elem_name('course-is-paid-input')
age_el = self.wait_elem_name('course-age')
is_featured_el = self.wait_elem_name('course-is-featured')
is_deferred_no_el = self.wait_elem_name('course-is-deferred-no')
is_deferred_yes_el = self.wait_elem_name('course-is-deferred-yes')
is_deferred_input_el = self.wait_elem_name('course-is-deferred-input')
content_btn_el = self.wait_elem_name('course-content-btn')
lessons_btn_el = self.wait_elem_name('course-lessons-btn')
content_el = self.wait_elem_name('course-content')
title = Faker('sentence', nb_words=6)
title_el.send_keys(title)
slug = slugify(unidecode(title[:90]))
print('title', title, 'slug', slug)
self.assertEqual(slug_el.text, slug)
print("is_paid_input_el.get_attribute('checked')", is_paid_input_el.get_attribute('checked'))
self.assertFalse(is_paid_input_el.get_attribute('checked'))
self.assertRaises(callable=lambda: self.driver.find_element_by_name('course-price'))
self.assertRaises(callable=lambda: self.driver.find_element_by_name('course-old-price'))
is_paid_yes_el.click()
try:
price_el = self.wait_elem_name('course-price')
old_price_el = self.wait_elem_name('course-old-price')
except:
self.fail('Price and old price elements not shown')
self.assertFalse(is_deferred_input_el.get_attribute('checked'))
self.assertRaises(callable=lambda: self.driver.find_element_by_name('course-date'))
self.assertRaises(callable=lambda: self.driver.find_element_by_name('course-time'))
is_deferred_yes_el.click()
try:
date_el = self.wait_elem_name('course-date')
time_el = self.wait_elem_name('course-time')
except:
self.fail('Date and time elements not shown')
# lessons_el = self.wait_elem_name('course-lessons')
# add_lesson_el = self.wait_elem_name('course-add-lesson')
# lesson_edit_el = self.wait_elem_name('course-lesson-edit')
# stream_el = self.wait_elem_name('course-stream')