1+ require 'test_helper'
2+
3+ class LinkCheckerTest < ActiveSupport ::TestCase
4+
5+ test 'check passing event url' do
6+ event = events ( :two )
7+ WebMock . stub_request ( :head , event . url ) . to_return ( status : 200 )
8+ assert_nil event . link_monitor
9+
10+ assert_no_difference ( 'LinkMonitor.count' ) do
11+ LinkChecker . check ( event , log : false )
12+ end
13+
14+ assert_nil event . link_monitor
15+ end
16+
17+ test 'check failing event url' do
18+ event = events ( :two )
19+ WebMock . stub_request ( :head , event . url ) . to_return ( status : 404 )
20+ assert_nil event . link_monitor
21+
22+ assert_difference ( 'LinkMonitor.count' , 1 ) do
23+ LinkChecker . check ( event , log : false )
24+ end
25+
26+ assert event . link_monitor
27+ assert event . link_monitor . failed_at
28+ assert_equal 404 , event . link_monitor . code
29+ end
30+
31+ test 'check failing event url that only responds to get' do
32+ event = events ( :two )
33+ WebMock . stub_request ( :head , event . url ) . to_return ( status : 405 )
34+ WebMock . stub_request ( :get , event . url ) . to_return ( status : 200 )
35+ assert_nil event . link_monitor
36+
37+ assert_no_difference ( 'LinkMonitor.count' ) do
38+ LinkChecker . check ( event , log : false )
39+ end
40+
41+ assert_nil event . link_monitor
42+ end
43+
44+ test 'follows redirect' do
45+ event = events ( :two )
46+ WebMock . stub_request ( :head , event . url ) . to_return ( status : 405 )
47+ WebMock . stub_request ( :get , event . url ) . to_return ( status : 302 , headers : { location : 'http://website.com' } )
48+ WebMock . stub_request ( :get , 'http://website.com' ) . to_return ( status : 404 )
49+ assert_nil event . link_monitor
50+
51+ assert_difference ( 'LinkMonitor.count' , 1 ) do
52+ LinkChecker . check ( event , log : false )
53+ end
54+
55+ assert event . link_monitor
56+ assert event . link_monitor . failed_at
57+ assert_equal 404 , event . link_monitor . code
58+ end
59+
60+ test 'avoids redirect loop' do
61+ event = events ( :two )
62+ WebMock . stub_request ( :head , event . url ) . to_return ( status : 405 )
63+ WebMock . stub_request ( :get , event . url ) . to_return ( status : 302 , headers : { location : 'http://website.com' } )
64+ WebMock . stub_request ( :get , 'http://website.com' ) . to_return ( status : 302 , headers : { location : event . url } )
65+ assert_nil event . link_monitor
66+
67+ assert_difference ( 'LinkMonitor.count' , 1 ) do
68+ LinkChecker . check ( event , log : false )
69+ end
70+
71+ assert event . link_monitor
72+ assert event . link_monitor . failed_at
73+ assert_equal 493 , event . link_monitor . code
74+ end
75+
76+ test 'check material with external resources' do
77+ WebMock . stub_request ( :head , 'http://myurl.com/123' ) . to_return ( status : 200 )
78+ WebMock . stub_request ( :head , 'https://tess.elixir-uk.org/' ) . to_return ( status : 200 )
79+ WebMock . stub_request ( :head , 'https://bio.tools/tool/SR-Tesseler' ) . to_return ( status : 404 )
80+ WebMock . stub_request ( :head , 'https://fairsharing.org/bsg-p123456' ) . to_return ( status : 404 )
81+ material = materials ( :material_with_external_resource )
82+
83+ assert_difference ( 'LinkMonitor.count' , 2 ) do
84+ LinkChecker . check ( material , log : false )
85+ end
86+ end
87+
88+ end
0 commit comments