|
4 | 4 | from django.test import TestCase, Client |
5 | 5 | from django.urls import reverse |
6 | 6 |
|
7 | | -from vbos.datasets.models import TabularDataset, TabularItem |
| 7 | +from vbos.datasets.models import TabularDataset, TabularItem, VectorDataset, VectorItem |
8 | 8 |
|
9 | 9 |
|
10 | 10 | class TabularItemAdminImportFileTests(TestCase): |
@@ -59,3 +59,55 @@ def test_post_valid_csv_creates_items(self): |
59 | 59 | self.assertEqual(ti_2.dataset.id, self.dataset.id) |
60 | 60 | self.assertEqual(ti_2.data["col1"], "val3") |
61 | 61 | self.assertEqual(ti_2.data["col2"], "val4") |
| 62 | + |
| 63 | + |
| 64 | +class VectorItemAdminImportFileTests(TestCase): |
| 65 | + def setUp(self): |
| 66 | + self.client = Client() |
| 67 | + self.admin_user = get_user_model().objects.create_superuser( |
| 68 | + username="admin", password="password", email="[email protected]" |
| 69 | + ) |
| 70 | + self.client.login(username="admin", password="password") |
| 71 | + self.dataset = VectorDataset.objects.create(name="Test Dataset") |
| 72 | + self.upload_url = reverse("admin:datasets_vectoritem_import_file") |
| 73 | + |
| 74 | + def test_change_list_has_link_to_import_file(self): |
| 75 | + response = self.client.get(reverse("admin:datasets_vectoritem_changelist")) |
| 76 | + self.assertEqual(response.status_code, 200) |
| 77 | + self.assertContains(response, "Import File") |
| 78 | + |
| 79 | + def test_get_import_file_view(self): |
| 80 | + response = self.client.get(self.upload_url) |
| 81 | + self.assertEqual(response.status_code, 200) |
| 82 | + self.assertContains(response, "Import GeoJSON File") |
| 83 | + self.assertContains(response, "Import File") |
| 84 | + self.assertContains(response, "Dataset") |
| 85 | + self.assertContains(response, "Test Dataset") |
| 86 | + |
| 87 | + def test_post_invalid_file_type(self): |
| 88 | + file_data = io.BytesIO(b"not a geojson") |
| 89 | + file_data.name = "test.txt" |
| 90 | + response = self.client.post( |
| 91 | + self.upload_url, |
| 92 | + {"file": file_data, "dataset": self.dataset.id}, |
| 93 | + follow=True, |
| 94 | + ) |
| 95 | + self.assertContains(response, "Please upload a GeoJSON file") |
| 96 | + |
| 97 | + def test_post_valid_geojson_creates_items(self): |
| 98 | + geojson_path = "./vbos/datasets/fixtures/test.geojson" |
| 99 | + with open(geojson_path, "rb") as file_data: |
| 100 | + response = self.client.post( |
| 101 | + self.upload_url, |
| 102 | + {"file": file_data, "dataset": self.dataset.id}, |
| 103 | + follow=True, |
| 104 | + ) |
| 105 | + self.assertContains(response, "Successfully created 3 new records") |
| 106 | + self.assertEqual(VectorItem.objects.count(), 3) |
| 107 | + vi_1, vi_2, vi_3 = VectorItem.objects.all() |
| 108 | + self.assertEqual(vi_1.dataset.id, self.dataset.id) |
| 109 | + self.assertEqual(vi_1.metadata["name"], "Area 1") |
| 110 | + self.assertEqual(vi_2.dataset.id, self.dataset.id) |
| 111 | + self.assertEqual(vi_2.metadata["name"], "Line 1") |
| 112 | + self.assertEqual(vi_3.dataset.id, self.dataset.id) |
| 113 | + self.assertEqual(vi_3.metadata["name"], "Point 1") |
0 commit comments