old_contents: import pytest
  
  from grazer.util import time_convert, grouper, extract_links, trim_link
  from .fixtures import example_html
  
  
  class TestTimeConvert(object):
  
      def test_seconds(self):
          assert time_convert("10s") == 10
  
      def test_minutes(self):
          assert time_convert("2m") == 120
  
      def test_hours(self):
          assert time_convert("3h") == 3 * 60 * 60
  
      def test_unknown(self):
          with pytest.raises(RuntimeError):
              time_convert("5u")
  
  
  class TestGrouper(object):
  
      def test_simple_seq(self):
          seq = range(0, 10)
          result = list(grouper(2, seq))
          assert len(result) == 5
  
      def test_odd_seq(self):
          seq = range(0, 10)
          result = list(grouper(3, seq))
          assert len(result) == 4
          assert result[-1] == (9, None, None)
  
  
  class TestLinkExtract(object):
  
      def test_extract_wo_hashes(self, example_html):
          result = extract_links(example_html, ignore_hashes=True)
          assert len(result) == 1
          assert result[0] == "http://magic-link"
  
      def test_extract_w_hashes(self, example_html):
          result = extract_links(example_html, ignore_hashes=False)
          assert "http://magic-link/#/with-hash" in result
  
      def test_trim_link_absolute(self):
          link = "http://magic-link.dev/something-good"
          result = trim_link(link, "magic-link.dev")
          assert result == "/something-good"
  
      def test_trim_link_relative(self):
          link = "/something-good"
          result = trim_link(link, "magic-link.dev")
          assert result == "/something-good"
  
      def test_trim_link_external_domain(self):
          link = "http://google.com"
          result = trim_link(link, "magic-link.dev")
          assert result is None
  
new_contents: import pytest
  
  from grazer.util import time_convert, grouper, extract_links, trim_link
  from .fixtures import example_html
  
  
  class TestTimeConvert(object):
  
      def test_seconds(self):
          assert time_convert("10s") == 10
  
      def test_minutes(self):
          assert time_convert("2m") == 120
  
      def test_hours(self):
          assert time_convert("3h") == 3 * 60 * 60
  
      def test_unknown(self):
          with pytest.raises(RuntimeError):
              time_convert("5u")
  
  
  class TestGrouper(object):
  
      def test_simple_seq(self):
          seq = range(0, 10)
          result = list(grouper(2, seq))
          assert len(result) == 5
  
      def test_odd_seq(self):
          seq = range(0, 10)
          result = list(grouper(3, seq))
          assert len(result) == 4
          assert result[-1] == (9, None, None)
  
  
  class TestLinkExtract(object):
  
      def test_extract_wo_hashes(self, example_html):
          result = extract_links(example_html, ignore_hashes=True)
          assert len(result) == 1
          assert result[0] == "http://magic-link"
  
      def test_extract_w_hashes(self, example_html):
          result = extract_links(example_html, ignore_hashes=False)
          assert "http://magic-link/#/with-hash" in result
  
      def test_trim_link_absolute(self):
          link = "http://magic-link.dev/something-good"
          result = trim_link(link, "magic-link.dev")
          assert result == "/something-good"
  
      def test_trim_link_relative(self):
          link = "/something-good"
          result = trim_link(link, "magic-link.dev")
          assert result == "/something-good"
  
      def test_trim_link_external_domain(self):
          link = "http://google.com"
          result = trim_link(link, "magic-link.dev")
          assert result is None
  
      def test_trim_empty_link(self):
          assert trim_link(None, "magic-link.dev") is None
  
subject: Cover empty link case