add lazy decorator factory and tests