summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-05-28 11:41:27 +0200
committerSamantaz Fox <coding@samantaz.fr>2022-06-08 23:56:40 +0200
commit96ac7f9f35e28bd83f706e116c651da8b87a625b (patch)
tree57237c9e95d2adbbc68f6c6c939308e3fc667f66 /spec
parent33da64a6696e757aa98b2c771e3e8c03f5e58b2b (diff)
downloadinvidious-96ac7f9f35e28bd83f706e116c651da8b87a625b.tar.gz
invidious-96ac7f9f35e28bd83f706e116c651da8b87a625b.tar.bz2
invidious-96ac7f9f35e28bd83f706e116c651da8b87a625b.zip
Add hashtag extractor spec
Diffstat (limited to 'spec')
-rw-r--r--spec/invidious/hashtag_spec.cr109
-rw-r--r--spec/parsers_helper.cr33
2 files changed, 142 insertions, 0 deletions
diff --git a/spec/invidious/hashtag_spec.cr b/spec/invidious/hashtag_spec.cr
new file mode 100644
index 00000000..c09c59d4
--- /dev/null
+++ b/spec/invidious/hashtag_spec.cr
@@ -0,0 +1,109 @@
+require "../parsers_helper.cr"
+
+Spectator.describe Invidious::Hashtag do
+ it "parses richItemRenderer containers (test 1)" do
+ # Enable mock
+ test_content = load_mock("hashtag/martingarrix_page1")
+ videos = extract_items(test_content)
+
+ expect(typeof(videos)).to eq(Array(SearchItem))
+ expect(videos.size).to eq(60)
+
+ #
+ # Random video check 1
+ #
+ expect(typeof(videos[11])).to eq(SearchItem)
+
+ video_11 = videos[11].as(SearchVideo)
+
+ expect(video_11.id).to eq("06eSsOWcKYA")
+ expect(video_11.title).to eq("Martin Garrix - Live @ Tomorrowland 2018")
+
+ expect(video_11.ucid).to eq("UC5H_KXkPbEsGs0tFt8R35mA")
+ expect(video_11.author).to eq("Martin Garrix")
+ expect(video_11.author_verified).to be_true
+
+ expect(video_11.published).to eq(Time.utc - 3.years)
+ expect(video_11.length_seconds).to eq((56.minutes + 41.seconds).total_seconds.to_i32)
+ expect(video_11.views).to eq(40_504_893)
+
+ expect(video_11.live_now).to be_false
+ expect(video_11.premium).to be_false
+ expect(video_11.premiere_timestamp).to be_nil
+
+ #
+ # Random video check 2
+ #
+ expect(typeof(videos[35])).to eq(SearchItem)
+
+ video_35 = videos[35].as(SearchVideo)
+
+ expect(video_35.id).to eq("b9HpOAYjY9I")
+ expect(video_35.title).to eq("Martin Garrix feat. Mike Yung - Dreamer (Official Video)")
+
+ expect(video_35.ucid).to eq("UC5H_KXkPbEsGs0tFt8R35mA")
+ expect(video_35.author).to eq("Martin Garrix")
+ expect(video_35.author_verified).to be_true
+
+ expect(video_35.published).to eq(Time.utc - 3.years)
+ expect(video_35.length_seconds).to eq((3.minutes + 14.seconds).total_seconds.to_i32)
+ expect(video_35.views).to eq(30_790_049)
+
+ expect(video_35.live_now).to be_false
+ expect(video_35.premium).to be_false
+ expect(video_35.premiere_timestamp).to be_nil
+ end
+
+ it "parses richItemRenderer containers (test 2)" do
+ # Enable mock
+ test_content = load_mock("hashtag/martingarrix_page2")
+ videos = extract_items(test_content)
+
+ expect(typeof(videos)).to eq(Array(SearchItem))
+ expect(videos.size).to eq(60)
+
+ #
+ # Random video check 1
+ #
+ expect(typeof(videos[41])).to eq(SearchItem)
+
+ video_41 = videos[41].as(SearchVideo)
+
+ expect(video_41.id).to eq("qhstH17zAjs")
+ expect(video_41.title).to eq("Martin Garrix Radio - Episode 391")
+
+ expect(video_41.ucid).to eq("UC5H_KXkPbEsGs0tFt8R35mA")
+ expect(video_41.author).to eq("Martin Garrix")
+ expect(video_41.author_verified).to be_true
+
+ expect(video_41.published).to eq(Time.utc - 2.months)
+ expect(video_41.length_seconds).to eq((1.hour).total_seconds.to_i32)
+ expect(video_41.views).to eq(63_240)
+
+ expect(video_41.live_now).to be_false
+ expect(video_41.premium).to be_false
+ expect(video_41.premiere_timestamp).to be_nil
+
+ #
+ # Random video check 2
+ #
+ expect(typeof(videos[48])).to eq(SearchItem)
+
+ video_48 = videos[48].as(SearchVideo)
+
+ expect(video_48.id).to eq("lqGvW0NIfdc")
+ expect(video_48.title).to eq("Martin Garrix SENTIO Full Album Mix by Sakul")
+
+ expect(video_48.ucid).to eq("UC3833PXeLTS6yRpwGMQpp4Q")
+ expect(video_48.author).to eq("SAKUL")
+ expect(video_48.author_verified).to be_false
+
+ expect(video_48.published).to eq(Time.utc - 3.weeks)
+ expect(video_48.length_seconds).to eq((35.minutes + 46.seconds).total_seconds.to_i32)
+ expect(video_48.views).to eq(68_704)
+
+ expect(video_48.live_now).to be_false
+ expect(video_48.premium).to be_false
+ expect(video_48.premiere_timestamp).to be_nil
+ end
+end
diff --git a/spec/parsers_helper.cr b/spec/parsers_helper.cr
new file mode 100644
index 00000000..6155fe33
--- /dev/null
+++ b/spec/parsers_helper.cr
@@ -0,0 +1,33 @@
+require "db"
+require "json"
+require "kemal"
+
+require "protodec/utils"
+
+require "spectator"
+
+require "../src/invidious/helpers/macros"
+require "../src/invidious/helpers/logger"
+require "../src/invidious/helpers/utils"
+
+require "../src/invidious/videos"
+require "../src/invidious/comments"
+
+require "../src/invidious/helpers/serialized_yt_data"
+require "../src/invidious/yt_backend/extractors"
+require "../src/invidious/yt_backend/extractors_utils"
+
+OUTPUT = File.open(File::NULL, "w")
+LOGGER = Invidious::LogHandler.new(OUTPUT, LogLevel::Off)
+
+def load_mock(file) : Hash(String, JSON::Any)
+ file = File.join(__DIR__, "..", "mocks", file + ".json")
+ content = File.read(file)
+
+ return JSON.parse(content).as_h
+end
+
+Spectator.configure do |config|
+ config.fail_blank
+ config.randomize
+end