add unit tests && code fix