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 ) )
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()
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")
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"}, )
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()
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)
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())
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)
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")
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"}, )