### Question:
R4ProgramMetadataToFhirDataProvider extends AbstractProgramMetadataToFhirDataProvider { @Override protected void initSearchFilter( @Nonnull FhirVersion fhirVersion, @Nonnull RuleInfo<ProgramMetadataRule> ruleInfo, @Nonnull SearchFilter searchFilter ) { searchFilter.add( PlanDefinition.SP_NAME, SearchParamType.STRING, "code" ); searchFilter.add( PlanDefinition.SP_TITLE, SearchParamType.STRING, "name" ); } R4ProgramMetadataToFhirDataProvider( @Nonnull ScriptExecutor scriptExecutor, @Nonnull ProgramMetadataService programMetadataService ); @Nonnull @Override Set<FhirVersion> getFhirVersions();  }### Answer:
@Test public void searchFilterName() throws URISyntaxException { final SearchFilterCollector searchFilterCollector = new SearchFilterCollector( Collections.singletonMap( "title", Collections.singletonList( "Child Programme" ) ) ); final SearchFilter searchFilter = new SearchFilter( searchFilterCollector, false ); provider.initSearchFilter( FhirVersion.R4, new RuleInfo<>( new ProgramMetadataRule(), Collections.emptyList() ), searchFilter ); final List<String> variables = new ArrayList<>(); UriBuilder uriBuilder = new DefaultUriBuilderFactory().builder(); uriBuilder = searchFilterCollector.add( uriBuilder, variables ); Assert.assertEquals( new URI( "?filter=%5Bname:$ilike:Child%20Programme%5D" ), uriBuilder.build( variables ) ); }