def test_update_status(self): watcher = payout_engine.PayoutWatcher([], []) payout = MagicMock() watcher._update_status(payout) payout.__getitem__.assert_has_calls([call('batch_header'), call('batch_header')], any_order=True) payout['batch_header'].__getitem__.assert_has_calls([call('payout_batch_id'), call('batch_status')])
def test_check_reports_payout_successs_stakeholders(self): # Owner success, but not stakeholders payout = {'items': [{'payout_item': {'sender_item_id': '9_123'}}]} reports = [createReport(9, 1, [2, 3]), createReport(10, 4)] watcher = payout_engine.PayoutWatcher([], reports) semipaid = ReportSemiPaid( 1, ['*****@*****.**'], [createMail(1), createMail(2), createMail(3)]) watcher._safe_get_semi_paid = MagicMock(return_value=semipaid) watcher._mark_as_paid = MagicMock() payout_engine.User.objects.get.side_effect = createUsers(1, 2, 3) watcher._check_reports_payout(payout) payout_engine.User.objects.get.assert_has_calls([ call(username='******'), call(username='******'), call(username='******') ]) watcher._safe_get_semi_paid.assert_called_once_with('9') assert semipaid.failed == [] # Bad emails cleaned watcher._mark_as_paid.assert_called_once_with('9') semipaid.delete.assert_called_once_with() semipaid.save.assert_not_called()
def test_mark_as_paid_error(self): watcher = payout_engine.PayoutWatcher([], []) payout_engine.requests.patch().status_code = 404 payout_engine.requests.patch().json.return_value = [{'test': 'case'}] payout_engine.requests.patch.reset_mock() result = watcher._mark_as_paid("report1") url = "{}/rss/settlement/reports/{}".format(RSSUrl(), "report1") payout_engine.requests.patch.assert_called_once_with( url, json=[{ 'op': 'replace', 'path': '/paid', 'value': True }], headers={ 'content-type': 'application/json', 'X-Nick-Name': settings.STORE_NAME, 'X-Roles': 'provider', 'X-Email': settings.WSTOREMAIL }) payout_engine.requests.patch().json.assert_not_called() assert result == []
def test_get_semi_paid_from_item(self): watcher = payout_engine.PayoutWatcher([], []) payout_engine.ReportSemiPaid.objects.get.return_value = 'reportobject' report = watcher._safe_get_semi_paid_from_item({'payout_item': {'sender_item_id': 'report1_123'}}) payout_engine.ReportSemiPaid.objects.get.assert_called_once_with(report='report1') assert report == 'reportobject'
def test_get_semi_paid_correct(self): watcher = payout_engine.PayoutWatcher([], []) payout_engine.ReportSemiPaid.objects.get.return_value = 'reportobject' report = watcher._safe_get_semi_paid('report1') payout_engine.ReportSemiPaid.objects.get.assert_called_once_with(report="report1") assert report == 'reportobject'
def test_get_semi_paid_from_item_not_exist(self): watcher = payout_engine.PayoutWatcher([], []) payout_engine.ReportSemiPaid.objects.get.side_effect = ObjectDoesNotExist() watcher._safe_get_semi_paid_from_item({'payout_item': {'sender_item_id': 'report1_123'}}) payout_engine.ReportSemiPaid.objects.get.assert_called_once_with(report='report1') payout_engine.ReportSemiPaid.assert_called_once_with(report='report1') payout_engine.ReportSemiPaid().save.assert_called_once_with()
def test_get_semi_paid_not_exist(self): watcher = payout_engine.PayoutWatcher([], []) payout_engine.ReportSemiPaid.objects.get.side_effect = ObjectDoesNotExist() watcher._safe_get_semi_paid('report1') payout_engine.ReportSemiPaid.objects.get.assert_called_once_with(report='report1') payout_engine.ReportSemiPaid.assert_called_once_with(report='report1') payout_engine.ReportSemiPaid().save.assert_called_once_with()
def test_payout_success(self): watcher = payout_engine.PayoutWatcher([], []) watcher._analyze_item = MagicMock() watcher._check_reports_payout = MagicMock() payout = {'items': ['item1', 'item2', 'item3', 'otheritem']} watcher._payout_success(payout) watcher._analyze_item.assert_has_calls([call(x) for x in payout['items']]) watcher._check_reports_payout.assert_called_once_with(payout)
def test_analyze_item_correct(self): watcher = payout_engine.PayoutWatcher([], []) semipaid = ReportSemiPaid() payout_engine.ReportSemiPaid.objects.get.return_value = semipaid item = createItem("SUCCESS") itemr = watcher._analyze_item(item) assert itemr assert semipaid.failed == [] assert semipaid.success == ['*****@*****.**'] assert semipaid.errors.get('user1@email(dot)com') is None semipaid.save.assert_called_once_with()
def test_analyze_item_status_error_clean_semipaid(self): watcher = payout_engine.PayoutWatcher([], []) semipaid = ReportSemiPaid(1, ['*****@*****.**', '*****@*****.**'], ['*****@*****.**', '*****@*****.**'], {'user1@email(dot)com': {}}) payout_engine.ReportSemiPaid.objects.get.return_value = semipaid item = createItem("ERROR") itemr = watcher._analyze_item(item) assert not itemr assert semipaid.failed == ['*****@*****.**', '*****@*****.**'] assert semipaid.success == ['*****@*****.**'] assert semipaid.errors.get("user1@email(dot)com") == createErrorSaved("ERROR") semipaid.save.assert_called_once_with()
def test_check_payouts(self): watcher = payout_engine.PayoutWatcher(['payout1', 'payout2', 'payout3', 'payout4'], []) watcher._check_payout = MagicMock() # Keep watching first and third watcher._check_payout.side_effect = [True, False, True, False] assert watcher.payouts == ['payout1', 'payout2', 'payout3', 'payout4'] watcher._check_payouts() watcher._check_payout.assert_has_calls([call('payout1'), call('payout2'), call('payout3'), call('payout4')]) assert watcher.payouts == ['payout1', 'payout3'] watcher._check_payout.side_effect = [False, False] watcher._check_payouts() watcher._check_payout.assert_has_calls([call('payout1'), call('payout3')]) assert watcher.payouts == []
def test_analyze_item_status_error_notify(self, status): watcher = payout_engine.PayoutWatcher([], []) semipaid = ReportSemiPaid() payout_engine.ReportSemiPaid.objects.get.return_value = semipaid item = createItem(status) itemr = watcher._analyze_item(item) assert not itemr assert semipaid.failed == ['*****@*****.**'] assert semipaid.success == [] assert semipaid.errors.get("user1@email(dot)com") == createErrorSaved(status) semipaid.save.assert_called_once_with() watcher.notifications.send_payout_error.assert_called_once_with('*****@*****.**', 'An error')
def test_check_payout_denied(self, status, must_cont, success): watcher = payout_engine.PayoutWatcher([], []) watcher._update_status = MagicMock() watcher._payout_success = MagicMock() pay = {'batch_header': {'batch_status': status}} payout_engine.Payout.find.return_value = pay payout = {'batch_header': {'payout_batch_id': 'batchID0'}} cont = watcher._check_payout(payout) assert cont == must_cont payout_engine.Payout.find.assert_called_once_with('batchID0') watcher._update_status.assert_called_once_with(pay) if success: watcher._payout_success.assert_called_once_with(pay) else: watcher._payout_success.assert_not_called()
def test_check_reports_payout_not_finished(self): payout = {'items': [{'payout_item': {'sender_item_id': '9_123'}}]} reports = [createReport(9), createReport(10, 2)] watcher = payout_engine.PayoutWatcher([], reports) watcher._safe_get_semi_paid = MagicMock() semipaid = ReportSemiPaid(1, ['*****@*****.**', '*****@*****.**']) watcher._safe_get_semi_paid.return_value = semipaid watcher._mark_as_paid = MagicMock() payout_engine.User.objects.get.side_effect = createUsers(1) watcher._check_reports_payout(payout) payout_engine.User.objects.get.assert_called_once_with(username='******') watcher._safe_get_semi_paid.assert_called_once_with('9') assert semipaid.failed == ['*****@*****.**'] # Bad emails cleaned watcher._mark_as_paid.assert_not_called() semipaid.delete.assert_not_called() semipaid.save.assert_called_once_with()