Hi everyone, I have some really happy news to share. With #6797 [1] merged on November 3, the Feign migration is complete and our codebase is now free of REST Assured!
This started as my GSoC project and it ended up taking a lot longer than one summer, so it feels great to finally write this mail. *What changed* - All of our integration tests now talk to the server through the generated Feign client. - REST Assured is gone from integration-tests, oauth2-tests and twofactor-tests, and the Retrofit SDK is off the test classpath too. - The final PR alone touched 206 files and removed about 16,000 lines. *Why it's better* - We catch mistakes much earlier. If an API field changes, the build now breaks at compile time, so you find out right away instead of later in a 1 to 2 hour CI run. - Tests are simpler to write. You call typed methods now, so there's no more copying JSON around and hoping the fields are still right. - Our Swagger spec stays honest. The tests use the generated client, so when a field is missing from the spec, we notice it and fix it at the source. - Tests can run faster too. When I benchmarked the same 10 tests before and after, they went from about 13.4 seconds to 7.9 seconds, around 41% faster, and HTTP calls dropped from 76 to 56. That's because they no longer log in and hit a health check before every test. It's a small benchmark and I haven't measured the full suite, but it's a nice sign. *Writing new tests* If you're adding a new integration test, please start with the Feign Integration Tests chapter [2]. It covers how to lay out a test class, call the API, assert failures, and fix a generated model at the source. It also lists the conventions that kept coming up in reviews. *The new build check* We now have a Checkstyle rule called FeignNoRestAssured that rejects any io.restassured import. It runs as part of checkstyleTest on every pull request, and a violation fails the build. With the dependency gone, that import won't compile anyway. So if you have an open PR that still uses REST Assured, you'll need to move it to Feign when you rebase. You can run the check locally with: ./gradlew :integration-tests:checkstyleTest :oauth2-tests:checkstyleTest :twofactor-tests:checkstyleTest *The journey* If you're curious about how we got here, have a look at FINERACT-2609 [3]. I kept updating it all through the migration. The last stretch is in FINERACT-2967 [4]. *Thank you* A huge thank you to Adam Saghy, Attila Budai and Aman Mittal for helping me see this through. Adam, you reviewed so much of this work and carried the final PR over the line. Attila, you've been a great mentor from day one. Aman, thank you for your review and approval on the final PR. I learned a lot from all of you, and I'm continuing to learn more as I work. *One small note* My GitHub account (@DeathGun44) is temporarily suspended and I'm working on getting it back. That's why my PRs and comments aren't visible right now, and why Adam opened #6797 with my commits. My commits on develop are all safe. In the meantime, I've moved my profile to GitLab, and I've listed my contributions there with a link to each commit: Profile: https://gitlab.com/DeathGun44 Contributions: https://gitlab.com/DeathGun44/DeathGun44/-/blob/main/CONTRIBUTIONS.md Thanks everyone! Krishna Mewara *Apache Fineract* [1] https://github.com/apache/fineract/pull/6797 [2] https://github.com/apache/fineract/blob/develop/fineract-doc/src/docs/en/chapters/testing/integration-feign.adoc [3] https://issues.apache.org/jira/browse/FINERACT-2609 [4] https://issues.apache.org/jira/browse/FINERACT-2967
