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