|
1 | 1 | from django.db.models.deletion import ProtectedError |
2 | 2 | from django.test import TestCase |
| 3 | +from django.core.files.uploadedfile import SimpleUploadedFile |
| 4 | +from django.core.exceptions import ValidationError |
3 | 5 |
|
4 | 6 | from vbos.datasets.models import RasterDataset, RasterFile |
| 7 | +from genericpath import exists |
5 | 8 |
|
6 | 9 |
|
7 | 10 | class TestRasterModels(TestCase): |
8 | 11 | def setUp(self): |
9 | | - self.r_1 = RasterFile.objects.create( |
10 | | - name="Rainfall COG", file="raster/rainfall.tiff" |
| 12 | + self.valid_file = SimpleUploadedFile( |
| 13 | + "rainfall.tif", b"file_content", content_type="image/tiff" |
11 | 14 | ) |
| 15 | + self.r_1 = RasterFile.objects.create(name="Rainfall COG", file=self.valid_file) |
12 | 16 | self.r_2 = RasterFile.objects.create( |
13 | 17 | name="Coastline COG", file="raster/coastline.tiff" |
14 | 18 | ) |
15 | 19 | self.dataset = RasterDataset.objects.create(name="Rainfall", file=self.r_1) |
16 | 20 |
|
17 | | - def test_deletion_restriction(self): |
| 21 | + def test_deletion(self): |
| 22 | + # RasterFile can't be deleted if it's associates with a dataset |
18 | 23 | with self.assertRaises(ProtectedError): |
19 | 24 | self.r_1.delete() |
20 | | - self.r_2.delete() |
21 | | - self.assertEqual(RasterFile.objects.count(), 1) |
22 | | - |
23 | | - def test_deletion(self): |
| 25 | + # modify dataset |
24 | 26 | self.dataset.file = self.r_2 |
25 | 27 | self.dataset.save() |
| 28 | + # delete file |
26 | 29 | self.r_1.delete() |
27 | 30 | self.assertEqual(RasterFile.objects.count(), 1) |
| 31 | + # delete dataset |
28 | 32 | self.dataset.delete() |
29 | 33 | self.assertEqual(RasterDataset.objects.count(), 0) |
| 34 | + # delete remaining file |
30 | 35 | self.r_2.delete() |
31 | 36 | self.assertEqual(RasterFile.objects.count(), 0) |
| 37 | + |
| 38 | + # test file extension validation |
| 39 | + invalid_file = SimpleUploadedFile( |
| 40 | + "test.jpg", b"file_content", content_type="image/jpeg" |
| 41 | + ) |
| 42 | + raster = RasterFile(name="Test", file=invalid_file) |
| 43 | + with self.assertRaises(ValidationError): |
| 44 | + raster.full_clean() |
0 commit comments