from django.test import SimpleTestCase from netbox_utilities.svg_export import apply_rack_view_mode, strip_svg_hyperlinks class StripSvgHyperlinksTest(SimpleTestCase): def test_unwraps_anchor_elements_keeping_children(self): svg = ( '' '' '' "" "" ) result = strip_svg_hyperlinks(svg) self.assertNotIn("' '' "" ) result = strip_svg_hyperlinks(svg) self.assertNotIn("href", result) self.assertIn("' '' "" ) result = strip_svg_hyperlinks(svg) self.assertIn("/media/devicetype-images/example.png", result) def test_replaces_image_href_with_data_uri_from_loader(self): svg = ( '' '' "" ) result = strip_svg_hyperlinks(svg, image_loader=lambda href: "data:image/png;base64,AAAA") self.assertIn("data:image/png;base64,AAAA", result) self.assertNotIn("/media/devicetype-images/example.png", result) def test_drops_image_href_when_loader_cannot_resolve_it(self): svg = ( '' '' "" ) result = strip_svg_hyperlinks(svg, image_loader=lambda href: None) self.assertNotIn("href", result) self.assertIn("' '' '' '' "" ) result = strip_svg_hyperlinks(svg) self.assertLess(result.index('id="before"'), result.index('id="linked"')) self.assertLess(result.index('id="linked"'), result.index('id="after"')) def test_leaves_svg_without_links_unchanged_in_content(self): svg = '' result = strip_svg_hyperlinks(svg) self.assertIn("' 'USV 8' '' 'USV 8' "" ) def test_images_and_labels_leaves_svg_untouched(self): self.assertEqual(apply_rack_view_mode(self.SVG, "images-and-labels"), self.SVG) def test_images_only_keeps_only_the_image(self): result = apply_rack_view_mode(self.SVG, "images-only") self.assertNotIn('class="label"', result) self.assertNotIn("device-image-label", result) self.assertIn('class="device-image"', result) def test_labels_only_keeps_only_the_plain_label(self): result = apply_rack_view_mode(self.SVG, "labels-only") self.assertIn('class="label"', result) self.assertNotIn("device-image", result) def test_unknown_mode_leaves_svg_untouched(self): self.assertEqual(apply_rack_view_mode(self.SVG, "bogus"), self.SVG)