public static boolean seemDuplicates(FeedItem item1, FeedItem item2) {
        if (sameAndNotEmpty(item1.getItemIdentifier(), item2.getItemIdentifier())) {
            return true;
        }
        FeedMedia media1 = item1.getMedia();
        FeedMedia media2 = item2.getMedia();
        if (media1 == null || media2 == null) {
            return false;
        }
        if (sameAndNotEmpty(media1.getStreamUrl(), media2.getStreamUrl())) {
            return true;
        }
        return titlesLookSimilar(item1, item2)
                && datesLookSimilar(item1, item2)
                && durationsLookSimilar(media1, media2)
                && mimeTypeLooksSimilar(media1, media2);
    }
@Test
    public void testOtherAttributes() {
        assertTrue(FeedItemDuplicateGuesser.seemDuplicates(
                item("id1", "Title", "example.com/episode1", 10, 5 * MINUTES, "audio/*"),
                item("id2", "Title", "example.com/episode2", 10, 5 * MINUTES, "audio/*")));
        assertTrue(FeedItemDuplicateGuesser.seemDuplicates(
                item("id1", "Title", "example.com/episode1", 10, 5 * MINUTES, "audio/*"),
                item("id2", "Title", "example.com/episode2", 20, 6 * MINUTES, "audio/*")));
        assertFalse(FeedItemDuplicateGuesser.seemDuplicates(
                item("id1", "Title", "example.com/episode1", 10, 5 * MINUTES, "audio/*"),
                item("id2", "Title", "example.com/episode2", 10, 5 * MINUTES, "video/*")));
        assertTrue(FeedItemDuplicateGuesser.seemDuplicates(
                item("id1", "Title", "example.com/episode1", 10, 5 * MINUTES, "audio/mpeg"),
                item("id2", "Title", "example.com/episode2", 10, 5 * MINUTES, "audio/mp3")));
        assertFalse(FeedItemDuplicateGuesser.seemDuplicates(
                item("id1", "Title", "example.com/episode1", 5 * DAYS, 5 * MINUTES, "audio/*"),
                item("id2", "Title", "example.com/episode2", 2 * DAYS, 5 * MINUTES, "audio/*")));
    }