From 20ef45349a833828c93a4ba601fadf8847530559 Mon Sep 17 00:00:00 2001 From: Karim shoair Date: Mon, 16 Dec 2024 13:18:19 +0200 Subject: [PATCH] test: Rewrite automatch tests to a cleaner version and adding async test --- tests/parser/test_automatch.py | 69 ++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/tests/parser/test_automatch.py b/tests/parser/test_automatch.py index 79fe6b7..38ad88b 100644 --- a/tests/parser/test_automatch.py +++ b/tests/parser/test_automatch.py @@ -1,10 +1,11 @@ -import unittest +import asyncio + +import pytest from scrapling import Adaptor -class TestParserAutoMatch(unittest.TestCase): - +class TestParserAutoMatch: def test_element_relocation(self): """Test relocating element after structure change""" original_html = ''' @@ -50,7 +51,61 @@ class TestParserAutoMatch(unittest.TestCase): _ = old_page.css('#p1, #p2', auto_save=True)[0] relocated = new_page.css('#p1', auto_match=True) - self.assertIsNotNone(relocated) - self.assertEqual(relocated[0].attrib['data-id'], 'p1') - self.assertTrue(relocated[0].has_class('new-class')) - self.assertEqual(relocated[0].css('.new-description')[0].text, 'Description 1') + assert relocated is not None + assert relocated[0].attrib['data-id'] == 'p1' + assert relocated[0].has_class('new-class') + assert relocated[0].css('.new-description')[0].text == 'Description 1' + + @pytest.mark.asyncio + async def test_element_relocation_async(self): + """Test relocating element after structure change in async mode""" + original_html = ''' +
+
+
+

Product 1

+

Description 1

+
+
+

Product 2

+

Description 2

+
+
+
+ ''' + changed_html = ''' +
+
+
+
+
+

Product 1

+

Description 1

+
+
+
+
+

Product 2

+

Description 2

+
+
+
+
+
+ ''' + + # Simulate async operation + await asyncio.sleep(0.1) # Minimal async operation + + old_page = Adaptor(original_html, url='example.com', auto_match=True) + new_page = Adaptor(changed_html, url='example.com', auto_match=True) + + # 'p1' was used as ID and now it's not and all the path elements have changes + # Also at the same time testing auto-match vs combined selectors + _ = old_page.css('#p1, #p2', auto_save=True)[0] + relocated = new_page.css('#p1', auto_match=True) + + assert relocated is not None + assert relocated[0].attrib['data-id'] == 'p1' + assert relocated[0].has_class('new-class') + assert relocated[0].css('.new-description')[0].text == 'Description 1'