Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timezone improvement #85

Merged
merged 355 commits into from
Sep 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
355 commits
Select commit Hold shift + click to select a range
144b06b
Merge branch 'feature/ECDDC-591_refactor_users_stream' into 'release/40'
Mar 24, 2022
9e5bc08
Merge branch 'release/40' into feature/ECDDC-653_implement-tests-for-…
Mar 24, 2022
38d3e82
Merge branch 'feature/ECDDC-603_add_interest_accrual_breakdown_stream…
Mar 24, 2022
5c127d1
Merge branch 'feature/ECDDC-649_add_missing_tasks_fields' into 'relea…
Mar 24, 2022
2760547
Merge branch 'feature/ECDDC-652_adjust_snyk_dev_test' into 'release/40'
Mar 24, 2022
4e19f66
Merge branch 'feature/ECDDC-653_implement-tests-for-fields' into 'rel…
Mar 25, 2022
0d99a79
Added tap tester job to ci pipeline
Mar 25, 2022
3992aa7
Refactored activities stream
Mar 28, 2022
7962223
Added unit tests for activities generator
Mar 28, 2022
0033c64
Updated tap tester job
Mar 25, 2022
4e540c5
squash! Updated tap tester job
Mar 28, 2022
a14e736
Updated tap tester job
Mar 28, 2022
b8d8d86
Updated tap tester job
Mar 28, 2022
fa1f6bb
Updated tap tester job
Mar 28, 2022
fdaf693
Updated tap tester job
Mar 28, 2022
ecaac46
Finished audit trail refactor, needs polishing and unit tests
Mar 28, 2022
b69651d
Finished audit trail refactor, needs polishing and unit tests
Mar 28, 2022
8a009f1
Merge branch 'feature/ECDDC-657_Refactor-audit-trail-stream' of gitla…
Mar 28, 2022
7fd5664
Updated tap tester job
Mar 28, 2022
e0c517a
Updated tap tester job
Mar 28, 2022
fa6e874
Updated tap tester job
Mar 28, 2022
84009ce
Updated tap tester job
Mar 28, 2022
9be401f
Finished refactoring of Audit Trail stream
Mar 28, 2022
0e51892
Implemented unit tests for audit trail stream
Mar 29, 2022
352a0d8
Update test_processors.py
Mar 29, 2022
6c6eeb6
Added missing fields to loan_transaction's 'affected_amounts' object
Mar 29, 2022
3ce36aa
Added all the other missing fields
Mar 29, 2022
6914b9c
Fixed field name
Mar 29, 2022
9f68728
Merge branch 'feature/ECDDC-667_Add-affected-amount-missing-fields' i…
Mar 29, 2022
7bb9829
Merge branch 'feature/ECDDC-658_Refactor-activities-stream' into 'rel…
Mar 29, 2022
ef0c811
Merge branch 'release/40' into 'feature/ECDDC-657_Refactor-audit-trai…
Mar 29, 2022
355479b
Updated tap tester job
Mar 29, 2022
68a8645
Updated tap tester job
Mar 29, 2022
8e6affb
Merge branch 'feature/ECDDC-657_Refactor-audit-trail-stream' into 're…
Mar 30, 2022
92fbea6
Merge branch 'master' into 'release/40'
Mar 30, 2022
1c85c0c
Refactored endpoint_deduplication in Base Processor, moving it to a s…
Mar 31, 2022
6ad9210
Finished refactoring of loan_products stream, waiting on schema
Mar 31, 2022
e197d1e
Added old field back, so that the change is backwards compatible
Apr 1, 2022
96e9481
Finished refactoring of deposit_products stream, waiting on schema
Apr 1, 2022
f6beb79
Merge branch 'hotfix/ECDDC-674_add-tax-on-interest-from-arrears-amoun…
Apr 1, 2022
b96009f
Removed sorting from deposit products as it's not present in the v2
Apr 1, 2022
354ea21
Added loan_products stream to sync.py
Apr 1, 2022
5fb1614
Added deposit products to sync.py
Apr 1, 2022
66cbf87
Finished refactor of custom_field_sets, waiting for schema script
Apr 1, 2022
6096429
Added some custom exceptions to the Tap, and throwing/catching them i…
Apr 4, 2022
e8e8ffb
Merge branch 'feature/ECDDC-672_Rethink-choose-next-record' into 'rel…
Apr 5, 2022
de3c109
Added work so far, need to fetch changes from release/41
Apr 5, 2022
89e3b16
Merge branch 'release/41' into feature/ECDDC-543_Refactor-gl-accounts…
Apr 5, 2022
de4cd27
Added the script that generates streams schema
Apr 5, 2022
4e87c4a
Final changes to gl_accounts stream
Apr 6, 2022
f87eefb
Fixed some edge cases
Apr 6, 2022
bb24a4e
Added custom exceptions and missing stream
Apr 6, 2022
af3af34
Updated loan_products schema
Apr 6, 2022
c5f63c2
Updated deposit_products schema
Apr 6, 2022
b5798a5
Removed problematic child stream
Apr 6, 2022
05e3cdf
Updated custom_field_sets schema
Apr 7, 2022
aeff576
Updated gl_accounts schema
Apr 7, 2022
195a996
Ordered alphabetically the fields and added custom_fields field to sp…
Apr 7, 2022
a0e68d8
Reorganised the script into multiple files
Apr 7, 2022
9d7ed9f
Refactored gl_journal_entries, including unit tests and schema update
Apr 7, 2022
c917c44
Merge branch 'release/41' into feature/ECDDC-588_Refactor-loan-produc…
Apr 7, 2022
6bbd8af
Merge branch 'release/41' into feature/ECDDC-583_refactor-deposit-pro…
Apr 7, 2022
f41b618
Merge branch 'release/41' into feature/ECDDC-582_refactor-custom-fiel…
Apr 7, 2022
ea05702
Fixed unit test
Apr 7, 2022
140a6f1
Fixed unit tests
Apr 7, 2022
47a5c4d
Finished refactor for release/41 streams, need to merge with other br…
Apr 8, 2022
5a45c39
Merge branch 'feature/ECDDC-588_Refactor-loan-products-stream' into f…
Apr 8, 2022
d6ef0d6
Merge branch 'feature/ECDDC-583_refactor-deposit-products-stream' int…
Apr 8, 2022
535d87c
Merge branch 'feature/ECDDC-582_refactor-custom-field-sets-stream' in…
Apr 8, 2022
f2f90bb
Merge branch 'feature/ECDDC-543_Refactor-gl-accounts-stream' into fea…
Apr 8, 2022
01d5d82
Merge branch 'feature/ECDDC-430_Refactor-gl-journal-entries-stream' i…
Apr 8, 2022
9ccc181
Refactored imports
Apr 8, 2022
28a18d7
Merge remote-tracking branch 'origin/feature/ECDDC-673_schema_fetcher…
Apr 8, 2022
5816240
Fixed sync isinstance (replaced with issubclass)
Apr 8, 2022
970262f
Fixed issue with generator values
Apr 11, 2022
d6483f3
moved custom_fields field to the properties
Apr 11, 2022
a76de55
Merge remote-tracking branch 'origin/feature/ECDDC-673_schema_fetcher…
Apr 11, 2022
b6737f3
pascal to snake convertor - added small hack for ID word
Apr 11, 2022
9b924a9
Merge remote-tracking branch 'origin/feature/ECDDC-673_schema_fetcher…
Apr 11, 2022
2f40b34
added custom_fields field to all streams
Apr 12, 2022
2d829ec
Merge remote-tracking branch 'origin/feature/ECDDC-673_schema_fetcher…
Apr 12, 2022
3a67298
updated the schemas
Apr 12, 2022
6ecc4db
Merge branch 'hotfix/ECDDC-678_Fix-processor-choose-next-record' into…
Apr 13, 2022
113abfd
Merge branch 'feature/ECDDC-430_Refactor-gl-journal-entries-stream' i…
Apr 13, 2022
46a7369
Merge branch 'feature/ECDDC-582_refactor-custom-field-sets-stream' in…
Apr 13, 2022
fbb2b0b
Merge branch 'feature/ECDDC-588_Refactor-loan-products-stream' into '…
Apr 13, 2022
6fc823c
Merge branch 'release/41' into feature/ECDDC-543_Refactor-gl-accounts…
Apr 13, 2022
0532972
Merge branch 'release/41' into feature/ECDDC-583_refactor-deposit-pro…
Apr 13, 2022
510e3b5
Merge branch 'feature/ECDDC-673_schema_fetcher' into 'release/41'
Apr 13, 2022
24bcaf1
Merge branch 'feature/ECDDC-543_Refactor-gl-accounts-stream' into 're…
Apr 13, 2022
47643a7
Merge branch 'release/41' into feature/ECDDC-583_refactor-deposit-pro…
Apr 13, 2022
6fa7496
Merge branch 'feature/ECDDC-583_refactor-deposit-products-stream' int…
Apr 13, 2022
65a3bb8
Merge branch 'release/41' into feature/ECDDC-656_Refactor-Tap-core-code
Apr 13, 2022
93291c2
Merge branch 'release/41' into 'feature/ECDDC-677_schema_checker'
Apr 13, 2022
7d4124f
fixed merge conflicts issue
Apr 13, 2022
14088c5
Merge branch 'feature/ECDDC-677_schema_checker' into 'release/41'
Apr 13, 2022
59f9d3f
Merge branch 'feature/ECDDC-656_Refactor-Tap-core-code' into 'release…
Apr 13, 2022
e7ebdab
Merge branch 'feature/ECDDC-654_tap_tester_to_ci' into 'release/41'
Apr 13, 2022
3d65a3c
adjusted an import to match the new structure
Apr 14, 2022
821070e
renamed mambu unittests folder
Apr 14, 2022
457321b
updated ci file to use the new tests dir name
Apr 14, 2022
132f7a3
added fixture jsons
Apr 14, 2022
2526d90
First draft of the PerformanceMetrics module
Apr 14, 2022
d12a9b3
Finished Performance Metrics baseline implementation
Apr 14, 2022
8ae91d0
Added records/s (per extraction, not per request) and total extractio…
Apr 14, 2022
0e8f5d3
Merge branch 'feature/ECDDC-656_Refactor-Tap-core-code' into 'release…
Apr 15, 2022
b634430
Improved performance metrics (more for the Multithreaded version than…
Apr 18, 2022
15c6d6f
Implemented multithreaded Tap PoC
Apr 18, 2022
e769d59
Merge branch 'master' into master-into-release-40
Apr 18, 2022
48e5017
Merge branch 'master-into-release-40' into release-40-into-release-41
Apr 18, 2022
de1f8ca
Merge branch 'release-40-into-release-41' into 'release/41'
Apr 19, 2022
7e8edf2
FInal implementation of MultithreadedGenerator PoC
Apr 20, 2022
0888dbd
Added matplotlib to setup.py inside extras (under the name "mambu-per…
Apr 20, 2022
963b031
Merge branch 'feature/ECDDC-655_Performance-metrics' into feature/ECD…
Apr 20, 2022
425dc64
Fixed error if no generator or processor metrics are collected
Apr 20, 2022
a479564
Merge branch 'feature/ECDDC-655_Performance-metrics' into feature/ECD…
Apr 20, 2022
8c20863
Added new fields to loan_repayments schema
Apr 20, 2022
1383366
Updated loan_repayments schema
Apr 20, 2022
064ea16
Added new fields to activities schema + sorted the fields
Apr 20, 2022
3d0be1d
Separated metrics plotting from metrics collecting
Apr 21, 2022
ee4f344
Merge branch 'feature/ECDDC-655_Performance-metrics' into feature/ECD…
Apr 21, 2022
386bf94
Merge branch 'feature/ECDDC-655_Performance-metrics' into 'release/42'
Apr 26, 2022
aa1547a
Updated the schemas and fixed typos
Apr 26, 2022
9e6becb
Added format attribute to date fields
Apr 26, 2022
94cd72a
Commented changes to client, as they are not needed until we use the …
Apr 26, 2022
8c196a0
Merge branch 'feature/ECDDC-685_check_v1_stream_schemas' into 'releas…
Apr 26, 2022
6e3c525
Merge branch 'feature/ECDDC-682_Multithreading-poc-implementation' in…
Apr 27, 2022
0155856
Merge branch 'master' into merge_master_to_release_41
Apr 27, 2022
0e5a085
Merge branch 'merge_master_to_release_41' into 'release/41'
Apr 27, 2022
4475ab8
added default and prefix to the user agent
Apr 28, 2022
115026f
Proposed changes as part of refactoring and performance improvements
May 2, 2022
c355ede
Removed bookmark helper as it may not be the best approach.
May 2, 2022
6bd7f5c
More changes in order to get Multithreading to a functional point
May 2, 2022
0f383dc
Small changes, implemented overlap_window correctly
May 3, 2022
adf929d
Added multithreaded refactor to clients stream, removed from activities
May 3, 2022
05cd8bb
Fixed transform_json not being used
May 3, 2022
158b706
Fixed error correction algorithm
May 3, 2022
51a1275
Added tests for sync_all_streams function
May 3, 2022
65afa95
Added tests for MambuClient
May 3, 2022
322defc
Added more tests
May 4, 2022
8178902
Merged 2 tests and covered extra cases on other tests
May 5, 2022
8515dac
Added tests for raise_for_error function
May 5, 2022
ff6d767
Merge branch 'feature/ECDDC-707_Performance-improvements-and-refactor…
May 6, 2022
1adf86e
Improved extraction of child streams by extracting children for all r…
May 6, 2022
68169ef
Added offset by bookmark functionality
May 9, 2022
2c27a68
Overwrite the prepare_batch_params
May 9, 2022
1d257f7
Changed multithreading back to activities
May 9, 2022
2c1bccc
Merge commit '2c27a68beffc29f8a31eaa532d96b764d455e0b4' into feature/…
May 9, 2022
5b8ec73
Working Prototype
May 9, 2022
0692675
Refactored datetime_utils, included pytz for timezone information
May 10, 2022
462dec7
Merge branch 'feature/ECDDC-698_unit_tests_improvement' into 'release…
May 11, 2022
9d24a46
Merge branch 'release/43' into feature/ECDDC-697_user_agent_prefix
May 11, 2022
d2e86af
Added the new user agent to the tests
May 11, 2022
6b4151a
Merge branch 'feature/ECDDC-697_user_agent_prefix' into 'release/43'
May 11, 2022
6bde3e9
Changed sorting criteria to use 'id' instead of 'lastModifiedDate'
May 12, 2022
8bfe36b
Updated deposit_accounts unit test too
May 12, 2022
9fba90f
Changed sorting by id for deposit_transactions
May 12, 2022
9817037
Added format date-time to interest accrual breakdown
May 13, 2022
1c39ddd
Merge branch 'hotfix/ECDDC-719_interest-accrual-missing-format-date-t…
May 13, 2022
c43821c
Fixed import errors and unit tests (only the timezone problem, still …
May 13, 2022
e2b4cba
Fixed wrong transform operation order on raw batches of records
May 13, 2022
919997b
Fixed iter() call on generator, replaced with .__iter__() direct call…
May 13, 2022
c512fda
Fixed unit tests
May 13, 2022
a7c2b11
Fixed typo in generator, implemented multithreading for clients, comm…
May 17, 2022
9312761
Added multithreading to gl_journal_entries stream
May 17, 2022
2d82b84
Merge branch 'master' into release-42-merge
May 18, 2022
fbfe86e
Merge branch 'release-42-merge' into 'release/42'
May 18, 2022
e758ac7
Added MultithreadedOffsetGenerator
May 19, 2022
460a737
Added multithreading to installments
May 19, 2022
ec3a97c
Merge branch 'feature/ECDDC-707_Performance-improvements-and-refactor…
May 19, 2022
85848e6
Finished all multithreading refactors planned for my side
May 19, 2022
ec0a119
Bugfix for multithreaded offset generator
May 24, 2022
7ecf18b
Added multithreading to users
May 24, 2022
bf2db16
Merge branch 'feature/ECDDC-707_Performance-improvements-and-refactor…
May 24, 2022
7af4d18
Removed extra code
May 24, 2022
e69469c
Removed unused import
May 24, 2022
d232d10
Fixed the unittests
May 24, 2022
e363b0e
Changed sorting for interest accrual breakdown
May 25, 2022
67a71cf
Merge branch 'feature/ECDDC-707_multithreading_to_other_streams' into…
May 25, 2022
49a3984
Merge commit 'd232d101149ccf34c737d8c5ac43616b6a0563d1' into feature/…
May 26, 2022
010d196
Fixed all multithreading issues, need to address batch limits
May 30, 2022
9b02db1
Merge branch 'feature/ECDDC-707_Performance-improvements-and-refactor…
May 31, 2022
7c96b4a
Added unit tests for multithreading requests and bookmark generator
Jun 7, 2022
cedb8f4
Added unit test for offset generator
Jun 7, 2022
771a1d5
Renamed a file
Jun 7, 2022
1130fcb
Small test code refactoring
Jun 7, 2022
30e0a6c
Improved a test
Jun 7, 2022
2d40177
Final version of the multithreading, needs some adjusting after testing
Jun 9, 2022
f193d66
Added more tests
Jun 9, 2022
fa79283
Made all dates translate to full date+time, and then truncate them, s…
Jun 10, 2022
f60fcd6
Fixed all date issues and unit tests
Jun 10, 2022
3e76e06
Also fixed deposit transactions generator (was set not to use multith…
Jun 10, 2022
7213d9b
Added logging back to requests, removed leftover file from another task
Jun 10, 2022
d0df2e1
Final self-review
Jun 10, 2022
e0b9970
Added pytz back
Jun 10, 2022
ec5faea
Replaced the 2 logging messages for a request with a single message
Jun 15, 2022
96a3def
Fixed groups unit test, and made interest accrual breakdown use day-b…
Jun 15, 2022
9bd16c2
Merge branch 'release/45' into feature/ECDDC-707_Performance-improvem…
Jun 15, 2022
ed8523f
Fixed unit tests (mocking multithreading shutdown)
Jun 15, 2022
0c758d2
Removed the todo comment
Jun 15, 2022
d4bbdcc
Merge branch 'feature/ECDDC-707_Performance-improvements-and-refactor…
Jun 15, 2022
e2e0e37
Fixed merge conflicts
Jun 16, 2022
60242e4
Merge branch 'release/41' into merge-41-into-42
Jun 20, 2022
4110fd8
Merge branch 'merge-41-into-42' into 'release/42'
Jun 20, 2022
d14076e
Merge branch 'feature/ECDDC-707_Performance-improvements-and-refactor…
Jun 20, 2022
55bcd34
Merge branch 'release/45' into feature/ECDDC-695_Implement-multithrea…
Jun 21, 2022
6e0c43e
Merge branch 'feature/ECDDC-695_Implement-multithreaded-child-streams…
Jun 22, 2022
c2550fc
Merge branch 'release/42' into merge-master-into-45
Jun 22, 2022
bdcf451
Merge branch 'master' into merge-master-into-45
Jun 22, 2022
8a4d930
Merge branch 'merge-master-into-45' into 'release/45'
Jun 23, 2022
ac2e360
Merge branch 'feature/ECDDC-727_multithreading_unittests' into 'relea…
Jun 23, 2022
f09d70b
Refactored offset and bookmark multithreaded generators
Jun 27, 2022
1c53b7e
More refactoring. Deleted multithreading POC
Jun 29, 2022
143b2d2
Modified batch_limit value and client default page size
Jun 29, 2022
0423c5f
Adjusted the unit tests using the new refactored multithreaded genera…
Jun 29, 2022
5d96b64
Finished multithreaded bookmark generator unit tests
Jun 30, 2022
d2cc9cd
Finished multithreaded offset generator unit tests
Jun 30, 2022
d4f752a
Moved max_threads to init_config and kept the batch_limit the same fo…
Jul 4, 2022
643274b
Small adjustments to the multithreading unit tests
Jul 4, 2022
b661649
Adjusted the last_batch_set value from the test_preprocess_batches_flow
Jul 4, 2022
06a5f97
Moved DEFAULT_PAGE_SIZE const into the constants file
Jul 4, 2022
2c1f709
Merge branch 'feature/ECDDC-729_refactor_multithreading_generators' i…
Jul 6, 2022
8e75959
Merge branch 'hotfix/ECDDC-716_deposit-accounts-missing-records' into…
Jul 7, 2022
c4fda55
Merge branch 'release/45' into 'release/46'
Jul 12, 2022
5c324be
Finished timezone improvement implementation
Jun 28, 2022
cc2dabb
Added unit tests for timezone feature
Jul 1, 2022
7213726
Timezone fix for multithreaded bookmark generator
Jul 5, 2022
49155e6
Corrected unit tests to use new timezone functionality for multithrea…
Jul 6, 2022
d3e44d7
Cleanup imports, fix unit test, small refactoring (moved some methods…
Jul 12, 2022
dbe077c
Fixed Audit Trail tests
Jul 12, 2022
88e0593
Decoupled Multithreading processor from TapProcessor
Jul 13, 2022
a0bf6b5
Merge branch 'feature/ecddc-724_refactor-timezone-information-system'…
Jul 19, 2022
60f2152
Merge branch 'feature/ECDDC-730_decouple-processor-multithreading-fro…
Jul 19, 2022
3417e4f
Fixed Deduplication Processor PerformanceMetrics Bug
Jul 19, 2022
6a7cfbb
Fixed SonarCube Code Smell by reducing cognitive complexity
Jul 19, 2022
64cb69d
Added commend in processor.py to explain empty function
Jul 19, 2022
1f7c4cf
Merge branch 'bugfix/ECDDC-737_missing-performance-metrics-on-loan-ac…
Jul 20, 2022
472cbb8
Bugfix for bookmark taken as UTC instead of Local Time
Jul 22, 2022
6fb0b91
Bugfix for loan_accounts too
Jul 22, 2022
334574e
Changed unit tests too
Jul 22, 2022
61d8cec
Merge branch 'feature/ecddc-724_refactor-timezone-information-system'…
Jul 27, 2022
0c91fe6
[ECDDC-732] Merge master into release/48
Aug 29, 2022
28e95c5
Merge branch 'release-48-master-merge' into 'release/48'
Aug 29, 2022
5b04eeb
Merge branch 'master' into solved_conflicts_with_master
Aug 29, 2022
d498bd0
removed unused imports
Aug 29, 2022
6204529
Merge branch 'solved_conflicts_with_master' into 'release/48'
Aug 30, 2022
8d149cb
Merge branch 'master' into sync_master_release_48
Sep 14, 2022
979ad39
Merge branch 'sync_master_release_48' into 'release/48'
Sep 15, 2022
7b84c0e
added missing date formats
Sep 15, 2022
c10b1b1
Merge branch 'bugfix/ECDDC-756_missing_date_format' into 'release/48'
Sep 15, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions mambu_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,10 @@ def retry(func):
MultithreadedRequestsPool.shutdown = MagicMock()


from pytz import timezone
from tap_mambu.helpers import datetime_utils
datetime_utils._timezone = timezone("US/Pacific")


def pytest_sessionfinish(session, exitstatus):
_threads_original_shutdown()
2 changes: 1 addition & 1 deletion mambu_tests/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
'start_date': '2021-06-01T00:00:00Z',
'lookback_window': 30,
'user_agent': '',
'page_size': '500',
'page_size': '200',
'apikey_audit': 'apikey_audit_test'}
27 changes: 27 additions & 0 deletions mambu_tests/helpers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import datetime
from urllib.parse import parse_qs

import pytz

from mock import MagicMock, Mock
Expand Down Expand Up @@ -48,6 +50,31 @@ def write_bookmark(self):
class ClientMock:
def __init__(self, page_size=100):
self.page_size = page_size
self.request = MagicMock()


class ClientWithDataMock(ClientMock):
def __init__(self, page_size=100, bookmark_field="creationDate",
limit_field="limit", offset_field="offset", custom_data=None):
super(ClientWithDataMock, self).__init__(page_size=page_size)
self.base_url = "http://unit.test/api"
self.request = MagicMock()
self.limit_field = limit_field
self.offset_field = offset_field
self.data_to_serve = custom_data
if self.data_to_serve is None:
self.data_to_serve = [{"id": index, bookmark_field: f"2022-06-05T00:00:00.{index:06d}Z-07:00"}
for index in range(400)] + \
[{"id": index, bookmark_field: f"2022-06-06T00:00:00.{index:06d}Z-07:00"}
for index in range(400)]
self.request.side_effect = self.serve_request

def serve_request(self, *args, **kwargs):
params = kwargs.get("params")
split_params = parse_qs(params)
limit = int(split_params.get(self.limit_field, [None])[0])
offset = int(split_params.get(self.offset_field, [None])[0])
return self.data_to_serve[offset:limit+offset]


class MultithreadedOffsetGeneratorFake(MultithreadedOffsetGenerator):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from mambu_tests.helpers import MultithreadedBookmarkDayByDayGeneratorFake
from tap_mambu.helpers.datetime_utils import datetime_to_tz, str_to_localized_datetime


def test_set_intermediary_bookmark_datetime():
mock_datetime_record = '2021-01-01T00:00:00.000000Z'
mock_datetime_record = datetime_to_tz(str_to_localized_datetime('2021-01-01T00:00:00.000000Z'), "UTC")

generator = MultithreadedBookmarkDayByDayGeneratorFake()

Expand All @@ -11,30 +13,34 @@ def test_set_intermediary_bookmark_datetime():

# check if the endpoint intermediary bookmark value and offset are set for a valid record with date time field
generator.set_intermediary_bookmark(mock_datetime_record)
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record[:10]
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record.replace(hour=0, minute=0,
second=0, microsecond=0)
assert generator.endpoint_intermediary_bookmark_offset == 1

# check if the endpoint intermediary bookmark value isn't set with a value lower than the already saved one
generator.set_intermediary_bookmark('2005-05-14T00:00:00.000000Z')
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record[:10]
generator.set_intermediary_bookmark(datetime_to_tz(str_to_localized_datetime('2005-05-14T00:00:00.000000Z'), "UTC"))
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record.replace(hour=0, minute=0,
second=0, microsecond=0)
assert generator.endpoint_intermediary_bookmark_offset == 1

# check if the endpoint intermediary bookmark value and offset correctly set when multiple records have
# the same bookmark field value
for _ in range(3):
generator.set_intermediary_bookmark(mock_datetime_record)
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record[:10]
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record.replace(hour=0, minute=0,
second=0, microsecond=0)
assert generator.endpoint_intermediary_bookmark_offset == 4

# check if the endpoint intermediary bookmark value is properly set and the offset is reset
mock_datetime_record = '2021-11-11T00:00:00.000000Z'
mock_datetime_record = datetime_to_tz(str_to_localized_datetime('2021-11-11T00:00:00.000000Z'), "UTC")
generator.set_intermediary_bookmark(mock_datetime_record)
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record[:10]
assert generator.endpoint_intermediary_bookmark_value == mock_datetime_record.replace(hour=0, minute=0,
second=0, microsecond=0)
assert generator.endpoint_intermediary_bookmark_offset == 1


def test_set_intermediary_bookmark_date():
mock_date_record = '2020-01-01'
mock_date_record = datetime_to_tz(str_to_localized_datetime('2020-01-01'), "UTC")

generator = MultithreadedBookmarkDayByDayGeneratorFake()

Expand All @@ -48,7 +54,7 @@ def test_set_intermediary_bookmark_date():
assert generator.endpoint_intermediary_bookmark_offset == 1

# check if the endpoint intermediary bookmark value isn't set with a value lower than the already saved one
generator.set_intermediary_bookmark('2005-05-14')
generator.set_intermediary_bookmark(datetime_to_tz(str_to_localized_datetime('2005-05-14'), "UTC"))
assert generator.endpoint_intermediary_bookmark_value == mock_date_record
assert generator.endpoint_intermediary_bookmark_offset == 1

Expand All @@ -60,7 +66,7 @@ def test_set_intermediary_bookmark_date():
assert generator.endpoint_intermediary_bookmark_offset == 4

# check if the endpoint intermediary bookmark value is properly set and the offset is reset
mock_date_record = '2021-11-11'
mock_date_record = datetime_to_tz(str_to_localized_datetime('2021-11-11'), "UTC")
generator.set_intermediary_bookmark(mock_date_record)
assert generator.endpoint_intermediary_bookmark_value == mock_date_record
assert generator.endpoint_intermediary_bookmark_offset == 1
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import json
import threading
import time
from datetime import datetime

from mock import Mock, patch, call
from pytz import timezone

from mambu_tests.helpers import ClientMock, MultithreadedBookmarkGeneratorFake
from tap_mambu.helpers.hashable_dict import HashableDict
Expand Down Expand Up @@ -231,34 +233,43 @@ def create_mock_future_pending():
mock_transform_json.assert_called()


@patch("tap_mambu.tap_generators.multithreaded_bookmark_generator.transform_datetime")
@patch("tap_mambu.tap_generators.multithreaded_bookmark_generator.datetime_to_tz")
@patch("tap_mambu.tap_generators.multithreaded_bookmark_generator.str_to_localized_datetime")
@patch("tap_mambu.tap_generators.multithreaded_offset_generator."
"MultithreadedOffsetGenerator.preprocess_record")
@patch("tap_mambu.tap_generators.multithreaded_bookmark_generator."
"MultithreadedBookmarkGenerator.set_intermediary_bookmark")
def test_preprocess_record(mock_set_intermediary_bookmark, mock_offset_preprocess_record, mock_transform_datetime):
def test_preprocess_record(mock_set_intermediary_bookmark, mock_offset_preprocess_record,
mock_str_to_localized_datetime, mock_datetime_to_tz):
mock_bookmark_field = 'test_field'
generator = MultithreadedBookmarkGeneratorFake()
generator.endpoint_bookmark_field = mock_bookmark_field

# test the behaviour with a record that doesn't contain the bookmarked field
mock_record = {'encoded_key': 'test'}
mock_offset_preprocess_record.return_value = mock_record
mock_transform_datetime.return_value = mock_record
mock_datetime_to_tz.return_value = mock_record
mock_str_to_localized_datetime.return_value = mock_record

generator.preprocess_record(mock_record)
mock_transform_datetime.assert_not_called()
mock_str_to_localized_datetime.assert_not_called()
mock_datetime_to_tz.assert_not_called()
mock_set_intermediary_bookmark.assert_not_called()

# test the behaviour with a record that does contain the bookmarked field
mock_record = {'encoded_key': 'test',
'test_field': 'test_value'}
'test_field': '2022-01-01T00:00:00Z+03:00'}
datetime_in_local_tz = datetime.now(timezone("Europe/Bucharest")).replace(year=2022, month=1, day=1, hour=3,
minute=0, second=0, microsecond=0)
datetime_in_utc_tz = datetime.utcnow().replace(year=2022, month=1, day=1, hour=0, minute=0, second=0, microsecond=0)
mock_offset_preprocess_record.return_value = mock_record
mock_transform_datetime.return_value = mock_record
mock_str_to_localized_datetime.return_value = datetime_in_local_tz
mock_datetime_to_tz.return_value = datetime_in_utc_tz

generator.preprocess_record(mock_record)
mock_transform_datetime.assert_called_with(mock_record[mock_bookmark_field])
mock_set_intermediary_bookmark.assert_called_with(mock_record)
mock_str_to_localized_datetime.assert_called_with(mock_record[mock_bookmark_field])
mock_datetime_to_tz.assert_called_with(datetime_in_local_tz, "UTC")
mock_set_intermediary_bookmark.assert_called_with(datetime_in_utc_tz)


@patch("tap_mambu.tap_generators.multithreaded_offset_generator."
Expand Down
19 changes: 12 additions & 7 deletions mambu_tests/tap_generators/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,24 @@
from tap_mambu.tap_generators.child_generator import ChildGenerator
from ..constants import config_json
from tap_mambu.helpers.generator_processor_pairs import get_generator_processor_for_stream
from ..helpers import ClientWithDataMock, ClientMock


def setup_generator_base_test(stream_name, client_mock=None):
if client_mock is None:
client_mock = MagicMock()
client_mock.page_size = int(config_json.get("page_size", 500))
client_mock.request = MagicMock()
def setup_generator_base_test(stream_name, client_mock=None, with_data=False, custom_data=None,
offset_field="offset", limit_field="limit", bookmark_field="creationDate"):
generator_classes, _ = get_generator_processor_for_stream(stream_name)

generators = list()
for generator_class in generator_classes:
client = client_mock
if client_mock is None:
client = ClientMock(int(config_json.get("page_size", 200)))
if with_data:
client = ClientWithDataMock(int(config_json.get("page_size", 200)), custom_data=custom_data,
offset_field=offset_field, limit_field=limit_field,
bookmark_field=bookmark_field)

generator = generator_class(stream_name=stream_name,
client=client_mock,
client=client,
config=config_json,
state={"currently_syncing": stream_name},
sub_type="self",
Expand Down
9 changes: 4 additions & 5 deletions mambu_tests/tap_generators/test_activities_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,15 @@ def test_activities_generator_endpoint_config_init():


def test_activities_generator_dict_unpacking():
generators = setup_generator_base_test("activities")
generators = setup_generator_base_test("activities", with_data=True,
custom_data=[{
"client": "N/A", "activity": {"id": index}}
for index in range(1000)])

assert 1 == len(generators)

generator = generators[0]

generator.client.request.side_effect = [[
{"client": "N/A", "activity": {"id": nr + page*4}}
for nr in range(5)] for page in range(3)] + [[] for _ in range(1000)] + [[] * 1000]

for record in generator:
assert "id" in record, "Record in activity generator were not unpacked " \
"according to spec! (see fetch_batch)"
Expand Down
37 changes: 24 additions & 13 deletions mambu_tests/tap_generators/test_audit_trail_generator.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
from datetime import datetime

import mock
from mock import MagicMock
from copy import deepcopy

from pytz import timezone

from . import setup_generator_base_test
from ..constants import config_json


@mock.patch("tap_mambu.tap_generators.audit_trail_generator.utils")
def test_audit_trail_generator_endpoint_config_init(utils_mock):
fake_lte_date = "2022-01-01T00:00:00.000000Z"
utils_mock.strftime.return_value = fake_lte_date
@mock.patch("tap_mambu.tap_generators.audit_trail_generator.utc_now")
def test_audit_trail_generator_endpoint_config_init(utc_now_mock):
fake_lte_date = datetime(year=2022, month=1, day=1,
hour=0, minute=0, second=0,
microsecond=0, tzinfo=timezone("UTC"))
fake_lte_date_str = "2022-01-01T00:00:00.000000Z"
utc_now_mock.return_value = fake_lte_date

generators = setup_generator_base_test("audit_trail")

Expand All @@ -23,19 +31,22 @@ def test_audit_trail_generator_endpoint_config_init(utils_mock):
assert generator.endpoint_params == {
"sort_order": "asc",
"occurred_at[gte]": "2021-06-01T00:00:00.000000Z",
"occurred_at[lte]": fake_lte_date
"occurred_at[lte]": fake_lte_date_str
}
assert generator.endpoint_bookmark_field == "occurred_at"
assert generator.audit_trail_offset == 0


@mock.patch("tap_mambu.tap_generators.audit_trail_generator.get_bookmark")
@mock.patch("tap_mambu.tap_generators.audit_trail_generator.utils")
def test_audit_trail_generator_bookmark(utils_mock, get_bookmark_mock):
fake_gte_date = "2021-09-01T00:00:00.000000Z"
fake_lte_date = "2022-01-01T00:00:00.000000Z"
get_bookmark_mock.return_value = [fake_gte_date, 2]
utils_mock.strftime.return_value = fake_lte_date
@mock.patch("tap_mambu.tap_generators.audit_trail_generator.utc_now")
def test_audit_trail_generator_bookmark(utc_now_mock, get_bookmark_mock):
fake_gte_date_str = "2021-09-01T00:00:00.000000Z"
get_bookmark_mock.return_value = [fake_gte_date_str, 2]
fake_lte_date = datetime(year=2022, month=1, day=1,
hour=0, minute=0, second=0,
microsecond=0, tzinfo=timezone("UTC"))
fake_lte_date_str = "2022-01-01T00:00:00.000000Z"
utc_now_mock.return_value = fake_lte_date

generators = setup_generator_base_test("audit_trail")

Expand All @@ -46,8 +57,8 @@ def test_audit_trail_generator_bookmark(utils_mock, get_bookmark_mock):
assert generator.audit_trail_offset == 2
assert generator.endpoint_params == {
"sort_order": "asc",
"occurred_at[gte]": fake_gte_date,
"occurred_at[lte]": fake_lte_date
"occurred_at[gte]": fake_gte_date_str,
"occurred_at[lte]": fake_lte_date_str
}


Expand Down
2 changes: 1 addition & 1 deletion mambu_tests/tap_generators/test_clients_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ def test_clients_generator():
{
"field": "lastModifiedDate",
"operator": "AFTER",
"value": '2021-06-01'
"value": '2021-05-31T17:00:00.000000Z'
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ def test_deposit_transactions_generator():
{
"field": "creationDate",
"operator": "AFTER",
"value": '2021-06-01'
"value": '2021-06-01T00:00:00.000000Z'
}
]
Loading