# Модуль № 4: Осуществление интеграции программных модулей

## Текст задания

Для проверки данных от клиентов разработайте приложение, которое позволит провести валидацию на корректность данных. Результат проверки необходимо фиксировать в документе [ТестКейс.docx](./ТестКейс.docx).

Сначала заполните в документе `ТестКейс.docx` столбец "Действие" и "Ожидаемый результат" используя предоставленный текстовый редактор. Добавьте закладки в столбец "Результат". Необходимо провести валидацию ФИО клиента на вхождение запрещенных символов. Проверьте два любых критерия.

~~Для эмуляции отправки данных от клиента Вам необходимо запустить приложение `TransferSimulator.exe`.~~ Методы эмулятора описаны в файле [api_info.pdf](./api_info.pdf).

Я написал простенький эмулятор на питоне [server.py](../solution/server.py). Возвращается ФИО в которое случайным образом добавляется "мусор".

Макет формы представлен на рисунке.

![](../solution/module4_01.png)

При нажатии на кнопку "Получить данные" данные загружаются с эмулятора и отображаются на форме.

После нажатия на кнопку "Отправить результат теста" происходит проверка данных по заполненному шаблону, и результат проверки отображается на форме и в соответствующей строке таблицы в столбце "Результат".

**Важно**: Разрабатывать API Вам не нужно. Используйте предоставленный API.

Необходимые приложения (находятся в каталоге `data` этого репозитория): `api_info.pdf`,`TransferSimulator.exe`, `ТестКейс.docx`, `Требования к разработке.pdf`, `Настройка ПК для эмулятора.pdf`

## Решение

Задание, ИМХО, написано криво. Своими словами: Вы должны написать оконное приложение с двумя кнопками (скрин есть выше). При клике на кнопку "Получить данные" вы должны получить данные из АПИ (http сервер прилагается) и показать полученные данные в окне (справа от кнопки). При клике на кнопку "Отправить результаты теста" Вы должны вызвать **свой** метод проверки и результат проверки вывести справа от кнопки. Потом руками переписать полученные данные в приложенный файл `ТестКейс.docx`.

1. Получение данных из АПИ

    ```cs
    // обработчик клика на кнопку
    private void GetFIOFromApi(object sender, RoutedEventArgs e)
    {
        HttpClient client = new HttpClient();
        var body = client.GetStringAsync("http://localhost:4444").Result;

        JObject jObject = JObject.parse(body);

        FullNameTextButton.Text = JObject["value"].ToString();
    }
    ```

1. Проверка валидности ФИО

    Вариантов может быть несколько: либо создать массив запрещённых символов и перебрать их в цикле сравнив с ФИО из предыдущего пункта, либо написать регулярку (что на мой взгляд правильнее)

    Ниже пример проверки с выводом на консоль, Вам нужно выводить в текстовое поле вашего оконного приложения.

    ```cs
    Console.Write(jObject["value"].ToString());

    if (Regex.IsMatch(jObject["value"].ToString(), @"[А-Яа-яЁё]+\s+[А-Яа-яЁё]+\s+[А-Яа-яЁё]+"))
        Console.WriteLine(": Успешно");
    else     
        Console.WriteLine(": Не успешно");
    ```

## Пример заполнения `ТестКейс.docx`

Действие | Ожидаемый результат | Результат (Успешно/Не успешно)
---------|---------------------|-------------------------------
Колесников Евгений Иванович | Успешно | Успешно
Кропинов! Андрей Михайлович | Не успешно | Не успешно
Сергеев# Иван Сергеевич | Не успешно | Успешно

1. В колонке "Действие" пишете ФИО, полученное от АПИ
1. В Колонке "Ожидаемый результат" пишете то что должно получиться
1. В колонке "Результат" пишете результат проверки вашим методом

В идеале "Ожидаемый результат" и "Результат" должны совпадать
