# -*- 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. from trytond.tests.test_tryton import ModuleTestCase, with_transaction from trytond.pool import Pool from trytond.modules.company.tests import create_company from trytond.transaction import Transaction from decimal import Decimal from datetime import time, date from unittest.mock import MagicMock from requests import Response import requests class SourceTestCase(ModuleTestCase): 'Test online source module' module = 'investment' @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() 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') product = self.prep_asset_product( name='Product 1', description='some asset') Product.write(*[ [product], { 'identifiers': [('create', [{ 'type': 'wkn', 'code': '965515', }, { 'type': 'secsymb', 'code': '1472977', }, { 'type': 'isin', 'code': 'XC0009655157', }, ])], }]) asset = self.prep_asset_item( company=company, product = product) Asset.write(*[ [asset], { 'updtsource': osource.id, }]) self.assertEqual(asset.wkn, '965515') self.assertEqual(asset.isin, 'XC0009655157') self.assertEqual(asset.secsymb, '1472977') self.assertEqual(asset.updtsource.rec_name, 'Source 1') self.assertEqual(len(asset.rates), 0) # fake server-response resp1 = Response() resp1._content = """Response from finance-server Course Date 14.08.2022 Today High 34,87 EUR """.encode('utf8') resp1.status_code = 200 resp1.reason = 'OK' requests.get = MagicMock(return_value=resp1) 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')) @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], { '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