Tasks to practice TDD
Репозиторий где можно попрактиковаться в написании кода после того как написаны юнит тесты по TDD Подробное объяснение что это и как работать с этим репозиторием в видео на ютуб (осторожно, там решение первой задачи) https://youtu.be/TvzVYxM626o
Вкратце: выбираете ветку, находите юнит тесты которые требуют код и пишете его, проверяете верность написанного кода посредством запуска юнит тестов
Форкайте репозиторий и наслаждайтесь задачами (пушить решение обратно в этот репозиторий не нужно!)
task/001-stack Стек, FIFO, LIFO рекомендуется написать реализации не используя другие коллекции (ограничиться использованием обычных массивов, https://youtu.be/TvzVYxM626o)
task/002-parse-anything парсим данные кастомным образом (знание типов данных в джава/котлин, не используйте преобразовывающие функции такие как toInt(), https://youtu.be/FJla-SnBfeM)
task/003-range найти в списке ближайшие числа с обоих сторон от указанного (https://youtu.be/tZZ2QBMLo4o)
task/004-password-validation валидация пароля по критериям (минимальная длина, количество букв в верхнем регистре, количество букв в нижнем регистре, количество цифр и количество спец.символов, https://youtu.be/-nbw-fmmZ7Y)
task/005-timed-cache кеш датасорс со временем жизни элементов. Когда айтем кладется в кеш, то задается время его жизни. По прошествию этого времени объект удаляется из памяти (https://youtu.be/HWZDpSgCXV4)
task/006-factorial-hard фабрика факториалов: исходя из типа числа вычислить значение факториала (рекурсия и знание типов данных, https://youtu.be/KYOGThlhT8I)
task/007-filter-list пишем вьюмодель на экран где список товаров и фильтры к ним, применив которые меняется список (https://youtu.be/7e3n1YHdueY)
task/008-contains-for проверка на содержание символа в строке с требованием максимального прохода по циклу (https://youtu.be/oVgskDFfxVU)
task/009-bubble-sort сортировка пузырьком с требованием минимальных циклов (смотри задачу 008, https://youtu.be/mdv6Js-t4Wc)
task/010-int-validations валидации интов используя шаблоны (декоратор и т.д.) пример (проверить что число положительное, не менее 15 и четное, https://youtu.be/E_t1tQhw7e4)
task/011-simple-callback простой колбек (https://youtu.be/cf9GgxuI0Hc)
task/012-lottery лотерейный билет (https://youtu.be/up1dhKWo6hA)
task/013-delay-coroutine задержка времени корутины (принудительно не отдаем ответ от корутины указанное время, https://youtu.be/Zr2qjxxWINE)
task/014-numbers математические операции с числами (https://youtu.be/ssS3Ocrc0L8)
task/015-login вьюмодель на логин с почтой и паролем и работа с интерактором и маперами (https://youtu.be/Ct6HH7nwdmA)
task/016-legacy-api работа с апи легаси вида (с колбеками в самом апи и в репозитории)
task/017-observer простой обсервер паттерн (https://youtu.be/pdDvddUvpCc)
task/018-observer-limited патерн обсервер с максимальным количеством активных подписчиков
task/019-observer-different-types патерн обсервер с 2 типами (обычный и премиум) как подписчиков так и контента (рекомендуется решить 17 и 18 прежде)
task/020-chain-responsibility паттерн цепочка обязанностей в классическом виде (из проекта ЕСР https://youtu.be/gf-MIZIwm2E)
task/021-interactor-parser непростая задача на взаимосвязь парсера с интерактором (из проекта ЕСР https://youtu.be/gf-MIZIwm2E)
task/022-rx-viewmodel RxJava2 простая цепочка и тест на ViewModel (https://youtu.be/cNXVzCUN5p8)
task/023-lambda юнит тесты с лямбдой как аргументом в конструкторе класса (https://youtu.be/KRpJPGGxmOs)
task/024-messages-view-model вьюмодель сообщений из проекта ЕСР (рекомендуется решить сначала задачи 020 и 021) (https://youtu.be/gf-MIZIwm2E)
task/025-paging вьюмодель с динамической подгрузкой следующего и предыдущего контента (https://youtu.be/zGYCcKtcSf4)
task/026-incapsulation пишем правило чистого кода для принципа инкапсуляции для статического анализатора кода (https://youtu.be/E5Ra6ZUCWt8)
task/027-custom-livedata своя ливдата в вьюмодельке (https://youtu.be/t9qIe6BopKU)
task/028-inheritance пишем правило чистого кода для принципа наследование для статического анализатора кода (https://youtu.be/F1WCOTDSedA)
task/029-cloudDataSource разные ответы от сервера в ретрофите, хендлим ошибки (https://youtu.be/6fXu5LAUcUU)
task/030-markdown маркдаун парсер свое решение (сложно) (https://youtu.be/KExoqco07ys)
task/031-good-code-rule-functions правила хорошего кода для функций (https://youtu.be/iR7PI-fuBE4 https://www.youtube.com/watch?v=-31NWghYlAo)
task/032-min-and-max минимум и максимум из чисел (простейшая задача https://youtu.be/RFRrVU0Z9s4)
task/033-node-builder билдер патерном порождаем односвязный список с автогенерацией айди (https://youtu.be/9YCj3_EPDOc)
task/034-revive-view-model вьюмодель которая умеет переживать смерть процесса андроид и восстановить юай стейт (https://youtu.be/HvFLYshXz0o)
task/035-codegen-part-one кодогенератор: пишем код, который будет генерировать код после юнит тестов (https://youtu.be/rA-au9yJ7cc)
task/036-multithreading-observer многопоточный обсервер патерн : 2 входа 1 выход (https://youtu.be/znEFXrT82vs)
task/037-login-view-model пишем вьюмодель на логин (https://youtu.be/L9Dt5ERXf-E https://youtu.be/UFQUnyBKJMI)
task/038-login-view-model-chain цепочка обязанностей в логин вьюмодель из задачи 37 (https://youtu.be/QXwggW1FNcY)
task/039-mediator mediator pattern (https://youtu.be/Apf8bj4lIfk)
task/040-mediator-ui-test mediator pattern 2 tests: ui test and unit test (https://youtu.be/_CGXMoaBl_0)
task/041-comparable diffutil list item to compare (https://youtu.be/DuVVnBbI4qw)
task/042-multithreading-coroutines run multiple coroutines in repository (https://youtu.be/5vwoqElj0bc)
task/043-repository-test CloudFirst and CacheFirst repository tests (https://youtu.be/mVm6UW8vu-w)
task/044-login_interactor-test Max attempts logic https://youtu.be/g5bRENIa9yw