|
2 | 2 | from __future__ import unicode_literals |
3 | 3 |
|
4 | 4 | import json |
| 5 | +import csv |
| 6 | +import datetime |
5 | 7 |
|
6 | 8 | from django.test import TestCase |
7 | 9 | from unittest import skip |
@@ -345,3 +347,100 @@ def test_get_or_none_exists(self): |
345 | 347 |
|
346 | 348 | def test_get_or_none_does_not_exist(self): |
347 | 349 | self.assertEqual(None, helpers.get_or_none(Event, pk=2)) |
| 350 | + |
| 351 | + |
| 352 | +class TestExportRequests(TestCase): |
| 353 | + def setUp(self): |
| 354 | + super().setUp() |
| 355 | + self.admin_user = User.objects.create_user(username='admin', email='admin@upenn.edu', password='adminpassword', is_staff=True) |
| 356 | + self.requester = User.objects.create_user(username='requester', email='requester@upenn.edu', password='requesterpassword') |
| 357 | + self.requester_profile = self.requester.profile |
| 358 | + self.requester_profile.user_type = 'R' |
| 359 | + self.requester_profile.save() |
| 360 | + self.funder = create_funder() |
| 361 | + |
| 362 | + self.event1 = Event.objects.create( |
| 363 | + name="Test Event 1", date="2023-01-01", time="15:30:00", location="Houston Hall", |
| 364 | + requester=self.requester_profile, contact_name="Test Contact", contact_email="contact@upenn.edu", |
| 365 | + contact_phone="123-456-7890", anticipated_attendance=100, advisor_email="advisor@upenn.edu", |
| 366 | + advisor_phone="098-765-4321", organizations="Test Organization", funding_already_received=50.00, status="B" |
| 367 | + ) |
| 368 | + self.event1.applied_funders.add(self.funder.profile) |
| 369 | + |
| 370 | + self.event2 = Event.objects.create( |
| 371 | + name="Test Event 2", date="2023-02-01", time="16:30:00", location="College Hall", |
| 372 | + requester=self.requester_profile, contact_name="Test Contact 2", contact_email="contact2@upenn.edu", |
| 373 | + contact_phone="123-456-7891", anticipated_attendance=200, advisor_email="advisor2@upenn.edu", |
| 374 | + advisor_phone="098-765-4322", organizations="Test Organization 2", funding_already_received=100.00, status="F" |
| 375 | + ) |
| 376 | + self.event2.applied_funders.add(self.funder.profile) |
| 377 | + |
| 378 | + self.event3 = Event.objects.create( |
| 379 | + name="Test Event 3", date="2023-03-01", time="17:30:00", location="Van Pelt Library", |
| 380 | + requester=self.requester_profile, contact_name="Test Contact 3", contact_email="contact3@upenn.edu", |
| 381 | + contact_phone="123-456-7892", anticipated_attendance=300, advisor_email="advisor3@upenn.edu", |
| 382 | + advisor_phone="098-765-4323", organizations="Test Organization 3", funding_already_received=150.00, status="S" |
| 383 | + ) |
| 384 | + |
| 385 | + self.item1 = self.event1.item_set.create(name="Item 1", quantity=10, price_per_unit=20.00, funding_already_received=0.00, category="H", revenue=False) |
| 386 | + self.item2 = self.event1.item_set.create(name="Item 2", quantity=5, price_per_unit=30.00, funding_already_received=25.00, category="F", revenue=False) |
| 387 | + self.item3 = self.event2.item_set.create(name="Item 3", quantity=15, price_per_unit=40.00, funding_already_received=50.00, category="E", revenue=False) |
| 388 | + self.item4 = self.event2.item_set.create(name="Item 4 (Revenue)", quantity=20, price_per_unit=10.00, funding_already_received=0.00, category="O", revenue=True) |
| 389 | + |
| 390 | + self.grant1 = Grant.objects.create(funder=self.funder.profile, item=self.item1, amount=100.00) |
| 391 | + self.grant2 = Grant.objects.create(funder=self.funder.profile, item=self.item3, amount=200.00) |
| 392 | + |
| 393 | + def test_export_requests_access(self): |
| 394 | + self.client.login(username='requester', password='requesterpassword') |
| 395 | + self.assertEqual(self.client.get('/export-requests/').status_code, 302) |
| 396 | + |
| 397 | + self.client.login(username='admin', password='adminpassword') |
| 398 | + resp = self.client.get('/export-requests/') |
| 399 | + self.assertEqual(resp.status_code, 200) |
| 400 | + self.assertEqual(resp['Content-Type'], 'text/csv') |
| 401 | + self.assertEqual(resp['Content-Disposition'], 'attachment; filename="funding_requests.csv"') |
| 402 | + |
| 403 | + def test_export_requests_content(self): |
| 404 | + self.client.login(username='admin', password='adminpassword') |
| 405 | + resp = self.client.get('/export-requests/') |
| 406 | + content = resp.content.decode('utf-8') |
| 407 | + rows = list(csv.reader(content.strip().split('\n'))) |
| 408 | + |
| 409 | + self.assertEqual(len(rows[0]), 25) |
| 410 | + self.assertEqual(rows[0][0], 'Event ID') |
| 411 | + self.assertEqual(len(rows), 2) |
| 412 | + |
| 413 | + event_row = rows[1] |
| 414 | + self.assertEqual(event_row[1], 'Test Event 1') |
| 415 | + self.assertEqual(event_row[4], 'Houston Hall') |
| 416 | + self.assertEqual(event_row[5], str(self.requester_profile)) |
| 417 | + self.assertEqual(event_row[6], 'requester@upenn.edu') |
| 418 | + self.assertEqual(event_row[14], '50.00') |
| 419 | + self.assertEqual(event_row[15], 'SUBMITTED') |
| 420 | + |
| 421 | + self.assertEqual(float(event_row[18]), 75.00) |
| 422 | + self.assertEqual(float(event_row[19]), 100.00) |
| 423 | + self.assertEqual(float(event_row[20]), 175.00) |
| 424 | + self.assertEqual(float(event_row[21]), 350.00) |
| 425 | + self.assertEqual(float(event_row[22]), 0.00) |
| 426 | + self.assertEqual(float(event_row[23]), 175.00) |
| 427 | + self.assertIn(str(self.funder.profile), event_row[24]) |
| 428 | + |
| 429 | + def test_export_requests_date_filter(self): |
| 430 | + old_date = datetime.datetime.now() - datetime.timedelta(days=731) |
| 431 | + Event.objects.create( |
| 432 | + name="Old Test Event", date="2020-01-01", time="12:30:00", location="Old Location", |
| 433 | + requester=self.requester_profile, contact_name="Old Contact", contact_email="old@upenn.edu", |
| 434 | + contact_phone="111-222-3333", anticipated_attendance=50, advisor_email="oldadvisor@upenn.edu", |
| 435 | + advisor_phone="444-555-6666", organizations="Old Organization", funding_already_received=25.00, |
| 436 | + status="B", created_at=old_date, updated_at=old_date |
| 437 | + ) |
| 438 | + |
| 439 | + self.client.login(username='admin', password='adminpassword') |
| 440 | + resp = self.client.get('/export-requests/') |
| 441 | + rows = list(csv.reader(resp.content.decode('utf-8').strip().split('\n'))) |
| 442 | + |
| 443 | + self.assertEqual(len(rows), 2) |
| 444 | + event_names = [row[1] for row in rows[1:]] |
| 445 | + self.assertIn('Test Event 1', event_names) |
| 446 | + self.assertNotIn('Old Test Event', event_names) |
0 commit comments