DRY: Put code that writes uploaded file to disk in separate decorator function
DRY: Move error handling code for zip extraction from validators to
extract_archive method
Create utility function that returns absolute path of file/folder in tmp directory
Create utility function that wraps os.path.splitext call
Remove "trendminer" prefix from imports in views.py
DRY: Put code that extracts zip archive in separate decorator function
Make upload process platform-agnostic: Use tempfile.gettempdir() to
determine tmp directory instead of hardcoding the path
Set up basic folder structure for testing
Add some simple view tests
Before testing individual validators, create test user in the DB and
log them in; when done, log them out again
Implement validator tests for unsuccessful cases
DRY: Extract messages for upload errors into an enum-like class so
they can be used like constants
DRY: Put code for opening test file into separate utility function
Make sure test files are closed as soon as we are done with them
Make get_test_file method responsible for figuring out appropriate
flag to use with 'open' (instead of passing it in)
DRY: Put code that posts test file to /analyze/ and checks for form
errors in separate method on ValidatorTest class
Add validator test for successful cases
Stop rendering raw output on results page
Paginate TrendMiner results (first version)
Stop sending request_id and page via "?param="-style GET parameters; use proper URLs instead