From 4948b18e2904fdae54b9ce4c1a52d705e0203f35 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Sun, 22 Feb 2015 01:05:56 +0000 Subject: [PATCH 1/4] Use -id as a secondary key when retrieving latest page revision. This fixes various unit tests on MySQL, where multiple revisions are committed in the space of one second, and the resolution of the created_at timestamp is insufficient to distinguish them. --- wagtail/wagtailcore/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 1a4291e195..7af9afbe46 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -481,7 +481,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed return revision def get_latest_revision(self): - return self.revisions.order_by('-created_at').first() + return self.revisions.order_by('-created_at', '-id').first() def get_latest_revision_as_page(self): latest_revision = self.get_latest_revision() @@ -1097,7 +1097,7 @@ class PageRevision(models.Model): # special case: a revision without an ID is presumed to be newly-created and is thus # newer than any revision that might exist in the database return True - latest_revision = PageRevision.objects.filter(page_id=self.page_id).order_by('-created_at').first() + latest_revision = PageRevision.objects.filter(page_id=self.page_id).order_by('-created_at', '-id').first() return (latest_revision == self) def publish(self): From 0b31f9933f85be042cc9b6728504a55df9ec649f Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 23 Feb 2015 12:44:13 +0000 Subject: [PATCH 2/4] enable tox tests for mysql --- .travis.yml | 3 +++ tox.ini | 9 ++------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3bb00d5465..c41b47079c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,15 +4,18 @@ matrix: include: - env: TOXENV=py27-dj17-postgres - env: TOXENV=py27-dj17-sqlite + - env: TOXENV=py27-dj17-mysql - env: TOXENV=py33-dj17-postgres - env: TOXENV=py34-dj17-postgres - env: TOXENV=py34-dj17-sqlite - env: TOXENV=py27-dj18-postgres +# - env: TOXENV=py27-dj18-mysql # - env: TOXENV=py27-dj18-sqlite # - env: TOXENV=py33-dj18-postgres - env: TOXENV=py34-dj18-postgres - env: TOXENV=py34-dj18-sqlite allow_failures: + - env: TOXENV=py27-dj17-mysql - env: TOXENV=py27-dj18-postgres - env: TOXENV=py34-dj18-postgres - env: TOXENV=py34-dj18-sqlite diff --git a/tox.ini b/tox.ini index 2558e02076..8f65d452ee 100644 --- a/tox.ini +++ b/tox.ini @@ -42,25 +42,20 @@ usedevelop = True envlist = py27-dj17-postgres, py27-dj17-sqlite, + py27-dj17-mysql, py33-dj17-postgres, py33-dj17-sqlite, py34-dj17-postgres, py34-dj17-sqlite, py27-dj18-postgres, py27-dj18-sqlite, + py27-dj18-mysql, py33-dj18-postgres, py33-dj18-sqlite, py34-dj18-postgres, py34-dj18-sqlite -# mysql not currently supported -# (wagtail.wagtailimages.tests.TestImageEditView currently fails with a -# foreign key constraint error) -# py26-dj16-mysql -# py27-dj16-mysql - - [testenv] commands=coverage run runtests.py From c46e97c9ce8aa865663b4975c331788861403be8 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 23 Feb 2015 15:37:02 +0000 Subject: [PATCH 3/4] pass DATABASE_HOST=localhost for mysql tests --- tox.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tox.ini b/tox.ini index 8f65d452ee..84be8f949b 100644 --- a/tox.ini +++ b/tox.ini @@ -89,6 +89,7 @@ deps = setenv = DATABASE_ENGINE=django.db.backends.mysql DATABASE_USER=wagtail + DATABASE_HOST=localhost [testenv:py33-dj17-postgres] basepython=python3.3 @@ -158,6 +159,7 @@ deps = setenv = DATABASE_ENGINE=django.db.backends.mysql DATABASE_USER=wagtail + DATABASE_HOST=localhost [testenv:py33-dj18-postgres] basepython=python3.3 From a8ec3b1af7494665db8717ba6613c7c0101d2fae Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 23 Feb 2015 16:06:40 +0000 Subject: [PATCH 4/4] specify DATABASE_USER --- tox.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tox.ini b/tox.ini index 84be8f949b..cedba2f117 100644 --- a/tox.ini +++ b/tox.ini @@ -90,6 +90,7 @@ setenv = DATABASE_ENGINE=django.db.backends.mysql DATABASE_USER=wagtail DATABASE_HOST=localhost + DATABASE_USER=root [testenv:py33-dj17-postgres] basepython=python3.3 @@ -160,6 +161,7 @@ setenv = DATABASE_ENGINE=django.db.backends.mysql DATABASE_USER=wagtail DATABASE_HOST=localhost + DATABASE_USER=root [testenv:py33-dj18-postgres] basepython=python3.3