From 8761649fb96d6c464de2dc7faacbef88c3334c5a Mon Sep 17 00:00:00 2001 From: Greg Leonard <45019882+greg-el@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:39:33 +0100 Subject: [PATCH] Fix `PagePing`, `PageView`, and `StructuredEvent` property getters (close #361) --- snowplow_tracker/events/page_ping.py | 14 +++---- snowplow_tracker/events/page_view.py | 6 +-- snowplow_tracker/events/structured_event.py | 10 ++--- snowplow_tracker/test/unit/test_page_ping.py | 38 +++++++++++++++++++ snowplow_tracker/test/unit/test_page_view.py | 27 +++++++++++++ .../test/unit/test_structured_event.py | 24 ++++++++++++ 6 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 snowplow_tracker/test/unit/test_page_ping.py create mode 100644 snowplow_tracker/test/unit/test_page_view.py create mode 100644 snowplow_tracker/test/unit/test_structured_event.py diff --git a/snowplow_tracker/events/page_ping.py b/snowplow_tracker/events/page_ping.py index b008479..43bbb21 100644 --- a/snowplow_tracker/events/page_ping.py +++ b/snowplow_tracker/events/page_ping.py @@ -81,7 +81,7 @@ def page_url(self) -> str: """ URL of the viewed page """ - return self.payload.get("url") + return self.payload.nv_pairs["url"] @page_url.setter def page_url(self, value: str): @@ -93,7 +93,7 @@ def page_title(self) -> Optional[str]: """ URL of the viewed page """ - return self.payload.get("page") + return self.payload.nv_pairs.get("page") @page_title.setter def page_title(self, value: Optional[str]): @@ -104,7 +104,7 @@ def referrer(self) -> Optional[str]: """ The referrer of the page """ - return self.payload.get("refr") + return self.payload.nv_pairs.get("refr") @referrer.setter def referrer(self, value: Optional[str]): @@ -115,7 +115,7 @@ def min_x(self) -> Optional[int]: """ Minimum page x offset seen in the last ping period """ - return self.payload.get("pp_mix") + return self.payload.nv_pairs.get("pp_mix") @min_x.setter def min_x(self, value: Optional[int]): @@ -126,7 +126,7 @@ def max_x(self) -> Optional[int]: """ Maximum page x offset seen in the last ping period """ - return self.payload.get("pp_max") + return self.payload.nv_pairs.get("pp_max") @max_x.setter def max_x(self, value: Optional[int]): @@ -137,7 +137,7 @@ def min_y(self) -> Optional[int]: """ Minimum page y offset seen in the last ping period """ - return self.payload.get("pp_miy") + return self.payload.nv_pairs.get("pp_miy") @min_y.setter def min_y(self, value: Optional[int]): @@ -148,7 +148,7 @@ def max_y(self) -> Optional[int]: """ Maximum page y offset seen in the last ping period """ - return self.payload.get("pp_may") + return self.payload.nv_pairs.get("pp_may") @max_y.setter def max_y(self, value: Optional[int]): diff --git a/snowplow_tracker/events/page_view.py b/snowplow_tracker/events/page_view.py index dc9ca51..53e44bb 100644 --- a/snowplow_tracker/events/page_view.py +++ b/snowplow_tracker/events/page_view.py @@ -65,7 +65,7 @@ def page_url(self) -> str: """ URL of the viewed page """ - return self.payload.get("url") + return self.payload.nv_pairs["url"] @page_url.setter def page_url(self, value: str): @@ -77,7 +77,7 @@ def page_title(self) -> Optional[str]: """ Title of the viewed page """ - return self.payload.get("page") + return self.payload.nv_pairs.get("page") @page_title.setter def page_title(self, value: Optional[str]): @@ -88,7 +88,7 @@ def referrer(self) -> Optional[str]: """ The referrer of the page """ - return self.payload.get("refr") + return self.payload.nv_pairs.get("refr") @referrer.setter def referrer(self, value: Optional[str]): diff --git a/snowplow_tracker/events/structured_event.py b/snowplow_tracker/events/structured_event.py index a92acc0..00658e9 100644 --- a/snowplow_tracker/events/structured_event.py +++ b/snowplow_tracker/events/structured_event.py @@ -81,7 +81,7 @@ def category(self) -> Optional[str]: """ Category of the event """ - return self.payload.get("se_ca") + return self.payload.nv_pairs.get("se_ca") @category.setter def category(self, value: Optional[str]): @@ -93,7 +93,7 @@ def action(self) -> Optional[str]: """ The event itself """ - return self.payload.get("se_ac") + return self.payload.nv_pairs.get("se_ac") @action.setter def action(self, value: Optional[str]): @@ -105,7 +105,7 @@ def label(self) -> Optional[str]: """ Refer to the object the action is performed on """ - return self.payload.get("se_la") + return self.payload.nv_pairs.get("se_la") @label.setter def label(self, value: Optional[str]): @@ -116,7 +116,7 @@ def property_(self) -> Optional[str]: """ Property associated with either the action or the object """ - return self.payload.get("se_pr") + return self.payload.nv_pairs.get("se_pr") @property_.setter def property_(self, value: Optional[str]): @@ -127,7 +127,7 @@ def value(self) -> Optional[int]: """ A value associated with the user action """ - return self.payload.get("se_va") + return self.payload.nv_pairs.get("se_va") @value.setter def value(self, value: Optional[int]): diff --git a/snowplow_tracker/test/unit/test_page_ping.py b/snowplow_tracker/test/unit/test_page_ping.py new file mode 100644 index 0000000..7539ce4 --- /dev/null +++ b/snowplow_tracker/test/unit/test_page_ping.py @@ -0,0 +1,38 @@ +import pytest + +from snowplow_tracker.events.page_ping import PagePing + + +class TestPagePing: + def test_getters(self): + pp = PagePing("url", "title", "referrer", 1, 2, 3, 4) + assert pp.page_url == "url" + assert pp.page_title == "title" + assert pp.referrer == "referrer" + assert pp.min_x == 1 + assert pp.max_x == 2 + assert pp.min_y == 3 + assert pp.max_y == 4 + + def test_setters(self): + pp = PagePing("url") + pp.page_title = "title" + pp.referrer = "referrer" + pp.min_x = 1 + pp.max_x = 2 + pp.min_y = 3 + pp.max_y = 4 + assert pp.page_title == "title" + assert pp.referrer == "referrer" + assert pp.min_x == 1 + assert pp.max_x == 2 + assert pp.min_y == 3 + assert pp.max_y == 4 + assert pp.page_url == "url" + + def test_page_url_non_empty_string(self): + pp = PagePing("url") + pp.page_url = "new_url" + assert pp.page_url == "new_url" + with pytest.raises(ValueError): + pp.page_url = "" diff --git a/snowplow_tracker/test/unit/test_page_view.py b/snowplow_tracker/test/unit/test_page_view.py new file mode 100644 index 0000000..3736710 --- /dev/null +++ b/snowplow_tracker/test/unit/test_page_view.py @@ -0,0 +1,27 @@ +import pytest + +from snowplow_tracker.events.page_view import PageView + + +class TestPageView: + def test_getters(self): + pv = PageView("url", "title", "referrer") + assert pv.page_url == "url" + assert pv.page_title == "title" + assert pv.referrer == "referrer" + + def test_setters(self): + pv = PageView("url", "title", "referrer") + pv.page_url = "new_url" + pv.page_title = "new_title" + pv.referrer = "new_referrer" + assert pv.page_url == "new_url" + assert pv.page_title == "new_title" + assert pv.referrer == "new_referrer" + + def test_page_url_non_empty_string(self): + pv = PageView("url") + pv.page_url = "new_url" + assert pv.page_url == "new_url" + with pytest.raises(ValueError): + pv.page_url = "" diff --git a/snowplow_tracker/test/unit/test_structured_event.py b/snowplow_tracker/test/unit/test_structured_event.py new file mode 100644 index 0000000..fdf0001 --- /dev/null +++ b/snowplow_tracker/test/unit/test_structured_event.py @@ -0,0 +1,24 @@ +from snowplow_tracker.events.structured_event import StructuredEvent + + +class TestStructuredEvent: + def test_getters(self): + se = StructuredEvent("category", "action", "label", "property", 1) + assert se.category == "category" + assert se.action == "action" + assert se.label == "label" + assert se.property_ == "property" + assert se.value == 1 + + def test_setters(self): + se = StructuredEvent("category", "action") + se.category = "new_category" + se.action = "new_action" + se.label = "new_label" + se.property_ = "new_property" + se.value = 2 + assert se.category == "new_category" + assert se.action == "new_action" + assert se.label == "new_label" + assert se.property_ == "new_property" + assert se.value == 2