/teledusite/teledu/tests/acceptance/testCharacter.py

https://github.com/tctimmeh/teledu · Python · 104 lines · 79 code · 25 blank · 0 comment · 1 complexity · ae388daa90a93be0a1cbf85d07b0c2c8 MD5 · raw file

  1. from selenium.webdriver.support.select import Select
  2. from selenium.common.exceptions import NoSuchElementException
  3. from teledu.models import CharacterAttributeValue
  4. from teleduLiveTestCase import TeleduLiveTestCase, setUpModule
  5. from selenium.webdriver.support.ui import WebDriverWait
  6. class TestCharacterSheet(TeleduLiveTestCase):
  7. def setUp(self):
  8. super(TestCharacterSheet, self).setUp()
  9. self.driver.get(self.url('character/%d' % self.character.id))
  10. def editElement(self, element, newValue):
  11. element.click()
  12. input = element.find_element_by_tag_name('input')
  13. input.clear()
  14. input.send_keys(newValue)
  15. input.submit()
  16. def editAttributeAndWaitForChange(self, attribute, newValue, changeAttribute = None):
  17. element = self.driver.find_element_by_id('attr_%d' % attribute.id)
  18. changeElement = element
  19. if changeAttribute is not None:
  20. changeElement = self.driver.find_element_by_id('attr_%d' % changeAttribute.id)
  21. self.editElement(element, newValue)
  22. WebDriverWait(self.driver, 5).until(lambda driver: self.elementHasText(changeElement, newValue))
  23. def testTitleContainsCharacterName(self):
  24. self.assertPageTitleIs('%s - Teledu' % self.character.name)
  25. def testHomeLinkGoesToWelcomePage(self):
  26. element = self.driver.find_element_by_partial_link_text('Home')
  27. self.assertLinkGoesHome(element)
  28. def testDeleteLinkGoesToDeleteCharacterPage(self):
  29. element = self.driver.find_element_by_partial_link_text('Delete')
  30. self.assertLinkGoesToUrl(element, 'character/%d/delete' % self.character.id)
  31. def testCharacterNameIsOnPage(self):
  32. nameElement = self.driver.find_element_by_id('attr_name')
  33. self.assertElementTextIs(nameElement, self.character.name)
  34. def testTextAttributesOnPage(self):
  35. element = self.driver.find_element_by_id('attr_%d' % self.charAttr.id)
  36. self.assertElementTextIs(element, self.charAttrValue.raw_value)
  37. def testIntegerAttributesOnPage(self):
  38. element = self.driver.find_element_by_id('attr_%d' % self.intCharAttr.id)
  39. self.assertElementTextIs(element, int(self.intCharAttrValue.raw_value))
  40. def testConceptAttributeOnPageAsConceptInstanceName(self):
  41. element = self.driver.find_element_by_id('attr_%d' % self.conceptCharAttr.id)
  42. self.assertElementTextIs(element, self.conceptInstance.name)
  43. def testEditingTextAttributeChangesCharacterInDatabase(self):
  44. expected = self.uniqStr()
  45. self.editAttributeAndWaitForChange(self.charAttr, expected)
  46. self.assertCharacterAttributeHasRawValue(self.charAttrValue, expected)
  47. def testEditingAttributeWithDependentsUpdatesDependentAttributes(self):
  48. expected = self.uniqStr()
  49. self.editAttributeAndWaitForChange(self.charAttr, expected, changeAttribute = self.dependentCharAttr)
  50. self.assertCharacterAttributeHasRawValue(self.dependentCharAttr, expected)
  51. def testAttributeMarkedAsHiddenDoesNotAppearOnCharacterSheet(self):
  52. self.charAttr.display = False
  53. self.charAttr.save()
  54. self.driver.refresh()
  55. self.assertRaises(NoSuchElementException, self.driver.find_element_by_id, 'attr_%d' % self.charAttr.id)
  56. def testChoosingNewValueForConceptAttributeUpdatesCharacterInDatabase(self):
  57. conceptInstance2 = self.createConceptInstance()
  58. element = self.driver.find_element_by_id('attr_%d' % self.conceptCharAttr.id)
  59. element.click()
  60. select = Select(element.find_element_by_tag_name('select'))
  61. self.assertEqual(select.first_selected_option.text, self.conceptInstance.name)
  62. select.select_by_visible_text(conceptInstance2.name)
  63. WebDriverWait(self.driver, 5).until(lambda driver: self.elementHasText(element, conceptInstance2.name))
  64. expected = conceptInstance2.name
  65. actual = CharacterAttributeValue.objects.get(character = self.character, attribute = self.conceptCharAttr).value
  66. self.assertEqual(actual, expected)
  67. def testListAttributesDisplayedAsUnorderedList(self):
  68. self.charAttr.list = True
  69. self.charAttr.save()
  70. attr2 = self.createAttributeValueForCharacter(self.charAttr, initialValue = self.uniqStr())
  71. self.driver.refresh()
  72. expected = [self.charAttrValue.value, attr2.value]
  73. expected.sort()
  74. element = self.driver.find_element_by_id('attr_%d' % self.charAttr.id)
  75. self.assertTrue(element.tag_name, 'ul')
  76. items = element.find_elements_by_tag_name('li')
  77. actual = map(lambda e: e.text, items)
  78. actual.sort()
  79. self.assertEqual(actual, expected)