@@ -130,3 +130,71 @@ class ContentProviderTest < ActiveSupport::TestCase
130130 end
131131 end
132132end
133+
134+ class ContentProvidersWithBrokenScrapersTest < ActiveSupport ::TestCase
135+ setup do
136+ @cutoff = 1 . week . ago
137+ @user = users ( :regular_user )
138+ @provider = ContentProvider . create! ( title : 'Goblet' , user : @user , url : 'http://www.google.com#1' )
139+ @provider_2 = ContentProvider . create! ( title : 'Two' , user : @user , url : 'http://www.google.com#1' )
140+ @params = { title : 'my_title' , description : 'my_description' , url : 'http://www.google.com#1' , user : @user }
141+ end
142+
143+ test "excludes providers with no events and no materials" do
144+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
145+ assert_empty result
146+ end
147+
148+ test "includes provider only with events all before cutoff" do
149+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
150+ @provider . events . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
151+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
152+ assert_includes result , @provider
153+ end
154+
155+ test "excludes provider with any event after cutoff" do
156+ @provider . events . create! ( @params . merge ( { updated_at : 2 . days . ago } ) )
157+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
158+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
159+ refute_includes result , @provider
160+ end
161+
162+ test "includes provider only with materials all before cutoff" do
163+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
164+ @provider . materials . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
165+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
166+ assert_includes result , @provider
167+ end
168+
169+ test "excludes provider with any material after cutoff" do
170+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . days . ago } ) )
171+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
172+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
173+ refute_includes result , @provider
174+ end
175+
176+ test "includes provider with both events and materials all before cutoff" do
177+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
178+ @provider . events . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
179+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
180+ @provider . materials . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
181+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
182+ assert_includes result , @provider
183+ end
184+
185+ test "excludes provider with mixed cases where one event or material is too new" do
186+ @provider . events . create! ( @params . merge ( { updated_at : 2 . days . ago } ) )
187+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
188+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
189+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
190+ refute_includes result , @provider
191+ end
192+
193+ test "filters correctly by title" do
194+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
195+ @provider_2 . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
196+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
197+ assert_includes result , @provider
198+ refute_includes result , @provider_2
199+ end
200+ end
0 commit comments