Command pattern with tests