示例#1
0
    def test_upload_multiple(self):
        page = self.page

        temp_file1 = page.create_temp_file("content1")
        temp_file2 = page.create_temp_file("content2")

        page.open("/multiple")

        page.fill_title_field("abc")

        page.upload_using_js(temp_file1)
        page.find_upload_success(temp_file1, upload_index=0)

        page.upload_using_js(temp_file2)
        page.find_upload_success(temp_file2, upload_index=1)

        self.assertEqual(TemporaryUploadedFile.objects.count(), 2)

        uploaded_files = TemporaryUploadedFile.objects.all()
        self.assertSetEqual(
            {
                read_file(uploaded_file.uploaded_file)
                for uploaded_file in uploaded_files
            },
            {b"content1", b"content2"},
        )

        page.submit()
        page.assert_page_contains_text("Upload success")

        self.assertEqual(Example2.objects.count(), 1)

        example2 = Example2.objects.first()
        self.assertEqual(example2.title, "abc")

        examples_files = example2.files.all()

        self.assertSetEqual(
            {f.input_file.name for f in examples_files},
            {f"example/{temp_file1.base_name()}", f"example/{temp_file2.base_name()}"},
        )

        self.assertSetEqual(
            {read_file(example_file.input_file) for example_file in examples_files},
            {b"content1", b"content2"},
        )

        self.assertEqual(TemporaryUploadedFile.objects.count(), 0)
        self.assertFalse(
            any(
                Path(uploaded_file.uploaded_file.path).exists()
                for uploaded_file in uploaded_files
            )
        )
示例#2
0
    def test_edit_record(self):
        example = Example.objects.create(
            title="title1",
            input_file=ContentFile("original", "test1.txt"),
        )

        try:
            page = self.page
            temp_file = page.create_temp_file("new_content")

            page.open(f"/admin/django_file_form_example/example/{example.id}/")
            page.assert_page_contains_text("Change example")

            page.fill_input("title", "changed title")
            page.upload_using_js(temp_file)
            page.assert_page_contains_text("11 Bytes")

            page.submit()
            page.assert_page_contains_text("Select example to change")

            example.refresh_from_db()
            self.assertEqual(example.title, "changed title")
            self.assertEqual(read_file(example.input_file), b"new_content")
        finally:
            example.input_file.delete()
示例#3
0
    def test_upload(self):
        page = self.page
        page.open("/s3multiple")

        temp_file = page.create_temp_file("content1")

        page.fill_title_field("abc")
        page.upload_using_js(temp_file)
        page.find_upload_success(temp_file)
        page.assert_page_contains_text("8 Bytes")

        files_in_bucket = list(self.bucket.objects.all())
        self.assertEqual(len(files_in_bucket), 1)
        self.assertEqual(files_in_bucket[0].key,
                         f"temp_uploads/s3_example/{temp_file.base_name()}")

        page.submit()
        page.assert_page_contains_text("Upload success")

        example2 = Example2.objects.get(title="abc")
        self.assertEqual(example2.files.count(), 1)

        self.assertEqual(example2.files.all()[0].input_file.name,
                         f"example/{temp_file.base_name()}")
        self.assertEqual(read_file(example2.files.all()[0].input_file),
                         b"content1")
示例#4
0
    def test_submit_error(self):
        page = self.page
        page.open("/s3multiple")

        temp_file = page.create_temp_file("content1")

        page.upload_using_js(temp_file)
        page.find_upload_success(temp_file)
        page.assert_page_contains_text("8 Bytes")
        page.submit()

        page.assert_page_contains_text("Title field is required")
        page.find_upload_success(temp_file)
        page.assert_page_contains_text("8 Bytes")

        page.fill_title_field("abc")
        page.submit()
        page.assert_page_contains_text("Upload success")

        example2 = Example2.objects.get(title="abc")
        self.assertEqual(example2.files.count(), 1)

        self.assertEqual(example2.files.all()[0].input_file.name,
                         f"example/{temp_file.base_name()}")
        self.assertEqual(read_file(example2.files.all()[0].input_file),
                         b"content1")
    def test_model_form_multipe_edit_add_file(self):
        page = self.page

        filename1 = "test1_" + get_random_id()
        temp_file = page.create_temp_file("content2")

        example = Example2.objects.create(title="title1")
        ExampleFile.objects.create(
            input_file=ContentFile("content1", filename1), example=example
        )

        page.open(f"/model_form_multiple/{example.id}")
        page.find_upload_success_with_filename(filename=filename1, upload_index=0)

        page.upload_using_js(temp_file)
        page.find_upload_success(temp_file, upload_index=1)
        page.submit()

        example = Example2.objects.get(pk=example.id)

        examples_files = example.files.all()

        self.assertSetEqual(
            {f.input_file.name for f in examples_files},
            {f"example/{filename1}", f"example/{temp_file.base_name()}"},
        )

        self.assertSetEqual(
            {read_file(example_file.input_file) for example_file in examples_files},
            {b"content1", b"content2"},
        )
