45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
|
import pytest
|
||
|
from django.core.management import call_command
|
||
|
from django.db import connection
|
||
|
|
||
|
pytestmark = pytest.mark.django_db
|
||
|
|
||
|
|
||
|
def test_ensure_jsonb_fields():
|
||
|
json_fields = (
|
||
|
'extra_data',
|
||
|
'booking_errors',
|
||
|
)
|
||
|
|
||
|
with connection.cursor() as cursor:
|
||
|
query = '''SELECT table_name, column_name, data_type
|
||
|
FROM information_schema.columns
|
||
|
WHERE column_name IN %(json_fields)s'''
|
||
|
cursor.execute(query, {'json_fields': json_fields})
|
||
|
|
||
|
# make sure the data_type is correct
|
||
|
for line in cursor.fetchall():
|
||
|
assert line[2] == 'jsonb'
|
||
|
|
||
|
# alter columns
|
||
|
cursor.execute(
|
||
|
'''ALTER TABLE agendas_booking
|
||
|
ALTER COLUMN extra_data TYPE text USING extra_data::text'''
|
||
|
)
|
||
|
cursor.execute(
|
||
|
'''ALTER TABLE agendas_eventcancellationreport
|
||
|
ALTER COLUMN booking_errors TYPE text USING booking_errors::text'''
|
||
|
)
|
||
|
|
||
|
call_command('ensure_jsonb')
|
||
|
|
||
|
with connection.cursor() as cursor:
|
||
|
query = '''SELECT table_name, column_name, data_type
|
||
|
FROM information_schema.columns
|
||
|
WHERE column_name IN %(json_fields)s'''
|
||
|
cursor.execute(query, {'json_fields': json_fields})
|
||
|
|
||
|
# check the data_type is correct
|
||
|
for line in cursor.fetchall():
|
||
|
assert line[2] == 'jsonb'
|