예제 #1
0
class ConfigTests(N26TestBase):
    """Config tests"""

    EXPECTED_FILE_CONF = config.Config(username='******',
                                       password='******',
                                       login_data_store_path=None)

    EXPECTED_ENV_CONF = config.Config(username='******',
                                      password='******',
                                      login_data_store_path=None)

    def test_preconditions(self):
        assert os.path.exists(self.CONFIG_FILE)

    @mock.patch.dict(
        os.environ, {
            ENV_PARAM_USER: EXPECTED_ENV_CONF.username,
            ENV_PARAM_PASSWORD: EXPECTED_ENV_CONF.password
        })
    def test_environment_variable(self):
        result = config.get_config()
        self.assertEqual(result, self.EXPECTED_ENV_CONF)

    # ensure environment is empty
    @mock.patch.dict(os.environ, {ENV_PARAM_USER: "", ENV_PARAM_PASSWORD: ""})
    def test_file(self):
        # use test file path instead of real one
        config.CONFIG_FILE_PATH = self.CONFIG_FILE

        result = config.get_config()
        self.assertEqual(result, self.EXPECTED_FILE_CONF)
예제 #2
0
 def wrapper(*args, **kwargs):
     with mock.patch('n26.config.get_config') as mock_config:
         from n26 import config
         mock_config.return_value = config.Config(
             username=username, password=password,
             login_data_store_path=None)
         return function(*args, **kwargs)
예제 #3
0
 def test_init_with_config(self):
     conf = config.Config(username='******',
                          password='******',
                          login_data_store_path=None)
     api_client = api.Api(conf)
     self.assertIsNotNone(api_client.config)
     self.assertEqual(api_client.config, conf)
예제 #4
0
def setup(hass, config):
    """Set up N26 Component."""
    acc_list = config[DOMAIN]

    api_data_list = []

    for acc in acc_list:
        user = acc[CONF_USERNAME]
        password = acc[CONF_PASSWORD]

        api = n26_api.Api(n26_config.Config(user, password))

        try:
            api.get_token()
        except HTTPError as err:
            _LOGGER.error(str(err))
            return False

        api_data = N26Data(api)
        api_data.update()

        api_data_list.append(api_data)

    hass.data[DOMAIN] = {}
    hass.data[DOMAIN][DATA] = api_data_list

    # Load components for supported devices
    for component in N26_COMPONENTS:
        load_platform(hass, component, DOMAIN, {}, config)

    return True
예제 #5
0
def setup(hass, config):
    """Set up N26 Component."""
    user = config[DOMAIN][CONF_USERNAME]
    password = config[DOMAIN][CONF_PASSWORD]

    from n26 import api, config as api_config
    api = api.Api(api_config.Config(user, password))

    from requests import HTTPError
    try:
        api.get_token()
    except HTTPError as err:
        _LOGGER.error(str(err))
        return False

    api_data = N26Data(api)
    api_data.update()

    hass.data[DOMAIN] = {}
    hass.data[DOMAIN][DATA] = api_data

    # Load components for supported devices
    for component in N26_COMPONENTS:
        load_platform(hass, component, DOMAIN, {}, config)

    return True
예제 #6
0
파일: test_api.py 프로젝트: snakx/n26-api
 def test_init_with_config(self):
     from container_app_conf.source.yaml_source import YamlSource
     conf = config.Config(
         singleton=False,
         data_sources=[YamlSource("test_creds", "./tests/")])
     api_client = api.Api(conf)
     self.assertIsNotNone(api_client.config)
     self.assertEqual(api_client.config, conf)
예제 #7
0
def test_file(monkeypatch):
    # patch path to local test file
    def mockreturn(path):
        return test_creds

    monkeypatch.setattr(os.path, "expanduser", mockreturn)
    assert config.get_config() == config.Config(
        username='******',
        password='******',
        card_id="123456789")
예제 #8
0
import functools
import mock
from n26 import api, config
import pytest

conf = config.Config(username='******',
                     password='******',
                     card_id="123456789")


# decorator for patching get_token
def patch_token(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        with mock.patch('n26.api.Api.get_token') as mock_token:
            mock_token.return_value = 'some token'
            return func(*args, **kwargs)

    return wrapper


@pytest.fixture
def api_object():
    new_api = api.Api(conf)
    return new_api


# test __init__
@mock.patch('n26.api.config.get_config')
def test_init_implicit(patched_config):
    patched_config.return_value = conf
예제 #9
0
def test_environment_variable():
    assert config.get_config() == config.Config(
        username='******',
        password='******',
        card_id="123456789")
def main(cat_mappings):
    conf = config.Config(os.getenv("N26_USER"), os.getenv("N26_PASSWORD"),
                         'store/n26_creds')
    client = api.Api(conf)

    #s to ms - CET Local
    now = int(time.time() * 1E3)
    # -5min
    minus5 = int(now - 3E5)
    print(minus5, now)

    response = client.get_transactions(limit=200,
                                       from_time=minus5,
                                       to_time=now)

    print(datetime.fromtimestamp(math.floor(minus5 / 1E3)), '-',
          datetime.fromtimestamp(math.floor(now / 1E3)))

    transactions_payload = list()

    print("Transactions to process: " + str(len(response)))

    for transaction in response:
        category_name = mappings[next(
            (index for (index, d) in enumerate(mappings)
             if d["id"] == transaction["category"]), None)]["name"]
        is_sepa = 'partnerName' in transaction

        if not 'confirmed' in transaction or 'paymentScheme' in transaction:
            continue

        try:
            transaction_time = time.strftime(
                "%Y-%m-%d", time.localtime(transaction["confirmed"] / 1E3))

            is_debit = transaction["amount"] < 0

            payload = {
                'type': "withdrawal" if is_debit else "deposit",
                'external_id': transaction["linkId"],
                'date': transaction_time,
                'amount': abs(transaction["amount"]),
                'currency_code': transaction["currencyCode"],
                'category_name': category_name,
                'tags': ['N26 importer']
            }

            if is_sepa:
                payload["destination_name"] = transaction["partnerName"]
                if 'partnerIban' in transaction:
                    payload["destination_iban"] = transaction["partnerIban"]
                if 'referenceText' in transaction:
                    payload["description"] = transaction["referenceText"]

                payload["source_name"] = "N26" if is_debit else transaction[
                    "partnerName"]
                payload["destination_name"] = transaction[
                    "partnerName"] if is_debit else "N26"

            else:
                payload["source_name"] = "N26" if is_debit else transaction[
                    "merchantName"]
                payload["destination_name"] = transaction[
                    "merchantName"] if is_debit else "N26"
                payload["description"] = "(empty description)"

            transactions_payload.append(payload)
        except Exception as e:
            writeLog(transaction, e)

    if len(transactions_payload) == 0:
        print("Nothing to do")
        return

    data = {'transactions': transactions_payload}

    headers = {
        'Authorization': 'Bearer ' + os.getenv("FFIII_AUTH_TOKEN"),
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    try:
        r = requests.post(url=os.getenv("FFIII_API_ENDPOINT"),
                          json=data,
                          headers=headers)
        r.raise_for_status()
        print(r.text)
    except Exception as e:
        printLog(r.text, e)
        printLog(data)

    print("Job done")