1313GET_NEW_EVENT_XML = TEST_ASSET_DIR / "webhook_get_new_event.xml"
1414CREATE_XML = TEST_ASSET_DIR / "webhook_create.xml"
1515CREATE_REQUEST_XML = TEST_ASSET_DIR / "webhook_create_request.xml"
16+ UPDATE_XML = TEST_ASSET_DIR / "webhook_update.xml"
1617
1718
1819@pytest .fixture (scope = "function" )
@@ -90,8 +91,7 @@ def test_request_factory():
9091 assert webhook_request_expected .replace ("\r " , "" ) == webhook_request_actual
9192
9293
93- def test_event_setter_none ():
94- """Setting event to None should store None without crashing."""
94+ def test_event_setter_none () -> None :
9595 item = WebhookItem ()
9696 item .event = "datasource-updated"
9797 assert item .event == "datasource-updated"
@@ -100,23 +100,23 @@ def test_event_setter_none():
100100 assert item .event is None
101101
102102
103- def test_event_setter_short_name ():
103+ def test_event_setter_short_name () -> None :
104104 """Short event names should be stored with the webhook-source-event- prefix."""
105105 item = WebhookItem ()
106106 item .event = "datasource-updated"
107107 assert item ._event == "webhook-source-event-datasource-updated"
108108 assert item .event == "datasource-updated"
109109
110110
111- def test_event_setter_full_source_name ():
111+ def test_event_setter_full_source_name () -> None :
112112 """Full webhook-source-event- names should be accepted and stored as-is."""
113113 item = WebhookItem ()
114114 item .event = "webhook-source-event-datasource-updated"
115115 assert item ._event == "webhook-source-event-datasource-updated"
116116 assert item .event == "datasource-updated"
117117
118118
119- def test_event_setter_new_style_event_name ():
119+ def test_event_setter_new_style_event_name () -> None :
120120 """New-style event names (webhook-event-*) should be stored as-is and not mangled."""
121121 item = WebhookItem ()
122122 item .event = "webhook-event-user-promoted-admin"
@@ -167,3 +167,53 @@ def test_create_with_source_event_name(server: TSC.Server) -> None:
167167
168168 new_webhook = server .webhooks .create (webhook_model )
169169 assert new_webhook .id is not None
170+
171+
172+ def test_get_parses_is_enabled_and_status_change_reason (server : TSC .Server ) -> None :
173+ response_xml = UPDATE_XML .read_text ()
174+ with requests_mock .mock () as m :
175+ m .get (server .webhooks .baseurl + "/webhook-id" , text = response_xml )
176+ webhook = server .webhooks .get_by_id ("webhook-id" )
177+
178+ assert webhook .is_enabled is True
179+ assert webhook .status_change_reason == ""
180+ assert webhook .name == "webhook-name-updated"
181+ assert webhook .url == "https://updated-url.example.com/hook"
182+
183+
184+ def test_update (server : TSC .Server ) -> None :
185+ response_xml = UPDATE_XML .read_text ()
186+ with requests_mock .mock () as m :
187+ m .put (server .webhooks .baseurl + "/webhook-id" , text = response_xml )
188+ webhook_item = WebhookItem ()
189+ webhook_item ._set_values (
190+ "webhook-id" , "webhook-name-updated" , "https://updated-url.example.com/hook" , "datasource-created" , None
191+ )
192+ webhook_item .is_enabled = True
193+
194+ updated_webhook = server .webhooks .update (webhook_item )
195+
196+ assert updated_webhook .id == "webhook-id"
197+ assert updated_webhook .name == "webhook-name-updated"
198+ assert updated_webhook .url == "https://updated-url.example.com/hook"
199+ assert updated_webhook .is_enabled is True
200+
201+
202+ def test_update_missing_id (server : TSC .Server ) -> None :
203+ webhook_item = WebhookItem ()
204+ webhook_item .name = "some-webhook"
205+ with pytest .raises (Exception ):
206+ server .webhooks .update (webhook_item )
207+
208+
209+ def test_update_request_factory_is_enabled () -> None :
210+ webhook_item = WebhookItem ()
211+ webhook_item ._set_values (
212+ "webhook-id" , "webhook-name" , "https://example.com/hook" , "datasource-created" , None , is_enabled = False
213+ )
214+
215+ request_bytes = RequestFactory .Webhook .update_req (webhook_item )
216+ request_str = request_bytes .decode ("utf-8" )
217+
218+ assert 'isEnabled="false"' in request_str
219+ assert "webhook-name" in request_str
0 commit comments