From 8cfda6971796dfa6577247bf91c3136c2690b730 Mon Sep 17 00:00:00 2001 From: Tom Price Date: Thu, 31 Mar 2016 16:03:07 +0100 Subject: [PATCH] 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. --- RIGS/test_functional.py | 10 +- RIGS/test_models.py | 199 +++++++++++++++++++++++----------------- wercker.yml | 20 ++-- 3 files changed, 128 insertions(+), 101 deletions(-) diff --git a/RIGS/test_functional.py b/RIGS/test_functional.py index ed563be3..1b87cd08 100644 --- a/RIGS/test_functional.py +++ b/RIGS/test_functional.py @@ -430,7 +430,7 @@ class EventTest(LiveServerTestCase): # See redirected to success page successTitle = self.browser.find_element_by_xpath('//h1').text 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: # 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 @@ -487,7 +487,7 @@ class EventTest(LiveServerTestCase): # Attempt to save 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 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) 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 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 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 successTitle = self.browser.find_element_by_xpath('//h1').text 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): self.browser.get(self.live_server_url + '/event/create/') diff --git a/RIGS/test_models.py b/RIGS/test_models.py index a7896cbe..b84fc7a6 100644 --- a/RIGS/test_models.py +++ b/RIGS/test_models.py @@ -15,71 +15,82 @@ class ProfileTestCase(TestCase): class VatRateTestCase(TestCase): - def setUp(self): - models.VatRate.objects.create(start_at='2014-03-01', rate=0.20, comment='test1') - models.VatRate.objects.create(start_at='2016-03-01', rate=0.15, comment='test2') + @classmethod + def setUpTestData(cls): + 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): 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') - self.assertEqual(r.comment, 'test2') + self.assertEqual(r, self.rates[1]) def test_percent_correct(self): - r = models.VatRate.objects.get(rate=0.20) - self.assertEqual(r.as_percent, 20) + self.assertEqual(self.rates[0].as_percent, 20) class EventTestCase(TestCase): - def setUp(self): - self.all_events = set(range(1, 18)) - self.current_events = (1, 2, 3, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18) - self.not_current_events = set(self.all_events) - set(self.current_events) + @classmethod + def setUpTestData(cls): + cls.all_events = set(range(1, 18)) + 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') - self.profile = models.Profile.objects.create(username="testuser1", email="1@test.com") + cls.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1') + cls.profile = models.Profile.objects.create(username="testuser1", email="1@test.com") - # produce 7 normal events - 5 current - models.Event.objects.create(name="TE E1", start_date=date.today() + timedelta(days=6), - description="start future no end") - models.Event.objects.create(name="TE E2", start_date=date.today(), description="start today no end") - models.Event.objects.create(name="TE E3", start_date=date.today(), end_date=date.today(), - description="start today with end today") - models.Event.objects.create(name="TE E4", start_date='2014-03-20', description="start past no end") - models.Event.objects.create(name="TE E5", start_date='2014-03-20', end_date='2014-03-21', - description="start past with end past") - models.Event.objects.create(name="TE E6", start_date=date.today() - timedelta(days=2), - end_date=date.today() + timedelta(days=2), description="start past, end future") - 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") + cls.events = { + # produce 7 normal events - 5 current + 1: models.Event.objects.create(name="TE E1", start_date=date.today() + timedelta(days=6), + description="start future no end"), + 2: models.Event.objects.create(name="TE E2", start_date=date.today(), description="start today no end"), + 3: models.Event.objects.create(name="TE E3", start_date=date.today(), end_date=date.today(), + description="start today with end today"), + 4: models.Event.objects.create(name="TE E4", start_date='2014-03-20', description="start past no end"), + 5: models.Event.objects.create(name="TE E5", start_date='2014-03-20', end_date='2014-03-21', + description="start past with end past"), + 6: models.Event.objects.create(name="TE E6", start_date=date.today() - timedelta(days=2), + end_date=date.today() + timedelta(days=2), + 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 - 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, - description="cancelled in future") - 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, - description="cancelled and started") + # 2 cancelled - 1 current + 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, + description="cancelled in future"), + 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, + description="cancelled and started"), - # 5 dry hire - 3 current - models.Event.objects.create(name="TE E10", start_date=date.today(), dry_hire=True, description="dryhire today") - models.Event.objects.create(name="TE E11", start_date=date.today(), dry_hire=True, checked_in_by=self.profile, - description="dryhire today, checked in") - models.Event.objects.create(name="TE E12", start_date=date.today() - timedelta(days=1), dry_hire=True, - status=models.Event.BOOKED, description="dryhire past") - models.Event.objects.create(name="TE E13", start_date=date.today() - timedelta(days=2), dry_hire=True, - checked_in_by=self.profile, description="dryhire past checked in") - models.Event.objects.create(name="TE E14", start_date=date.today(), dry_hire=True, - status=models.Event.CANCELLED, description="dryhire today cancelled") + # 5 dry hire - 3 current + 10: models.Event.objects.create(name="TE E10", start_date=date.today(), dry_hire=True, + description="dryhire today"), + 11: models.Event.objects.create(name="TE E11", start_date=date.today(), dry_hire=True, + checked_in_by=cls.profile, + description="dryhire today, checked in"), + 12: models.Event.objects.create(name="TE E12", start_date=date.today() - timedelta(days=1), dry_hire=True, + status=models.Event.BOOKED, description="dryhire past"), + 13: models.Event.objects.create(name="TE E13", start_date=date.today() - timedelta(days=2), dry_hire=True, + 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 - models.Event.objects.create(name="TE E15", start_date=date.today(), is_rig=False, description="non rig today") - models.Event.objects.create(name="TE E16", start_date=date.today() + timedelta(days=1), is_rig=False, - description="non rig tomorrow") - models.Event.objects.create(name="TE E17", start_date=date.today() - timedelta(days=1), is_rig=False, - description="non rig yesterday") - models.Event.objects.create(name="TE E18", start_date=date.today(), is_rig=False, status=models.Event.CANCELLED, - description="non rig today cancelled") + # 4 non rig - 3 current + 15: models.Event.objects.create(name="TE E15", start_date=date.today(), is_rig=False, + description="non rig today"), + 16: models.Event.objects.create(name="TE E16", start_date=date.today() + timedelta(days=1), is_rig=False, + description="non rig tomorrow"), + 17: models.Event.objects.create(name="TE E17", start_date=date.today() - timedelta(days=1), is_rig=False, + description="non rig yesterday"), + 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): # Santiy check we have the expected events created @@ -101,17 +112,23 @@ class EventTestCase(TestCase): def test_related_venue(self): v1 = models.Venue.objects.create(name="TE V1") v2 = models.Venue.objects.create(name="TE V2") - events = models.Event.objects.all() - for event in events[:2]: - event.venue = v1 - event.save() - for event in events[3:4]: - event.venue = v2 + + e1 = [] + e2 = [] + for (key, event) in self.events.iteritems(): + if event.pk % 2: + event.venue = v1 + e1.append(event) + else: + event.venue = v2 + e2.append(event) event.save() - events = models.Event.objects.all() - self.assertItemsEqual(events[:2], v1.latest_events) - self.assertItemsEqual(events[3:4], v2.latest_events) + self.assertItemsEqual(e1, v1.latest_events) + self.assertItemsEqual(e2, v2.latest_events) + + for (key, event) in self.events.iteritems(): + event.venue = None def test_related_vatrate(self): 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") p2 = models.Person.objects.create(name="TE P2") - events = models.Event.objects.all() - for event in events[:2]: - event.person = p1 - event.save() - for event in events[3:4]: - event.person = p2 + e1 = [] + e2 = [] + for (key, event) in self.events.iteritems(): + if event.pk % 2: + event.person = p1 + e1.append(event) + else: + event.person = p2 + e2.append(event) event.save() - events = models.Event.objects.all() - self.assertItemsEqual(events[:2], p1.latest_events) - self.assertItemsEqual(events[3:4], p2.latest_events) + self.assertItemsEqual(e1, p1.latest_events) + self.assertItemsEqual(e2, p2.latest_events) + + for (key, event) in self.events.iteritems(): + event.person = None def test_related_organisation(self): o1 = models.Organisation.objects.create(name="TE O1") o2 = models.Organisation.objects.create(name="TE O2") - events = models.Event.objects.all() - for event in events[:2]: - event.organisation = o1 - event.save() - for event in events[3:4]: - event.organisation = o2 + e1 = [] + e2 = [] + for (key, event) in self.events.iteritems(): + if event.pk % 2: + event.organisation = o1 + e1.append(event) + else: + event.organisation = o2 + e2.append(event) event.save() - events = models.Event.objects.all() - self.assertItemsEqual(events[:2], o1.latest_events) - self.assertItemsEqual(events[3:4], o2.latest_events) + self.assertItemsEqual(e1, o1.latest_events) + self.assertItemsEqual(e2, o2.latest_events) + + for (key, event) in self.events.iteritems(): + event.organisation = None def test_organisation_person_join(self): p1 = models.Person.objects.create(name="TE P1") @@ -184,20 +211,20 @@ class EventTestCase(TestCase): self.assertEqual(len(o2.persons), 1) def test_cancelled_property(self): - event = models.Event.objects.all()[0] - event.status = models.Event.CANCELLED - event.save() - event = models.Event.objects.all()[0] + edit = self.events[1] + edit.status = models.Event.CANCELLED + edit.save() + event = models.Event.objects.get(pk=edit.pk) self.assertEqual(event.status, models.Event.CANCELLED) self.assertTrue(event.cancelled) event.status = models.Event.PROVISIONAL event.save() def test_confirmed_property(self): - event = models.Event.objects.all()[0] - event.status = models.Event.CONFIRMED - event.save() - event = models.Event.objects.all()[0] + edit = self.events[1] + edit.status = models.Event.CONFIRMED + edit.save() + event = models.Event.objects.get(pk=edit.pk) self.assertEqual(event.status, models.Event.CONFIRMED) self.assertTrue(event.confirmed) event.status = models.Event.PROVISIONAL diff --git a/wercker.yml b/wercker.yml index c2749a3e..0e2efea2 100644 --- a/wercker.yml +++ b/wercker.yml @@ -10,10 +10,10 @@ box: heroku/python # You can also use services such as databases. Read more on our dev center: # http://devcenter.wercker.com/docs/services/index.html services: -# - id: postgres -# env: -# POSTGRES_PASSWORD: pyrigstesting -# POSTGRES_USER: pyrigs + - id: postgres + env: + POSTGRES_PASSWORD: pyrigstesting + POSTGRES_USER: pyrigs # http://devcenter.wercker.com/docs/services/postgresql.html # - mongodb @@ -69,11 +69,11 @@ build: echo "pip version $(pip --version) running" # Django uses this to connect to the database -# - script: -# name: set environment -# code: | -# export DEBUG=0 -# export DATABASE_URL="postgres://pyrigs:pyrigstesting@$POSTGRES_PORT_5432_TCP_ADDR:$POSTGRES_PORT_5432_TCP_PORT$POSTGRES_NAME" + - script: + name: set environment + code: | + export DEBUG=0 + 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. - pip-install @@ -100,4 +100,4 @@ build: name: collect coverage data code: | coverage report -m --include=PyRIGS/*.*,RIGS/*.* --omit=*/migrations/* | tee coverage.txt - coverage html --include=PyRIGS/*.*,RIGS/*.* --omit=*/migrations/* \ No newline at end of file + coverage html --include=PyRIGS/*.*,RIGS/*.* --omit=*/migrations/*