add State model and tests