@@ -250,3 +250,71 @@ class CurationMailerTest < ActionMailer::TestCase
250250 end
251251 end
252252end
253+
254+ class ContentProvidersWithBrokenScrapersTest < ActionMailer ::TestCase
255+ setup do
256+ @cutoff = 1 . week . ago
257+ @user = users ( :regular_user )
258+ @provider = ContentProvider . create! ( title : 'Goblet' , user : @user , url : 'http://www.google.com#1' )
259+ @provider_2 = ContentProvider . create! ( title : 'Two' , user : @user , url : 'http://www.google.com#1' )
260+ @params = { title : 'my_title' , description : 'my_description' , url : 'http://www.google.com#1' , user : @user }
261+ end
262+
263+ test "excludes providers with no events and no materials" do
264+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
265+ assert_empty result
266+ end
267+
268+ test "includes provider only with events all before cutoff" do
269+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
270+ @provider . events . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
271+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
272+ assert_includes result , @provider
273+ end
274+
275+ test "excludes provider with any event after cutoff" do
276+ @provider . events . create! ( @params . merge ( { updated_at : 2 . days . ago } ) )
277+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
278+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
279+ refute_includes result , @provider
280+ end
281+
282+ test "includes provider only with materials all before cutoff" do
283+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
284+ @provider . materials . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
285+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
286+ assert_includes result , @provider
287+ end
288+
289+ test "excludes provider with any material after cutoff" do
290+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . days . ago } ) )
291+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
292+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
293+ refute_includes result , @provider
294+ end
295+
296+ test "includes provider with both events and materials all before cutoff" do
297+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
298+ @provider . events . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
299+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
300+ @provider . materials . create! ( @params . merge ( { updated_at : 3 . weeks . ago } ) )
301+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
302+ assert_includes result , @provider
303+ end
304+
305+ test "excludes provider with mixed cases where one event or material is too new" do
306+ @provider . events . create! ( @params . merge ( { updated_at : 2 . days . ago } ) )
307+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
308+ @provider . materials . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
309+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
310+ refute_includes result , @provider
311+ end
312+
313+ test "filters correctly by title" do
314+ @provider . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
315+ @provider_2 . events . create! ( @params . merge ( { updated_at : 2 . weeks . ago } ) )
316+ result = ContentProvider . with_broken_scrapers ( [ "Goblet" ] , @cutoff )
317+ assert_includes result , @provider
318+ refute_includes result , @provider_b
319+ end
320+ end
0 commit comments