searchfilters: unit tests for all derived BaseSearchFilters classes
This commit is contained in:
parent
3e68e17910
commit
5a0206397c
|
@ -0,0 +1,420 @@
|
|||
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
|
||||
|
||||
package org.schabi.newpipe.extractor.services;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterContainer;
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterGroup;
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
public abstract class DefaultFiltersTest {
|
||||
|
||||
/**
|
||||
* Each derived class has to implement {@link #setupPriorTesting()}.
|
||||
* Its return value will initialize this variable.
|
||||
*/
|
||||
protected BaseSearchFilters searchFilterBase;
|
||||
|
||||
/**
|
||||
* Set the {@link #genericTester(List, boolean)} into result display mode instead of asserting.
|
||||
*
|
||||
* <ul>
|
||||
* <li> setting to 'true' is useful for developing unit test that use the
|
||||
* {@link #genericTester(List, boolean)} method
|
||||
* <li> this should be set in derived classes in {@link #setupPriorTesting()}
|
||||
* </ul>
|
||||
*/
|
||||
protected boolean doNotCallAssertButShowResult = false;
|
||||
|
||||
/**
|
||||
* Setup the to be tested class. It has to be derived from {@link BaseSearchFilters}.
|
||||
* <p>
|
||||
* Additional set up should also occur here.
|
||||
*
|
||||
* @return the to be tested derived {@link BaseSearchFilters} object.
|
||||
*/
|
||||
protected abstract BaseSearchFilters setupPriorTesting();
|
||||
|
||||
/**
|
||||
* Setup for Test {@link #emptyContentFilterTest()}
|
||||
*
|
||||
* @param base the object to set up.
|
||||
* @return the expected string
|
||||
*/
|
||||
protected abstract String emptyContentFilterTestSetup(BaseSearchFilters base);
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
searchFilterBase = setupPriorTesting();
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
searchFilterBase = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test {@link BaseSearchFilters#evaluateSelectedFilters(String)} with no content filters set.
|
||||
*/
|
||||
@Test
|
||||
public void emptyContentFilterTest() {
|
||||
final String expectation = emptyContentFilterTestSetup(searchFilterBase);
|
||||
final String result = searchFilterBase.evaluateSelectedFilters("test");
|
||||
assertEquals(expectation, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noSortFilterItemShouldBeNullTest() {
|
||||
final List<FilterItem> sortFilters = getAllSortFiltersList();
|
||||
for (final FilterItem item : sortFilters) {
|
||||
assertNotNull(item);
|
||||
assertNotNull(item.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noContentFilterItemShouldBeNullTest() {
|
||||
final List<FilterItem> contentFilters = getAllContentFiltersList();
|
||||
checkThatNoFilterItemAndItsNameIsNull(contentFilters);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validContentFilterTest() {
|
||||
final List<InputAndExpectedResultData> cfInputAndExpectedData = new ArrayList<>();
|
||||
// get input and expected result data
|
||||
validContentFilterSetup(cfInputAndExpectedData);
|
||||
|
||||
genericTester(cfInputAndExpectedData, doNotCallAssertButShowResult);
|
||||
}
|
||||
|
||||
protected abstract void validContentFilterSetup(
|
||||
List<InputAndExpectedResultData> validContentFiltersAndExpectedResults);
|
||||
|
||||
/**
|
||||
* {@link #validContentFilterAllSortFiltersTestSetup(List)}}
|
||||
*/
|
||||
@Test
|
||||
public void validContentFilterAndSortFiltersTest() {
|
||||
final List<InputAndExpectedResultData> validSortFiltersAndExpectedResults =
|
||||
new ArrayList<>();
|
||||
validContentFilterAllSortFiltersTestSetup(validSortFiltersAndExpectedResults);
|
||||
|
||||
genericTester(validSortFiltersAndExpectedResults, doNotCallAssertButShowResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* For the list with {@link InputAndExpectedResultData} each entry should contain the same
|
||||
* content filter but each entry a different sort filter.
|
||||
*
|
||||
* @param validContentFilterAllSortFiltersExpectedResults the list with data described above
|
||||
*/
|
||||
protected abstract void validContentFilterAllSortFiltersTestSetup(
|
||||
List<InputAndExpectedResultData> validContentFilterAllSortFiltersExpectedResults);
|
||||
|
||||
@Test
|
||||
public void validSortFiltersTest() {
|
||||
final List<InputAndExpectedResultData> validAllSortFilters = new ArrayList<>();
|
||||
validAllSortFilterSetup(validAllSortFilters);
|
||||
|
||||
genericTester(validAllSortFilters, doNotCallAssertButShowResult);
|
||||
}
|
||||
|
||||
protected abstract void validAllSortFilterSetup(
|
||||
List<InputAndExpectedResultData> validAllSortFilters);
|
||||
|
||||
/**
|
||||
* {@link #validContentFilterWithAllSortFiltersTestSetup(List)}}
|
||||
*/
|
||||
@Test
|
||||
public void validContentFilterWithAllSortFiltersTest() {
|
||||
final List<InputAndExpectedResultData> validContentFiltersWithExpectedResult =
|
||||
new ArrayList<>();
|
||||
validContentFilterWithAllSortFiltersTestSetup(
|
||||
validContentFiltersWithExpectedResult);
|
||||
|
||||
genericTester(validContentFiltersWithExpectedResult, doNotCallAssertButShowResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* One {@link InputAndExpectedResultData} should consist of one content filter and all
|
||||
* sort filters possible. Next entry should have different content filter, etc.
|
||||
*
|
||||
* @param validContentFiltersWithExpectedResult the list with data described above
|
||||
*/
|
||||
protected abstract void validContentFilterWithAllSortFiltersTestSetup(
|
||||
List<InputAndExpectedResultData> validContentFiltersWithExpectedResult);
|
||||
|
||||
/**
|
||||
* Test if content filter that claim to have corresponding
|
||||
* sort filters are true to their claim.
|
||||
* <p>
|
||||
* We need to setup {@link #contentFiltersThatHaveCorrespondingSortFiltersTestSetup(List)}
|
||||
*/
|
||||
@Test
|
||||
public void contentFiltersWithSortFilterTest() {
|
||||
final FilterContainer filterContainer = searchFilterBase.getContentFilters();
|
||||
|
||||
final List<Integer> contentFiltersThatHaveCorrespondingSortFilters = new ArrayList<>();
|
||||
contentFiltersThatHaveCorrespondingSortFiltersTestSetup(
|
||||
contentFiltersThatHaveCorrespondingSortFilters);
|
||||
|
||||
for (final FilterGroup cfGroup : filterContainer.getFilterGroups()) {
|
||||
if (cfGroup.getFilterItems().length > 0) {
|
||||
// if below id is having a sortFilterVariant it should be the same
|
||||
// variant than the one placed as superset to this group
|
||||
final int id = cfGroup.getFilterItems()[0].getIdentifier();
|
||||
if (contentFiltersThatHaveCorrespondingSortFilters.contains(id)) {
|
||||
final FilterContainer sortFilterVariant =
|
||||
searchFilterBase.getContentFilterSortFilterVariant(id);
|
||||
assertEquals(sortFilterVariant, cfGroup.getAllSortFilters());
|
||||
}
|
||||
}
|
||||
|
||||
for (final FilterItem item : cfGroup.getFilterItems()) {
|
||||
final FilterContainer sortFilterVariant =
|
||||
searchFilterBase.getContentFilterSortFilterVariant(item.getIdentifier());
|
||||
if (contentFiltersThatHaveCorrespondingSortFilters.contains(item.getIdentifier())) {
|
||||
assertNotNull(sortFilterVariant);
|
||||
assertNotNull(cfGroup.getAllSortFilters());
|
||||
checkThatNoFilterItemAndItsNameIsNull(getAllFiltersList(sortFilterVariant));
|
||||
checkThatNoFilterItemAndItsNameIsNull(
|
||||
getAllFiltersList(cfGroup.getAllSortFilters()));
|
||||
} else {
|
||||
assertNull(sortFilterVariant);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void contentFiltersThatHaveCorrespondingSortFiltersTestSetup(
|
||||
List<Integer> contentFiltersThatHaveCorrespondingSortFilters);
|
||||
|
||||
// helpers
|
||||
private void checkThatNoFilterItemAndItsNameIsNull(final List<FilterItem> filterItems) {
|
||||
for (final FilterItem item : filterItems) {
|
||||
assertNotNull(item);
|
||||
assertNotNull(item.getName());
|
||||
}
|
||||
}
|
||||
|
||||
protected void generateAllSortFiltersList() {
|
||||
searchFilterBase.setSelectedSortFilter(getAllSortFiltersList());
|
||||
}
|
||||
|
||||
protected List<FilterItem> getAllSortFiltersList() {
|
||||
final FilterContainer contentFilterContainer = searchFilterBase.getContentFilters();
|
||||
final List<FilterItem> filterItems = new ArrayList<>();
|
||||
// for all content filter groups count available corresponding sort filters
|
||||
for (final FilterGroup group : contentFilterContainer.getFilterGroups()) {
|
||||
final FilterContainer sortFilterContainer = group.getAllSortFilters();
|
||||
if (null != sortFilterContainer) {
|
||||
for (final FilterGroup filterGroup : sortFilterContainer.getFilterGroups()) {
|
||||
filterItems.addAll(Arrays.asList(filterGroup.getFilterItems()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return filterItems;
|
||||
}
|
||||
|
||||
protected List<Integer> getAllSortFiltersIdsList() {
|
||||
final FilterContainer contentFilterContainer = searchFilterBase.getContentFilters();
|
||||
final List<Integer> filterItems = new ArrayList<>();
|
||||
for (final FilterGroup group : contentFilterContainer.getFilterGroups()) {
|
||||
final FilterContainer sortFilterContainer = group.getAllSortFilters();
|
||||
if (null != sortFilterContainer) {
|
||||
for (final FilterGroup filterGroup : sortFilterContainer.getFilterGroups()) {
|
||||
for (final FilterItem item : filterGroup.getFilterItems()) {
|
||||
filterItems.add(item.getIdentifier());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return filterItems;
|
||||
}
|
||||
|
||||
protected List<FilterItem> getAllContentFiltersList() {
|
||||
return getAllFiltersList(searchFilterBase.getContentFilters());
|
||||
}
|
||||
|
||||
protected List<FilterItem> getAllFiltersList(final FilterContainer filterContainer) {
|
||||
final List<FilterItem> filterItemList = new ArrayList<>();
|
||||
for (final FilterGroup cfGroup : filterContainer.getFilterGroups()) {
|
||||
filterItemList.addAll(Arrays.asList(cfGroup.getFilterItems()));
|
||||
}
|
||||
return filterItemList;
|
||||
}
|
||||
|
||||
protected List<FilterItem> getAllFiltersList(final List<FilterContainer> filterContainers) {
|
||||
final List<FilterItem> filterItemList = new ArrayList<>();
|
||||
for (final FilterContainer filterContainer : filterContainers) {
|
||||
filterItemList.addAll(getAllFiltersList(filterContainer));
|
||||
}
|
||||
return filterItemList;
|
||||
}
|
||||
|
||||
protected int getNoOfFilterItems(final List<FilterContainer> filterContainers) {
|
||||
return filterContainers.stream()
|
||||
.mapToInt(DefaultSearchExtractorTest::getNoOfFilterItems).sum();
|
||||
}
|
||||
|
||||
/**
|
||||
* A generic test method to make testing the various combinations easier.
|
||||
*
|
||||
* @param inputAndExpectedResultDataList the input test and expected result data
|
||||
* @param showMode if true it will display the generated result. If false
|
||||
* the asserts will be called (normal test behaviour)
|
||||
*/
|
||||
protected void genericTester(
|
||||
final List<InputAndExpectedResultData> inputAndExpectedResultDataList,
|
||||
final boolean showMode) {
|
||||
|
||||
for (final InputAndExpectedResultData testData : inputAndExpectedResultDataList) {
|
||||
|
||||
// (1) create input filter data
|
||||
final List<FilterItem> contentFilterItems = new ArrayList<>();
|
||||
final List<FilterItem> sortFilterItems = new ArrayList<>();
|
||||
if (testData.testContentFilters != null) {
|
||||
for (final Integer id : testData.testContentFilters) {
|
||||
contentFilterItems.add(searchFilterBase.getFilterItem(id));
|
||||
}
|
||||
}
|
||||
if (testData.testSortFilters != null) {
|
||||
for (final Integer id : testData.testSortFilters) {
|
||||
sortFilterItems.add(searchFilterBase.getFilterItem(id));
|
||||
}
|
||||
}
|
||||
|
||||
// (2) set input filter data
|
||||
searchFilterBase.setSelectedContentFilter(contentFilterItems);
|
||||
searchFilterBase.setSelectedSortFilter(sortFilterItems);
|
||||
|
||||
// (3) evaluate data
|
||||
String result = genericTesterEvaluator(testData);
|
||||
if (testData.resultFixer != null) {
|
||||
result = testData.resultFixer.findAndReplace(result);
|
||||
}
|
||||
// (4.1) run additional tests for content filters if available
|
||||
if (testData.testContentFilters != null) {
|
||||
for (final Integer id : testData.testContentFilters) {
|
||||
if (testData.additionalContentResultChecker != null) {
|
||||
testData.additionalContentResultChecker
|
||||
.checkFilterItem(searchFilterBase.getFilterItem(id), showMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
// (4.2) run additional tests for sort filters if available
|
||||
if (testData.testSortFilters != null) {
|
||||
for (final Integer id : testData.testSortFilters) {
|
||||
if (testData.additionalSortResultChecker != null) {
|
||||
testData.additionalSortResultChecker
|
||||
.checkFilterItem(searchFilterBase.getFilterItem(id), showMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (showMode) {
|
||||
System.out.println("result=\"" + result + "\"");
|
||||
} else {
|
||||
assertEquals(testData.expectedResult, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The actual evaluation of the filters.
|
||||
* <p>
|
||||
* Some services use different methods so override in the derived class.
|
||||
*
|
||||
* @param testData the input testdata
|
||||
* @return the result of the test
|
||||
*/
|
||||
protected String genericTesterEvaluator(final InputAndExpectedResultData testData) {
|
||||
return searchFilterBase.evaluateSelectedFilters(testData.searchString);
|
||||
}
|
||||
|
||||
protected abstract static class AdditionalResultChecker {
|
||||
public abstract void checkFilterItem(FilterItem filterItem, boolean showMode);
|
||||
}
|
||||
|
||||
protected static class InputAndExpectedResultData {
|
||||
|
||||
public final AdditionalResultChecker additionalContentResultChecker;
|
||||
public final AdditionalResultChecker additionalSortResultChecker;
|
||||
public final String searchString;
|
||||
public final List<Integer> testContentFilters;
|
||||
public final List<Integer> testSortFilters;
|
||||
/**
|
||||
* Note: if null this expectedResult will not be asserted. -> Test will pass.
|
||||
*/
|
||||
public final String expectedResult;
|
||||
public final ResultFixer resultFixer;
|
||||
|
||||
public InputAndExpectedResultData(
|
||||
final String searchString,
|
||||
final List<Integer> testContentFilters,
|
||||
final List<Integer> testSortFilters,
|
||||
final String expectedResult,
|
||||
final AdditionalResultChecker additionalContentResultChecker,
|
||||
final AdditionalResultChecker additionalSortResultChecker) {
|
||||
this(searchString,
|
||||
testContentFilters,
|
||||
testSortFilters,
|
||||
expectedResult,
|
||||
additionalContentResultChecker,
|
||||
additionalSortResultChecker,
|
||||
new ResultFixer());
|
||||
}
|
||||
|
||||
public InputAndExpectedResultData(
|
||||
final String searchString,
|
||||
final List<Integer> testContentFilters,
|
||||
final List<Integer> testSortFilters,
|
||||
final String expectedResult,
|
||||
final AdditionalResultChecker additionalContentResultChecker,
|
||||
final AdditionalResultChecker additionalSortResultChecker,
|
||||
final ResultFixer resultFixer) {
|
||||
this.searchString = searchString;
|
||||
this.testContentFilters = testContentFilters;
|
||||
this.testSortFilters = testSortFilters;
|
||||
this.expectedResult = expectedResult;
|
||||
this.additionalContentResultChecker = additionalContentResultChecker;
|
||||
this.additionalSortResultChecker = additionalSortResultChecker;
|
||||
this.resultFixer = resultFixer;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ResultFixer {
|
||||
public Map<String, String> searchAndReplaceMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Make results match expected value.
|
||||
* <p>
|
||||
* Eg. Peertube calculates in {@link org.schabi.newpipe.extractor.services.peertube.search.filter.PeertubeFilters.PeertubePublishedDateFilterItem}
|
||||
* the date to filter when something was published. So we have each moment we call a test
|
||||
* problems with the expected results. This method tries to fix that by
|
||||
* reading {@link #searchAndReplaceMap} search and replace data.
|
||||
*
|
||||
* @param result the string which should be altered
|
||||
* @return the altered string
|
||||
*/
|
||||
@SuppressWarnings("checkstyle:FinalParameters")
|
||||
String findAndReplace(String result) {
|
||||
for (final Map.Entry<String, String> entry : searchAndReplaceMap.entrySet()) {
|
||||
result = result.replaceAll(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
|
||||
|
||||
package org.schabi.newpipe.extractor.services.bandcamp.search.filter;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
|
||||
import org.schabi.newpipe.extractor.services.DefaultFiltersTest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
|
||||
class BandcampFiltersTest extends DefaultFiltersTest {
|
||||
|
||||
@Override
|
||||
protected BaseSearchFilters setupPriorTesting() {
|
||||
doNotCallAssertButShowResult = false;
|
||||
return new BandcampFilters();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String genericTesterEvaluator(final InputAndExpectedResultData testData) {
|
||||
return searchFilterBase.evaluateSelectedContentFilters();
|
||||
}
|
||||
|
||||
/**
|
||||
* There is no implementation for {@link BaseSearchFilters#evaluateSelectedFilters(String)}.
|
||||
* <p>
|
||||
* -> therefore expected result is null.
|
||||
*
|
||||
* @param base the object to set up.
|
||||
* @return null
|
||||
*/
|
||||
@Override
|
||||
protected String emptyContentFilterTestSetup(
|
||||
final BaseSearchFilters base) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersAndExpectedResults) {
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(BandcampFilters.ID_CF_MAIN_ALL),
|
||||
null,
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(BandcampFilters.ID_CF_MAIN_ARTISTS),
|
||||
null,
|
||||
"&item_type=b",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(BandcampFilters.ID_CF_MAIN_ALBUMS),
|
||||
null,
|
||||
"&item_type=a",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(BandcampFilters.ID_CF_MAIN_TRACKS),
|
||||
null,
|
||||
"&item_type=t",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData>
|
||||
validContentFilterAllSortFiltersExpectedResults) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validAllSortFilterSetup(
|
||||
final List<InputAndExpectedResultData> validAllSortFilters) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterWithAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersWithExpectedResult) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void contentFiltersThatHaveCorrespondingSortFiltersTestSetup(
|
||||
final List<Integer> contentFiltersThatHaveCorrespondingSortFilters) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
|
||||
|
||||
package org.schabi.newpipe.extractor.services.media_ccc.search.filter;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
|
||||
import org.schabi.newpipe.extractor.services.DefaultFiltersTest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
|
||||
class MediaCCCFiltersTest extends DefaultFiltersTest {
|
||||
|
||||
@Override
|
||||
protected BaseSearchFilters setupPriorTesting() {
|
||||
doNotCallAssertButShowResult = false;
|
||||
return new MediaCCCFilters();
|
||||
}
|
||||
|
||||
/**
|
||||
* There is no implementation for {@link BaseSearchFilters#evaluateSelectedFilters(String)}.
|
||||
* <p>
|
||||
* -> therefore expected result is null.
|
||||
*
|
||||
* @param base the object to set up.
|
||||
* @return null
|
||||
*/
|
||||
@Override
|
||||
protected String emptyContentFilterTestSetup(
|
||||
final BaseSearchFilters base) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersAndExpectedResults) {
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(MediaCCCFilters.ID_CF_MAIN_ALL),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(MediaCCCFilters.ID_CF_MAIN_CONFERENCES),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(MediaCCCFilters.ID_CF_MAIN_EVENTS),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData>
|
||||
validContentFilterAllSortFiltersExpectedResults) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validAllSortFilterSetup(
|
||||
final List<InputAndExpectedResultData> validAllSortFilters) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterWithAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersWithExpectedResult) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void contentFiltersThatHaveCorrespondingSortFiltersTestSetup(
|
||||
final List<Integer> contentFiltersThatHaveCorrespondingSortFilters) {
|
||||
// we have no sort filters for this service
|
||||
}
|
||||
}
|
|
@ -0,0 +1,810 @@
|
|||
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
|
||||
|
||||
package org.schabi.newpipe.extractor.services.peertube.search.filter;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
import org.schabi.newpipe.extractor.services.DefaultFiltersTest;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class PeertubeFiltersTest extends DefaultFiltersTest {
|
||||
|
||||
ResultFixer fixResults;
|
||||
|
||||
PeertubeFiltersTest() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BaseSearchFilters setupPriorTesting() {
|
||||
fixResults = new ResultFixer();
|
||||
fixResults.searchAndReplaceMap.put("startDate=([0-9:T\\-\\.])*", "startDate=X");
|
||||
return new PeertubeFilters();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String emptyContentFilterTestSetup(final BaseSearchFilters base) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterWithAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersWithExpectedResult) {
|
||||
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_ALL),
|
||||
getAllSortFiltersIdsList(),
|
||||
"&sort=match&sort=name&sort=duration&sort=publishedAt&sort=createdAt&sort=views&sort=likes&isLive=true&isLive=false&nsfw=true&nsfw=false&startDate=X&startDate=X&startDate=X&startDate=X&durationMax=240&durationMin=240&durationMax=600&durationMin=600",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"&sort=match&sort=name&sort=duration&sort=publishedAt&sort=createdAt&sort=views&sort=likes&isLive=true&isLive=false&nsfw=true&nsfw=false&startDate=X&startDate=X&startDate=X&startDate=X&durationMax=240&durationMin=240&durationMax=600&durationMin=600&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_CHANNELS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"&sort=match&sort=name&sort=duration&sort=publishedAt&sort=createdAt&sort=views&sort=likes&isLive=true&isLive=false&nsfw=true&nsfw=false&startDate=X&startDate=X&startDate=X&startDate=X&durationMax=240&durationMin=240&durationMax=600&durationMin=600&resultType=channels",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_PLAYLISTS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"&sort=match&sort=name&sort=duration&sort=publishedAt&sort=createdAt&sort=views&sort=likes&isLive=true&isLive=false&nsfw=true&nsfw=false&startDate=X&startDate=X&startDate=X&startDate=X&durationMax=240&durationMin=240&durationMax=600&durationMin=600&resultType=playlists",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersAndExpectedResults) {
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_ALL),
|
||||
null,
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
null,
|
||||
"&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_CHANNELS),
|
||||
null,
|
||||
"&resultType=channels",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_PLAYLISTS),
|
||||
null,
|
||||
"&resultType=playlists",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validAllSortFilterSetup(
|
||||
final List<InputAndExpectedResultData> validAllSortFilters) {
|
||||
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_RELEVANCE),
|
||||
"&sort=-match",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_NAME),
|
||||
"&sort=-name",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_DURATION),
|
||||
"&sort=-duration",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_PUBLISH_DATE),
|
||||
"&sort=-publishedAt",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_CREATION_DATE),
|
||||
"&sort=-createdAt",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_VIEWS),
|
||||
"&sort=-views",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_LIKES),
|
||||
"&sort=-likes",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_KIND_ALL),
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_KIND_LIVE),
|
||||
"&isLive=true",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_KIND_VOD_VIDEOS),
|
||||
"&isLive=false",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SENSITIVE_ALL),
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SENSITIVE_YES),
|
||||
"&nsfw=true",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_SENSITIVE_NO),
|
||||
"&nsfw=false",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_ALL),
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_TODAY),
|
||||
"&startDate=X",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_7_DAYS),
|
||||
"&startDate=X",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_30_DAYS),
|
||||
"&startDate=X",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_YEAR),
|
||||
"&startDate=X",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_ALL),
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_SHORT),
|
||||
"&durationMax=240",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_MEDIUM),
|
||||
"&durationMin=240&durationMax=600",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_LONG),
|
||||
"&durationMin=600",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData>
|
||||
validContentFilterAllSortFiltersExpectedResults) {
|
||||
// We do not include ID_SF_SORT_ORDER_ASCENDING as we test this special in another testcase
|
||||
// --> validSortFiltersWithAscendingTest()
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_RELEVANCE),
|
||||
"&sort=-match&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_NAME),
|
||||
"&sort=-name&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_DURATION),
|
||||
"&sort=-duration&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_PUBLISH_DATE),
|
||||
"&sort=-publishedAt&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_CREATION_DATE),
|
||||
"&sort=-createdAt&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_VIEWS),
|
||||
"&sort=-views&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SORT_BY_LIKES),
|
||||
"&sort=-likes&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_KIND_ALL),
|
||||
"&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_KIND_LIVE),
|
||||
"&isLive=true&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_KIND_VOD_VIDEOS),
|
||||
"&isLive=false&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SENSITIVE_ALL),
|
||||
"&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SENSITIVE_YES),
|
||||
"&nsfw=true&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_SENSITIVE_NO),
|
||||
"&nsfw=false&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_ALL),
|
||||
"&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_TODAY),
|
||||
"&startDate=X&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_7_DAYS),
|
||||
"&startDate=X&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_30_DAYS),
|
||||
"&startDate=X&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_YEAR),
|
||||
"&startDate=X&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_ALL),
|
||||
"&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_SHORT),
|
||||
"&durationMax=240&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_MEDIUM),
|
||||
"&durationMin=240&durationMax=600&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(PeertubeFilters.ID_SF_DURATION_LONG),
|
||||
"&durationMin=600&resultType=videos",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void contentFiltersThatHaveCorrespondingSortFiltersTestSetup(
|
||||
final List<Integer> contentFiltersThatHaveCorrespondingSortFilters) {
|
||||
|
||||
contentFiltersThatHaveCorrespondingSortFilters.add(PeertubeFilters.ID_CF_MAIN_ALL);
|
||||
contentFiltersThatHaveCorrespondingSortFilters.add(PeertubeFilters.ID_CF_MAIN_VIDEOS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Here we test if ID_SF_SORT_ORDER_ASCENDING changes ID_SF_SORT_* accordingly.
|
||||
* <p>
|
||||
* <ul>
|
||||
* <li> In ascending mode we expect eg. ID_SF_SORT_BY_RELEVANCE to result
|
||||
* in "&sort=match" and not in "&sort=-match".
|
||||
* <li> Additionally we test some other ID_SF_* to check that nothing changes there.
|
||||
* </ul>
|
||||
*/
|
||||
@Test
|
||||
public void validSortFiltersWithAscendingTest() {
|
||||
final List<InputAndExpectedResultData> validSortFiltersWithAscending = new ArrayList<>();
|
||||
|
||||
// set input and expected result data
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SORT_BY_RELEVANCE,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&sort=match",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SORT_BY_NAME,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&sort=name",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SORT_BY_DURATION,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&sort=duration",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SORT_BY_PUBLISH_DATE,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&sort=publishedAt",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SORT_BY_CREATION_DATE,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&sort=createdAt",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SORT_BY_VIEWS,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&sort=views",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SORT_BY_LIKES,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&sort=likes",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_KIND_LIVE,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&isLive=true",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_SENSITIVE_NO,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&nsfw=false",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_PUBLISHED_LAST_YEAR,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&startDate=X",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
validSortFiltersWithAscending.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
Arrays.asList(
|
||||
PeertubeFilters.ID_SF_DURATION_LONG,
|
||||
PeertubeFilters.ID_SF_SORT_ORDER_ASCENDING
|
||||
),
|
||||
"&durationMin=600",
|
||||
null,
|
||||
null,
|
||||
fixResults
|
||||
));
|
||||
|
||||
// run tests
|
||||
genericTester(validSortFiltersWithAscending, doNotCallAssertButShowResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void publishedDateCalculationTest() {
|
||||
final List<InputAndExpectedResultData> publishedDateCalculation = new ArrayList<>();
|
||||
publishedDateCalculation.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_ALL),
|
||||
"",
|
||||
null,
|
||||
new SortFilterCheckDateCalculation(),
|
||||
fixResults
|
||||
));
|
||||
publishedDateCalculation.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_TODAY),
|
||||
"&startDate=X",
|
||||
null,
|
||||
new SortFilterCheckDateCalculation(),
|
||||
fixResults
|
||||
));
|
||||
publishedDateCalculation.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_7_DAYS),
|
||||
"&startDate=X",
|
||||
null,
|
||||
new SortFilterCheckDateCalculation(),
|
||||
fixResults
|
||||
));
|
||||
publishedDateCalculation.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_30_DAYS),
|
||||
"&startDate=X",
|
||||
null,
|
||||
new SortFilterCheckDateCalculation(),
|
||||
fixResults
|
||||
));
|
||||
publishedDateCalculation.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(PeertubeFilters.ID_SF_PUBLISHED_LAST_YEAR),
|
||||
"&startDate=X",
|
||||
null,
|
||||
new SortFilterCheckDateCalculation(),
|
||||
fixResults
|
||||
));
|
||||
|
||||
genericTester(publishedDateCalculation, doNotCallAssertButShowResult);
|
||||
}
|
||||
|
||||
private static class SortFilterCheckDateCalculation extends AdditionalResultChecker {
|
||||
|
||||
private static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS";
|
||||
|
||||
@Override
|
||||
public void checkFilterItem(final FilterItem filterItem,
|
||||
final boolean showMode) {
|
||||
|
||||
if (filterItem instanceof PeertubeFilters.PeertubePublishedDateFilterItem) {
|
||||
final PeertubeFilters.PeertubePublishedDateFilterItem dateFilterItem =
|
||||
(PeertubeFilters.PeertubePublishedDateFilterItem) filterItem;
|
||||
|
||||
final String expectedDate = calculateDate(getDays(dateFilterItem));
|
||||
|
||||
if (!showMode) {
|
||||
final String result = dateFilterItem.getQueryData();
|
||||
if ("".equals(result)) { // the all case -> PeertubeFilters.ID_SF_PUBLISHED_ALL
|
||||
assertTrue(result.contains(expectedDate));
|
||||
} else {
|
||||
try { // convert to millies since epoch to approx compare
|
||||
final long expectedDateInMillis = parseDateGetEpochMillis(expectedDate);
|
||||
final long resultDateInMillis = parseDateGetEpochMillis(result);
|
||||
assertTrue(Math.abs(expectedDateInMillis - resultDateInMillis) < 2000);
|
||||
} catch (final ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
System.out.println("approx=\"" + expectedDate + "\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String calculateDate(final int days) {
|
||||
if (days != PeertubeFilters.PeertubePublishedDateFilterItem.NO_DAYS_SET) {
|
||||
final LocalDateTime localDateTime = LocalDateTime.now().minusDays(days);
|
||||
|
||||
return "startDate=" + localDateTime.format(
|
||||
DateTimeFormatter.ofPattern(DATE_PATTERN));
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
private long parseDateGetEpochMillis(final String inputDate) throws ParseException {
|
||||
// 10 = length of startDate=
|
||||
final String date = inputDate.substring(10);
|
||||
|
||||
final SimpleDateFormat fmt = new SimpleDateFormat(DATE_PATTERN);
|
||||
return fmt.parse(date).getTime();
|
||||
}
|
||||
|
||||
private int getDays(final PeertubeFilters.PeertubePublishedDateFilterItem item) {
|
||||
try {
|
||||
final Field days = item.getClass().getDeclaredField("days");
|
||||
days.setAccessible(true);
|
||||
return days.getInt(item);
|
||||
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
|
||||
throw new RuntimeException("could not find field \"days\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,374 @@
|
|||
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
|
||||
|
||||
package org.schabi.newpipe.extractor.services.soundcloud.search.filter;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
|
||||
import org.schabi.newpipe.extractor.services.DefaultFiltersTest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
|
||||
class SoundcloudFiltersTest extends DefaultFiltersTest {
|
||||
|
||||
@Override
|
||||
protected BaseSearchFilters setupPriorTesting() {
|
||||
doNotCallAssertButShowResult = false;
|
||||
return new SoundcloudFilters();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String genericTesterEvaluator(final InputAndExpectedResultData testData) {
|
||||
return "(CF)"
|
||||
+ searchFilterBase.evaluateSelectedContentFilters()
|
||||
+ "|(SF)"
|
||||
+ searchFilterBase.evaluateSelectedSortFilters();
|
||||
}
|
||||
|
||||
/**
|
||||
* There is no implementation for {@link BaseSearchFilters#evaluateSelectedFilters(String)}.
|
||||
* <p>
|
||||
* -> therefore expected result is null.
|
||||
*
|
||||
* @param base the object to set up.
|
||||
* @return null
|
||||
*/
|
||||
@Override
|
||||
protected String emptyContentFilterTestSetup(
|
||||
final BaseSearchFilters base) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersAndExpectedResults) {
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_ALL),
|
||||
null,
|
||||
"(CF)|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
null,
|
||||
"(CF)/tracks|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_USERS),
|
||||
null,
|
||||
"(CF)/users|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_PLAYLISTS),
|
||||
null,
|
||||
"(CF)/playlists|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData>
|
||||
validContentFilterAllSortFiltersExpectedResults) {
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_ALL),
|
||||
"(CF)/tracks|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_HOUR),
|
||||
"(CF)/tracks|(SF)&filter.created_at=last_hour",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_DAY),
|
||||
"(CF)/tracks|(SF)&filter.created_at=last_day",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_WEEK),
|
||||
"(CF)/tracks|(SF)&filter.created_at=last_week",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_MONTH),
|
||||
"(CF)/tracks|(SF)&filter.created_at=last_month",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_YEAR),
|
||||
"(CF)/tracks|(SF)&filter.created_at=last_year",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_ALL),
|
||||
"(CF)/tracks|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_SHORT),
|
||||
"(CF)/tracks|(SF)&filter.duration=short",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_MEDIUM),
|
||||
"(CF)/tracks|(SF)&filter.duration=medium",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_LONG),
|
||||
"(CF)/tracks|(SF)&filter.duration=long",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_EPIC),
|
||||
"(CF)/tracks|(SF)&filter.duration=epic",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_LICENSE_ALL),
|
||||
"(CF)/tracks|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
singletonList(SoundcloudFilters.ID_SF_LICENSE_COMMERCE),
|
||||
"(CF)/tracks|(SF)&filter.license=to_modify_commercially",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validAllSortFilterSetup(
|
||||
final List<InputAndExpectedResultData> validAllSortFilters) {
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_ALL),
|
||||
"(CF)|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_HOUR),
|
||||
"(CF)|(SF)&filter.created_at=last_hour",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_DAY),
|
||||
"(CF)|(SF)&filter.created_at=last_day",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_WEEK),
|
||||
"(CF)|(SF)&filter.created_at=last_week",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_MONTH),
|
||||
"(CF)|(SF)&filter.created_at=last_month",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DATE_LAST_YEAR),
|
||||
"(CF)|(SF)&filter.created_at=last_year",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_ALL),
|
||||
"(CF)|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_SHORT),
|
||||
"(CF)|(SF)&filter.duration=short",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_MEDIUM),
|
||||
"(CF)|(SF)&filter.duration=medium",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_LONG),
|
||||
"(CF)|(SF)&filter.duration=long",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_DURATION_EPIC),
|
||||
"(CF)|(SF)&filter.duration=epic",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_LICENSE_ALL),
|
||||
"(CF)|(SF)",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validAllSortFilters.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_SF_LICENSE_COMMERCE),
|
||||
"(CF)|(SF)&filter.license=to_modify_commercially",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterWithAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersWithExpectedResult) {
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_ALL),
|
||||
getAllSortFiltersIdsList(),
|
||||
"(CF)|(SF)&filter.created_at=last_hour&filter.created_at=last_day&filter.created_at=last_week&filter.created_at=last_month&filter.created_at=last_year&filter.duration=short&filter.duration=medium&filter.duration=long&filter.duration=epic&filter.license=to_modify_commercially",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_TRACKS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"(CF)/tracks|(SF)&filter.created_at=last_hour&filter.created_at=last_day&filter.created_at=last_week&filter.created_at=last_month&filter.created_at=last_year&filter.duration=short&filter.duration=medium&filter.duration=long&filter.duration=epic&filter.license=to_modify_commercially",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_USERS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"(CF)/users|(SF)&filter.created_at=last_hour&filter.created_at=last_day&filter.created_at=last_week&filter.created_at=last_month&filter.created_at=last_year&filter.duration=short&filter.duration=medium&filter.duration=long&filter.duration=epic&filter.license=to_modify_commercially",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
validContentFiltersWithExpectedResult.add(new InputAndExpectedResultData(
|
||||
null,
|
||||
singletonList(SoundcloudFilters.ID_CF_MAIN_PLAYLISTS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"(CF)/playlists|(SF)&filter.created_at=last_hour&filter.created_at=last_day&filter.created_at=last_week&filter.created_at=last_month&filter.created_at=last_year&filter.duration=short&filter.duration=medium&filter.duration=long&filter.duration=epic&filter.license=to_modify_commercially",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void contentFiltersThatHaveCorrespondingSortFiltersTestSetup(
|
||||
final List<Integer> contentFiltersThatHaveCorrespondingSortFilters) {
|
||||
contentFiltersThatHaveCorrespondingSortFilters.add(SoundcloudFilters.ID_CF_MAIN_TRACKS);
|
||||
}
|
||||
}
|
|
@ -402,7 +402,8 @@ public class YoutubeSearchExtractorTest {
|
|||
public static void setUp() throws Exception {
|
||||
YoutubeTestsUtils.ensureStateless();
|
||||
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "shorts"));
|
||||
extractor = YouTube.getSearchExtractor(QUERY, singletonList(VIDEOS), "");
|
||||
final FilterItem item = getFilterItem(YouTube, YoutubeFilters.ID_CF_MAIN_VIDEOS);
|
||||
extractor = YouTube.getSearchExtractor(QUERY, singletonList(item), null);
|
||||
extractor.fetchPage();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,429 @@
|
|||
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
|
||||
|
||||
package org.schabi.newpipe.extractor.services.youtube.search.filter;
|
||||
|
||||
import org.schabi.newpipe.extractor.search.filter.BaseSearchFilters;
|
||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||
import org.schabi.newpipe.extractor.services.DefaultFiltersTest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class YoutubeFiltersTest extends DefaultFiltersTest {
|
||||
|
||||
@Override
|
||||
protected BaseSearchFilters setupPriorTesting() {
|
||||
return new YoutubeFilters();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String emptyContentFilterTestSetup(final BaseSearchFilters base) {
|
||||
base.setSelectedSortFilter(getAllSortFiltersList());
|
||||
return "https://www.youtube.com/results?search_query=test";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterWithAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersWithAllSortFilters) {
|
||||
|
||||
// set all content filters and results
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_ALL),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAMSGwgFGAIgASgBMAE4AUABcAF4AbgBAcgBAdABAQ%3D%3D",
|
||||
new CheckParam("CAMSGwgFGAIgASgBMAE4AUABcAF4AbgBAcgBAdABAQ%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAMSHQgFEAEYAiABKAEwATgBQAFwAXgBuAEByAEB0AEB",
|
||||
new CheckParam("CAMSHQgFEAEYAiABKAEwATgBQAFwAXgBuAEByAEB0AEB"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_CHANNELS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAMSHQgFEAIYAiABKAEwATgBQAFwAXgBuAEByAEB0AEB",
|
||||
new CheckParam("CAMSHQgFEAIYAiABKAEwATgBQAFwAXgBuAEByAEB0AEB"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_PLAYLISTS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAMSHQgFEAMYAiABKAEwATgBQAFwAXgBuAEByAEB0AEB",
|
||||
new CheckParam("CAMSHQgFEAMYAiABKAEwATgBQAFwAXgBuAEByAEB0AEB"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_SONGS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIARAAGAAgACgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_VIDEOS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABABGAAgACgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_ALBUMS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABAAGAEgACgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_PLAYLISTS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABAAGAAgACgBMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersWithAllSortFilters.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_ARTISTS),
|
||||
getAllSortFiltersIdsList(),
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABAAGAAgASgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterSetup(
|
||||
final List<InputAndExpectedResultData> validContentFiltersAndExpectedResults) {
|
||||
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_ALL),
|
||||
null,
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgA%3D",
|
||||
new CheckParam("EgA%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
null,
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgIQAQ%3D%3D",
|
||||
new CheckParam("EgIQAQ%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_CHANNELS),
|
||||
null,
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgIQAg%3D%3D",
|
||||
new CheckParam("EgIQAg%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_PLAYLISTS),
|
||||
null,
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgIQAw%3D%3D",
|
||||
new CheckParam("EgIQAw%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_SONGS),
|
||||
null,
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIARAAGAAgACgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_VIDEOS),
|
||||
null,
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABABGAAgACgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_ALBUMS),
|
||||
null,
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABAAGAEgACgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_PLAYLISTS),
|
||||
null,
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABAAGAAgACgBMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
validContentFiltersAndExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_YOUTUBE_MUSIC_ARTISTS),
|
||||
null,
|
||||
"https://music.youtube.com/search?q=test",
|
||||
new CheckParam("Eg-KAQwIABAAGAAgASgAMABqChAEEAUQAxAKEAk%3D"),
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validAllSortFilterSetup(
|
||||
final List<InputAndExpectedResultData> validAllSortFilters) {
|
||||
// no implementation here for youtube. As we cannot just have sort filters without
|
||||
// content filters
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validContentFilterAllSortFiltersTestSetup(
|
||||
final List<InputAndExpectedResultData>
|
||||
validContentFilterAllSortFiltersExpectedResults) {
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_SORT_BY_RELEVANCE),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAASAhAB",
|
||||
new CheckParam("CAASAhAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_SORT_BY_RATING),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAESAhAB",
|
||||
new CheckParam("CAESAhAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_SORT_BY_DATE),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAISAhAB",
|
||||
new CheckParam("CAISAhAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_SORT_BY_VIEWS),
|
||||
"https://www.youtube.com/results?search_query=test&sp=CAMSAhAB",
|
||||
new CheckParam("CAMSAhAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_UPLOAD_DATE_ALL),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgIQAQ%3D%3D",
|
||||
new CheckParam("EgIQAQ%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_UPLOAD_DATE_HOUR),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQIARAB",
|
||||
new CheckParam("EgQIARAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_UPLOAD_DATE_DAY),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQIAhAB",
|
||||
new CheckParam("EgQIAhAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_UPLOAD_DATE_WEEK),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQIAxAB",
|
||||
new CheckParam("EgQIAxAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_UPLOAD_DATE_MONTH),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQIBBAB",
|
||||
new CheckParam("EgQIBBAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_UPLOAD_DATE_YEAR),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQIBRAB",
|
||||
new CheckParam("EgQIBRAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_DURATION_ALL),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgIQAQ%3D%3D",
|
||||
new CheckParam("EgIQAQ%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_DURATION_SHORT),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQARgB",
|
||||
new CheckParam("EgQQARgB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_DURATION_MEDIUM),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQARgD",
|
||||
new CheckParam("EgQQARgD"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_DURATION_LONG),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQARgC",
|
||||
new CheckParam("EgQQARgC"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_LIVE),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQAUAB",
|
||||
new CheckParam("EgQQAUAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_4K),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQAXAB",
|
||||
new CheckParam("EgQQAXAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_HD),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQASAB",
|
||||
new CheckParam("EgQQASAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_SUBTITLES),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQASgB",
|
||||
new CheckParam("EgQQASgB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_CCOMMONS),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQATAB",
|
||||
new CheckParam("EgQQATAB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_360),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQAXgB",
|
||||
new CheckParam("EgQQAXgB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_VR180),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgUQAdABAQ%3D%3D",
|
||||
new CheckParam("EgUQAdABAQ%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_3D),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQATgB",
|
||||
new CheckParam("EgQQATgB"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_HDR),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgUQAcgBAQ%3D%3D",
|
||||
new CheckParam("EgUQAcgBAQ%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_LOCATION),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgUQAbgBAQ%3D%3D",
|
||||
new CheckParam("EgUQAbgBAQ%3D%3D"),
|
||||
null
|
||||
));
|
||||
validContentFilterAllSortFiltersExpectedResults.add(new InputAndExpectedResultData(
|
||||
"test",
|
||||
singletonList(YoutubeFilters.ID_CF_MAIN_VIDEOS),
|
||||
singletonList(YoutubeFilters.ID_SF_FEATURES_PURCHASED),
|
||||
"https://www.youtube.com/results?search_query=test&sp=EgQQAUgB",
|
||||
new CheckParam("EgQQAUgB"),
|
||||
null
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void contentFiltersThatHaveCorrespondingSortFiltersTestSetup(
|
||||
final List<Integer> contentFiltersThatHaveCorrespondingSortFilters) {
|
||||
contentFiltersThatHaveCorrespondingSortFilters.add(YoutubeFilters.ID_CF_MAIN_ALL);
|
||||
contentFiltersThatHaveCorrespondingSortFilters.add(YoutubeFilters.ID_CF_MAIN_VIDEOS);
|
||||
contentFiltersThatHaveCorrespondingSortFilters.add(YoutubeFilters.ID_CF_MAIN_CHANNELS);
|
||||
contentFiltersThatHaveCorrespondingSortFilters.add(YoutubeFilters.ID_CF_MAIN_PLAYLISTS);
|
||||
}
|
||||
|
||||
static class CheckParam extends AdditionalResultChecker {
|
||||
private final String expectedResult;
|
||||
|
||||
CheckParam(final String expectedResult) {
|
||||
this.expectedResult = expectedResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkFilterItem(final FilterItem filterItem,
|
||||
final boolean showMode) {
|
||||
if (filterItem instanceof YoutubeFilters.YoutubeContentFilterItem) {
|
||||
final YoutubeFilters.YoutubeContentFilterItem contentFilterItem =
|
||||
(YoutubeFilters.YoutubeContentFilterItem) filterItem;
|
||||
if (showMode) {
|
||||
System.out.println("extendedResult=\"" + contentFilterItem.getParams() + "\"");
|
||||
} else {
|
||||
assertEquals(this.expectedResult, contentFilterItem.getParams());
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException("Illegal FilterItem found: " + filterItem.getClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue