Skip to content

Commit 39b5ba6

Browse files
committed
Added high level view/migration tests.
1 parent 36dfc61 commit 39b5ba6

File tree

3 files changed

+70
-0
lines changed

3 files changed

+70
-0
lines changed

tests/views/README.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
This is a high-level test of the interaction between views and migrations in
2+
the development and deployment of a Django project. The database
3+
`postgresql://localhost/django_postgres_viewtest` needs to exist for this test
4+
to work.
5+
6+
To run it, just do:
7+
8+
$ ./do_viewtest.sh
9+
$ ./cleanup_viewtest.sh

tests/views/cleanup_viewtest.sh

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash
2+
3+
DATABASE_URL="postgresql://localhost/django_postgres_viewtest"
4+
rm -Rf view_project_test/
5+
DROP_CMD=$(psql -P format=unaligned -P tuples_only -d "$DATABASE_URL" -c "select 'DROP TABLE \"' || array_to_string(array_agg(tablename), '\", \"') || '\" CASCADE;' from pg_tables where schemaname = 'public';")
6+
echo "$DROP_CMD"
7+
psql -d "$DATABASE_URL" -c "$DROP_CMD"

tests/views/do_viewtest.sh

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/bash
2+
3+
set -e # die on errors
4+
set -x # echo commands as they run
5+
6+
django-admin.py startproject view_project_test
7+
cd view_project_test
8+
9+
virtualenv .venv
10+
. .venv/bin/activate
11+
pip install -r /dev/stdin <<EOF
12+
Django
13+
psycopg2
14+
dj-database-url
15+
south
16+
EOF
17+
(cd ../../../; python setup.py develop)
18+
19+
export PYTHONPATH="$(pwd):$PYTHONPATH"
20+
export DJANGO_SETTINGS_MODULE=view_project_test.settings
21+
export DATABASE_URL="postgresql://localhost/django_postgres_viewtest"
22+
cat >> view_project_test/settings.py <<EOF
23+
import dj_database_url
24+
DATABASES = {'default': dj_database_url.config()}
25+
INSTALLED_APPS += type(INSTALLED_APPS)(['django_postgres', 'south', 'view_myapp'])
26+
EOF
27+
28+
django-admin.py startapp view_myapp
29+
django-admin.py syncdb --noinput
30+
cat > view_myapp/models.py <<EOF
31+
from django.db import models
32+
import django_postgres
33+
34+
class MyModel(models.Model):
35+
field1 = models.CharField(max_length=50, default=' ')
36+
field2 = models.CharField(max_length=49, default=' ')
37+
38+
39+
class MyView(django_postgres.View):
40+
projection = ['view_myapp.MyModel.*']
41+
sql = '''SELECT * FROM view_myapp_mymodel'''
42+
EOF
43+
django-admin.py schemamigration --initial view_myapp
44+
django-admin.py migrate view_myapp
45+
django-admin.py sync_pgviews
46+
47+
# Make a breaking change
48+
sed -i '' -E 's/field2/field3/' view_myapp/models.py
49+
50+
django-admin.py schemamigration --auto view_myapp
51+
django-admin.py migrate view_myapp
52+
django-admin.py sync_pgviews
53+
54+
psql -d "$DATABASE_URL" -P tuples_only -c 'SELECT * FROM view_myapp_myview;'

0 commit comments

Comments
 (0)