tests.test_pyapi

Test the API exposed by this package.

 1"""Test the API exposed by this package."""
 2
 3from __future__ import annotations
 4
 5import subprocess
 6from typing import TYPE_CHECKING
 7from unittest import mock
 8
 9from semver import Version
10
11import dicom_echo as echo
12
13if TYPE_CHECKING:  # pragma: no cover
14    from unittest.mock import MagicMock
15
16dummy_address = 'dummy:1234'
17
18
19def test_dicom_storescp_version(dicom_storescp: str) -> None:
20    """Test the version of the `dicom-storescp` command."""
21    _, raw_version = subprocess.check_output([dicom_storescp, '--version'], text=True).split()
22    version = Version.parse(raw_version)
23
24    assert Version(0, 7, 0) <= version
25
26
27def test_send_echo(scpserver: str) -> None:
28    """Test sending a C-ECHO message to a local DICOM SCP server."""
29    rc = echo.send(scpserver)
30
31    assert 0 == rc
32
33
34@mock.patch('dicom_echo.counter', new_callable=echo.Counter)
35def test_message_id_counter(mock_counter: echo.Counter, mock_send_rc0: MagicMock) -> None:
36    """Verify that the message ID counter increments on each call to `dicom_echo.send()`."""
37    # Arrange
38    num_calls = 4
39
40    # Act
41    for _ in range(num_calls):
42        echo.send(dummy_address)
43
44    # Assert
45    assert num_calls == mock_send_rc0.call_count
46    assert num_calls == mock_counter.count
47
48    message_ids = [call.kwargs['message_id'] for call in mock_send_rc0.call_args_list]
49    assert list(range(1, num_calls + 1)) == message_ids
50
51
52@mock.patch('dicom_echo.counter', new_callable=echo.Counter)
53def test_default_values(mock_counter: echo.Counter, mock_send_rc0: MagicMock) -> None:
54    """Verify that the message ID counter increments on each call to `dicom_echo.send()`."""
55    echo.send(dummy_address)
56
57    mock_send_rc0.assert_called_once()
58    assert dummy_address == mock_send_rc0.call_args.args[0]
59    assert echo.DEFAULT_CALLED_AE_TITLE == mock_send_rc0.call_args.kwargs['called_ae_title']
60    assert echo.DEFAULT_CALLING_AE_TITLE == mock_send_rc0.call_args.kwargs['calling_ae_title']
61    assert mock_counter.count == mock_send_rc0.call_args.kwargs['message_id']
62
63
64def test_message_id_override(mock_send_rc0: MagicMock) -> None:
65    """Verify that the default count-based message ID can be overridden."""
66    # Arrange
67    message_id = 42
68
69    # Act
70    echo.send(dummy_address, message_id=message_id)
71
72    # Assert
73    mock_send_rc0.assert_called_once()
74    assert message_id == mock_send_rc0.call_args.kwargs['message_id']
dummy_address = 'dummy:1234'
def test_dicom_storescp_version(dicom_storescp: str) -> None:
20def test_dicom_storescp_version(dicom_storescp: str) -> None:
21    """Test the version of the `dicom-storescp` command."""
22    _, raw_version = subprocess.check_output([dicom_storescp, '--version'], text=True).split()
23    version = Version.parse(raw_version)
24
25    assert Version(0, 7, 0) <= version

Test the version of the dicom-storescp command.

def test_send_echo(scpserver: str) -> None:
28def test_send_echo(scpserver: str) -> None:
29    """Test sending a C-ECHO message to a local DICOM SCP server."""
30    rc = echo.send(scpserver)
31
32    assert 0 == rc

Test sending a C-ECHO message to a local DICOM SCP server.

@mock.patch('dicom_echo.counter', new_callable=echo.Counter)
def test_message_id_counter( mock_counter: dicom_echo.Counter, mock_send_rc0: unittest.mock.MagicMock) -> None:
35@mock.patch('dicom_echo.counter', new_callable=echo.Counter)
36def test_message_id_counter(mock_counter: echo.Counter, mock_send_rc0: MagicMock) -> None:
37    """Verify that the message ID counter increments on each call to `dicom_echo.send()`."""
38    # Arrange
39    num_calls = 4
40
41    # Act
42    for _ in range(num_calls):
43        echo.send(dummy_address)
44
45    # Assert
46    assert num_calls == mock_send_rc0.call_count
47    assert num_calls == mock_counter.count
48
49    message_ids = [call.kwargs['message_id'] for call in mock_send_rc0.call_args_list]
50    assert list(range(1, num_calls + 1)) == message_ids

Verify that the message ID counter increments on each call to dicom_echo.send().

@mock.patch('dicom_echo.counter', new_callable=echo.Counter)
def test_default_values( mock_counter: dicom_echo.Counter, mock_send_rc0: unittest.mock.MagicMock) -> None:
53@mock.patch('dicom_echo.counter', new_callable=echo.Counter)
54def test_default_values(mock_counter: echo.Counter, mock_send_rc0: MagicMock) -> None:
55    """Verify that the message ID counter increments on each call to `dicom_echo.send()`."""
56    echo.send(dummy_address)
57
58    mock_send_rc0.assert_called_once()
59    assert dummy_address == mock_send_rc0.call_args.args[0]
60    assert echo.DEFAULT_CALLED_AE_TITLE == mock_send_rc0.call_args.kwargs['called_ae_title']
61    assert echo.DEFAULT_CALLING_AE_TITLE == mock_send_rc0.call_args.kwargs['calling_ae_title']
62    assert mock_counter.count == mock_send_rc0.call_args.kwargs['message_id']

Verify that the message ID counter increments on each call to dicom_echo.send().

def test_message_id_override(mock_send_rc0: unittest.mock.MagicMock) -> None:
65def test_message_id_override(mock_send_rc0: MagicMock) -> None:
66    """Verify that the default count-based message ID can be overridden."""
67    # Arrange
68    message_id = 42
69
70    # Act
71    echo.send(dummy_address, message_id=message_id)
72
73    # Assert
74    mock_send_rc0.assert_called_once()
75    assert message_id == mock_send_rc0.call_args.kwargs['message_id']

Verify that the default count-based message ID can be overridden.