Details
| ID | RSSWidget |
|---|---|
| Language | python |
| From Version | 5.5.0 |
| Docker Image | demisto/py3-tools:1.0.0.10120494 |
| Tags | widget |
README
RSSWidget Script
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Cortex XSOAR Version | 5.5.0 |
Inputs
| Argument Name | Description |
|---|---|
| url | The URL of the RSS feed. |
| limit | Maximum number of entries to return. |
| insecure | Trust any certificate (not secure). Possible values: “true” and “false”. Default: “false”. |
| proxy | Use system proxy settings. Possible values: “true” and “false”. Default: “false”. |
Outputs
There are no outputs for this script.
Script Example
!RSSWidget url=https://threatpost.com/feed/
Human Readable Output
Article Title #1
Posted June 25, 2021 3:35 PM by Timor
Article #1 Summary
Article Title #2
Posted June 18, 2021 3:35 PM by Shai
Article #2 Summary
import sys import demistomock as demisto import pytest from RSSWidget import collect_entries_data_from_response, create_widget_content, main from test_data.test_variables import ( NO_ARTICLE, NO_ARTICLE_RES, ONE_ARTICLE, ONE_ARTICLE_HTML, ONE_ARTICLE_HTML_RES, ONE_ARTICLE_NOT_PUBLISHED, ONE_ARTICLE_NOT_PUBLISHED_RES, ONE_ARTICLE_RES, ONE_ARTICLE_STRING, ONE_ARTICLE_STRING_FORMATTED, TWO_ARTICLES, TWO_ARTICLES_RES, TWO_ARTICLES_STRING, ) @pytest.mark.parametrize( "parsed_response, limit, expected_result", [ (NO_ARTICLE, sys.maxsize, NO_ARTICLE_RES), (ONE_ARTICLE_HTML, True, ONE_ARTICLE_HTML_RES), (ONE_ARTICLE, sys.maxsize, ONE_ARTICLE_RES), (TWO_ARTICLES, sys.maxsize, TWO_ARTICLES_RES), (ONE_ARTICLE_NOT_PUBLISHED, sys.maxsize, ONE_ARTICLE_NOT_PUBLISHED_RES), (TWO_ARTICLES, 1, ONE_ARTICLE_RES), ], ) def test_collect_entries_data_from_response(parsed_response, limit, expected_result): """ Given: Parsed response from feed. When: Collecting relevant data from entries. Then: Verify the collected data. """ result = collect_entries_data_from_response(parsed_response, limit=limit) assert len(result) == len(expected_result) for entry in expected_result: assert entry in result @pytest.mark.parametrize( "data, is_version_ge_65, text_output", [ (NO_ARTICLE_RES, False, "## No entries were found."), (ONE_ARTICLE_RES, False, ONE_ARTICLE_STRING), (ONE_ARTICLE_RES, True, ONE_ARTICLE_STRING_FORMATTED), (TWO_ARTICLES_RES, False, TWO_ARTICLES_STRING), ], ) def test_create_widget_content(mocker, data, is_version_ge_65, text_output): """ Given: Data about entries to show. When: Creating the markdown output for the widget. Then: Verify the markdown string. """ import RSSWidget as rssw mocker.patch.object(rssw, "is_demisto_version_ge", return_value=is_version_ge_65) res = create_widget_content(data) assert res == text_output @pytest.mark.parametrize( "limit, exepcted_result", [ ("", TWO_ARTICLES_STRING), ("1", ONE_ARTICLE_STRING), ], ) def test_full_flow(mocker, requests_mock, limit, exepcted_result): import RSSWidget as rssw requests_mock.get("https://test.com") mocker.patch.object(rssw, "parse_feed_data", return_value=TWO_ARTICLES) mocker.patch.object(demisto, "results") mocker.patch.object(demisto, "args", return_value={"url": "https://test.com", "limit": limit}) main() res = demisto.results.call_args[0][0] assert res["ContentsFormat"] == "markdown" assert res["Contents"] == exepcted_result