125 lines
4.6 KiB
Python
125 lines
4.6 KiB
Python
""" Tests for analytics.csvs """
|
|
|
|
from django.test import TestCase
|
|
from nose.tools import raises
|
|
|
|
from analytics.csvs import create_csv_response, format_dictlist, format_instances
|
|
|
|
|
|
class TestAnalyticsCSVS(TestCase):
|
|
""" Test analytics rendering of csv files."""
|
|
|
|
def test_create_csv_response_nodata(self):
|
|
header = ['Name', 'Email']
|
|
datarows = []
|
|
|
|
res = create_csv_response('robot.csv', header, datarows)
|
|
self.assertEqual(res['Content-Type'], 'text/csv')
|
|
self.assertEqual(res['Content-Disposition'], 'attachment; filename={0}'.format('robot.csv'))
|
|
self.assertEqual(res.content.strip(), '"Name","Email"')
|
|
|
|
def test_create_csv_response(self):
|
|
header = ['Name', 'Email']
|
|
datarows = [['Jim', 'jim@edy.org'], ['Jake', 'jake@edy.org'], ['Jeeves', 'jeeves@edy.org']]
|
|
|
|
res = create_csv_response('robot.csv', header, datarows)
|
|
self.assertEqual(res['Content-Type'], 'text/csv')
|
|
self.assertEqual(res['Content-Disposition'], 'attachment; filename={0}'.format('robot.csv'))
|
|
self.assertEqual(res.content.strip(), '"Name","Email"\r\n"Jim","jim@edy.org"\r\n"Jake","jake@edy.org"\r\n"Jeeves","jeeves@edy.org"')
|
|
|
|
def test_create_csv_response_empty(self):
|
|
header = []
|
|
datarows = []
|
|
|
|
res = create_csv_response('robot.csv', header, datarows)
|
|
self.assertEqual(res['Content-Type'], 'text/csv')
|
|
self.assertEqual(res['Content-Disposition'], 'attachment; filename={0}'.format('robot.csv'))
|
|
self.assertEqual(res.content.strip(), '')
|
|
|
|
|
|
class TestAnalyticsFormatDictlist(TestCase):
|
|
""" Test format_dictlist method """
|
|
|
|
def test_format_dictlist(self):
|
|
dictlist = [
|
|
{
|
|
'label1': 'value-1,1',
|
|
'label2': 'value-1,2',
|
|
'label3': 'value-1,3',
|
|
'label4': 'value-1,4',
|
|
},
|
|
{
|
|
'label1': 'value-2,1',
|
|
'label2': 'value-2,2',
|
|
'label3': 'value-2,3',
|
|
'label4': 'value-2,4',
|
|
}
|
|
]
|
|
|
|
features = ['label1', 'label4']
|
|
header, datarows = format_dictlist(dictlist, features)
|
|
|
|
ideal_header = ['label1', 'label4']
|
|
ideal_datarows = [['value-1,1', 'value-1,4'],
|
|
['value-2,1', 'value-2,4']]
|
|
|
|
self.assertEqual(header, ideal_header)
|
|
self.assertEqual(datarows, ideal_datarows)
|
|
|
|
def test_format_dictlist_empty(self):
|
|
header, datarows = format_dictlist([], [])
|
|
self.assertEqual(header, [])
|
|
self.assertEqual(datarows, [])
|
|
|
|
def test_create_csv_response(self):
|
|
header = ['Name', 'Email']
|
|
datarows = [['Jim', 'jim@edy.org'], ['Jake', 'jake@edy.org'], ['Jeeves', 'jeeves@edy.org']]
|
|
|
|
res = create_csv_response('robot.csv', header, datarows)
|
|
self.assertEqual(res['Content-Type'], 'text/csv')
|
|
self.assertEqual(res['Content-Disposition'], 'attachment; filename={0}'.format('robot.csv'))
|
|
self.assertEqual(res.content.strip(), '"Name","Email"\r\n"Jim","jim@edy.org"\r\n"Jake","jake@edy.org"\r\n"Jeeves","jeeves@edy.org"')
|
|
|
|
|
|
class TestAnalyticsFormatInstances(TestCase):
|
|
""" test format_instances method """
|
|
class TestDataClass(object):
|
|
""" Test class to generate objects for format_instances """
|
|
def __init__(self):
|
|
self.a_var = 'aval'
|
|
self.b_var = 'bval'
|
|
self.c_var = 'cval'
|
|
|
|
@property
|
|
def d_var(self):
|
|
""" accessor to see if they work too """
|
|
return 'dval'
|
|
|
|
def setUp(self):
|
|
self.instances = [self.TestDataClass() for _ in xrange(5)]
|
|
|
|
def test_format_instances_response(self):
|
|
features = ['a_var', 'c_var', 'd_var']
|
|
header, datarows = format_instances(self.instances, features)
|
|
self.assertEqual(header, ['a_var', 'c_var', 'd_var'])
|
|
self.assertEqual(datarows, [[
|
|
'aval',
|
|
'cval',
|
|
'dval',
|
|
] for _ in xrange(len(self.instances))])
|
|
|
|
def test_format_instances_response_noinstances(self):
|
|
features = ['a_var']
|
|
header, datarows = format_instances([], features)
|
|
self.assertEqual(header, features)
|
|
self.assertEqual(datarows, [])
|
|
|
|
def test_format_instances_response_nofeatures(self):
|
|
header, datarows = format_instances(self.instances, [])
|
|
self.assertEqual(header, [])
|
|
self.assertEqual(datarows, [[] for _ in xrange(len(self.instances))])
|
|
|
|
@raises(AttributeError)
|
|
def test_format_instances_response_nonexistantfeature(self):
|
|
format_instances(self.instances, ['robot_not_a_real_feature'])
|