chrono/tests/test_ensure_jsonbfields.py

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'