You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

helpers.py 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import twill
  2. from StringIO import StringIO
  3. from django.test import TestCase
  4. from django.core.servers.basehttp import AdminMediaHandler
  5. from django.core.handlers.wsgi import WSGIHandler
  6. from django.core.urlresolvers import reverse
  7. from oscar.apps.catalogue.models import ProductClass, Product
  8. from oscar.apps.partner.models import Partner, StockRecord
  9. def create_product(price=None, title="Dummy title", product_class="Dummy item class",
  10. partner="Dummy partner", upc="dummy_101", num_in_stock=10):
  11. """
  12. Helper method for creating products that are used in tests.
  13. """
  14. ic,_ = ProductClass._default_manager.get_or_create(name=product_class)
  15. item = Product._default_manager.create(title=title, product_class=ic, upc=upc)
  16. if price:
  17. partner,_ = Partner._default_manager.get_or_create(name=partner)
  18. sr = StockRecord._default_manager.create(product=item, partner=partner,
  19. price_excl_tax=price, num_in_stock=num_in_stock)
  20. return item
  21. class TwillTestCase(TestCase):
  22. """
  23. Simple wrapper around Twill to make writing TestCases easier.
  24. Commands availabel through self.command are:
  25. - go -> visit a URL
  26. - back -> back to previous URL
  27. - reload -> reload URL
  28. - follow -> follow a given link
  29. - code -> assert the HTTP response code
  30. - find -> assert page contains some string
  31. - notfind -> assert page does not contain
  32. - title -> assert page title
  33. """
  34. HOST = '127.0.0.1'
  35. PORT = 8080
  36. def setUp(self):
  37. app = AdminMediaHandler(WSGIHandler())
  38. twill.add_wsgi_intercept(self.HOST, self.PORT, lambda: app)
  39. twill.set_output(StringIO())
  40. self.command = twill.commands
  41. def tearDown(self):
  42. twill.remove_wsgi_intercept(self.HOST, self.PORT)
  43. def reverse(self, url_name, *args, **kwargs):
  44. """
  45. Custom 'reverse' function that includes the protocol and host
  46. """
  47. return 'http://%s:%d%s' % (self.HOST, self.PORT, reverse(url_name, *args, **kwargs))
  48. def visit(self, url_name, *args,**kwargs):
  49. self.command.go(self.reverse(url_name, *args, **kwargs))
  50. def assertResponseCodeIs(self, code):
  51. self.command.code(code)
  52. def assertPageContains(self, regexp):
  53. self.command.find(regexp)
  54. def assertPageDoesNotContain(self, regexp):
  55. self.command.notfind(regexp)
  56. def assertPageTitleMatches(self, regexp):
  57. self.command.title(regexp)