Set wercker up to use postgres for tests again.

Modify the tests to be postgres compatible by using more pointers to things rather than getting them everytime.
This commit is contained in:
Tom Price
2016-03-31 16:03:07 +01:00
parent 463c4d147c
commit 8cfda69717
3 changed files with 128 additions and 101 deletions

View File

@@ -430,7 +430,7 @@ class EventTest(LiveServerTestCase):
# See redirected to success page # See redirected to success page
successTitle = self.browser.find_element_by_xpath('//h1').text successTitle = self.browser.find_element_by_xpath('//h1').text
event = models.Event.objects.get(name='Test Event Name') event = models.Event.objects.get(name='Test Event Name')
self.assertIn("N0000%d | Test Event Name"%event.pk, successTitle) self.assertIn("N%05d | Test Event Name"%event.pk, successTitle)
except WebDriverException: except WebDriverException:
# This is a dirty workaround for wercker being a bit funny and not running it correctly. # This is a dirty workaround for wercker being a bit funny and not running it correctly.
# Waiting for wercker to get back to me about this # Waiting for wercker to get back to me about this
@@ -487,7 +487,7 @@ class EventTest(LiveServerTestCase):
# Attempt to save # Attempt to save
save.click() save.click()
self.assertNotIn("N0000%d"%testEvent.pk, self.browser.find_element_by_xpath('//h1').text) self.assertNotIn("N%05d"%testEvent.pk, self.browser.find_element_by_xpath('//h1').text)
# Check the new items are visible # Check the new items are visible
table = self.browser.find_element_by_id('item-table') # ID number is known, see above table = self.browser.find_element_by_id('item-table') # ID number is known, see above
@@ -496,7 +496,7 @@ class EventTest(LiveServerTestCase):
self.assertIn("Test Item 3", table.text) self.assertIn("Test Item 3", table.text)
infoPanel = self.browser.find_element_by_xpath('//div[contains(text(), "Event Info")]/..') infoPanel = self.browser.find_element_by_xpath('//div[contains(text(), "Event Info")]/..')
self.assertIn("N0000%d"%testEvent.pk, infoPanel.find_element_by_xpath('//dt[text()="Based On"]/following-sibling::dd[1]').text) self.assertIn("N%05d"%testEvent.pk, infoPanel.find_element_by_xpath('//dt[text()="Based On"]/following-sibling::dd[1]').text)
@@ -504,7 +504,7 @@ class EventTest(LiveServerTestCase):
#Check that based-on hasn't crept into the old event #Check that based-on hasn't crept into the old event
infoPanel = self.browser.find_element_by_xpath('//div[contains(text(), "Event Info")]/..') infoPanel = self.browser.find_element_by_xpath('//div[contains(text(), "Event Info")]/..')
self.assertNotIn("N0000%d"%testEvent.pk, infoPanel.find_element_by_xpath('//dt[text()="Based On"]/following-sibling::dd[1]').text) self.assertNotIn("N%05d"%testEvent.pk, infoPanel.find_element_by_xpath('//dt[text()="Based On"]/following-sibling::dd[1]').text)
# Check the items are as they were # Check the items are as they were
table = self.browser.find_element_by_id('item-table') # ID number is known, see above table = self.browser.find_element_by_id('item-table') # ID number is known, see above
@@ -623,7 +623,7 @@ class EventTest(LiveServerTestCase):
# See redirected to success page # See redirected to success page
successTitle = self.browser.find_element_by_xpath('//h1').text successTitle = self.browser.find_element_by_xpath('//h1').text
event = models.Event.objects.get(name='Test Event Name') event = models.Event.objects.get(name='Test Event Name')
self.assertIn("N0000%d | Test Event Name"%event.pk, successTitle) self.assertIn("N%05d | Test Event Name"%event.pk, successTitle)
def testRigNonRig(self): def testRigNonRig(self):
self.browser.get(self.live_server_url + '/event/create/') self.browser.get(self.live_server_url + '/event/create/')

View File

