138 lines
5.0 KiB
Python
138 lines
5.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import pytest
|
|
from StringIO import StringIO
|
|
|
|
from django.core.files import File
|
|
|
|
data = """121;69981;DELANOUE;Eliot;H
|
|
525;6;DANIEL WILLIAMS;Shanone;F
|
|
253;67742;MARTIN;Sandra;F
|
|
511;38142;MARCHETTI;Lucie;F
|
|
235;22;MARTIN;Sandra;F
|
|
620;52156;ARNAUD;Mathis;H
|
|
902;36;BRIGAND;Coline;F
|
|
2179;48548;THEBAULT;Salima;F
|
|
3420;46;WILSON-LUZAYADIO;Anaëlle;F
|
|
1421;55486;WONE;Fadouma;F
|
|
2841;51;FIDJI;Zakia;F
|
|
2431;59;BELICARD;Sacha;H
|
|
4273;60;GOUBERT;Adrien;H
|
|
4049;64;MOVSESSIAN;Dimitri;H
|
|
4605;67;ABDOU BACAR;Kyle;H
|
|
4135;22231;SAVERIAS;Marius;H
|
|
4809;75;COROLLER;Maelys;F
|
|
5427;117;KANTE;Aliou;H
|
|
116642;118;ZAHMOUM;Yaniss;H
|
|
216352;38;Dupont;Benoît;H
|
|
"""
|
|
|
|
data_bom = data.decode('utf-8').encode('utf-8-sig')
|
|
|
|
from csvdatasource.models import CsvDataSource
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
def test_unfiltered_data():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames='field,,another_field,')
|
|
result = csv.get_data()
|
|
for item in result:
|
|
assert 'field' in item
|
|
assert 'another_field' in item
|
|
|
|
def test_good_filter_data():
|
|
filter_criteria = 'Zakia'
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames=',id,,text,')
|
|
result = csv.get_data({'text': filter_criteria})
|
|
assert len(result)
|
|
for item in result:
|
|
assert 'id' in item
|
|
assert 'text' in item
|
|
assert filter_criteria in item['text']
|
|
|
|
def test_bad_filter_data():
|
|
filter_criteria = 'bad'
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames=',id,,text,')
|
|
result = csv.get_data({'text': filter_criteria})
|
|
assert len(result) == 0
|
|
|
|
def test_useless_filter_data():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames='id,,nom,prenom,sexe')
|
|
result = csv.get_data({'text': 'Ali'})
|
|
assert len(result) == 20
|
|
|
|
def test_columns_keynames_with_spaces():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames='id , , nom,text , ')
|
|
result = csv.get_data({'text': 'Yaniss'})
|
|
assert len(result) == 1
|
|
|
|
def test_skipped_header_data():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames=',id,,text,',
|
|
skip_header=True)
|
|
result = csv.get_data({'text': 'Eliot'})
|
|
assert len(result) == 0
|
|
|
|
def test_data():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames='fam,id,, text,sexe ')
|
|
result = csv.get_data({'text': 'Sacha'})
|
|
assert result[0] == {'id': '59', 'text': 'Sacha',
|
|
'fam': '2431', 'sexe': 'H'}
|
|
|
|
def test_unicode_filter_data():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames=',id,,text,')
|
|
filter_criteria = u'Benoît'
|
|
result = csv.get_data({'text': filter_criteria})
|
|
assert len(result)
|
|
for item in result:
|
|
assert 'id' in item
|
|
assert 'text' in item
|
|
assert filter_criteria in item['text'].decode('utf-8')
|
|
|
|
def test_unicode_case_insensitive_filter_data():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames=',id,,text,')
|
|
filter_criteria = u'anaëlle'
|
|
result = csv.get_data({'text': filter_criteria}, case_insensitive=True)
|
|
assert len(result)
|
|
for item in result:
|
|
assert 'id' in item
|
|
assert 'text' in item
|
|
assert filter_criteria.lower() in item['text'].decode('utf-8').lower()
|
|
|
|
def test_data_bom():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data_bom), 'data.csv'),
|
|
columns_keynames='fam,id,, text,sexe ')
|
|
result = csv.get_data({'text': 'Eliot'})
|
|
assert result[0] == {'id': '69981', 'text': 'Eliot',
|
|
'fam': '121', 'sexe': 'H'}
|
|
|
|
def test_multi_filter():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames='fam,id,, text,sexe ')
|
|
result = csv.get_data({'sexe': 'F'})
|
|
assert result[0] == {'id': '6', 'text': 'Shanone',
|
|
'fam': '525', 'sexe': 'F'}
|
|
assert len(result) == 10
|
|
|
|
def test_query():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames='fam,id,, text,sexe ')
|
|
result = csv.get_data(query='liot')
|
|
assert result[0]['text'] == 'Eliot'
|
|
assert len(result) == 1
|
|
|
|
def test_query_insensitive():
|
|
csv = CsvDataSource.objects.create(csv_file=File(StringIO(data), 'data.csv'),
|
|
columns_keynames='fam,id,, text,sexe ')
|
|
result = csv.get_data(query='elIo', case_insensitive=True)
|
|
assert result[0]['text'] == 'Eliot'
|
|
assert len(result) == 1
|