Coverage for tests/test_common.py: 100%
65 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 22:05 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 22:05 +0000
1import datetime
3import pytest
5from bbconf.config_parser.bedbaseconfig import BedBaseConfig
6from bbconf.config_parser.models import ConfigDB, ConfigFile, ConfigPath, ConfigServer
7from bbconf.const import DEFAULT_LICENSE
8from bbconf.exceptions import BadAccessMethodError
9from bbconf.models.base_models import UsageModel
11from .conftest import SERVICE_UNAVAILABLE
12from .utils import BED_TEST_ID, BEDSET_TEST_ID, ContextManagerDBTesting
15def _bbconfig_without_access_methods() -> BedBaseConfig:
16 """Build a BedBaseConfig with no DB/qdrant/ML setup, just a config file."""
17 bbconfig = object.__new__(BedBaseConfig)
18 bbconfig._config = ConfigFile(
19 database=ConfigDB(host="localhost", user="postgres", password="docker"),
20 server=ConfigServer(),
21 path=ConfigPath(),
22 access_methods=None,
23 )
24 return bbconfig
27class TestAccessMethodsMissing:
28 """access_methods is optional in the config; these should not raise AttributeError."""
30 def test_construct_access_method_list_returns_empty(self):
31 bbconfig = _bbconfig_without_access_methods()
32 assert bbconfig.config.access_methods is None
33 assert bbconfig.construct_access_method_list("some/rel/path") == []
35 def test_get_prefixed_uri_raises_bad_access_method_error(self):
36 bbconfig = _bbconfig_without_access_methods()
37 with pytest.raises(BadAccessMethodError):
38 bbconfig.get_prefixed_uri("some/rel/path", "http")
41@pytest.mark.skipif(SERVICE_UNAVAILABLE, reason="Database is not available")
42def test_get_stats(bbagent_obj):
43 with ContextManagerDBTesting(config=bbagent_obj.config, add_data=True, bedset=True):
44 return_result = bbagent_obj.get_stats()
46 assert return_result
47 assert return_result.bedfiles_number == 1
48 assert return_result.bedsets_number == 1
49 assert return_result.genomes_number == 1
52@pytest.mark.skipif(SERVICE_UNAVAILABLE, reason="Database is not available")
53def test_get_detailed_stats(bbagent_obj):
54 with ContextManagerDBTesting(config=bbagent_obj.config, add_data=True, bedset=True):
55 return_result = bbagent_obj.get_detailed_stats()
57 assert return_result
58 assert return_result.number_of_regions.mean == 1
59 assert return_result.mean_region_width.mean == 3
62@pytest.mark.skipif(SERVICE_UNAVAILABLE, reason="Database is not available")
63def test_get_licenses(bbagent_obj):
64 return_result = bbagent_obj.list_of_licenses
66 assert return_result
67 assert DEFAULT_LICENSE in return_result
70@pytest.mark.skipif(SERVICE_UNAVAILABLE, reason="Database is not available")
71class TestAddUsage:
72 def test_add_usages(self, bbagent_obj):
73 usage = UsageModel(
74 bed_meta={BED_TEST_ID: 3},
75 bedset_meta={BEDSET_TEST_ID: 4},
76 bed_search={"ff": 2},
77 bedset_search={"ase": 1},
78 files={"bin.bed.gz": 432},
79 date_from=datetime.datetime.now(),
80 date_to=datetime.datetime.now(),
81 )
83 with ContextManagerDBTesting(
84 config=bbagent_obj.config, add_data=True, bedset=True
85 ):
86 bbagent_obj.add_usage(usage)
88 def test_get_usage(self, bbagent_obj):
89 now = datetime.datetime.now()
90 usage = UsageModel(
91 bed_meta={BED_TEST_ID: 3},
92 bedset_meta={},
93 bed_search={"ff": 2, "": 9},
94 bedset_search={"ase": 1},
95 files={"files/a/abc.bed.gz": 5},
96 date_from=now,
97 date_to=now,
98 )
100 with ContextManagerDBTesting(
101 config=bbagent_obj.config, add_data=True, bedset=True
102 ):
103 bbagent_obj.add_usage(usage)
105 bed = bbagent_obj.get_usage("bed_meta")
106 assert [(r.key, r.count) for r in bed.results] == [(BED_TEST_ID, 3)]
107 # empty search keys are dropped; search type is filtered
108 search = bbagent_obj.get_usage("bed_search")
109 assert [r.key for r in search.results] == ["ff"]
110 # file paths are shortened to the bed id
111 assert bbagent_obj.get_usage("files").results[0].key == "abc"
112 # date range excludes rows outside the window
113 later = now + datetime.timedelta(days=1)
114 assert bbagent_obj.get_usage("bed_meta", date_from=later).count == 0
115 assert bbagent_obj.get_usage("bed_meta", offset=1).count == 0
117 with pytest.raises(ValueError):
118 bbagent_obj.get_usage("nope")
119 with pytest.raises(ValueError):
120 bbagent_obj.get_usage("bed_meta", limit=0)