Google Summer Of Code 2019 Report
Organization: The Mifos Initiative / Apache Fineract.
Mentors: Courage Angeh and Rahul Goel.
Project: Improve robustness of Mifos X and Apache Fineract by fixing issues/feature requests in backlog.
Mifos X and Apache Fineract is widely used by financial institutions of all different sizes and methodologies around the world. With that widespread user base there is a vast array of different processes and procedures that we would like to support as slight modifications over the common functionality provided. Over the past several years, we have captured these minor enhancements in our issue tracker as feature requests. Also included in this backlog are additional minor and less critical bugs that have been reported but have not been fixed yet. This backlog has grown and it would be a very impactful project for an intern to work on completing these bug fixes and minor enhancement. The difficulty level of these issues ranges from low to high and touch all componets of the platform - most don't require too much domain knowledge but some will.
I took on the challenge of a project that was separate from my initial proposal. This was my first time working with a large pre-existing backend codebase. In my previous internship I worked mainly on smaller Android/iOS applications. I found myself navigating dozens of classes instead of just a few. This project also involved getting up to speed on Fineract’s design and architecture and understanding several of its libraries/frameworks at at least a basic level (Spring, Spring Boot, JPA, etc.), and learning domain terminology related to microfinance. My mentors advised me to create a basic practice Spring Boot app to familiarize myself with these above concepts.
FIN-615: Investigated, debugged, and resolved Amazon S3 issue related to admin configuration error and updated documentation to avoid future confusion.
FIN-609: Implemented group top-up loan functionality.
Previously group top-up loans were not able to be created because by the server was not sending the JSON array (named activeClientLoanOptions) which contained the IDs of active group loan accounts that could be closed in order to create the top-up group loan account. It was later determined via mailing list interactions that this wasn’t a valid use case, even though the Jira issue requested it and I was instructed to pursue it at the time.
FIN-722: Implemented fix for issue where certain integration tests would fail only on the first day of the month.
Fixes issue where global configurations were affecting state between integration tests. This caused LoanReschedulingWithinCenterTest to fail only on the first day of the month because the "skip-repayment-on-first-day-of-month" configuration was modified but never reset by GlobalConfigurationTest. This fix resets and verifys that all global configurations were reset to their default state before/after other relevant integration tests.
- This past week I received further (internal) emails regarding this PR review that I still need to investigate and resolve.
FIN-723: Implemented fix for issue where certain integration tests would fail when run on a system whose time zone was not the same as the tenant’s (IST).
This was caused by some tests mistakenly using the DateUtils class instead of the test-specific Utils class. The Utils class hardcodes the tenant's TZ, whereas DateUtils read the null TZ from the test database.
- (The TravisCI build currently fails due to separate issue: https://issues.apache.org/jira/browse/FINERACT-788)
- FIN-722 demo: https://www.youtube.com/watch?v=bM_Z1-LCit8&feature=youtu.be
- FIN-723 demo: https://www.youtube.com/watch?v=P_QBKgvsWdg&feature=youtu.be
- Interaction regarding several issues with the Fineract developer mailing list (can navigate email thread and see replies).
- Regarding FIN-609: https://mail-archives.apache.org/mod_mbox/fineract-dev/201907.mbox/%3C326d5b89e990fc09388744b27a90877b%40disroot.org%3E
- Regarding FIN-722: https://mail-archives.apache.org/mod_mbox/fineract-dev/201906.mbox/%3CCALiX4iat3AaAnGmFh-DxCQWtKaqwnhGsoymTcxD-UagOd--BOQ%40mail.gmail.com%3E
- Regarding FIN-723: https://mail-archives.apache.org/mod_mbox/fineract-dev/201907.mbox/%3CAM6PR06MB531732ABE4A9A0B1034BCE5AE4C60%40AM6PR06MB5317.eurprd06.prod.outlook.com%3E
- Regarding FIN-723: https://mail-archives.apache.org/mod_mbox/fineract-dev/201907.mbox/%3C8024DAC2-E3B0-4ED8-8C75-3EB5570AFC08%40gmail.com%3E
- Answering a question about failed integration tests: https://mail-archives.apache.org/mod_mbox/fineract-dev/201906.mbox/%3C87b6b5d949eeab2f8df0141b65d763b9%40disroot.org%3E
Future work needed:
- Refactor out all usages of MySQL date/time functions (that use the system's date/time/TZ) to avoid other date/time/TZ issues. (This turned out to be separate from FIN-723, however it's likely still needed).
- Redo Fineract's date/time handling to only read/write UTC and handle all conversions at the client UI level. (See the FIN-723 threads above).
- Using Spring Framework's Integration Test utilities for aborting DB transactions instead of comitting them in order to isolate state between ALL integration tests. (See the FIN-722 thread above).
It's been an awesome experience to contribute and learn with GSOC and The Mifos Initiative. Coming into this summer, my goal was to further ignite a lifelong passion for open source contribution, and I think it's safe to say I've accomplished this goal. Huge thanks to Ed Cable (Mifos president/CEO), Courage Angeh (mentor), and Rahul Goel (mentor) for their consistent help and support over the summer.