Skip to main content
Glama
test_cbioportal_mutations.py6.24 kB
"""Tests for cBioPortal mutation-specific search functionality.""" import pytest from biomcp.utils.mutation_filter import MutationFilter from biomcp.variants.cbioportal_mutations import ( CBioPortalMutationClient, MutationHit, StudyMutationSummary, format_mutation_search_result, ) class TestCBioPortalMutationSearch: """Test mutation-specific search functionality.""" @pytest.mark.asyncio @pytest.mark.integration async def test_search_specific_mutation_srsf2_f57y(self): """Test searching for SRSF2 F57Y mutation.""" client = CBioPortalMutationClient() result = await client.search_specific_mutation( gene="SRSF2", mutation="F57Y", max_studies=10 ) assert result is not None assert result.gene == "SRSF2" assert result.specific_mutation == "F57Y" assert result.studies_with_mutation >= 0 # If mutations found, check structure if result.studies_with_mutation > 0: assert len(result.top_studies) > 0 top_study = result.top_studies[0] assert isinstance(top_study, StudyMutationSummary) assert top_study.mutation_count > 0 @pytest.mark.asyncio @pytest.mark.integration async def test_search_mutation_pattern_srsf2_f57(self): """Test searching for SRSF2 F57* mutations.""" client = CBioPortalMutationClient() result = await client.search_specific_mutation( gene="SRSF2", pattern="F57*", max_studies=10 ) assert result is not None assert result.gene == "SRSF2" assert result.pattern == "F57*" # F57* should match F57Y, F57C, etc. if result.total_mutations > 0: assert result.mutation_types is not None # Check that we found some F57 mutations f57_mutations = [ mut for mut in result.mutation_types if mut.startswith("F57") ] assert len(f57_mutations) > 0 @pytest.mark.asyncio @pytest.mark.integration async def test_search_braf_v600e(self): """Test searching for BRAF V600E - a very common mutation.""" client = CBioPortalMutationClient() result = await client.search_specific_mutation( gene="BRAF", mutation="V600E", max_studies=20 ) assert result is not None assert result.gene == "BRAF" assert result.specific_mutation == "V600E" # V600E is very common, should have many studies assert result.studies_with_mutation > 10 assert len(result.top_studies) > 0 # Check melanoma is in top cancer types cancer_types = [s.cancer_type for s in result.top_studies] # At least some melanoma studies should have V600E assert any("melanoma" in ct.lower() for ct in cancer_types) def test_filter_mutations_specific(self): """Test filtering for specific mutations.""" mutations = [ MutationHit( study_id="study1", molecular_profile_id="study1_mutations", protein_change="F57Y", mutation_type="Missense", ), MutationHit( study_id="study1", molecular_profile_id="study1_mutations", protein_change="F57C", mutation_type="Missense", ), MutationHit( study_id="study2", molecular_profile_id="study2_mutations", protein_change="R88Q", mutation_type="Missense", ), ] # Filter for F57Y mutation_filter = MutationFilter(specific_mutation="F57Y") filtered = mutation_filter.filter_mutations(mutations) assert len(filtered) == 1 assert filtered[0].protein_change == "F57Y" def test_filter_mutations_pattern(self): """Test filtering with wildcard patterns.""" mutations = [ MutationHit( study_id="study1", molecular_profile_id="study1_mutations", protein_change="F57Y", mutation_type="Missense", ), MutationHit( study_id="study1", molecular_profile_id="study1_mutations", protein_change="F57C", mutation_type="Missense", ), MutationHit( study_id="study2", molecular_profile_id="study2_mutations", protein_change="R88Q", mutation_type="Missense", ), ] # Filter for F57* mutation_filter = MutationFilter(pattern="F57*") filtered = mutation_filter.filter_mutations(mutations) assert len(filtered) == 2 assert all(m.protein_change.startswith("F57") for m in filtered) def test_format_mutation_search_result(self): """Test formatting of mutation search results.""" from biomcp.variants.cbioportal_mutations import MutationSearchResult result = MutationSearchResult( gene="SRSF2", specific_mutation="F57Y", total_studies=100, studies_with_mutation=3, total_mutations=5, top_studies=[ StudyMutationSummary( study_id="msk_ch_2023", study_name="Cancer Therapy and Clonal Hematopoiesis", cancer_type="mixed", mutation_count=5, sample_count=100, ), StudyMutationSummary( study_id="mds_mskcc_2020", study_name="Myelodysplastic Syndrome Study", cancer_type="mds", mutation_count=2, sample_count=50, ), ], mutation_types={"F57Y": 5}, ) formatted = format_mutation_search_result(result) assert "SRSF2" in formatted assert "F57Y" in formatted assert "**Studies with Mutation**: 3" in formatted assert "msk_ch_2023" in formatted assert "| 5 |" in formatted # mutation count

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/genomoncology/biomcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server