RemoveKeyFromList

Removes a key in key/value store backed by an XSOAR list.

python · Common Scripts

Details

IDRemoveKeyFromList
Languagepython
From Version5.0.0
Docker Imagedemisto/python3:3.12.13.10404775

README

Removes a key in key/value store backed by an XSOAR list.

Script Data


Name Description
Script Type python3
Tags  
Cortex XSOAR Version 5.0.0

Inputs


Argument Name Description
listName List name.
keyName Key.

Outputs


There are no outputs for this script.

Script Example

!RemoveKeyFromList listName="NewList" keyName="SomeKey"

Context Example

{}

Human Readable Output

Successfully removed key SomeKey from list NewList.

import json
from typing import Any

import demistomock as demisto  # noqa # pylint: disable=unused-wildcard-import
from RemoveKeyFromList import remove_key_from_list_command

MOCK_LIST_NAME = "TestList"
MOCK_KEY_NAME = "TestKey"


def test_remove_nonexisting_key_in_nonempty_list(mocker):
    """
    Given:
        - a nonempty list with some value
        - a key that doesn't exist in the list
    When
        - trying to remove a key that doesn't exist in the list
    Then
        - a message saying the key was not found is returned
    """
    MOCKED_START_LIST: dict = {"AnotherKey": "SomeValue"}

    def executeCommand(name: str, args: dict[str, Any]) -> list[dict[str, Any]]:
        if name == "getList":
            return [{"Contents": json.dumps(MOCKED_START_LIST)}]
        elif name == "setList":
            return [{"Contents": f"Done: list {name} was updated"}]

        raise ValueError(f"Error: Unknown command or command/argument pair: {name} {args!r}")

    mocked_ec = mocker.patch.object(demisto, "executeCommand", side_effect=executeCommand)

    result = remove_key_from_list_command(
        {
            "listName": MOCK_LIST_NAME,
            "keyName": MOCK_KEY_NAME,
        }
    )

    assert result.readable_output == f"Key {MOCK_KEY_NAME} not found in list {MOCK_LIST_NAME}, cannot remove."
    assert len(mocked_ec.call_args_list) == 1


def test_remove_nonexisting_key_in_empty_list(mocker):
    """
    Given:
        - an empty list
        - a key that doesn't exist in the list
    When
        - trying to remove a key
    Then
        - a message saying the key was not found is returned
    """
    MOCKED_START_LIST: dict = {}

    def executeCommand(name: str, args: dict[str, Any]) -> list[dict[str, Any]]:
        if name == "getList":
            return [{"Contents": json.dumps(MOCKED_START_LIST)}]
        elif name == "setList":
            return [{"Contents": f"Done: list {name} was updated"}]

        raise ValueError(f"Error: Unknown command or command/argument pair: {name} {args!r}")

    mocked_ec = mocker.patch.object(demisto, "executeCommand", side_effect=executeCommand)

    result = remove_key_from_list_command(
        {
            "listName": MOCK_LIST_NAME,
            "keyName": MOCK_KEY_NAME,
        }
    )

    assert result.readable_output == f"Key {MOCK_KEY_NAME} not found in list {MOCK_LIST_NAME}, cannot remove."
    assert len(mocked_ec.call_args_list) == 1


def test_remove_existing_key(mocker):
    """
    Given:
        - a nonempty list with 2 values
        - a key that exists in the list
    When
        - trying to remove a key exists exist in the list
    Then
        - requested key is removed from list
        - list is left with only one item
    """
    MOCKED_START_LIST: dict = {MOCK_KEY_NAME: "Value", "AnotherKey": "AnotherValue"}
    MOCKED_END_LIST: dict = {"AnotherKey": "AnotherValue"}

    def executeCommand(name: str, args: dict[str, Any]) -> list[dict[str, Any]]:
        if name == "getList":
            return [{"Contents": json.dumps(MOCKED_START_LIST)}]
        elif name == "setList":
            return [{"Contents": f"Done: list {name} was updated"}]

        raise ValueError(f"Error: Unknown command or command/argument pair: {name} {args!r}")

    mocked_ec = mocker.patch.object(demisto, "executeCommand", side_effect=executeCommand)

    result = remove_key_from_list_command(
        {
            "listName": MOCK_LIST_NAME,
            "keyName": MOCK_KEY_NAME,
        }
    )

    assert result.readable_output == f"Successfully removed key {MOCK_KEY_NAME} from list {MOCK_LIST_NAME}."
    assert len(mocked_ec.call_args_list) == 2
    assert mocked_ec.call_args_list[1][0][0] == "setList"
    assert json.loads(mocked_ec.call_args_list[1][0][1]["listData"]) == MOCKED_END_LIST


def test_remove_existing_last_key(mocker):
    """
    Given:
        - a nonempty list with 1 value
        - a key that exists in the list (the only one that exists)
    When
        - trying to remove the last key of the list
    Then
        - requested key is removed from list
        - list is empty
    """
    MOCKED_START_LIST: dict = {MOCK_KEY_NAME: "Value"}
    MOCKED_END_LIST: dict = {}

    def executeCommand(name: str, args: dict[str, Any]) -> list[dict[str, Any]]:
        if name == "getList":
            return [{"Contents": json.dumps(MOCKED_START_LIST)}]
        elif name == "setList":
            return [{"Contents": f"Done: list {name} was updated"}]

        raise ValueError(f"Error: Unknown command or command/argument pair: {name} {args!r}")

    mocked_ec = mocker.patch.object(demisto, "executeCommand", side_effect=executeCommand)

    result = remove_key_from_list_command(
        {
            "listName": MOCK_LIST_NAME,
            "keyName": MOCK_KEY_NAME,
        }
    )

    assert result.readable_output == f"Successfully removed key {MOCK_KEY_NAME} from list {MOCK_LIST_NAME}."
    assert len(mocked_ec.call_args_list) == 2
    assert mocked_ec.call_args_list[1][0][0] == "setList"
    assert json.loads(mocked_ec.call_args_list[1][0][1]["listData"]) == MOCKED_END_LIST