Skip to content

Commit

Permalink
Refactor the Webhook.get_payload to use Serializers #1325
Browse files Browse the repository at this point in the history
Signed-off-by: tdruez <[email protected]>
  • Loading branch information
tdruez committed Jul 12, 2024
1 parent f5e7810 commit 289bbd0
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 13 deletions.
1 change: 1 addition & 0 deletions scanpipe/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ class Meta:

class ProjectSerializer(
ExcludeFromListViewMixin,
SerializerExcludeFieldsMixin,
PipelineChoicesMixin,
TaggitSerializer,
serializers.ModelSerializer,
Expand Down
29 changes: 17 additions & 12 deletions scanpipe/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3807,20 +3807,25 @@ def __str__(self):
return str(self.uuid)

def get_payload(self, pipeline_run):
return {
"project": {
"uuid": self.project.uuid,
"name": self.project.name,
"input_sources": self.project.get_inputs_with_source(),
},
"run": {
"uuid": pipeline_run.uuid,
"pipeline_name": pipeline_run.pipeline_name,
"status": pipeline_run.status,
"scancodeio_version": pipeline_run.scancodeio_version,
},
"""Return the Webhook payload generated from project and pipeline_run data."""
from scanpipe.api.serializers import ProjectSerializer
from scanpipe.api.serializers import RunSerializer

project_serializer = ProjectSerializer(
instance=self.project,
exclude_fields=("url", "runs"),
)
run_serializer = RunSerializer(
instance=pipeline_run,
exclude_fields=("url", "project"),
)
payload = {
"project": project_serializer.data,
"run": run_serializer.data,
}

return payload

def deliver(self, pipeline_run):
"""Deliver this Webhook by sending a POST request to the `target_url`."""
payload = self.get_payload(pipeline_run)
Expand Down
61 changes: 60 additions & 1 deletion scanpipe/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1895,7 +1895,7 @@ def test_scanpipe_codebase_resource_model_walk_method_problematic_filenames(self
self.assertEqual(expected_paths, result)

@mock.patch("requests.post")
def test_scanpipe_webhook_subscription_deliver_method(self, mock_post):
def test_scanpipe_webhook_subscription_model_deliver_method(self, mock_post):
webhook = self.project1.add_webhook_subscription("https://localhost")
self.assertFalse(webhook.delivered)
run1 = self.create_run()
Expand All @@ -1922,6 +1922,65 @@ def test_scanpipe_webhook_subscription_deliver_method(self, mock_post):
self.assertTrue(webhook.success)
self.assertEqual("text", webhook.response_text)

def test_scanpipe_webhook_subscription_model_get_payload(self):
webhook = self.project1.add_webhook_subscription("https://localhost")
run1 = self.create_run()
payload = webhook.get_payload(run1)

expected = {
"project": {
"name": "Analysis",
"uuid": str(self.project1.uuid),
"is_archived": False,
"notes": "",
"labels": [],
"settings": {},
"input_sources": [],
"input_root": [],
"output_root": [],
"next_run": "pipeline",
"extra_data": {},
"message_count": 0,
"resource_count": 0,
"package_count": 0,
"dependency_count": 0,
"relation_count": 0,
"codebase_resources_summary": {},
"discovered_packages_summary": {
"total": 0,
"with_missing_resources": 0,
"with_modified_resources": 0,
},
"discovered_dependencies_summary": {
"total": 0,
"is_runtime": 0,
"is_optional": 0,
"is_resolved": 0,
},
"codebase_relations_summary": {},
},
"run": {
"pipeline_name": "pipeline",
"status": run1.status,
"description": "",
"selected_groups": None,
"selected_steps": None,
"uuid": str(run1.uuid),
"scancodeio_version": "",
"task_id": None,
"task_start_date": None,
"task_end_date": None,
"task_exitcode": None,
"task_output": "",
"log": "",
"execution_time": None,
},
}

del payload["project"]["created_date"]
del payload["run"]["created_date"]
self.assertDictEqual(expected, payload)

def test_scanpipe_discovered_package_model_extract_purl_data(self):
package_data = {}
expected = {
Expand Down

0 comments on commit 289bbd0

Please sign in to comment.