Напутствие к тестовому заданию.
- Выбор ЯП (swift или obj-c) в зависимости от договоренностей или на усмотрение кандидата, если отдельной договоренности не было
- Допустимо уменьшать бизнес-требования тестового задания, сокращая или модифицируя его в случае, если та или иная функция несоразмерно увеличивает трудоемкость работ или видится нецелесообразной по тем или иным причинам. При предоставлении результата добавить пояснение, о том, какая часть убрана из задания и по каким причинам.
- Предоставленные исходные данные допустимо преобразовывать в любую иную форму представления, сохраняя при этом сам состав информации и предоставив само преобразование в виде утилиты или иного способа.
- Все неоднозначности описания данного задания трактуются в пользу кандидата.
- Оценку будет проходить как «внешняя» функциональная , так и «внутренняя» составляющие, включая крайние и неосновные случаи поведения и оформление кода, включая его структурирование и комментирование.
- Ограничений на используемые компоненты и библиотеки нет. В случае, если будет задействованы "внешние" компоненты, то их необходимо подключить через использование cocoa pods
Хотелось бы увидеть содержательные комментарии в коде там, где это необходимо.
Расскажите нам, как вы тестировали результат своей работы. Какие используете инструменты и как вы осуществляете тестирование. Наличие юнит-тестов и авто-тестов в проекте будет существенным плюсом
Результат выполнения задания нужно будет оформить здесь же, на гитхабе. В качестве ответа не нужно присылать никаких(!) ZIP архивов и наборов файлов. Все ваши ответы должны быть оформлены на https://github.com/ . Вы присылаете только ссылку на ваш репозиторий. У нас в компании применяется GIT, и если вы его не знаете, вам стоит освоить базу самостоятельно. Если у вас еще нет аккаунта, то это хороший повод его завести.
Приложение, имеющее стандартный тулбар с двумя разделами: "Расписание" и "О приложении"
Первый экран раздел должен позволять выбрать:
- выбрать станцию «откуда».
- Выбрать станцию «куда».
- Выбрать дату отправления.
Экран выбора станции должен строиться на основе табличного представления с группировкой и должен
- Содержать общий перечень станций (см вложенный файл), сгруппированный по значению «Город, Страна» (Полный перечень групп и элементов должен быть представлен на одном экране, с возможностью пролистывания всего содержимого)
- Предоставлять возможность поиска по части имени (как начальной, так и входящей, независимо от регистра). Поиск необходимо осуществлять на том же экране, где представлен список станций с использование SearchViewController
- Предоставлять возможность просмотра детальной информации о конкретной станции (именование и ее полный адрес, включая город, регион и страну). Возможность открыть просмотр этой информации должна быть доступна из экрана с перечнем станций
В данном разделе необходимо разместить информацию:
- copyright
- версия приложения
Входные данные предоставлены в формате JSON
{
"citiesFrom" : [ ],
"citiesTo" : [ ]
}
Где citiesFrom – массив возможных пунктов отправления, а citiesTo – массив возможных пунктов назначения
Каждый элемент массива представляет собой описание города, с полями:
{
// Страна
"countryTitle" : "Австрия",
// Координаты города
"point" : {
"longitude" : 16.36879539489746,
"latitude" : 48.20253753662109
},
// Район
"districtTitle" : "",
// идентификатор
"cityId" : 2352,
// Название города
"cityTitle" : "Вена",
// Название региона
"regionTitle" : "",
// Перечень станций города
"stations" : […]
}
Каждая станция описывается объектом:
{
// именование страны – денормализация данных, дубль из города
"countryTitle" : "Австрия",
// Координаты станции (в общем случае отличаются от координат города)
"point" : {
"longitude" : 16.36879539489746,
"latitude" : 48.20253753662109
},
"districtTitle" : "",
// идентификатор города (обратная ссылка на город)
"cityId" : 2352,
// наименование города (обратная ссылка на город)
"cityTitle" : "город Вена",
// именование региона
"regionTitle" : "",
// идентификатор станции
"stationId" : 10154,
// полное именование станции
"stationTitle" : "International Busterminal, Edbergstarsse 200 A"
},