@@ -15,71 +15,82 @@ class ProfileTestCase(TestCase):
class VatRateTestCase(TestCase): class VatRateTestCase(TestCase):
def setUp(self): @classmethod
models.VatRate.objects.create(start_at='2014-03-01', rate=0.20, comment='test1') def setUpTestData(cls):
models.VatRate.objects.create(start_at='2016-03-01', rate=0.15, comment='test2') cls.rates = {
0: models.VatRate.objects.create(start_at='2014-03-01', rate=0.20, comment='test1'),
1: models.VatRate.objects.create(start_at='2016-03-01', rate=0.15, comment='test2'),
}
def test_find_correct(self): def test_find_correct(self):
r = models.VatRate.objects.find_rate('2015-03-01') r = models.VatRate.objects.find_rate('2015-03-01')
self.assertEqual(r.comment, 'test1') self.assertEqual(r, self.rates[0])
r = models.VatRate.objects.find_rate('2016-03-01') r = models.VatRate.objects.find_rate('2016-03-01')
self.assertEqual(r.comment, 'test2') self.assertEqual(r, self.rates[1])
def test_percent_correct(self): def test_percent_correct(self):
r = models.VatRate.objects.get(rate=0.20) self.assertEqual(self.rates[0].as_percent, 20)
self.assertEqual(r.as_percent, 20)
class EventTestCase(TestCase): class EventTestCase(TestCase):
def setUp(self): @classmethod
self.all_events = set(range(1, 18)) def setUpTestData(cls):
self.current_events = (1, 2, 3, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18) cls.all_events = set(range(1, 18))
self.not_current_events = set(self.all_events) - set(self.current_events) cls.current_events = (1, 2, 3, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18)
cls.not_current_events = set(cls.all_events) - set(cls.current_events)
self.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1') cls.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1')
self.profile = models.Profile.objects.create(username="testuser1", email="1@test.com") cls.profile = models.Profile.objects.create(username="testuser1", email="1@test.com")
# produce 7 normal events - 5 current cls.events = {
models.Event.objects.create(name="TE E1", start_date=date.today() + timedelta(days=6), # produce 7 normal events - 5 current
description="start future no end") 1: models.Event.objects.create(name="TE E1", start_date=date.today() + timedelta(days=6),
models.Event.objects.create(name="TE E2", start_date=date.today(), description="start today no end") description="start future no end"),
models.Event.objects.create(name="TE E3", start_date=date.today(), end_date=date.today(), 2: models.Event.objects.create(name="TE E2", start_date=date.today(), description="start today no end"),
description="start today with end today") 3: models.Event.objects.create(name="TE E3", start_date=date.today(), end_date=date.today(),
models.Event.objects.create(name="TE E4", start_date='2014-03-20', description="start past no end") description="start today with end today"),
models.Event.objects.create(name="TE E5", start_date='2014-03-20', end_date='2014-03-21', 4: models.Event.objects.create(name="TE E4", start_date='2014-03-20', description="start past no end"),
description="start past with end past") 5: models.Event.objects.create(name="TE E5", start_date='2014-03-20', end_date='2014-03-21',
models.Event.objects.create(name="TE E6", start_date=date.today() - timedelta(days=2), description="start past with end past"),
end_date=date.today() + timedelta(days=2), description="start past, end future") 6: models.Event.objects.create(name="TE E6", start_date=date.today() - timedelta(days=2),
models.Event.objects.create(name="TE E7", start_date=date.today() + timedelta(days=2), end_date=date.today() + timedelta(days=2),
end_date=date.today() + timedelta(days=2), description="start + end in future") description="start past, end future"),
7: models.Event.objects.create(name="TE E7", start_date=date.today() + timedelta(days=2),
end_date=date.today() + timedelta(days=2),
description="start + end in future"),
# 2 cancelled - 1 current # 2 cancelled - 1 current
models.Event.objects.create(name="TE E8", start_date=date.today() + timedelta(days=2), 8: models.Event.objects.create(name="TE E8", start_date=date.today() + timedelta(days=2),
end_date=date.today() + timedelta(days=2), status=models.Event.CANCELLED, end_date=date.today() + timedelta(days=2), status=models.Event.CANCELLED,
description="cancelled in future") description="cancelled in future"),
models.Event.objects.create(name="TE E9", start_date=date.today() - timedelta(days=1), 9: models.Event.objects.create(name="TE E9", start_date=date.today() - timedelta(days=1),
end_date=date.today() + timedelta(days=2), status=models.Event.CANCELLED, end_date=date.today() + timedelta(days=2), status=models.Event.CANCELLED,
description="cancelled and started") description="cancelled and started"),
# 5 dry hire - 3 current # 5 dry hire - 3 current
models.Event.objects.create(name="TE E10", start_date=date.today(), dry_hire=True, description="dryhire today") 10: models.Event.objects.create(name="TE E10", start_date=date.today(), dry_hire=True,
models.Event.objects.create(name="TE E11", start_date=date.today(), dry_hire=True, checked_in_by=self.profile, description="dryhire today"),
description="dryhire today, checked in") 11: models.Event.objects.create(name="TE E11", start_date=date.today(), dry_hire=True,
models.Event.objects.create(name="TE E12", start_date=date.today() - timedelta(days=1), dry_hire=True, checked_in_by=cls.profile,
status=models.Event.BOOKED, description="dryhire past") description="dryhire today, checked in"),
models.Event.objects.create(name="TE E13", start_date=date.today() - timedelta(days=2), dry_hire=True, 12: models.Event.objects.create(name="TE E12", start_date=date.today() - timedelta(days=1), dry_hire=True,
checked_in_by=self.profile, description="dryhire past checked in") status=models.Event.BOOKED, description="dryhire past"),
models.Event.objects.create(name="TE E14", start_date=date.today(), dry_hire=True, 13: models.Event.objects.create(name="TE E13", start_date=date.today() - timedelta(days=2), dry_hire=True,
status=models.Event.CANCELLED, description="dryhire today cancelled") checked_in_by=cls.profile, description="dryhire past checked in"),
14: models.Event.objects.create(name="TE E14", start_date=date.today(), dry_hire=True,
status=models.Event.CANCELLED, description="dryhire today cancelled"),
# 4 non rig - 3 current # 4 non rig - 3 current
models.Event.objects.create(name="TE E15", start_date=date.today(), is_rig=False, description="non rig today") 15: models.Event.objects.create(name="TE E15", start_date=date.today(), is_rig=False,
models.Event.objects.create(name="TE E16", start_date=date.today() + timedelta(days=1), is_rig=False, description="non rig today"),
description="non rig tomorrow") 16: models.Event.objects.create(name="TE E16", start_date=date.today() + timedelta(days=1), is_rig=False,
models.Event.objects.create(name="TE E17", start_date=date.today() - timedelta(days=1), is_rig=False, description="non rig tomorrow"),
description="non rig yesterday") 17: models.Event.objects.create(name="TE E17", start_date=date.today() - timedelta(days=1), is_rig=False,
models.Event.objects.create(name="TE E18", start_date=date.today(), is_rig=False, status=models.Event.CANCELLED, description="non rig yesterday"),
description="non rig today cancelled") 18: models.Event.objects.create(name="TE E18", start_date=date.today(), is_rig=False,
status=models.Event.CANCELLED,
description="non rig today cancelled"),
}
def test_count(self): def test_count(self):
# Santiy check we have the expected events created # Santiy check we have the expected events created
@@ -101,17 +112,23 @@ class EventTestCase(TestCase):
def test_related_venue(self): def test_related_venue(self):
v1 = models.Venue.objects.create(name="TE V1") v1 = models.Venue.objects.create(name="TE V1")
v2 = models.Venue.objects.create(name="TE V2") v2 = models.Venue.objects.create(name="TE V2")
events = models.Event.objects.all()
for event in events[:2]: e1 = []
event.venue = v1 e2 = []
event.save() for (key, event) in self.events.iteritems():
for event in events[3:4]: if event.pk % 2:
event.venue = v2 event.venue = v1
e1.append(event)
else:
event.venue = v2
e2.append(event)
event.save() event.save()
events = models.Event.objects.all() self.assertItemsEqual(e1, v1.latest_events)
self.assertItemsEqual(events[:2], v1.latest_events) self.assertItemsEqual(e2, v2.latest_events)
self.assertItemsEqual(events[3:4], v2.latest_events)
for (key, event) in self.events.iteritems():
event.venue = None
def test_related_vatrate(self): def test_related_vatrate(self):
self.assertEqual(self.vatrate, models.Event.objects.all()[0].vat_rate) self.assertEqual(self.vatrate, models.Event.objects.all()[0].vat_rate)
@@ -120,33 +137,43 @@ class EventTestCase(TestCase):
p1 = models.Person.objects.create(name="TE P1") p1 = models.Person.objects.create(name="TE P1")
p2 = models.Person.objects.create(name="TE P2") p2 = models.Person.objects.create(name="TE P2")
events = models.Event.objects.all() e1 = []
for event in events[:2]: e2 = []
event.person = p1 for (key, event) in self.events.iteritems():
event.save() if event.pk % 2:
for event in events[3:4]: event.person = p1
event.person = p2 e1.append(event)
else:
event.person = p2
e2.append(event)
event.save() event.save()
events = models.Event.objects.all() self.assertItemsEqual(e1, p1.latest_events)
self.assertItemsEqual(events[:2], p1.latest_events) self.assertItemsEqual(e2, p2.latest_events)
self.assertItemsEqual(events[3:4], p2.latest_events)
for (key, event) in self.events.iteritems():
event.person = None
def test_related_organisation(self): def test_related_organisation(self):
o1 = models.Organisation.objects.create(name="TE O1") o1 = models.Organisation.objects.create(name="TE O1")
o2 = models.Organisation.objects.create(name="TE O2") o2 = models.Organisation.objects.create(name="TE O2")
events = models.Event.objects.all() e1 = []
for event in events[:2]: e2 = []
event.organisation = o1 for (key, event) in self.events.iteritems():
event.save() if event.pk % 2:
for event in events[3:4]: event.organisation = o1
event.organisation = o2 e1.append(event)
else:
event.organisation = o2
e2.append(event)
event.save() event.save()
events = models.Event.objects.all() self.assertItemsEqual(e1, o1.latest_events)
self.assertItemsEqual(events[:2], o1.latest_events) self.assertItemsEqual(e2, o2.latest_events)
self.assertItemsEqual(events[3:4], o2.latest_events)
for (key, event) in self.events.iteritems():
event.organisation = None
def test_organisation_person_join(self): def test_organisation_person_join(self):
p1 = models.Person.objects.create(name="TE P1") p1 = models.Person.objects.create(name="TE P1")
@@ -184,20 +211,20 @@ class EventTestCase(TestCase):
self.assertEqual(len(o2.persons), 1) self.assertEqual(len(o2.persons), 1)
def test_cancelled_property(self): def test_cancelled_property(self):
event = models.Event.objects.all()[0] edit = self.events[1]
event.status = models.Event.CANCELLED edit.status = models.Event.CANCELLED
event.save() edit.save()
event = models.Event.objects.all()[0] event = models.Event.objects.get(pk=edit.pk)
self.assertEqual(event.status, models.Event.CANCELLED) self.assertEqual(event.status, models.Event.CANCELLED)
self.assertTrue(event.cancelled) self.assertTrue(event.cancelled)
event.status = models.Event.PROVISIONAL event.status = models.Event.PROVISIONAL
event.save() event.save()
def test_confirmed_property(self): def test_confirmed_property(self):
event = models.Event.objects.all()[0] edit = self.events[1]
event.status = models.Event.CONFIRMED edit.status = models.Event.CONFIRMED
event.save() edit.save()
event = models.Event.objects.all()[0] event = models.Event.objects.get(pk=edit.pk)
self.assertEqual(event.status, models.Event.CONFIRMED) self.assertEqual(event.status, models.Event.CONFIRMED)
self.assertTrue(event.confirmed) self.assertTrue(event.confirmed)
event.status = models.Event.PROVISIONAL event.status = models.Event.PROVISIONAL

