Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

test_compat.py 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # -*- coding: utf-8 -*-
  2. import codecs
  3. import datetime
  4. import io
  5. import os
  6. from tempfile import NamedTemporaryFile
  7. from django.test import TestCase, override_settings
  8. from django.utils.encoding import smart_text
  9. from oscar.core.compat import UnicodeCSVWriter, existing_user_fields
  10. class unicodeobj(object):
  11. def __init__(self, s):
  12. self.s = s
  13. def __str__(self):
  14. return self.s
  15. class TestExistingUserFields(TestCase):
  16. def test_order(self):
  17. fields = existing_user_fields(['email', 'first_name', 'last_name'])
  18. self.assertEqual(fields, ['email', 'first_name', 'last_name'])
  19. class TestUnicodeCSVWriter(TestCase):
  20. def test_can_write_different_values(self):
  21. writer = UnicodeCSVWriter(open_file=io.StringIO())
  22. s = 'ünįcodē'
  23. rows = [[s, unicodeobj(s), 123, datetime.date.today()], ]
  24. writer.writerows(rows)
  25. self.assertRaises(TypeError, writer.writerows, [object()])
  26. def test_context_manager(self):
  27. tmp_file = NamedTemporaryFile()
  28. with UnicodeCSVWriter(filename=tmp_file.name) as writer:
  29. s = 'ünįcodē'
  30. rows = [[s, unicodeobj(s), 123, datetime.date.today()], ]
  31. writer.writerows(rows)
  32. def test_csv_write_output(self):
  33. tmp_file = NamedTemporaryFile(delete=False)
  34. with UnicodeCSVWriter(filename=tmp_file.name) as writer:
  35. s = 'ünįcodē'
  36. row = [s, 123, 'foo-bar']
  37. writer.writerows([row])
  38. with open(tmp_file.name, 'r') as read_file:
  39. content = smart_text(read_file.read(), encoding='utf-8').strip()
  40. self.assertEqual(content, 'ünįcodē,123,foo-bar')
  41. # Clean up
  42. os.unlink(tmp_file.name)
  43. @override_settings(OSCAR_CSV_INCLUDE_BOM=True)
  44. def test_bom_write_with_open_file(self):
  45. csv_file = NamedTemporaryFile(delete=False)
  46. with open(csv_file.name, 'w') as open_file:
  47. writer = UnicodeCSVWriter(open_file=open_file, encoding="utf-8")
  48. s = 'ünįcodē'
  49. row = [s, 123, datetime.date.today()]
  50. writer.writerows([row])
  51. with open(csv_file.name, 'rb') as read_file:
  52. self.assertTrue(read_file.read().startswith(codecs.BOM_UTF8))
  53. # Clean up
  54. os.unlink(csv_file.name)
  55. @override_settings(OSCAR_CSV_INCLUDE_BOM=True)
  56. def test_bom_write_with_filename(self):
  57. csv_file = NamedTemporaryFile(delete=False)
  58. with UnicodeCSVWriter(filename=csv_file.name, encoding="utf-8") as writer:
  59. s = 'ünįcodē'
  60. row = [s, 123, datetime.date.today()]
  61. writer.writerows([row])
  62. with open(csv_file.name, 'rb') as read_file:
  63. self.assertTrue(read_file.read().startswith(codecs.BOM_UTF8))
  64. # Clean up
  65. os.unlink(csv_file.name)
  66. @override_settings(OSCAR_CSV_INCLUDE_BOM=True)
  67. def test_bom_not_written_for_other_encodings(self):
  68. csv_file = NamedTemporaryFile(delete=False)
  69. with UnicodeCSVWriter(filename=csv_file.name, encoding="ascii") as writer:
  70. s = 'boring ascii'
  71. row = [s, 123, datetime.date.today()]
  72. writer.writerows([row])
  73. with open(csv_file.name, 'rb') as read_file:
  74. self.assertFalse(read_file.read().startswith(codecs.BOM_UTF8))
  75. # Clean up
  76. os.unlink(csv_file.name)