summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Anderson <public@kered.org>2006-08-22 16:46:02 +0000
committerDerek Anderson <public@kered.org>2006-08-22 16:46:02 +0000
commit450889c9a6f7da3c2fce77a0ccf4c4cea9e29710 (patch)
tree33a9da2cb9d3157c82b6b66ba48b935b930149c4
parentffac8356ddcc4349ae902e9ba945fdb761a16a46 (diff)
schema evolution test cases
git-svn-id: http://code.djangoproject.com/svn/django/branches/schema-evolution@3647 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--tests/evolvedbtests/__init__.py0
-rw-r--r--tests/evolvedbtests/case01_add_field/__init__.py0
l---------tests/evolvedbtests/case01_add_field/models.py1
-rw-r--r--tests/evolvedbtests/case01_add_field/models.py.post23
-rw-r--r--tests/evolvedbtests/case01_add_field/models.py.pre16
-rw-r--r--tests/evolvedbtests/case01_add_field/views.py1
-rw-r--r--tests/evolvedbtests/case02_rename_field/__init__.py0
l---------tests/evolvedbtests/case02_rename_field/models.py1
-rw-r--r--tests/evolvedbtests/case02_rename_field/models.py.post17
-rw-r--r--tests/evolvedbtests/case02_rename_field/models.py.pre17
-rw-r--r--tests/evolvedbtests/case02_rename_field/views.py1
-rw-r--r--tests/evolvedbtests/case03_rename_model/__init__.py0
l---------tests/evolvedbtests/case03_rename_model/models.py1
-rw-r--r--tests/evolvedbtests/case03_rename_model/models.py.post18
-rw-r--r--tests/evolvedbtests/case03_rename_model/models.py.pre18
-rw-r--r--tests/evolvedbtests/case03_rename_model/views.py1
-rw-r--r--tests/evolvedbtests/case04_change_flag/__init__.py0
l---------tests/evolvedbtests/case04_change_flag/models.py1
-rw-r--r--tests/evolvedbtests/case04_change_flag/models.py.post26
-rw-r--r--tests/evolvedbtests/case04_change_flag/models.py.pre25
-rw-r--r--tests/evolvedbtests/case04_change_flag/views.py1
-rw-r--r--tests/evolvedbtests/case05_remove_field/__init__.py0
l---------tests/evolvedbtests/case05_remove_field/models.py1
-rw-r--r--tests/evolvedbtests/case05_remove_field/models.py.post16
-rw-r--r--tests/evolvedbtests/case05_remove_field/models.py.pre15
-rw-r--r--tests/evolvedbtests/case05_remove_field/views.py1
-rwxr-xr-xtests/evolvedbtests/manage.py11
-rwxr-xr-xtests/evolvedbtests/reset_all_to_post6
-rwxr-xr-xtests/evolvedbtests/reset_all_to_pre6
-rw-r--r--tests/evolvedbtests/settings.py91
-rw-r--r--tests/evolvedbtests/urls.py9
31 files changed, 324 insertions, 0 deletions
diff --git a/tests/evolvedbtests/__init__.py b/tests/evolvedbtests/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/evolvedbtests/__init__.py
diff --git a/tests/evolvedbtests/case01_add_field/__init__.py b/tests/evolvedbtests/case01_add_field/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/evolvedbtests/case01_add_field/__init__.py
diff --git a/tests/evolvedbtests/case01_add_field/models.py b/tests/evolvedbtests/case01_add_field/models.py
new file mode 120000
index 0000000000..bb1d3967ae
--- /dev/null
+++ b/tests/evolvedbtests/case01_add_field/models.py
@@ -0,0 +1 @@
+models.py.pre \ No newline at end of file
diff --git a/tests/evolvedbtests/case01_add_field/models.py.post b/tests/evolvedbtests/case01_add_field/models.py.post
new file mode 100644
index 0000000000..b798c7acb5
--- /dev/null
+++ b/tests/evolvedbtests/case01_add_field/models.py.post
@@ -0,0 +1,23 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published')
+ author = models.CharField(maxlength=200)
+ def __str__(self):
+ return self.question
+
+ # new fields
+ pub_date2 = models.DateTimeField('date published')
+
+class Choice(models.Model):
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200)
+ votes = models.IntegerField()
+ def __str__(self):
+ return self.choice
+
+ # new fields
+ votes2 = models.IntegerField()
+ hasSomething = models.BooleanField()
+ creatorIp = models.IPAddressField()
diff --git a/tests/evolvedbtests/case01_add_field/models.py.pre b/tests/evolvedbtests/case01_add_field/models.py.pre
new file mode 100644
index 0000000000..26d03684e0
--- /dev/null
+++ b/tests/evolvedbtests/case01_add_field/models.py.pre
@@ -0,0 +1,16 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published')
+ author = models.CharField(maxlength=200)
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200)
+ votes = models.IntegerField()
+ def __str__(self):
+ return self.choice
+
diff --git a/tests/evolvedbtests/case01_add_field/views.py b/tests/evolvedbtests/case01_add_field/views.py
new file mode 100644
index 0000000000..60f00ef0ef
--- /dev/null
+++ b/tests/evolvedbtests/case01_add_field/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/tests/evolvedbtests/case02_rename_field/__init__.py b/tests/evolvedbtests/case02_rename_field/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/evolvedbtests/case02_rename_field/__init__.py
diff --git a/tests/evolvedbtests/case02_rename_field/models.py b/tests/evolvedbtests/case02_rename_field/models.py
new file mode 120000
index 0000000000..bb1d3967ae
--- /dev/null
+++ b/tests/evolvedbtests/case02_rename_field/models.py
@@ -0,0 +1 @@
+models.py.pre \ No newline at end of file
diff --git a/tests/evolvedbtests/case02_rename_field/models.py.post b/tests/evolvedbtests/case02_rename_field/models.py.post
new file mode 100644
index 0000000000..f9075c4f85
--- /dev/null
+++ b/tests/evolvedbtests/case02_rename_field/models.py.post
@@ -0,0 +1,17 @@
+from django.db import models
+
+class Poll(models.Model):
+ """this model originally had fields named pub_date and the_author. you can use either a str
+ or a tuple for the aka value. (tuples are used if you have changed its name more than once)"""
+ question = models.CharField(maxlength=200)
+ published_date = models.DateTimeField('date published', aka=('pub_date', 'publish_date'))
+ author = models.CharField(maxlength=200, aka='the_author')
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200)
+ number_of_votes = models.IntegerField(aka='votes')
+ def __str__(self):
+ return self.choice
diff --git a/tests/evolvedbtests/case02_rename_field/models.py.pre b/tests/evolvedbtests/case02_rename_field/models.py.pre
new file mode 100644
index 0000000000..7c2dc2c1be
--- /dev/null
+++ b/tests/evolvedbtests/case02_rename_field/models.py.pre
@@ -0,0 +1,17 @@
+from django.db import models
+
+class Poll(models.Model):
+ """this model originally had fields named pub_date and the_author. you can use either a str
+ or a tuple for the aka value. (tuples are used if you have changed its name more than once)"""
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published', aka=('pub_date', 'publish_date'))
+ the_author = models.CharField(maxlength=200, aka='the_author')
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200)
+ votes = models.IntegerField(aka='votes')
+ def __str__(self):
+ return self.choice
diff --git a/tests/evolvedbtests/case02_rename_field/views.py b/tests/evolvedbtests/case02_rename_field/views.py
new file mode 100644
index 0000000000..60f00ef0ef
--- /dev/null
+++ b/tests/evolvedbtests/case02_rename_field/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/tests/evolvedbtests/case03_rename_model/__init__.py b/tests/evolvedbtests/case03_rename_model/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/evolvedbtests/case03_rename_model/__init__.py
diff --git a/tests/evolvedbtests/case03_rename_model/models.py b/tests/evolvedbtests/case03_rename_model/models.py
new file mode 120000
index 0000000000..bb1d3967ae
--- /dev/null
+++ b/tests/evolvedbtests/case03_rename_model/models.py
@@ -0,0 +1 @@
+models.py.pre \ No newline at end of file
diff --git a/tests/evolvedbtests/case03_rename_model/models.py.post b/tests/evolvedbtests/case03_rename_model/models.py.post
new file mode 100644
index 0000000000..7f2ece31ff
--- /dev/null
+++ b/tests/evolvedbtests/case03_rename_model/models.py.post
@@ -0,0 +1,18 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published')
+ author = models.CharField(maxlength=200)
+ def __str__(self):
+ return self.question
+
+class Option(models.Model):
+ "the original name for this model was 'Choice'"
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200)
+ votes = models.IntegerField(aka='number_of_votes') # show that field name changes work too
+ def __str__(self):
+ return self.choice
+ class Meta:
+ aka = ('Choice', 'BadName')
diff --git a/tests/evolvedbtests/case03_rename_model/models.py.pre b/tests/evolvedbtests/case03_rename_model/models.py.pre
new file mode 100644
index 0000000000..8d46b96233
--- /dev/null
+++ b/tests/evolvedbtests/case03_rename_model/models.py.pre
@@ -0,0 +1,18 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published')
+ author = models.CharField(maxlength=200)
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ "the original name for this model was 'Choice'"
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200)
+ number_of_votes = models.IntegerField(aka='number_of_votes') # show that field name changes work too
+ def __str__(self):
+ return self.choice
+ class Meta:
+ aka = ('Choice', 'OtherBadName')
diff --git a/tests/evolvedbtests/case03_rename_model/views.py b/tests/evolvedbtests/case03_rename_model/views.py
new file mode 100644
index 0000000000..60f00ef0ef
--- /dev/null
+++ b/tests/evolvedbtests/case03_rename_model/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/tests/evolvedbtests/case04_change_flag/__init__.py b/tests/evolvedbtests/case04_change_flag/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/evolvedbtests/case04_change_flag/__init__.py
diff --git a/tests/evolvedbtests/case04_change_flag/models.py b/tests/evolvedbtests/case04_change_flag/models.py
new file mode 120000
index 0000000000..bb1d3967ae
--- /dev/null
+++ b/tests/evolvedbtests/case04_change_flag/models.py
@@ -0,0 +1 @@
+models.py.pre \ No newline at end of file
diff --git a/tests/evolvedbtests/case04_change_flag/models.py.post b/tests/evolvedbtests/case04_change_flag/models.py.post
new file mode 100644
index 0000000000..cc2d8beec1
--- /dev/null
+++ b/tests/evolvedbtests/case04_change_flag/models.py.post
@@ -0,0 +1,26 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=100)
+ pub_date = models.DateTimeField('date published')
+ author = models.CharField(maxlength=200)
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ "the original name for this model was 'Choice'"
+ poll = models.ForeignKey(Poll)
+ option = models.CharField(maxlength=400, aka='choice') # make sure aka still works
+ votes = models.IntegerField()
+ votes2 = models.IntegerField() # make sure column adds still work
+ def __str__(self):
+ return self.choice
+
+class Foo(models.Model):
+ GENDER_CHOICES = (
+ ('M', 'Male'),
+ ('F', 'Female'),
+ )
+ gender = models.CharField(maxlength=1, choices=GENDER_CHOICES, db_index=True)
+ gender2 = models.CharField(maxlength=1, null=True, unique=True)
+
diff --git a/tests/evolvedbtests/case04_change_flag/models.py.pre b/tests/evolvedbtests/case04_change_flag/models.py.pre
new file mode 100644
index 0000000000..7561424093
--- /dev/null
+++ b/tests/evolvedbtests/case04_change_flag/models.py.pre
@@ -0,0 +1,25 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published')
+ author = models.CharField(maxlength=200)
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ "the original name for this model was 'Choice'"
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200, aka='choice') # make sure aka still works
+ votes = models.IntegerField()
+ def __str__(self):
+ return self.choice
+
+class Foo(models.Model):
+ GENDER_CHOICES = (
+ ('M', 'Male'),
+ ('F', 'Female'),
+ )
+ gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
+# gender2 = models.CharField(maxlength=1)
+
diff --git a/tests/evolvedbtests/case04_change_flag/views.py b/tests/evolvedbtests/case04_change_flag/views.py
new file mode 100644
index 0000000000..60f00ef0ef
--- /dev/null
+++ b/tests/evolvedbtests/case04_change_flag/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/tests/evolvedbtests/case05_remove_field/__init__.py b/tests/evolvedbtests/case05_remove_field/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/evolvedbtests/case05_remove_field/__init__.py
diff --git a/tests/evolvedbtests/case05_remove_field/models.py b/tests/evolvedbtests/case05_remove_field/models.py
new file mode 120000
index 0000000000..bb1d3967ae
--- /dev/null
+++ b/tests/evolvedbtests/case05_remove_field/models.py
@@ -0,0 +1 @@
+models.py.pre \ No newline at end of file
diff --git a/tests/evolvedbtests/case05_remove_field/models.py.post b/tests/evolvedbtests/case05_remove_field/models.py.post
new file mode 100644
index 0000000000..4e6b7eded4
--- /dev/null
+++ b/tests/evolvedbtests/case05_remove_field/models.py.post
@@ -0,0 +1,16 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published')
+ # author = models.CharField(maxlength=200) # we no longer care
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ poll = models.ForeignKey(Poll)
+ # make sure rename fields are not picked up in any field deletes
+ option = models.CharField(maxlength=200, aka='choice')
+ number_of_votes = models.IntegerField( aka=('votes','num_votes') )
+ def __str__(self):
+ return self.choice
diff --git a/tests/evolvedbtests/case05_remove_field/models.py.pre b/tests/evolvedbtests/case05_remove_field/models.py.pre
new file mode 100644
index 0000000000..d02faa60a0
--- /dev/null
+++ b/tests/evolvedbtests/case05_remove_field/models.py.pre
@@ -0,0 +1,15 @@
+from django.db import models
+
+class Poll(models.Model):
+ question = models.CharField(maxlength=200)
+ pub_date = models.DateTimeField('date published')
+ author = models.CharField(maxlength=200)
+ def __str__(self):
+ return self.question
+
+class Choice(models.Model):
+ poll = models.ForeignKey(Poll)
+ choice = models.CharField(maxlength=200)
+ votes = models.IntegerField()
+ def __str__(self):
+ return self.choice
diff --git a/tests/evolvedbtests/case05_remove_field/views.py b/tests/evolvedbtests/case05_remove_field/views.py
new file mode 100644
index 0000000000..60f00ef0ef
--- /dev/null
+++ b/tests/evolvedbtests/case05_remove_field/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/tests/evolvedbtests/manage.py b/tests/evolvedbtests/manage.py
new file mode 100755
index 0000000000..5e78ea979e
--- /dev/null
+++ b/tests/evolvedbtests/manage.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+from django.core.management import execute_manager
+try:
+ import settings # Assumed to be in the same directory.
+except ImportError:
+ import sys
+ sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
+ sys.exit(1)
+
+if __name__ == "__main__":
+ execute_manager(settings)
diff --git a/tests/evolvedbtests/reset_all_to_post b/tests/evolvedbtests/reset_all_to_post
new file mode 100755
index 0000000000..f719385613
--- /dev/null
+++ b/tests/evolvedbtests/reset_all_to_post
@@ -0,0 +1,6 @@
+cd case01_add_field/; ln -sf models.py.post models.py; cd ..
+cd case02_rename_field/; ln -sf models.py.post models.py; cd ..
+cd case03_rename_model/; ln -sf models.py.post models.py; cd ..
+cd case04_change_flag/; ln -sf models.py.post models.py; cd ..
+cd case05_remove_field/; ln -sf models.py.post models.py; cd ..
+
diff --git a/tests/evolvedbtests/reset_all_to_pre b/tests/evolvedbtests/reset_all_to_pre
new file mode 100755
index 0000000000..3bd7bdc98d
--- /dev/null
+++ b/tests/evolvedbtests/reset_all_to_pre
@@ -0,0 +1,6 @@
+cd case01_add_field/; ln -sf models.py.pre models.py; cd ..
+cd case02_rename_field/; ln -sf models.py.pre models.py; cd ..
+cd case03_rename_model/; ln -sf models.py.pre models.py; cd ..
+cd case04_change_flag/; ln -sf models.py.pre models.py; cd ..
+cd case05_remove_field/; ln -sf models.py.pre models.py; cd ..
+
diff --git a/tests/evolvedbtests/settings.py b/tests/evolvedbtests/settings.py
new file mode 100644
index 0000000000..43f1cf70d5
--- /dev/null
+++ b/tests/evolvedbtests/settings.py
@@ -0,0 +1,91 @@
+# Django settings for evolvedb project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+ # ('Your Name', 'your_email@domain.com'),
+)
+
+MANAGERS = ADMINS
+
+#DATABASE_ENGINE = 'sqlite3' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
+#DATABASE_NAME = '<your_path_here>/default.db' # Or path to database file if using sqlite3.
+#DATABASE_USER = '' # Not used with sqlite3.
+#DATABASE_PASSWORD = '' # Not used with sqlite3.
+#DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
+#DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
+
+DATABASE_ENGINE = 'mysql' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
+DATABASE_NAME = 'evolvedb' # Or path to database file if using sqlite3.
+DATABASE_USER = '' # Not used with sqlite3.
+DATABASE_PASSWORD = '' # Not used with sqlite3.
+DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
+DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
+
+#DATABASE_ENGINE = 'postgresql' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
+#DATABASE_NAME = 'evolvedb' # Or path to database file if using sqlite3.
+#DATABASE_USER = '' # Not used with sqlite3.
+#DATABASE_PASSWORD = '' # Not used with sqlite3.
+#DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
+#DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
+
+# Local time zone for this installation. All choices can be found here:
+# http://www.postgresql.org/docs/current/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
+TIME_ZONE = 'America/Chicago'
+
+# Language code for this installation. All choices can be found here:
+# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
+# http://blogs.law.harvard.edu/tech/stories/storyReader$15
+LANGUAGE_CODE = 'en-us'
+
+SITE_ID = 1
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = ''
+
+# URL that handles the media served from MEDIA_ROOT.
+# Example: "http://media.lawrence.com"
+MEDIA_URL = ''
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/", "/media/".
+ADMIN_MEDIA_PREFIX = '/media/'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = 'ooh(rzy9tz@%ep!p5w7wzfu@nuxet-$m6pt(v50^wkvpxhksq0'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.load_template_source',
+ 'django.template.loaders.app_directories.load_template_source',
+# 'django.template.loaders.eggs.load_template_source',
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.middleware.doc.XViewMiddleware',
+)
+
+ROOT_URLCONF = 'evolvedb.urls'
+
+TEMPLATE_DIRS = (
+ # Put strings here, like "/home/html/django_templates".
+ # Always use forward slashes, even on Windows.
+)
+
+INSTALLED_APPS = (
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'evolvedb.case01_add_field',
+ 'evolvedb.case02_rename_field',
+ 'evolvedb.case03_rename_model',
+ 'evolvedb.case04_change_flag',
+ 'evolvedb.case05_remove_field',
+)
diff --git a/tests/evolvedbtests/urls.py b/tests/evolvedbtests/urls.py
new file mode 100644
index 0000000000..07af1ba92a
--- /dev/null
+++ b/tests/evolvedbtests/urls.py
@@ -0,0 +1,9 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+ # Example:
+ # (r'^evolvedb/', include('evolvedb.apps.foo.urls.foo')),
+
+ # Uncomment this for admin:
+# (r'^admin/', include('django.contrib.admin.urls')),
+)