View File

@@ -10,10 +10,10 @@ box: heroku/python
# You can also use services such as databases. Read more on our dev center: # You can also use services such as databases. Read more on our dev center:
# http://devcenter.wercker.com/docs/services/index.html # http://devcenter.wercker.com/docs/services/index.html
services: services:
# - id: postgres - id: postgres
# env: env:
# POSTGRES_PASSWORD: pyrigstesting POSTGRES_PASSWORD: pyrigstesting
# POSTGRES_USER: pyrigs POSTGRES_USER: pyrigs
# http://devcenter.wercker.com/docs/services/postgresql.html # http://devcenter.wercker.com/docs/services/postgresql.html
# - mongodb # - mongodb
@@ -69,11 +69,11 @@ build:
echo "pip version $(pip --version) running" echo "pip version $(pip --version) running"
# Django uses this to connect to the database # Django uses this to connect to the database
# - script: - script:
# name: set environment name: set environment
# code: | code: |
# export DEBUG=0 export DEBUG=0
# export DATABASE_URL="postgres://pyrigs:pyrigstesting@$POSTGRES_PORT_5432_TCP_ADDR:$POSTGRES_PORT_5432_TCP_PORT$POSTGRES_NAME" export DATABASE_URL="postgres://pyrigs:pyrigstesting@$POSTGRES_PORT_5432_TCP_ADDR:$POSTGRES_PORT_5432_TCP_PORT$POSTGRES_NAME"
# A step that executes `pip install` command. # A step that executes `pip install` command.
- pip-install - pip-install