12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- # -*- coding: utf-8 -*-
- import codecs
- import datetime
- import io
- import os
- from tempfile import NamedTemporaryFile
-
- from django.test import TestCase, override_settings
- from django.utils.encoding import smart_str
-
- from oscar.core.compat import UnicodeCSVWriter, existing_user_fields
-
-
- class TestExistingUserFields(TestCase):
- def test_order(self):
- fields = existing_user_fields(["email", "first_name", "last_name"])
- self.assertEqual(fields, ["email", "first_name", "last_name"])
-
-
- class TestUnicodeCSVWriter(TestCase):
- def test_can_write_different_values(self):
- writer = UnicodeCSVWriter(open_file=io.StringIO())
- s = "ünįcodē"
- rows = [
- [s, s, 123, datetime.date.today()],
- ]
- writer.writerows(rows)
- self.assertRaises(TypeError, writer.writerows, [object()])
-
- def test_context_manager(self):
- tmp_file = NamedTemporaryFile()
- with UnicodeCSVWriter(filename=tmp_file.name) as writer:
- s = "ünįcodē"
- rows = [
- [s, s, 123, datetime.date.today()],
- ]
- writer.writerows(rows)
-
- def test_csv_write_output(self):
- tmp_file = NamedTemporaryFile(delete=False)
- with UnicodeCSVWriter(filename=tmp_file.name) as writer:
- s = "ünįcodē"
- row = [s, 123, "foo-bar"]
- writer.writerows([row])
-
- with open(tmp_file.name, "r", encoding="utf-8") as read_file:
- content = smart_str(read_file.read(), encoding="utf-8").strip()
- self.assertEqual(content, "ünįcodē,123,foo-bar")
-
- # Clean up
- os.unlink(tmp_file.name)
-
- @override_settings(OSCAR_CSV_INCLUDE_BOM=True)
- def test_bom_write_with_open_file(self):
- csv_file = NamedTemporaryFile(delete=False)
- with open(csv_file.name, "w", encoding="utf-8") as open_file:
- writer = UnicodeCSVWriter(open_file=open_file, encoding="utf-8")
- s = "ünįcodē"
- row = [s, 123, datetime.date.today()]
- writer.writerows([row])
-
- with open(csv_file.name, "rb") as read_file:
- self.assertTrue(read_file.read().startswith(codecs.BOM_UTF8))
-
- # Clean up
- os.unlink(csv_file.name)
-
- @override_settings(OSCAR_CSV_INCLUDE_BOM=True)
- def test_bom_write_with_filename(self):
- csv_file = NamedTemporaryFile(delete=False)
- with UnicodeCSVWriter(filename=csv_file.name, encoding="utf-8") as writer:
- s = "ünįcodē"
- row = [s, 123, datetime.date.today()]
- writer.writerows([row])
-
- with open(csv_file.name, "rb") as read_file:
- self.assertTrue(read_file.read().startswith(codecs.BOM_UTF8))
-
- # Clean up
- os.unlink(csv_file.name)
-
- @override_settings(OSCAR_CSV_INCLUDE_BOM=True)
- def test_bom_not_written_for_other_encodings(self):
- csv_file = NamedTemporaryFile(delete=False)
- with UnicodeCSVWriter(filename=csv_file.name, encoding="ascii") as writer:
- s = "boring ascii"
- row = [s, 123, datetime.date.today()]
- writer.writerows([row])
-
- with open(csv_file.name, "rb") as read_file:
- self.assertFalse(read_file.read().startswith(codecs.BOM_UTF8))
-
- # Clean up
- os.unlink(csv_file.name)
|