UPD: more and better tests.

This commit is contained in:
2019-03-22 17:32:08 +01:00
parent dc37c110df
commit e20f536b1b
6 changed files with 187 additions and 55 deletions

View File

@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
import datetime
import time
from django.apps import apps
from django.contrib.auth import get_user_model
@@ -12,9 +11,10 @@ from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from dav_base.tests.generic import ScreenshotTestCase
from dav_auth.tests.generic import SeleniumAuthMixin
from dav_base.tests.generic import skip_unless_tag_option, ScreenshotTestCase
TEST_TRAINER_EMAIL = 'trainer@localhost'
TEST_PASSWORD = u'me||ön 2'
TEST_EVENT_DATA_S = {
'mode': 'training',
@@ -36,7 +36,7 @@ TEST_EVENT_DATA_S = {
'pre_meeting_1': '10.12.2019 18:35',
'trainer_firstname': u'Trainer1 Ö.',
'trainer_familyname': u'Ä. Tourenleiter',
'trainer_email': 'trainer@localhost',
'trainer_email': TEST_TRAINER_EMAIL,
'trainer_2_fullname': u'Trainer2 Überflieger',
'trainer_3_fullname': u'Trainer3 Weißalles',
'deadline': 'month',
@@ -88,11 +88,28 @@ TEST_EVENT_DATA_W = {
u' heinzel =u}',
],
}
TEST_EVENT_DATA_M = {
'sport': 'M',
'first_day': '21.6.2018',
'trainer_firstname': u'Other',
'trainer_familyname': u'Trainer',
'trainer_email': 'other.trainer@localhost',
'title': u'MTB-Zeitreise > 2018',
'description': [
u'Hier steht jetzt so allerhand Scheiß.',
u'z.B. eine ÜRL: https://de.wikipedia.org (leider öhne Ümläüte)',
u'& eine E-Mail-Ädresse: <heinzel@alpenverein-karlsruhe.de>'
],
'internal_note': [
u'Automatisierter Software Test',
u'Viele Grüße',
u' heinzel =u}',
],
}
@skip_unless_tag_option()
@tag('screenshots')
class TestCase(ScreenshotTestCase):
@tag('screenshots', 'browser')
class TestCase(SeleniumAuthMixin, ScreenshotTestCase):
screenshot_prefix = 'dav_events-'
def create_user_for_role(self, role_name, first_name, last_name):
@@ -113,21 +130,6 @@ class TestCase(ScreenshotTestCase):
return user
def login(self, username, password):
self.get(reverse('dav_auth:login'))
c = self.selenium
username_field = self.wait_on_presence(c, (By.ID, 'id_username'))
username_field.clear()
username_field.send_keys(username)
password_field = c.find_element_by_id('id_password')
password_field.clear()
password_field.send_keys(password)
password_field.send_keys(Keys.RETURN)
self.wait_until_stale(c, password_field)
def logout(self):
self.get(reverse('dav_auth:logout'))
def create_event(self, event_data, auth=False, screenshots=True):
data = event_data
c = self.selenium
@@ -300,18 +302,26 @@ class TestCase(ScreenshotTestCase):
if 'trainer_firstname' in data:
field = self.wait_on_presence(c, (By.ID, 'id_trainer_firstname'))
if auth:
field.clear()
field.send_keys(data['trainer_firstname'])
if 'trainer_familyname' in data:
field = c.find_element_by_id('id_trainer_familyname')
if auth:
field.clear()
field.send_keys(data['trainer_familyname'])
if 'trainer_email' in data:
field = c.find_element_by_id('id_trainer_email')
if auth:
field.clear()
field.send_keys(data['trainer_email'])
if 'trainer_phone' in data:
field = c.find_element_by_id('id_trainer_phone')
if auth:
field.clear()
field.send_keys(data['trainer_phone'])
if 'trainer_2_fullname' in data:
@@ -466,6 +476,61 @@ class TestCase(ScreenshotTestCase):
if screenshots:
self.save_screenshot('event_list_after', sequence=sequence_name)
def clone_event(self, title, screenshots=True):
c = self.selenium
sequence_name = 'clone_event'
c.get(self.complete_url(reverse('dav_events:root')))
button = self.wait_on_presence(c, (By.ID, 'btn-events-list'))
button.click()
self.wait_until_stale(c, button)
if screenshots:
self.save_screenshot('event_list_before', sequence=sequence_name)
link = c.find_element_by_link_text(title)
link.click()
self.wait_until_stale(c, link)
if screenshots:
self.save_screenshot('event_details', sequence=sequence_name)
button = c.find_element_by_id('btn-clone')
button.click()
self.wait_until_stale(c, button)
for i in range(0, 11):
try:
button = c.find_element_by_id('btn-form-next')
except NoSuchElementException:
break
if screenshots:
self.save_screenshot('form', sequence=sequence_name)
try:
field = c.find_element_by_id('id_deadline')
radio = field.find_element_by_css_selector('input[value=\'OTHER\']')
radio.click()
except NoSuchElementException:
pass
button.click()
self.wait_until_stale(c, button)
else:
self.fail('Too many sub forms')
if screenshots:
self.save_screenshot('summary', sequence=sequence_name)
button = c.find_element_by_id('btn-form-submit')
button.click()
self.wait_until_stale(c, button)
if screenshots:
self.save_screenshot('event-list-after', sequence=sequence_name)
def accept_event(self, title, screenshots=True):
c = self.selenium
@@ -504,6 +569,44 @@ class TestCase(ScreenshotTestCase):
if screenshots:
self.save_screenshot('event_list_after', sequence=sequence_name)
def confirm_publication_event(self, title, channel='all', screenshots=True):
c = self.selenium
sequence_name = 'confirm_publication'
c.get(self.complete_url(reverse('dav_events:root')))
button = self.wait_on_presence(c, (By.ID, 'btn-events-list'))
button.click()
self.wait_until_stale(c, button)
if screenshots:
self.save_screenshot('event_list_before', sequence=sequence_name)
link = c.find_element_by_link_text(title)
link.click()
self.wait_until_stale(c, link)
if screenshots:
self.save_screenshot('event_details', sequence=sequence_name)
button = c.find_element_by_id('btn-confirmpublication')
button.click()
time.sleep(.5)
if screenshots:
self.save_screenshot('confirmpublication_modal', sequence=sequence_name)
button = c.find_element_by_css_selector('#btn-confirmpublication-{}'.format(channel))
button.click()
self.wait_until_stale(c, button)
if screenshots:
self.save_screenshot('confirmed_{}'.format(channel), sequence=sequence_name)
link = c.find_element_by_link_text(ugettext('Veranstaltungsliste'))
link.click()
self.wait_until_stale(c, link)
if screenshots:
self.save_screenshot('event_list_after', sequence=sequence_name)
def setUp(self):
super(TestCase, self).setUp()
@@ -523,18 +626,38 @@ class TestCase(ScreenshotTestCase):
self.create_event(TEST_EVENT_DATA_S, auth=False)
self.create_event(TEST_EVENT_DATA_W, auth=True)
self.create_event(TEST_EVENT_DATA_M, auth=True)
link = c.find_element_by_link_text(TEST_EVENT_DATA_W['title'])
link.click()
self.wait_until_stale(c, link)
self.save_screenshot('owner_event_details')
self.logout()
self.logout(c)
self.login(self.manager_s.username, TEST_PASSWORD)
self.login(c, self.manager_s.username, TEST_PASSWORD)
self.accept_event(TEST_EVENT_DATA_S['title'])
self.logout()
self.logout(c)
self.login(self.manager_super.username, TEST_PASSWORD)
self.login(c, self.manager_super.username, TEST_PASSWORD)
self.accept_event(TEST_EVENT_DATA_W['title'])
self.logout()
self.logout(c)
self.login(c, self.publisher_web.username, TEST_PASSWORD)
self.confirm_publication_event(TEST_EVENT_DATA_S['title'], channel='web')
self.logout(c)
self.login(c, self.publisher_facebook.username, TEST_PASSWORD)
self.confirm_publication_event(TEST_EVENT_DATA_S['title'], channel='facebook')
self.logout(c)
self.login(c, self.publisher_facebook.username, TEST_PASSWORD)
self.confirm_publication_event(TEST_EVENT_DATA_W['title'], channel='facebook')
self.logout(c)
self.login(c, self.publisher_web.username, TEST_PASSWORD)
self.confirm_publication_event(TEST_EVENT_DATA_W['title'], channel='web')
self.logout(c)
self.login(c, TEST_TRAINER_EMAIL, TEST_PASSWORD)
self.clone_event(TEST_EVENT_DATA_S['title'])