summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-03-06 02:27:45 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-03-29 20:31:23 +0200
commitfb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe (patch)
tree31c2f61f0adfb571d5c69078c5018bd843488f19 /spec
parentc888524523195382a5da171545441eaf0662ab01 (diff)
downloadinvidious-fb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe.tar.gz
invidious-fb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe.tar.bz2
invidious-fb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe.zip
Add a function to parse search filters from invidious URL params
Diffstat (limited to 'spec')
-rw-r--r--spec/invidious/search/iv_filters_spec.cr79
1 files changed, 79 insertions, 0 deletions
diff --git a/spec/invidious/search/iv_filters_spec.cr b/spec/invidious/search/iv_filters_spec.cr
index 6e8e6f3d..ebf01719 100644
--- a/spec/invidious/search/iv_filters_spec.cr
+++ b/spec/invidious/search/iv_filters_spec.cr
@@ -175,4 +175,83 @@ Spectator.describe Invidious::Search::Filters do
expect(subs).to be_false
end
end
+
+ # -------------------
+ # Decode (URL)
+ # -------------------
+
+ describe "#from_iv_params" do
+ it "Decodes type= filter" do
+ Invidious::Search::Filters::Type.each do |value|
+ params = HTTP::Params.parse("type=#{value}")
+
+ expect(described_class.from_iv_params(params))
+ .to eq(described_class.new(type: value))
+ end
+ end
+
+ it "Decodes date= filter" do
+ Invidious::Search::Filters::Date.each do |value|
+ params = HTTP::Params.parse("date=#{value}")
+
+ expect(described_class.from_iv_params(params))
+ .to eq(described_class.new(date: value))
+ end
+ end
+
+ it "Decodes duration= filter" do
+ Invidious::Search::Filters::Duration.each do |value|
+ params = HTTP::Params.parse("duration=#{value}")
+
+ expect(described_class.from_iv_params(params))
+ .to eq(described_class.new(duration: value))
+ end
+ end
+
+ it "Decodes features= filter (single)" do
+ Invidious::Search::Filters::Features.each do |value|
+ string = described_class.format_features(value)
+ params = HTTP::Params.parse("features=#{string}")
+
+ expect(described_class.from_iv_params(params))
+ .to eq(described_class.new(features: value))
+ end
+ end
+
+ it "Decodes features= filter (multiple - comma separated)" do
+ features = Invidious::Search::Filters::Features.flags(HDR, VR180, CCommons)
+ params = HTTP::Params.parse("features=vr180%2Ccc%2Chdr") # %2C is a comma
+
+ expect(described_class.from_iv_params(params))
+ .to eq(described_class.new(features: features))
+ end
+
+ it "Decodes features= filter (multiple - URL parameters)" do
+ features = Invidious::Search::Filters::Features.flags(ThreeSixty, HD, FourK)
+ params = HTTP::Params.parse("features=4k&features=360&features=hd")
+
+ expect(described_class.from_iv_params(params))
+ .to eq(described_class.new(features: features))
+ end
+
+ it "Decodes sort= filter" do
+ Invidious::Search::Filters::Sort.each do |value|
+ params = HTTP::Params.parse("sort=#{value}")
+
+ expect(described_class.from_iv_params(params))
+ .to eq(described_class.new(sort: value))
+ end
+ end
+
+ it "Ignores junk data" do
+ params = HTTP::Params.parse("foo=bar&sort=views&answer=42&type=channel")
+
+ expect(described_class.from_iv_params(params)).to eq(
+ described_class.new(
+ sort: Invidious::Search::Filters::Sort::Views,
+ type: Invidious::Search::Filters::Type::Channel
+ )
+ )
+ end
+ end
end