Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/flexberry/flexberry-foundation-internship-task


https://github.com/flexberry/flexberry-foundation-internship-task

Last synced: about 1 month ago
JSON representation

Awesome Lists containing this project

README

        

# Тестовое задание (Junior Frontend-разработчик/стажер)

Требуется разработать небольшое одностраничное веб-приложение без использования JavaScript-фреймворков на основе [открытого тестового задания компании Aviasales](https://github.com/KosyanMedia/test-tasks/tree/master/aviasales_frontend).

## Требования

1. Необходимо создать HTML-страницу, на которой будут отображаться первые пять билетов соотвествующих выбранным фильтрам и условию сортировки.
2. Макет (Figma) можно скачать [тут](https://github.com/Flexberry/flexberry-foundation-internship-task/blob/main/Aviasales%20Test%20Task.fig?raw=true). Комментарии по верстке страницы с макета:

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

Пример результата верстки макета с данными:
![](search_preview.png?raw=true)

3. Данные для отображения билетов должны подгружаться с тестового сервера компании Aviasales. Описание серверного API представлено [тут](https://github.com/Flexberry/flexberry-foundation-internship-task/blob/main/SERVER.md).

* Обратите внимание, что для получения полного набора данных для последующей фильтрации и сортировки требуется последовательно выполнить несколько одинаковых GET-запросов, на которые иногда сервер может отвечать ошибкой (это не означает, что необходимо перестать отправлять запросы дальше).
* Полученные данные о билетах необходимо сохранить в массиве, после чего применять операции фильтрации и сортировки к полученным данным в соответствии с теми условиями, которые выбраны в пользовательском интерфейсе.
* При перезагрузке страницы с приложением в браузере необходимо получать новый идентификатор поиска.
* С примером ответа сервера можно ознакомиться [тут](https://github.com/Flexberry/flexberry-foundation-internship-task/blob/main/response-example.json).
* **ВНИМАНИЕ!** В последнее время тестовый сервер компании Aviasales перестал быть доступен. Если тестовый сервер недоступен, то необходимо развернуть локальный сервер с использованием [JSON Server](https://github.com/typicode/json-server) и опубликовать с его помощью [тестовые данные](https://github.com/Flexberry/flexberry-foundation-internship-task/blob/main/response-example.json) (при этом атрибут `stop:true` из тестовых данных нужно убрать, чтобы сервер запустился).

4. Картинки с логотипами авиакомпаний доступны по адресу http://pics.avs.io/99/36/{IATA_CODE_HERE}.png (требуется указать [iata-код авиакомпании](https://support.travelpayouts.com/hc/ru/articles/203956073-%D0%9B%D0%BE%D0%B3%D0%BE%D1%82%D0%B8%D0%BF%D1%8B-%D0%B0%D0%B2%D0%B8%D0%B0%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D0%B9-%D0%B8-%D1%84%D0%BB%D0%B0%D0%B3%D0%B8-%D1%81%D1%82%D1%80%D0%B0%D0%BD), например, http://pics.avs.io/99/36/SU.png); iata-код авиакомпаний можно получить в свойстве carrier билета.
5. Для взаимодействия с сервером необходимо использовать [Fetch API](https://developer.mozilla.org/ru/docs/Web/API/Fetch_API/Using_Fetch).
6. Приложение должно работать в последних версиях браузеров. Соответственно можно использовать все современные возможности языка JavaScript, включая стандарты ES6, ES7 и т.п.
7. Программный код должен отражать понимание автором «хорошего кода». Для проверки стиля кода возможно настроить линтинг, а также инструменты автоматического форматирования кода (не обязательное требование).
8. Допускается использовать шаблонизаторы HTML, препроцессоры CSS, любые дополнительные библиотеки, а также настраивать систему сборки проекта (на усмотрение соискателя, инструменты можно использовать любые).
9. Для проверки реализации требований можно покрыть исходный код и приложение тестами, при этом используемые виды тестов и процент покрытия кода тестами остаются на усмотрение соискателя (не обязательное требование).
10. Всё, что не оговорено в задании явно, решается на усмотрение соискателя.
11. Результат выполнения задания требуется опубликовать в личном репозитории на GitHub, ссылку на репозиторий необходимо отправить на .