add middelwares
add tests