Skip to content
This repository has been archived by the owner on Jul 19, 2023. It is now read-only.

Increase allowed length of UploadedData.name to accomodate longer filenames. #91

Merged
merged 2 commits into from
Jan 10, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions osgeo_importer/migrations/0010_auto_20170109_1401.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('osgeo_importer', '0009_mapproxycacheconfig'),
]

operations = [
migrations.AlterField(
model_name='uploadeddata',
name='name',
field=models.CharField(max_length=250, null=True),
),
]
2 changes: 1 addition & 1 deletion osgeo_importer/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ class UploadedData(models.Model):
state = models.CharField(max_length=16)
date = models.DateTimeField('date', auto_now_add=True)
upload_dir = models.CharField(max_length=1000, null=True)
name = models.CharField(max_length=64, null=True)
name = models.CharField(max_length=250, null=True)
complete = models.BooleanField(default=False)
size = models.IntegerField(null=True, blank=True)
metadata = models.TextField(null=True)
Expand Down
46 changes: 40 additions & 6 deletions osgeo_importer/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.test import TestCase

from osgeo_importer import views
from osgeo_importer import models
from osgeo_importer.models import UploadedData


class TestFileAddView_upload(TestCase):
Expand Down Expand Up @@ -58,23 +59,56 @@ def test_double(self):
self.assertEqual(upload.file_type, None)

def test_single_too_long(self):
max_length = models.UploadedData._meta.get_field('name').max_length
too_long = "ObviouslyWayWayWayWayWayWayWayWayWayWayWayWayWayWayTooLong"
self.assertGreater(too_long, max_length)
""" Checks that view.upload() (FileAddView) simply truncates the filename when
there's only one file in the upload and it's too long.
"""
too_long_basename = (
"ObviouslyWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWay"
"WayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWay"
"WayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWay"
"TooLong.shp"
)
too_long_path = (
"/tmp/{}".format(too_long_basename)
)
data = [
self.FakeFile("/tmp/{0}".format(too_long))
self.FakeFile(too_long_path),
]

# Make sure too_long_basename is actually too long.
max_length = UploadedData._meta.get_field('name').max_length
self.assertGreater(
len(too_long_basename), max_length, 'Test file basename not longer than allowed: {}'.format(max_length))

view = self.view()
upload = view.upload(data, view.request.user)
self.assertEqual(upload.name.startswith("Obviously"), True)
self.assertEqual(upload.file_type, "BogusType")

def test_many_too_long(self):
""" Checks that view.upload() (FileAddView) returns an object with both attributes 'name', and 'file_type'
set to None for an upload with multiple files with at least
one which has a name beyond the maximum length allowed.
"""
too_long_name = (
"/tmp/WayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWay"
"WayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWay"
"WayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWayWay"
"TooLong.shp"
)
data = [
self.FakeFile("/tmp/xyz/abc/NotTooLongOnItsOwn.shp"),
self.FakeFile("/tmp/xyz/abc/rather_long_to_be_combined_with.shp"),
self.FakeFile("/tmp/really_too_much.shp"),
self.FakeFile("/tmp/really_not_too_much.shp"),
# len 251:
self.FakeFile(too_long_name),
]

# Make sure too_long_basename is actually too long.
max_filepath_length = UploadedData._meta.get_field('name').max_length
if True not in [len(ff.name) > max_filepath_length for ff in data]:
self.fail('None of the test filenames exceed the allowed length: {}'.format(max_filepath_length))

view = self.view()
upload = view.upload(data, view.request.user)
self.assertEqual(upload.name, None)
Expand Down