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')