test_dataframe_util.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #
  2. # Copyright (c) Daniel Sheffield 2023
  3. #
  4. # All rights reserved
  5. #
  6. # THIS SOFTWARE IS PROVIDED AS IS WITHOUT WARRANTY
  7. from datetime import datetime
  8. from pytest import mark, raises
  9. from pandas import DataFrame
  10. from app.data.dataframe_util import(
  11. get_caption,
  12. get_divider,
  13. get_time_range,
  14. stats,
  15. )
  16. @mark.parametrize('data', [
  17. DataFrame([
  18. {'ts': datetime(1970, 1, 1)}, {'ts': datetime(2000, 2, 28)}
  19. ])
  20. ])
  21. def test_get_timerange(data):
  22. assert ("01/01/1970", "28/02/2000") == get_time_range(data, 'ts')
  23. @mark.parametrize('width, marker, expected', [
  24. #(0, '─', (AssertionError, "")),
  25. #(1, '─', (AssertionError, "")),
  26. #(2, '─', (AssertionError, "")),
  27. (0, '─', ' ─ '),
  28. (1, '─', ' ─ '),
  29. (2, '─', ' ─ '),
  30. (3, '─', ' ─ '),
  31. (4, '─', ' ── '),
  32. (5, '─', ' ─── '),
  33. (6, '─', ' ── '),
  34. (7, '─', ' ─── '),
  35. (8, '─', ' ── '),
  36. ])
  37. def test_get_divider(width, marker, expected):
  38. if not isinstance(expected, tuple):
  39. assert expected == get_divider(width, marker=marker)
  40. return
  41. with raises(expected[0]):
  42. get_divider(width, marker=marker)
  43. @mark.parametrize('data', [
  44. DataFrame([
  45. {'ts': 0, 'price': 3.0, 'amount': 10, '$/unit': 0.3 },
  46. {'ts': datetime(2000, 2, 28), 'price': 11, 'amount': 2, '$/unit': 5.5 },
  47. ])
  48. ])
  49. def test_stats(data):
  50. assert [0.3, 2.9, 14/12, 5.5] == stats(data, 'price', 'amount', '$/unit')
  51. @mark.parametrize('data', [
  52. DataFrame([
  53. {'ts': datetime(1970, 1, 1)}, {'ts': datetime(2000, 2, 28)}
  54. ])
  55. ])
  56. @mark.parametrize('width, div', [
  57. (26, ' ── '),
  58. (27, ' ─── '),
  59. ])
  60. def test_get_caption(data, width, div):
  61. assert f"01/01/1970 {div} 28/02/2000" == get_caption(get_time_range(data, 'ts'), width)