Exemple #1
0
    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 == []
Exemple #4
0
    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'
Exemple #5
0
    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'
Exemple #6
0
    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()
Exemple #7
0
    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()
Exemple #8
0
    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)
Exemple #9
0
    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()
Exemple #10
0
    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()
Exemple #11
0
    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 == []
Exemple #12
0
    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')
Exemple #13
0
    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()
Exemple #14
0
    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()