示例#6
0
    def test_model_form_edit(self):
        example = Example.objects.create(
            title="title1",
            input_file=ContentFile("original", "test1.txt"),
        )

        try:
            page = self.page
            temp_file = page.create_temp_file("new_content")

            page.open(f"/model_form/{example.id}")

            page.assert_page_contains_text("8 Bytes")
            self.assertEqual(page.find_title_field().get_property("value"), "title1")

            page.find_title_field().clear()
            page.fill_title_field("changed title")

            page.upload_using_js(temp_file)
            page.assert_page_contains_text("11 Bytes")
            page.submit()

            page.assert_page_contains_text("Upload success")

            example.refresh_from_db()
            self.assertEqual(example.title, "changed title")
            self.assertEqual(read_file(example.input_file), b"new_content")
        finally:
            example.input_file.delete()
示例#7
0
    def test_form_set(self):
        page = self.page

        temp_file1 = page.create_temp_file("content1")
        temp_file2 = page.create_temp_file("content2")

        page.open("/form_set")

        page.fill_title_field("title1", form_prefix="form-0")

        file_input_element1 = page.selenium.find_element_by_css_selector(
            "#id_form-0-input_file"
        )
        page.upload_js_for_input(temp_file1, file_input_element1)
        page.find_upload_success_for_input(temp_file1, file_input_element1)

        page.fill_title_field("title2", form_prefix="form-1")

        file_input_element2 = page.selenium.find_element_by_css_selector(
            "#id_form-1-input_file"
        )
        page.upload_js_for_input(temp_file2, file_input_element2)
        page.find_upload_success_for_input(temp_file2, file_input_element2)

        self.assertEqual(TemporaryUploadedFile.objects.count(), 2)

        uploaded_files = TemporaryUploadedFile.objects.all()
        self.assertSetEqual(
            {
                read_file(uploaded_file.uploaded_file)
                for uploaded_file in uploaded_files
            },
            {b"content1", b"content2"},
        )

        page.submit()
        page.assert_page_contains_text("Upload success")

        example1 = Example.objects.get(title="title1")
        self.assertEqual(example1.input_file.name, f"example/{temp_file1.base_name()}")
        self.assertEqual(read_file(example1.input_file), b"content1")

        example2 = Example.objects.get(title="title2")
        self.assertEqual(example2.input_file.name, f"example/{temp_file2.base_name()}")
        self.assertEqual(read_file(example2.input_file), b"content2")

        self.assertEqual(TemporaryUploadedFile.objects.count(), 0)
示例#8
0
    def test_copy_temporary_upload(self):
        page = self.page

        temp_file = page.create_temp_file("content1")
        temp_uploads_path = Path(settings.MEDIA_ROOT).joinpath("temp_uploads")
        original_temp_file_count = count_temp_uploads()

        page.open("/")

        page.selenium.find_element_by_css_selector(".dff-files")

        page.fill_title_field("abc")
        page.upload_using_js(temp_file)

        page.find_upload_success(temp_file)
        page.assert_page_contains_text("8 Bytes")
        self.assertEqual(TemporaryUploadedFile.objects.count(), 1)

        uploaded_file = TemporaryUploadedFile.objects.first()
        self.assertEqual(read_file(uploaded_file.uploaded_file), b"content1")
        self.assertTrue(uploaded_file.uploaded_file.name.startswith("temp_uploads/"))
        self.assertEqual(
            Path(str(uploaded_file.uploaded_file.path)).parent, temp_uploads_path
        )
        self.assertEqual(count_temp_uploads(), original_temp_file_count + 1)

        page.submit()
        page.assert_page_contains_text("Upload success")

        self.assertEqual(temp_file.uploaded_file().read_text(), "content1")

        example = Example.objects.get(title="abc")
        self.assertEqual(example.input_file.name, f"example/{temp_file.base_name()}")
        self.assertEqual(read_file(example.input_file), b"content1")

        self.assertEqual(TemporaryUploadedFile.objects.count(), 0)
        self.assertFalse(Path(uploaded_file.uploaded_file.path).exists())
