test_datetime_operations.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from typing import Generator
  2. import pytest
  3. from playwright.sync_api import Page, expect
  4. from reflex.testing import AppHarness
  5. def DatetimeOperationsApp():
  6. from datetime import datetime
  7. import reflex as rx
  8. class DtOperationsState(rx.State):
  9. date1: datetime = datetime(2021, 1, 1)
  10. date2: datetime = datetime(2031, 1, 1)
  11. date3: datetime = datetime(2021, 1, 1)
  12. app = rx.App(_state=DtOperationsState)
  13. @app.add_page
  14. def index():
  15. return rx.vstack(
  16. rx.text(DtOperationsState.date1, id="date1"),
  17. rx.text(DtOperationsState.date2, id="date2"),
  18. rx.text(DtOperationsState.date3, id="date3"),
  19. rx.text("Operations between date1 and date2"),
  20. rx.text(DtOperationsState.date1 == DtOperationsState.date2, id="1_eq_2"),
  21. rx.text(DtOperationsState.date1 != DtOperationsState.date2, id="1_neq_2"),
  22. rx.text(DtOperationsState.date1 < DtOperationsState.date2, id="1_lt_2"),
  23. rx.text(DtOperationsState.date1 <= DtOperationsState.date2, id="1_le_2"),
  24. rx.text(DtOperationsState.date1 > DtOperationsState.date2, id="1_gt_2"),
  25. rx.text(DtOperationsState.date1 >= DtOperationsState.date2, id="1_ge_2"),
  26. rx.text("Operations between date1 and date3"),
  27. rx.text(DtOperationsState.date1 == DtOperationsState.date3, id="1_eq_3"),
  28. rx.text(DtOperationsState.date1 != DtOperationsState.date3, id="1_neq_3"),
  29. rx.text(DtOperationsState.date1 < DtOperationsState.date3, id="1_lt_3"),
  30. rx.text(DtOperationsState.date1 <= DtOperationsState.date3, id="1_le_3"),
  31. rx.text(DtOperationsState.date1 > DtOperationsState.date3, id="1_gt_3"),
  32. rx.text(DtOperationsState.date1 >= DtOperationsState.date3, id="1_ge_3"),
  33. )
  34. @pytest.fixture()
  35. def datetime_operations_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
  36. """Start Table app at tmp_path via AppHarness.
  37. Args:
  38. tmp_path_factory: pytest tmp_path_factory fixture
  39. Yields:
  40. running AppHarness instance
  41. """
  42. with AppHarness.create(
  43. root=tmp_path_factory.mktemp("datetime_operations_app"),
  44. app_source=DatetimeOperationsApp,
  45. ) as harness:
  46. assert harness.app_instance is not None, "app is not running"
  47. yield harness
  48. def test_datetime_operations(datetime_operations_app: AppHarness, page: Page):
  49. assert datetime_operations_app.frontend_url is not None
  50. page.goto(datetime_operations_app.frontend_url)
  51. expect(page).to_have_url(datetime_operations_app.frontend_url + "/")
  52. # Check the actual values
  53. expect(page.locator("id=date1")).to_have_text("2021-01-01 00:00:00")
  54. expect(page.locator("id=date2")).to_have_text("2031-01-01 00:00:00")
  55. expect(page.locator("id=date3")).to_have_text("2021-01-01 00:00:00")
  56. # Check the operations between date1 and date2
  57. expect(page.locator("id=1_eq_2")).to_have_text("false")
  58. expect(page.locator("id=1_neq_2")).to_have_text("true")
  59. expect(page.locator("id=1_lt_2")).to_have_text("true")
  60. expect(page.locator("id=1_le_2")).to_have_text("true")
  61. expect(page.locator("id=1_gt_2")).to_have_text("false")
  62. expect(page.locator("id=1_ge_2")).to_have_text("false")
  63. # Check the operations between date1 and date3
  64. expect(page.locator("id=1_eq_3")).to_have_text("true")
  65. expect(page.locator("id=1_neq_3")).to_have_text("false")
  66. expect(page.locator("id=1_lt_3")).to_have_text("false")
  67. expect(page.locator("id=1_le_3")).to_have_text("true")
  68. expect(page.locator("id=1_gt_3")).to_have_text("false")
  69. expect(page.locator("id=1_ge_3")).to_have_text("true")