diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2022-03-06 02:27:45 +0100 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2022-03-29 20:31:23 +0200 |
| commit | fb2a331f79fcc42ac2c17ea349943ab2ba6ad0fe (patch) | |
| tree | 31c2f61f0adfb571d5c69078c5018bd843488f19 /spec | |
| parent | c888524523195382a5da171545441eaf0662ab01 (diff) | |
| download | invidious-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.cr | 79 |
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 |
