investment/tests/source.py

136 lines
4.8 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# This file is part of the investment-module from m-ds for Tryton.
# The COPYRIGHT file at the top level of this repository contains the
# full copyright notices and license terms.
2023-06-07 16:44:53 +00:00
from trytond.tests.test_tryton import with_transaction
from trytond.pool import Pool
from trytond.transaction import Transaction
from decimal import Decimal
from datetime import time, date, datetime
2022-11-22 21:43:28 +00:00
from unittest.mock import MagicMock
from requests import Response
import requests
2023-06-07 16:44:53 +00:00
class SourceTestCase(object):
""" test online source
"""
2022-11-22 21:43:28 +00:00
@with_transaction()
def test_waitlist_source_request(self):
""" create source, call server
"""
pool = Pool()
OSource = pool.get('investment.source')
Asset = pool.get('investment.asset')
Product = pool.get('product.product')
company = self.prep_asset_company()
2023-06-07 17:24:43 +00:00
with Transaction().set_context({'company': company.id}):
2023-06-07 18:06:36 +00:00
osource, = OSource.create([{
'name': 'Source 1',
'url': 'https://foo.bar/${isin}/${nsin}/${symbol}',
'rgxdate': 'Course Date (\\d+.\\d+.\\d+) Today',
'rgxdatefmt': '%d.%m.%Y',
'rgxrate': 'High (\\d+,\\d+) EUR',
'rgxdecimal': ',',
}])
self.assertEqual(osource.rec_name, 'Source 1')
2023-06-07 17:24:43 +00:00
product = self.prep_asset_product(
name='Product 1',
description='some asset')
2022-11-22 21:43:28 +00:00
2023-06-07 18:06:36 +00:00
Product.write(*[
[product],
{
'identifiers': [('create', [{
'type': 'wkn',
'code': '965515',
}, {
'type': 'secsymb',
'code': '1472977',
}, {
'type': 'isin',
'code': 'XC0009655157',
}, ])],
}])
2022-11-22 21:43:28 +00:00
2023-06-07 18:06:36 +00:00
asset = self.prep_asset_item(company=company, product=product)
2022-11-22 21:43:28 +00:00
2023-06-07 18:06:36 +00:00
Asset.write(*[
[asset],
{
'updtsources': [('add', [osource.id])],
}])
2022-11-22 21:43:28 +00:00
2023-06-07 18:06:36 +00:00
with Transaction().set_context({
'qdate': date(2022, 10, 1), # saturday
'qdatetime': datetime(2022, 10, 2, 10, 0, 0)}):
asset2, = Asset.browse([asset])
self.assertEqual(asset2.wkn, '965515')
self.assertEqual(asset2.isin, 'XC0009655157')
self.assertEqual(asset2.secsymb, '1472977')
self.assertEqual(asset2.updttime, time(14, 0))
self.assertEqual(len(asset2.updtsources), 1)
self.assertEqual(asset2.updtsources[0].rec_name, 'Source 1')
self.assertEqual(asset2.updtdays, 'work')
self.assertEqual(
asset2.nextupdate, datetime(2022, 10, 3, 14, 0))
self.assertEqual(len(asset.rates), 0)
2023-06-07 18:06:36 +00:00
# fake server-response
resp1 = Response()
resp1._content = """<html><body>Response from finance-server
2022-11-22 21:43:28 +00:00
Course Date 14.08.2022 Today
High 34,87 EUR
</body></html>""".encode('utf8')
2023-06-07 18:06:36 +00:00
resp1.status_code = 200
resp1.reason = 'OK'
requests.get = MagicMock(return_value=resp1)
2022-11-22 21:43:28 +00:00
2023-06-07 18:06:36 +00:00
OSource.update_rate(asset)
self.assertEqual(len(asset.rates), 1)
self.assertEqual(asset.rates[0].date, date(2022, 8, 14))
self.assertEqual(asset.rates[0].rate, Decimal('34.87'))
2022-11-22 21:43:28 +00:00
@with_transaction()
def test_waitlist_source_check_regex(self):
""" create source, check convert
"""
pool = Pool()
OSource = pool.get('investment.source')
osource, = OSource.create([{
'name': 'Source 1',
'rgxdate': 'Course Date (\\d+.\\d+.\\d+) Today',
'rgxdatefmt': '%d.%m.%Y',
'rgxrate': 'High (\\d+,\\d+) EUR',
'rgxdecimal': ',',
}])
self.assertEqual(osource.rec_name, 'Source 1')
self.assertEqual(osource.get_regex_result(
'The Course Date 14.03.2022 Today, High 13,43 EUR',
'rgxdate'
), date(2022, 3, 14))
self.assertEqual(osource.get_regex_result(
'The Course Date 14.03.2022 Today, High 13,43 EUR',
'rgxrate'
), Decimal('13.43'))
# iso-date
OSource.write(*[
[osource],
{
2023-06-07 16:44:53 +00:00
'rgxdate': 'Course Date (\\d+-\\d+-\\d+) Today',
'rgxdatefmt': '%Y-%m-%d',
}])
self.assertEqual(osource.get_regex_result(
'The Course Date 2022-03-14 Today, High 13,43 EUR',
'rgxdate'
), date(2022, 3, 14))
# end SourceTestCase