improved test coverage, automation scripts
This commit is contained in:
0
tests/render/__init__.py
Normal file
0
tests/render/__init__.py
Normal file
227
tests/render/test_cytoscape.py
Normal file
227
tests/render/test_cytoscape.py
Normal file
@@ -0,0 +1,227 @@
|
||||
"""tests for Cytoscape API requests, needs running Cytoscape server;
|
||||
Tests assume that no Cytoscape instance is running.
|
||||
The validation of the correct behaviour can only be done with a running instance,
|
||||
especially for layout and formatting tasks. A static test suite is not helpful in
|
||||
this case.
|
||||
"""
|
||||
|
||||
import py4cytoscape as p4c
|
||||
import pytest
|
||||
from py4cytoscape.exceptions import CyError
|
||||
from requests.exceptions import RequestException
|
||||
|
||||
from lang_main.constants import CYTO_BASE_NETWORK_NAME, CYTO_SELECTION_PROPERTY
|
||||
from lang_main.errors import GraphRenderError
|
||||
from lang_main.render import cytoscape as cyto
|
||||
|
||||
_cyto_available: bool = True
|
||||
try:
|
||||
p4c.cytoscape_ping()
|
||||
except RequestException:
|
||||
_cyto_available = False
|
||||
|
||||
|
||||
@pytest.fixture(scope='module')
|
||||
def avail() -> bool:
|
||||
return _cyto_available
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_verify_connection(avail):
|
||||
if avail:
|
||||
cyto.verify_connection()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.verify_connection()
|
||||
|
||||
|
||||
def test_verify_graph_render_size(data_tk_graph_built):
|
||||
cyto.verify_graph_render_size(
|
||||
data_tk_graph_built, max_node_count=None, max_edge_count=None
|
||||
)
|
||||
|
||||
with pytest.raises(GraphRenderError):
|
||||
cyto.verify_graph_render_size(
|
||||
data_tk_graph_built, max_node_count=0, max_edge_count=None
|
||||
)
|
||||
|
||||
with pytest.raises(GraphRenderError):
|
||||
cyto.verify_graph_render_size(
|
||||
data_tk_graph_built, max_node_count=None, max_edge_count=0
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_change_default_layout(avail):
|
||||
if avail:
|
||||
cyto.change_default_layout()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.change_default_layout()
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_import_to_cytoscape(avail, data_tk_graph_built):
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_verify_table_property(avail, data_tk_graph_built):
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
contained = cyto.verify_table_property(property='TEST', table_type='node')
|
||||
assert not contained
|
||||
contained = cyto.verify_table_property(property='name', table_type='node')
|
||||
assert contained
|
||||
contained = cyto.verify_table_property(property='degree_weighted', table_type='node')
|
||||
assert contained
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
contained = cyto.verify_table_property(property='TEST', table_type='node')
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_analyse_network(avail, data_tk_graph_built):
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
cyto.analyse_network()
|
||||
contained = cyto.verify_table_property(property='name', table_type='node')
|
||||
assert contained
|
||||
contained = cyto.verify_table_property(
|
||||
property=CYTO_SELECTION_PROPERTY, table_type='node'
|
||||
)
|
||||
assert contained
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.analyse_network(data_tk_graph_built)
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_reset_current_network_to_base(avail):
|
||||
if avail:
|
||||
cyto.reset_current_network_to_base()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.reset_current_network_to_base()
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_fit_content(avail, data_tk_graph_built):
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
cyto.fit_content()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.fit_content()
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_export_network_to_image(avail, tmp_path, data_tk_graph_built):
|
||||
filename = 'test_export'
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
cyto.export_network_to_image(filename=filename, target_folder=tmp_path)
|
||||
target_file = tmp_path / f'{filename}.svg'
|
||||
assert target_file.exists()
|
||||
assert target_file.name == f'{filename}.svg'
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.export_network_to_image(filename=filename, target_folder=tmp_path)
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_layout_network(avail, data_tk_graph_built):
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
cyto.layout_network()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.layout_network()
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_apply_style_to_network(avail, data_tk_graph_built, tmp_path):
|
||||
if avail:
|
||||
layout_not_existing = 'testing'
|
||||
pth_not_existing = tmp_path / 'test.xml'
|
||||
with pytest.raises(FileNotFoundError):
|
||||
cyto.apply_style_to_network(
|
||||
style_name=layout_not_existing,
|
||||
pth_to_stylesheet=pth_not_existing,
|
||||
)
|
||||
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
# not existing: so transfer necessary,
|
||||
# but fails nevertheless because style is imported
|
||||
# using the name provided by this style configuration
|
||||
with pytest.raises(CyError):
|
||||
cyto.apply_style_to_network(style_name=layout_not_existing)
|
||||
cyto.apply_style_to_network()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.apply_style_to_network()
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_get_subgraph_node_selection(avail, data_tk_graph_built):
|
||||
num_subgraphs = 2
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
cyto.analyse_network()
|
||||
suids = cyto.get_subgraph_node_selection(num_subgraphs=num_subgraphs)
|
||||
assert len(suids) > 0
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.get_subgraph_node_selection(num_subgraphs=num_subgraphs)
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_select_neighbours_of_node(avail, data_tk_graph_built):
|
||||
num_subgraphs = 2
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
suids = cyto.get_subgraph_node_selection(num_subgraphs=num_subgraphs)
|
||||
assert len(suids) > 0
|
||||
cyto.select_neighbours_of_node(suids[0], neighbour_iter_depth=2)
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.select_neighbours_of_node(123, neighbour_iter_depth=2)
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_make_subnetwork(avail, data_tk_graph_built, tmp_path):
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
suids = cyto.get_subgraph_node_selection(num_subgraphs=2)
|
||||
assert len(suids) > 0
|
||||
cyto.select_neighbours_of_node(suids[0], neighbour_iter_depth=2)
|
||||
cyto.make_subnetwork(0, target_folder=tmp_path, export_image=True)
|
||||
subnetwork_name = CYTO_BASE_NETWORK_NAME + '_sub_1'
|
||||
networks = p4c.get_network_list()
|
||||
assert len(networks) > 1
|
||||
file = (tmp_path / subnetwork_name).with_suffix('.svg')
|
||||
assert file.exists()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.make_subnetwork(0, target_folder=tmp_path, export_image=True)
|
||||
|
||||
|
||||
@pytest.mark.cyto
|
||||
def test_build_subnetworks(avail, data_tk_graph_built, tmp_path):
|
||||
if avail:
|
||||
cyto.import_to_cytoscape(data_tk_graph_built)
|
||||
suids = cyto.get_subgraph_node_selection(num_subgraphs=1)
|
||||
assert len(suids) > 0
|
||||
cyto.build_subnetworks(suids, export_image=True, target_folder=tmp_path)
|
||||
subnetwork_name = CYTO_BASE_NETWORK_NAME + '_sub_1'
|
||||
networks = p4c.get_network_list()
|
||||
assert len(networks) > 1
|
||||
file = (tmp_path / subnetwork_name).with_suffix('.svg')
|
||||
assert file.exists()
|
||||
else:
|
||||
with pytest.raises(RequestException):
|
||||
cyto.build_subnetworks([123], export_image=True, target_folder=tmp_path)
|
||||
Reference in New Issue
Block a user