from io import BytesIO import pytest from django.core.files import File from django.core.management import call_command from django.db import connection from passerelle.apps.csvdatasource.models import CsvDataSource from passerelle.contrib.teamnet_axel.models import TeamnetAxel pytestmark = pytest.mark.django_db @pytest.fixture def setup(): def maker( columns_keynames='fam,id,lname,fname,sex', filename='data.csv', sheet_name='Feuille2', data=b'' ): csv = CsvDataSource.objects.create( csv_file=File(BytesIO(data), filename), sheet_name=sheet_name, columns_keynames=columns_keynames, slug='test', title='a title', description='a description', ) teamnet = TeamnetAxel.objects.create( slug='test', billing_regies={}, wsdl_url='http://example.net/AXEL_WS/AxelWS.php?wsdl' ) return csv, teamnet return maker def test_ensure_jsonb_fields(setup): with connection.cursor() as cursor: query = "SELECT table_name, column_name, data_type FROM information_schema.columns WHERE column_name IN ('_dialect_options', 'billing_regies')" cursor.execute(query) # make sure the data_type is correct for line in cursor.fetchall(): assert line[2] == 'jsonb' # alter columns cursor.execute( 'ALTER TABLE csvdatasource_csvdatasource ALTER COLUMN _dialect_options TYPE text USING _dialect_options::text' ) cursor.execute( 'ALTER TABLE teamnet_axel_teamnetaxel ALTER COLUMN billing_regies TYPE text USING billing_regies::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 ('_dialect_options', 'billing_regies')" cursor.execute(query) # check the data_type is correct for line in cursor.fetchall(): assert line[2] == 'jsonb'