From 288a4d6f7949c5aee2c244056a0e9398e9d89680 Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Wed, 5 Sep 2018 11:11:11 +0100
Subject: [PATCH] Update tests to work with the new file handling approach

---
 opentech/apply/funds/models/submissions.py       |  8 ++++++--
 opentech/apply/funds/tests/test_models.py        |  4 ++--
 opentech/apply/funds/tests/test_views.py         | 14 +++++++-------
 opentech/apply/stream_forms/files.py             |  4 ++++
 opentech/apply/stream_forms/testing/factories.py |  4 ++--
 5 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/opentech/apply/funds/models/submissions.py b/opentech/apply/funds/models/submissions.py
index 10acf228e..432ef41ec 100644
--- a/opentech/apply/funds/models/submissions.py
+++ b/opentech/apply/funds/models/submissions.py
@@ -492,7 +492,7 @@ class ApplicationSubmission(
         for field in self.form_fields:
             if isinstance(field.block, UploadableMediaBlock):
                 files[field.id] = self.deserialised_data[field.id]
-                self.form_data.pop(field.id)
+                self.form_data.pop(field.id, None)
         return files
 
     def process_file_data(self, data):
@@ -649,7 +649,7 @@ def log_status_update(sender, **kwargs):
         )
 
 
-class ApplicationRevision(models.Model):
+class ApplicationRevision(models.Model, AccessFormData):
     submission = models.ForeignKey(ApplicationSubmission, related_name='revisions', on_delete=models.CASCADE)
     form_data = JSONField(encoder=StreamFieldDataEncoder)
     timestamp = models.DateTimeField(auto_now=True)
@@ -658,6 +658,10 @@ class ApplicationRevision(models.Model):
     class Meta:
         ordering = ['-timestamp']
 
+    @property
+    def form_fields(self):
+        return self.submission.form_fields
+
     def get_compare_url_to_latest(self):
         return reverse("funds:submissions:revisions:compare", kwargs={
             'submission_pk': self.submission.id,
diff --git a/opentech/apply/funds/tests/test_models.py b/opentech/apply/funds/tests/test_models.py
index 203648003..be1fbddd8 100644
--- a/opentech/apply/funds/tests/test_models.py
+++ b/opentech/apply/funds/tests/test_models.py
@@ -392,11 +392,11 @@ class TestApplicationSubmission(TestCase):
     def test_create_revision_on_data_change(self):
         submission = ApplicationSubmissionFactory()
         submission.form_data['title'] = 'My Awesome Title'
-        new_data = submission.form_data.copy()
+        new_data = submission.deserialised_data
         submission.create_revision()
         submission = self.refresh(submission)
         self.assertEqual(submission.revisions.count(), 2)
-        self.assertDictEqual(submission.live_revision.form_data, new_data)
+        self.assertDictEqual(submission.live_revision.deserialised_data, new_data)
 
     def test_dont_create_revision_on_data_same(self):
         submission = ApplicationSubmissionFactory()
diff --git a/opentech/apply/funds/tests/test_views.py b/opentech/apply/funds/tests/test_views.py
index 6131353fc..ebc1659d2 100644
--- a/opentech/apply/funds/tests/test_views.py
+++ b/opentech/apply/funds/tests/test_views.py
@@ -303,7 +303,7 @@ class TestApplicantSubmissionView(BaseSubmissionViewTestCase):
         self.draft_proposal_submission.save()
 
         response = self.get_page(self.draft_proposal_submission, 'edit')
-        self.assertDictEqual(response.context['object'].form_data, draft_revision.form_data)
+        self.assertDictEqual(response.context['object'].deserialised_data, draft_revision.deserialised_data)
 
     def test_cant_edit_submission_incorrect_state(self):
         submission = InvitedToProposalFactory(user=self.user)
@@ -321,7 +321,7 @@ class TestRevisionsView(BaseSubmissionViewTestCase):
 
     def test_create_revisions_on_submit(self):
         submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2, user=self.user)
-        old_data = submission.form_data.copy()
+        old_data = submission.deserialised_data.copy()
 
         new_title = 'New title'
         new_data = prepare_form_data(submission, title=new_title)
@@ -332,14 +332,14 @@ class TestRevisionsView(BaseSubmissionViewTestCase):
 
         self.assertEqual(submission.status, 'proposal_discussion')
         self.assertEqual(submission.revisions.count(), 2)
-        self.assertDictEqual(submission.revisions.last().form_data, old_data)
-        self.assertDictEqual(submission.live_revision.form_data, submission.form_data)
+        self.assertDictEqual(submission.revisions.last().deserialised_data, old_data)
+        self.assertDictEqual(submission.live_revision.deserialised_data, submission.deserialised_data)
         self.assertEqual(submission.live_revision.author, self.user)
         self.assertEqual(submission.title, new_title)
 
     def test_dont_update_live_revision_on_save(self):
         submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2, user=self.user)
-        old_data = submission.form_data.copy()
+        old_data = submission.deserialised_data.copy()
 
         new_data = prepare_form_data(submission, title='New title')
 
@@ -349,9 +349,9 @@ class TestRevisionsView(BaseSubmissionViewTestCase):
 
         self.assertEqual(submission.status, 'draft_proposal')
         self.assertEqual(submission.revisions.count(), 2)
-        self.assertDictEqual(submission.draft_revision.form_data, submission.from_draft().form_data)
+        self.assertDictEqual(submission.draft_revision.deserialised_data, submission.from_draft().deserialised_data)
         self.assertEqual(submission.draft_revision.author, self.user)
-        self.assertDictEqual(submission.live_revision.form_data, old_data)
+        self.assertDictEqual(submission.live_revision.deserialised_data, old_data)
 
     def test_existing_draft_edit_and_submit(self):
         submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2, user=self.user)
diff --git a/opentech/apply/stream_forms/files.py b/opentech/apply/stream_forms/files.py
index 5ec5d2593..836e95877 100644
--- a/opentech/apply/stream_forms/files.py
+++ b/opentech/apply/stream_forms/files.py
@@ -38,6 +38,10 @@ class StreamFieldFile(File):
 
     file = property(_get_file, _set_file, _del_file)
 
+    def read(self):
+        self.file.seek(0)
+        return super().read()
+
     @property
     def path(self):
         return self.storage.path(self.name)
diff --git a/opentech/apply/stream_forms/testing/factories.py b/opentech/apply/stream_forms/testing/factories.py
index f742d6c50..b60588aef 100644
--- a/opentech/apply/stream_forms/testing/factories.py
+++ b/opentech/apply/stream_forms/testing/factories.py
@@ -2,7 +2,7 @@ from collections import defaultdict
 import json
 import uuid
 
-from django.core.files.uploadedfile import InMemoryUploadedFile
+from django.core.files.uploadedfile import SimpleUploadedFile
 
 import factory
 from wagtail.core.blocks import RichTextBlock
@@ -138,7 +138,7 @@ class UploadableMediaFactory(FormFieldBlockFactory):
         params = params.copy()
         params.setdefault('data', b'this is some content')
         file_name, file = cls.default_value()._make_content(params)
-        return InMemoryUploadedFile(file, 'file', file_name, None, file.tell(), None)
+        return SimpleUploadedFile(file_name, file.read())
 
 
 class ImageFieldBlockFactory(UploadableMediaFactory):
-- 
GitLab