separating UI testing from core logic