wcs/tests/test_misc.py

98 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
import json
import pytest
from quixote import cleanup
import wcs.api # workaround against circular dependencies :/
from wcs.qommon.form import FileSizeWidget
from wcs.qommon.humantime import humanduration2seconds, seconds2humanduration
from wcs.qommon.misc import simplify, json_loads
from wcs.admin.settings import FileTypesDirectory
def setup_module(module):
cleanup()
def test_parse_file_size():
assert FileSizeWidget.parse_file_size('17') == 17
assert FileSizeWidget.parse_file_size('17o') == 17
assert FileSizeWidget.parse_file_size('17 K') == 17*10**3
assert FileSizeWidget.parse_file_size('17 M') == 17*10**6
assert FileSizeWidget.parse_file_size('17 Mo') == 17*10**6
assert FileSizeWidget.parse_file_size('17 MB') == 17*10**6
assert FileSizeWidget.parse_file_size('17 Kio') == 17*2**10
assert FileSizeWidget.parse_file_size('17 Mio') == 17*2**20
assert FileSizeWidget.parse_file_size('17K') == 17*10**3
assert FileSizeWidget.parse_file_size('17 K') == 17*10**3
assert FileSizeWidget.parse_file_size(' 17 K ') == 17*10**3
def test_parse_invalid_file_size():
for test_value in ('17i', 'hello', '0.4K', '2G'):
with pytest.raises(ValueError):
FileSizeWidget.parse_file_size(test_value)
def test_humantime():
for x in range(3, 100000, 13):
assert humanduration2seconds(seconds2humanduration(x)) == x
def test_parse_mimetypes():
assert FileTypesDirectory.parse_mimetypes('application/pdf') == ['application/pdf']
assert FileTypesDirectory.parse_mimetypes('.pdf') == ['application/pdf']
assert FileTypesDirectory.parse_mimetypes('.pdf, .odt') == [
'application/pdf', 'application/vnd.oasis.opendocument.text']
def test_format_mimetypes():
assert FileTypesDirectory.format_mimetypes(['application/pdf']) == \
'application/pdf (.pdf)'
assert FileTypesDirectory.format_mimetypes(['application/pdf', 'text/rtf']) == \
'application/pdf (.pdf), text/rtf'
assert FileTypesDirectory.format_mimetypes(['application/pdf', 'application/msword']) == \
'application/pdf (.pdf), application/msword (.doc)'
assert FileTypesDirectory.format_mimetypes(['application/pdf',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/msword']) == \
'application/pdf (.pdf), '\
'application/vnd.openxmlformats-officedocument.wordprocessingml.document (.docx)'\
'...'
def test_simplify_unchanged():
assert simplify('test') == 'test'
assert simplify('another-test') == 'another-test'
assert simplify('another_test', '_') == 'another_test'
def test_simplify_space():
assert simplify('test again') == 'test-again'
assert simplify(' test again ') == 'test-again'
assert simplify('test again', '_') == 'test_again'
assert simplify(' test again ', '_') == 'test_again'
def test_simplify_apostrophes():
assert simplify('test\'again') == 'test-again'
assert simplify('test\'\'\'again') == 'test-again'
def test_simplify_accented():
assert simplify(u'cliché') == 'cliche'
assert simplify(u'cliché'.encode('iso-8859-1')) == 'cliche'
def test_simplify_remove():
assert simplify('this is: (a) "test"') == 'this-is-a-test'
assert simplify('a test; again?') == 'a-test-again'
def test_simplify_mix():
assert simplify(u' this is: (a) "cliché" ') == 'this-is-a-cliche'
assert simplify(u' À "cliché"; again? ') == 'a-cliche-again'
def test_json_str_decoder():
json_str = json.dumps({
'lst': [{'a': 'b'}, 1, 2],
'bla': u'éléphant'
})
assert type(json.loads(json_str).keys()[0]) is unicode
assert type(json.loads(json_str)['lst'][0]['a']) is unicode
assert type(json_loads(json_str).keys()[0]) is str
assert type(json_loads(json_str)['lst'][0]['a']) is str
assert type(json_loads(json_str)['bla']) is str
assert json_loads(json_str)['bla'] == u'éléphant'.encode('utf-8')