import time from factory.faker import Faker from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from django.utils.html import strip_tags class TestContentMixin: content_data = [] def check_saving(self): if not self.autosave: return raise NotImplementedError() def check_content_saving(self, obj): print('Check content saving',) self.assertEqual(obj.content.all().count(), len(self.content_data)) for i, item in enumerate(obj.content.all().order_by('position', '-created_at',)): item_data = self.content_data[i].get('data') for key, value in item_data.items(): if key == 'txt': self.assertEqual(strip_tags(getattr(item, key)), value) else: self.assertEqual(getattr(item, key), value) print('OK') def check_content(self, inside_el=None): print('Check content block') self.object_data['content'] = self.content_data block_add_el = self.wait_elem_name('block-add', inside_el) open_el = self.wait_elem_name('block-add-open', block_add_el) self.assertRaises(TimeoutException, lambda: self.wait_elem_name('block-add-close', block_add_el)) open_el.click() time.sleep(0.5) close_el = self.wait_elem_name('block-add-close', block_add_el) block_text_el = self.wait_elem_name('block-add-block-text', block_add_el) block_text_el.click() time.sleep(0.5) self.check_block_text(inside_el) open_el.click() time.sleep(0.5) block_image_el = self.wait_elem_name('block-add-block-image', block_add_el) block_image_el.click() time.sleep(0.5) self.check_block_image(inside_el) open_el.click() time.sleep(0.5) block_image_text_el = self.wait_elem_name('block-add-block-image-text', block_add_el) block_image_text_el.click() time.sleep(0.5) self.check_block_image_text(inside_el) open_el.click() time.sleep(0.5) block_images_el = self.wait_elem_name('block-add-block-images', block_add_el) block_images_el.click() time.sleep(0.5) self.check_block_images(inside_el) open_el.click() time.sleep(0.5) block_video_el = self.wait_elem_name('block-add-block-video', block_add_el) block_video_el.click() time.sleep(0.5) self.check_block_video(inside_el) def check_block_text(self, inside_el=None): print('Check block text') time.sleep(1) block_obj = {'type': 'text', 'data': {}} block_el = self.wait_elem_name('block-text', inside_el) title_el = self.wait_elem_name('block-text-title', block_el) text_el = self.wait_elem_name('block-text-text-wrap', block_el).find_element( By.XPATH, './/div[contains(@class, "redactor-layer")][@contenteditable]') self.content_data.append(block_obj) title = Faker('sentence', nb_words=6).generate({}) title_el.send_keys(title) block_obj['data']['title'] = title text = Faker('sentence', nb_words=50).generate({}) text_el.click() text_el.send_keys(text) block_obj['data']['txt'] = text self.check_saving() def check_block_image(self, inside_el=None): return print('Check block image') time.sleep(1) block_obj = {'type': 'image', 'data': {}} block_el = self.wait_elem_name('block-image', inside_el) title_el = self.wait_elem_name('block-image-title', block_el) image_el = self.wait_elem_name('block-image-image', block_el) self.content_data.append(block_obj) title = Faker('sentence', nb_words=6).generate({}) title_el.send_keys(title) block_obj['data']['title'] = title # TODO: check image upload self.check_saving() def check_block_image_text(self, inside_el=None): return print('Check block image-text') time.sleep(1) block_obj = {'type': 'image-text', 'data': {}} block_el = self.wait_elem_name('block-image-text', inside_el) title_el = self.wait_elem_name('block-image-text-title', block_el) text_el = self.wait_elem_name('block-image-text-text-wrap', block_el).find_element( By.XPATH, './/div[contains(@class, "redactor-layer")][@contenteditable]') image_el = self.wait_elem_name('block-image-text-image', block_el) self.content_data.append(block_obj) title = Faker('sentence', nb_words=6).generate({}) title_el.send_keys(title) block_obj['data']['title'] = title text = Faker('sentence', nb_words=50).generate({}) text_el.click() text_el.send_keys(text) block_obj['data']['txt'] = text # TODO: check image upload self.check_saving() def check_block_images(self, inside_el=None): print('Check block images') time.sleep(1) block_obj = {'type': 'images', 'data': {}} self.content_data.append(block_obj) # block_el = self.wait_elem_name('block-images', inside_el) # title_el = self.wait_elem_name('block-images-title', block_el) # title = Faker('sentence', nb_words=6).generate({}) # title_el.send_keys(title) # block_obj['data']['title'] = title self.check_saving() def check_block_video(self, inside_el=None): return print('Check block images')