From bdc9b7aa072b071d54e18428ce6b297686923d61 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Wed, 25 Jun 2014 20:27:26 +0000 Subject: [PATCH 1/2] initial automated test, establishes framework - Legacy-Id: 7933 --- ietf/meeting/tests_js.py | 92 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 ietf/meeting/tests_js.py diff --git a/ietf/meeting/tests_js.py b/ietf/meeting/tests_js.py new file mode 100644 index 000000000..4389b1a57 --- /dev/null +++ b/ietf/meeting/tests_js.py @@ -0,0 +1,92 @@ +import time +from pyquery import PyQuery +from unittest import skipIf + +from django.test import LiveServerTestCase +from django.core.urlresolvers import reverse as urlreverse + +from ietf.group import colors +from ietf.meeting.test_data import make_meeting_test_data +from ietf.meeting.models import ScheduledSession +from ietf import settings + +skip_selenium = getattr(settings,'SKIP_SELENIUM',None) +if skip_selenium: + skip_selenium = "settings.SKIP_SELENIUM = %s" % skip_selenium +else: + try: + from selenium import webdriver + from selenium.webdriver.common.action_chains import ActionChains + except ImportError as e: + skip_selenium = e.message + +def condition_data(): + make_meeting_test_data() + colors.fg_group_colors['FARFUT'] = 'blue' + colors.bg_group_colors['FARFUT'] = 'white' + + +@skipIf(skip_selenium,skip_selenium) +class ScheduleEditTests(LiveServerTestCase): + def setUp(self): + condition_data() + self.driver = webdriver.PhantomJS() + self.driver.set_window_size(1024,768) + + def debugSnapshot(self,filename='debug_this.png'): + self.driver.execute_script("document.body.bgColor = 'white';") + self.driver.save_screenshot(filename) + + def absreverse(self,*args,**kwargs): + return '%s%s'%(self.live_server_url,urlreverse(*args,**kwargs)) + + def login(self): + #url = self.absreverse('ietf.ietfauth.views.login') + url = '%s%s'%(self.live_server_url,'/accounts/login') + self.driver.get(url) + self.driver.find_element_by_name('username').send_keys('plain') + self.driver.find_element_by_name('password').send_keys('plain+password') + self.driver.find_element_by_xpath('//input[@value="Sign in"]').click() + + def testUnschedule(self): + + self.assertEqual(ScheduledSession.objects.filter(session__meeting__number=42,session__group__acronym='mars').count(),1) + + self.login() + url = self.absreverse('ietf.meeting.views.edit_agenda',kwargs=dict(num='42',name='test-agenda')) + self.driver.get(url) + + q = PyQuery(self.driver.page_source) + self.assertEqual(len(q('#sortable-list #session_1')),0) + + element = self.driver.find_element_by_id('session_1') + target = self.driver.find_element_by_id('sortable-list') + ActionChains(self.driver).drag_and_drop(element,target).perform() + + q = PyQuery(self.driver.page_source) + self.assertTrue(len(q('#sortable-list #session_1'))>0) + + time.sleep(0.1) # The API that modifies the database runs async + self.assertEqual(ScheduledSession.objects.filter(session__meeting__number=42,session__group__acronym='mars').count(),0) + +# The following are useful debugging tools + +# If you add this to a LiveServerTestCase and run just this test, you can browse +# to the test server with the data loaded by setUp() to debug why, for instance, +# a particular view isn't giving you what you expect +# def testJustSitThere(self): +# time.sleep(10000) + +# The LiveServerTestCase server runs in a mode like production - it hides crashes with the +# user-friendly message about mail being sent to the maintainers, and eats that mail. +# Loading the page that crashed with just a TestCase will at least let you see the +# traceback. +# +#from ietf.utils.test_utils import TestCase +#class LookAtCrashTest(TestCase): +# def setUp(self): +# condition_data() +# +# def testOpenSchedule(self): +# url = urlreverse('ietf.meeting.views.edit_agenda', kwargs=dict(num='42',name='test-agenda')) +# r = self.client.get(url) From cb659afd2f70cbc1c179ca7d75027b45d2eb9b2f Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Sat, 19 Jul 2014 20:36:55 +0000 Subject: [PATCH 2/2] changed call to skip to make the code more readable - Legacy-Id: 8134 --- ietf/meeting/tests_js.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/meeting/tests_js.py b/ietf/meeting/tests_js.py index 4389b1a57..6b581a15d 100644 --- a/ietf/meeting/tests_js.py +++ b/ietf/meeting/tests_js.py @@ -26,7 +26,7 @@ def condition_data(): colors.bg_group_colors['FARFUT'] = 'white' -@skipIf(skip_selenium,skip_selenium) +@skipIf(bool(skip_selenium),skip_selenium) class ScheduleEditTests(LiveServerTestCase): def setUp(self): condition_data()