示例#9
0
    def test_upload_binary_file(self):
        content = (
            Path(__file__).parent.joinpath("../test_data/wikipedia.png").read_bytes()
        )

        page = self.page
        temp_file = page.create_temp_file(content, binary=True)
        page.open("/")
        page.selenium.find_element_by_css_selector(".dff-files")
        page.upload_using_js(temp_file)

        page.find_upload_success(temp_file)
        self.assertEqual(TemporaryUploadedFile.objects.count(), 1)

        uploaded_file = TemporaryUploadedFile.objects.first()
        self.assertEqual(read_file(uploaded_file.uploaded_file), content)
示例#10
0
    def test_model_form_add(self):
        page = self.page

        temp_file = page.create_temp_file("content1")

        page.open("/model_form")

        page.fill_title_field("abc")
        page.upload_using_js(temp_file)

        page.find_upload_success(temp_file)
        page.assert_page_contains_text("8 Bytes")
        self.assertEqual(TemporaryUploadedFile.objects.count(), 1)

        page.submit()
        page.assert_page_contains_text("Upload success")

        self.assertEqual(temp_file.uploaded_file().read_text(), "content1")

        example = Example.objects.get(title="abc")
        self.assertEqual(example.input_file.name, f"example/{temp_file.base_name()}")
        self.assertEqual(read_file(example.input_file), b"content1")
示例#11
0
    def test_placeholder_files(self):
        page = self.page
        page.open("/placeholder")

        # placeholders exist
        el = page.selenium.find_element_by_css_selector(
            ".dff-file-id-0.dff-upload-success"
        )
        assert "test_placeholder1.txt" in el.text
        assert "1 KB" in el.text

        el = page.selenium.find_element_by_css_selector(
            ".dff-file-id-1.dff-upload-success"
        )
        assert "test_placeholder2.txt" in el.text
        assert "2 KB" in el.text

        # add file
        temp_file = page.create_temp_file("content1")
        page.upload_using_js(temp_file)
        page.find_upload_success(temp_file, upload_index=2)

        # submit
        page.fill_title_field("abc")
        page.submit()

        page.assert_page_contains_text("Upload success")

        example = Example2.objects.get(title="abc")
        self.assertEqual(example.files.count(), 1)

        example_file = example.files.first()
        self.assertEqual(
            example_file.input_file.name, f"example/{temp_file.base_name()}"
        )
        self.assertEqual(read_file(example_file.input_file), b"content1")

        self.assertEqual(TemporaryUploadedFile.objects.count(), 0)
    def test_model_form_multipe_edit_add_and_remove(self):
        page = self.page

        filename1 = "test1_" + get_random_id()
        filename2 = "test2_" + get_random_id()

        example = Example2.objects.create(title="title1")
        ExampleFile.objects.create(
            input_file=ContentFile("content1", filename1), example=example
        )
        ExampleFile.objects.create(
            input_file=ContentFile("content2", filename2), example=example
        )

        page.open(f"/model_form_multiple/{example.id}")
        page.find_upload_success_with_filename(filename=filename1, upload_index=0)
        page.find_upload_success_with_filename(filename=filename2, upload_index=1)

        page.delete_ajax_file(upload_index=1)
        page.wait_until_upload_is_removed(upload_index=1)

        page.submit()

        example = Example2.objects.get(pk=example.id)

        examples_files = example.files.all()

        self.assertSetEqual(
            {f.input_file.name for f in examples_files},
            {f"example/{filename1}"},
        )

        self.assertSetEqual(
            {read_file(example_file.input_file) for example_file in examples_files},
            {b"content1"},
        )
    def test_model_form_multipe_add(self):
        page = self.page

        temp_file1 = page.create_temp_file("content1")
        temp_file2 = page.create_temp_file("content2")

        page.open("/model_form_multiple")

        page.fill_title_field("abc")

        page.upload_using_js(temp_file1)
        page.find_upload_success(temp_file1, upload_index=0)

        page.upload_using_js(temp_file2)
        page.find_upload_success(temp_file2, upload_index=1)

        page.submit()
        page.assert_page_contains_text("Upload success")

        example2 = Example2.objects.first()
        self.assertEqual(example2.title, "abc")

        examples_files = example2.files.all()

        self.assertSetEqual(
            {f.input_file.name for f in examples_files},
            {
                f"example/{temp_file1.base_name()}",
                f"example/{temp_file2.base_name()}",
            },
        )

        self.assertSetEqual(
            {read_file(example_file.input_file) for example_file in examples_files},
            {b"content1", b"content2"},
        )