123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- require_relative '../lib/parser'
-
- RSpec.describe Parser do
- subject { Parser.new }
-
- describe '#threads' do
- let(:html) do
- Nokogiri::HTML(<<~HTML)
- <div class="even" id="thread_12345">
- <ul class="list read">
- <li class="member">
- <span>Thread By: </span>
- <a href="/member/view/creator1/" class="memberlink">creator1</a>
- </li>
- <li class="subject">
- <span>Subject: </span>
- <a href="/thread/view/12345/&p=999">
- <strong>Sticky:</sticky> Thread title 1
- </a>
- </li>
- <li class="posts"><span>Posts: </span>999</li>
- <li class="lastpost">
- <span>Last Post By:</span>
- <a href="/member/view/lastposter1/" class="memberlink">lastposter1</a> on Fri Apr 10 2020 01:23 am</li>
- </ul>
- </div>
- <div class="even" id="thread_123456">
- <ul class="list read">
- <li class="member">
- <span>Thread By: </span>
- <a href="/member/view/creator2/" class="memberlink">creator2</a>
- </li>
- <li class="subject">
- <span>Subject: </span>
- <a href="/thread/view/123456/&p=999">Thread title 2</a>
- </li>
- <li class="posts"><span>Posts: </span>999</li>
- <li class="lastpost">
- <span>Last Post By:</span>
- <a href="/member/view/lastposter2/" class="memberlink">lastposter2</a> on Fri Apr 10 2020 01:23 am</li>
- </ul>
- </div>
- HTML
- end
-
- it 'parses threads' do
- expect(subject.threads(html)).to eq([
- {remote_id: '12345', title: 'Sticky: Thread title 1', creator: 'creator1', is_sticky: true},
- {remote_id: '123456', title: 'Thread title 2', creator: 'creator2', is_sticky: false},
- ])
- end
- end
-
- describe '#posts' do
- let(:html) do
- Nokogiri::HTML(<<~HTML)
- <div>
- <div class="post">
- <ul class="view" id="post_69">
- <li class="info">
- <div class="postinfo">
- <a class="memberlink" href="/member/view/User1">User1</a>
- posted this October 26th, 2021 @ 12:34:56 am
- </div>
- </li>
- <li class="postbody">
- This is the body of the first post
- </li>
- </ul>
- </div>
- <div class="post">
- <ul class="view" id="post_420">
- <li class="info">
- <div class="postinfo">
- <a class="memberlink" href="/member/view/User2">User2</a>
- posted this October 27th, 2021 @ 12:34:56 am
- </div>
- </li>
- <li class="postbody">
- This is the body of the second post
- </li>
- </ul>
- </div>
- </div>
- HTML
- end
-
- it 'parses posts' do
- expect(subject.posts({ id: 666 }, html)).to match_array([
- {
- remote_id: 69,
- creator: 'User1',
- thread_id: 666,
- created_at: Time.new(2021, 10, 26, 0, 34, 56),
- body: 'This is the body of the first post'
- },
- {
- remote_id: 420,
- creator: 'User2',
- thread_id: 666,
- created_at: Time.new(2021, 10, 27, 0, 34, 56),
- body: 'This is the body of the second post'
- }
- ])
- end
- end
-
- describe '#thread_created_at' do
- let(:html) do
- Nokogiri::HTML(<<~HTML)
- <div class="postinfo">
- <a class="memberlink" href="/member/view/User1">User1</a>
- posted this October 27th, 2021 @ 12:34:56 am
- </div>
- HTML
- end
-
- it 'parses the timestamp of the first post' do
- expect(subject.thread_created_at(html))
- .to eq(Time.new(2021, 10, 27, 00, 34, 56))
- end
- end
- end
|