update & add tests