full generation flow with test