use data driven test
refactor tests
improve test coverage