2022-03-03 22:37:02 +01:00
require " ../../../src/invidious/search/filters "
require " http/params "
require " spectator "
Spectator . configure do | config |
config . fail_blank
config . randomize
end
# Encoded filter values are extracted from the search
# page of Youtube with any browser devtools HTML inspector.
DATE_FILTERS = {
2024-01-29 14:59:25 +01:00
Invidious :: Search :: Filters :: Date :: Hour = > " EgIIAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Date :: Today = > " EgIIAvABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Date :: Week = > " EgIIA_ABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Date :: Month = > " EgIIBPABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Date :: Year = > " EgIIBfABAQ%3D%3D " ,
2022-03-03 22:37:02 +01:00
}
TYPE_FILTERS = {
2024-01-29 14:59:25 +01:00
Invidious :: Search :: Filters :: Type :: Video = > " EgIQAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Type :: Channel = > " EgIQAvABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Type :: Playlist = > " EgIQA_ABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Type :: Movie = > " EgIQBPABAQ%3D%3D " ,
2022-03-03 22:37:02 +01:00
}
DURATION_FILTERS = {
2024-01-29 14:59:25 +01:00
Invidious :: Search :: Filters :: Duration :: Short = > " EgIYAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Duration :: Medium = > " EgIYA_ABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Duration :: Long = > " EgIYAvABAQ%3D%3D " ,
2022-03-03 22:37:02 +01:00
}
FEATURE_FILTERS = {
2024-01-29 14:59:25 +01:00
Invidious :: Search :: Filters :: Features :: Live = > " EgJAAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Features :: FourK = > " EgJwAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Features :: HD = > " EgIgAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Features :: Subtitles = > " EgIoAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Features :: CCommons = > " EgIwAfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Features :: ThreeSixty = > " EgJ4AfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Features :: VR180 = > " EgPQAQHwAQE%3D " ,
Invidious :: Search :: Filters :: Features :: ThreeD = > " EgI4AfABAQ%3D%3D " ,
Invidious :: Search :: Filters :: Features :: HDR = > " EgPIAQHwAQE%3D " ,
Invidious :: Search :: Filters :: Features :: Location = > " EgO4AQHwAQE%3D " ,
Invidious :: Search :: Filters :: Features :: Purchased = > " EgJIAfABAQ%3D%3D " ,
2022-03-03 22:37:02 +01:00
}
SORT_FILTERS = {
2024-01-29 14:59:25 +01:00
Invidious :: Search :: Filters :: Sort :: Relevance = > " 8AEB " ,
Invidious :: Search :: Filters :: Sort :: Date = > " CALwAQE%3D " ,
Invidious :: Search :: Filters :: Sort :: Views = > " CAPwAQE%3D " ,
Invidious :: Search :: Filters :: Sort :: Rating = > " CAHwAQE%3D " ,
2022-03-03 22:37:02 +01:00
}
Spectator . describe Invidious :: Search :: Filters do
# -------------------
# Encode YT params
# -------------------
describe " # to_yt_params " do
sample DATE_FILTERS do | value , result |
it " Encodes upload date filter ' #{ value } ' " do
expect ( described_class . new ( date : value ) . to_yt_params ) . to eq ( result )
end
end
sample TYPE_FILTERS do | value , result |
it " Encodes content type filter ' #{ value } ' " do
expect ( described_class . new ( type : value ) . to_yt_params ) . to eq ( result )
end
end
sample DURATION_FILTERS do | value , result |
it " Encodes duration filter ' #{ value } ' " do
expect ( described_class . new ( duration : value ) . to_yt_params ) . to eq ( result )
end
end
sample FEATURE_FILTERS do | value , result |
it " Encodes feature filter ' #{ value } ' " do
expect ( described_class . new ( features : value ) . to_yt_params ) . to eq ( result )
end
end
sample SORT_FILTERS do | value , result |
it " Encodes sort filter ' #{ value } ' " do
expect ( described_class . new ( sort : value ) . to_yt_params ) . to eq ( result )
end
end
end
2022-03-03 23:29:13 +01:00
# -------------------
# Decode YT params
# -------------------
describe " # from_yt_params " do
sample DATE_FILTERS do | value , encoded |
it " Decodes upload date filter ' #{ value } ' " do
params = HTTP :: Params . parse ( " sp= #{ encoded } " )
expect ( described_class . from_yt_params ( params ) )
. to eq ( described_class . new ( date : value ) )
end
end
sample TYPE_FILTERS do | value , encoded |
it " Decodes content type filter ' #{ value } ' " do
params = HTTP :: Params . parse ( " sp= #{ encoded } " )
expect ( described_class . from_yt_params ( params ) )
. to eq ( described_class . new ( type : value ) )
end
end
sample DURATION_FILTERS do | value , encoded |
it " Decodes duration filter ' #{ value } ' " do
params = HTTP :: Params . parse ( " sp= #{ encoded } " )
expect ( described_class . from_yt_params ( params ) )
. to eq ( described_class . new ( duration : value ) )
end
end
sample FEATURE_FILTERS do | value , encoded |
it " Decodes feature filter ' #{ value } ' " do
params = HTTP :: Params . parse ( " sp= #{ encoded } " )
expect ( described_class . from_yt_params ( params ) )
. to eq ( described_class . new ( features : value ) )
end
end
sample SORT_FILTERS do | value , encoded |
it " Decodes sort filter ' #{ value } ' " do
params = HTTP :: Params . parse ( " sp= #{ encoded } " )
expect ( described_class . from_yt_params ( params ) )
. to eq ( described_class . new ( sort : value ) )
end
end
end
2022-03-03 22:37:02 +01:00
end