понедельник, 25 июля 2011 г.

meter-webapp --- система учёта показаний водных счётчиков

Общие сведения

Каждый месяц мне, как и другим жителям моего многоквартирного дома, приходится проделывать процедуру под названием "заполнение справки о расходах холодной и горячей воды". Данная процедура включает в себя заполнение бланка, в котором указываются: ФИО, номер квартиры, номера счётчиков холодной и горячей воды, предыдущие показания счётчиков холодной и горячей воды, дата подачи предыдущих показаний и, разумеется, текущие показания счётчиков холодной и горячей воды. Вдобавок, бланк заполняется в двух экземплярах. Ясно, что вся информация кроме текущих показаний либо не меняется вообще, либо может быть вычислена на основе уже имеющихся данных, причём эту задачу совсем несложно автоматизировать. Именно этой цели и служит web-приложение meter-webapp. Ещё одна приятная мелочь - email-напоминалка, которая отслеживает подал человек показания счётчиков в текущем месяце или нет.

Краткая техническая информация
Тестирование
  • Модульные тесты для всех пользовательских ORM-классов, порождённых от Class::DBI::*
  • Тест, проверяющий функционирование ORM-классов в комплексе
  • Тест, проверяющий работу web-приложения на самом вернем уровне
Все тесты самостоятельно создают для себя всё необходимое окружение и убирают за собой после завершения. Тесты первых двух типов создают для себя временную БД со всеми необходимыми таблицами. Результат манипуляции с данными проверяется при помощи модуля Test::DatabaseRow.

Функциональный тест также создаёт временную БД, инициализирует её, генерирует конфигурационный файл Apache-а, запускает instance на выделенном порту и полностью имитирует работу нескольких пользователей с сайтом: регистрацию, логин, настройку информации по квартире, подачу показаний и т.д. Все вышеперечисленное осуществляется при помощи модуля Test::WWW::Mechanize. После завершения теста, все временные файлы удаляются.

Если выставить переменную окружения - DONT_CLEANUP, то все временные конфиги, базы данных будут оставлены для ручного изучения и анализа.

На данный момент набор тестов покрывает не все случаи и будет расширяться.

Что дальше
  • Если получится, то "распространить среди жильцов нашего ЖЭКа" (C).
  • Do TODO