|
| 1 | +import os |
| 2 | + |
| 3 | +import pytest |
| 4 | +import tests |
| 5 | +from xmlgenerator.configuration import GeneratorConfig |
| 6 | +from xmlgenerator.generator import XmlGenerator |
| 7 | +from xmlgenerator.randomization import Randomizer |
| 8 | +from xmlgenerator.substitution import Substitutor |
| 9 | +from xmlschema import XMLSchema |
| 10 | + |
| 11 | +os.chdir(os.path.dirname(os.path.abspath(tests.__file__))) |
| 12 | + |
| 13 | +@pytest.fixture |
| 14 | +def randomizer(): |
| 15 | + """Фикстура для создания генератора случайных значений.""" |
| 16 | + return Randomizer() |
| 17 | + |
| 18 | +@pytest.fixture |
| 19 | +def substitutor(randomizer): |
| 20 | + """Фикстура для создания подстановщика значений.""" |
| 21 | + return Substitutor(randomizer) |
| 22 | + |
| 23 | +@pytest.fixture |
| 24 | +def generator(randomizer, substitutor): |
| 25 | + """Фикстура для создания генератора XML.""" |
| 26 | + return XmlGenerator(randomizer, substitutor) |
| 27 | + |
| 28 | +@pytest.fixture |
| 29 | +def config(): |
| 30 | + """Фикстура для создания конфигурации генератора.""" |
| 31 | + return GeneratorConfig() |
| 32 | + |
| 33 | +@pytest.mark.skip(reason="not yet implemented") |
| 34 | +class TestIntegration: |
| 35 | + """Интеграционные тесты для проверки взаимодействия компонентов.""" |
| 36 | + |
| 37 | + def test_complex_schema_generation(self, generator, config): |
| 38 | + """ |
| 39 | + Проверяет генерацию XML для сложной схемы с множеством типов данных |
| 40 | + и вложенных элементов. |
| 41 | + """ |
| 42 | + xsd_schema = XMLSchema("data/complex/integration/complex_schema.xsd") |
| 43 | + generated_xml = generator.generate_xml(xsd_schema, config) |
| 44 | + |
| 45 | + # Проверяем наличие всех обязательных элементов |
| 46 | + assert generated_xml.xpath("/root/person/name") |
| 47 | + assert generated_xml.xpath("/root/person/age") |
| 48 | + assert generated_xml.xpath("/root/person/address") |
| 49 | + |
| 50 | + # Проверяем валидность сгенерированных значений |
| 51 | + age = int(generated_xml.xpath("/root/person/age/text()")[0]) |
| 52 | + assert 0 <= age <= 120 |
| 53 | + |
| 54 | + # Проверяем корректность вложенных элементов |
| 55 | + address_elements = generated_xml.xpath("/root/person/address/*") |
| 56 | + assert len(address_elements) >= 1 |
| 57 | + |
| 58 | + def test_configuration_override(self, generator, config): |
| 59 | + """ |
| 60 | + Проверяет корректность переопределения конфигурации |
| 61 | + при генерации XML. |
| 62 | + """ |
| 63 | + # Создаем конфигурацию с переопределенными значениями |
| 64 | + custom_config = GeneratorConfig() |
| 65 | + custom_config.set_value("person.name", "John Doe") |
| 66 | + custom_config.set_value("person.age", "30") |
| 67 | + |
| 68 | + xsd_schema = XMLSchema("data/complex/integration/person_schema.xsd") |
| 69 | + generated_xml = generator.generate_xml(xsd_schema, custom_config) |
| 70 | + |
| 71 | + # Проверяем, что значения были переопределены |
| 72 | + assert generated_xml.xpath("/root/person/name/text()")[0] == "John Doe" |
| 73 | + assert generated_xml.xpath("/root/person/age/text()")[0] == "30" |
| 74 | + |
| 75 | + def test_randomization_distribution(self, generator, config): |
| 76 | + """ |
| 77 | + Проверяет равномерность распределения случайных значений |
| 78 | + при генерации XML. |
| 79 | + """ |
| 80 | + xsd_schema = XMLSchema("data/complex/integration/random_schema.xsd") |
| 81 | + values = [] |
| 82 | + |
| 83 | + # Генерируем множество значений |
| 84 | + for _ in range(1000): |
| 85 | + generated_xml = generator.generate_xml(xsd_schema, config) |
| 86 | + value = generated_xml.xpath("/root/value/text()")[0] |
| 87 | + values.append(value) |
| 88 | + |
| 89 | + # Проверяем распределение значений |
| 90 | + unique_values = set(values) |
| 91 | + assert len(unique_values) > 10 # Должно быть достаточно уникальных значений |
0 commit comments