def test_get_account_investments_details(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') statements = nubank_client.get_account_investments_details() assert len(statements) == 3 assert statements[0]['id'] == 'vjdhausd-asdg-bgfs-vfsg-jrthfuv' assert statements[0]['rate'] == 1 assert statements[0]['vehicle'] == 'RECEIPT_DEPOSIT' assert statements[0]['openDate'] == '2020-07-13' assert statements[0]['maturityDate'] == '2022-07-05' assert statements[0]['principal'] == 156.52 assert statements[0]['redeemedBalance']['netAmount'] == 0 assert statements[0]['redeemedBalance']['yield'] == 0 assert statements[0]['redeemedBalance']['incomeTax'] == 0 assert statements[0]['redeemedBalance']['iofTax'] == 0 assert statements[0]['redeemedBalance']['id'] == 'abcdefgh-ijkl-mnop-qrst-uvwxyz0123' assert statements[2]['id'] == 'ffghjyu-ktyu-dfgn-nfgh-asdgre' assert statements[2]['rate'] == 1 assert statements[2]['vehicle'] == 'RECEIPT_DEPOSIT' assert statements[2]['openDate'] == '2020-08-11' assert statements[2]['maturityDate'] == '2022-08-03' assert statements[2]['principal'] == 77.77 assert statements[2]['redeemedBalance']['netAmount'] == 39.99 assert statements[2]['redeemedBalance']['yield'] == 0.05 assert statements[2]['redeemedBalance']['incomeTax'] == 0.01 assert statements[2]['redeemedBalance']['iofTax'] == 0.01 assert statements[2]['redeemedBalance']['id'] == 'sdfgehhdf-jkre-thre-nghh-kuvsnjue633'
def generateQRCode(): nu = Nubank() uuid, qr_code = nu.get_qr_code() image = qr_code.make_image(fill_color="black", back_color="white") image.save("static/image/qrcode.jpg") return jsonify({"uuid": uuid})
def test_authentication_with_qr_code_failure_raise_exception(monkeypatch): response = create_fake_response({}, 401) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) with pytest.raises(NuException): nu = Nubank() nu.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid')
def test_authentication_with_refresh_token_failure_raise_exception(monkeypatch): response = create_fake_response({}, 401) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) with pytest.raises(NuException): nu = Nubank() nu.authenticate_with_refresh_token('some-token')
def test_get_card_feed(monkeypatch, authentication_return, events_return): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) monkeypatch.setattr(HttpClient, 'post', MagicMock(return_value=authentication_return)) monkeypatch.setattr(HttpClient, 'get', MagicMock(return_value=events_return)) nubank_client = Nubank() feed = nubank_client.get_card_feed() assert feed['as_of'] == '2017-09-09T06:50:22.323Z' assert feed['customer_id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert feed['_links']['updates']['href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/updates_123' assert feed['_links']['next']['href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/next_123' events = feed['events'] assert len(events) == 1 assert events[0]['description'] == 'Shopping Iguatemi' assert events[0]['category'] == 'transaction' assert events[0]['amount'] == 700 assert events[0]['time'] == '2017-09-09T02:03:55Z' assert events[0]['title'] == 'transporte' assert events[0]['id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert events[0]['details']['lat'] == -12.9818258 assert events[0]['details']['lon'] == -38.4652058 assert events[0]['details']['subcategory'] == 'card_present' assert events[0]['href'] == 'nuapp://transaction/abcde-fghi-jklmn-opqrst-uvxz' assert events[0]['_links']['self']['href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/_links_123'
def test_get_card_feed(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') feed = nubank_client.get_card_feed() assert feed['as_of'] == '2017-09-09T06:50:22.323Z' assert feed['customer_id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert feed['_links']['updates'][ 'href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/updates_123' assert feed['_links']['next'][ 'href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/next_123' events = feed['events'] assert len(events) == 1 assert events[0]['description'] == 'Shopping Iguatemi' assert events[0]['category'] == 'transaction' assert events[0]['amount'] == 700 assert events[0]['time'] == '2017-09-09T02:03:55Z' assert events[0]['title'] == 'transporte' assert events[0]['id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert events[0]['details']['lat'] == -12.9818258 assert events[0]['details']['lon'] == -38.4652058 assert events[0]['details']['subcategory'] == 'card_present' assert events[0][ 'href'] == 'nuapp://transaction/abcde-fghi-jklmn-opqrst-uvxz' assert events[0]['_links']['self'][ 'href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/_links_123'
def test_get_account_investments_details(monkeypatch, account_investments_details_return): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) monkeypatch.setattr(HttpClient, 'post', MagicMock(return_value=account_investments_details_return)) nubank_client = Nubank() statements = nubank_client.get_account_investments_details() assert len(statements) == 3 assert statements[0]['id'] == 'vjdhausd-asdg-bgfs-vfsg-jrthfuv' assert statements[0]['rate'] == 1 assert statements[0]['vehicle'] == 'RECEIPT_DEPOSIT' assert statements[0]['openDate'] == '2020-07-13' assert statements[0]['maturityDate'] == '2022-07-05' assert statements[0]['principal'] == 156.52 assert statements[0]['redeemedBalance']['netAmount'] == 0 assert statements[0]['redeemedBalance']['yield'] == 0 assert statements[0]['redeemedBalance']['incomeTax'] == 0 assert statements[0]['redeemedBalance']['iofTax'] == 0 assert statements[0]['redeemedBalance']['id'] == 'abcdefgh-ijkl-mnop-qrst-uvwxyz0123' assert statements[2]['id'] == 'ffghjyu-ktyu-dfgn-nfgh-asdgre' assert statements[2]['rate'] == 1 assert statements[2]['vehicle'] == 'RECEIPT_DEPOSIT' assert statements[2]['openDate'] == '2020-08-11' assert statements[2]['maturityDate'] == '2022-08-03' assert statements[2]['principal'] == 77.77 assert statements[2]['redeemedBalance']['netAmount'] == 39.99 assert statements[2]['redeemedBalance']['yield'] == 0.05 assert statements[2]['redeemedBalance']['incomeTax'] == 0.01 assert statements[2]['redeemedBalance']['iofTax'] == 0.01 assert statements[2]['redeemedBalance']['id'] == 'sdfgehhdf-jkre-thre-nghh-kuvsnjue633'
def test_should_generate_boleto(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') assert nubank_client.create_boleto( 200.50) == '123131321231231.2313212312.2131231.21332123'
def test_get_qr_code(monkeypatch): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) client = Nubank() uid, qr = client.get_qr_code() assert uid != '' assert isinstance(qr, QRCode)
def test_nubank_request_handler_throws_exception_status_code_in_the_exception_message( ): http_status = 400 response = create_fake_response({}, http_status) client = Nubank() with pytest.raises(NuException, match=fr'.*{http_status}.*'): client._handle_response(response)
def test_get_card_feed(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') feed = nubank_client.get_card_feed() assert feed['as_of'] == '2017-09-09T06:50:22.323Z' assert feed['customer_id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert feed['_links']['updates'][ 'href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/updates_123' assert feed['_links']['next'][ 'href'] == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/next_123' events = feed['events'] assert len(events) == 8 assert events[0]['description'] == 'Netflix.Com' assert events[0]['category'] == 'transaction' assert events[0]['amount'] == 3290 assert events[0]['time'] == '2021-04-21T10:01:48Z' assert events[0]['title'] == 'serviços' assert events[0]['id'] == '43e713a0-07b7-43bb-9700-8d7ad2d5eee6' assert events[0]['details']['subcategory'] == 'card_not_present' assert events[0][ 'href'] == 'nuapp://transaction/43e713a0-07b7-43bb-9700-8d7ad2d5eee6' assert events[0]['_links']['self'][ 'href'] == 'https://prod-s0-facade.nubank.com.br/api/transactions/43e713a0-07b7-43bb-9700-8d7ad2d5eee6'
def test_should_create_money_request(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') assert nubank_client.create_money_request( 200) == 'https://some.tld/path1/path2'
def test_authenticate_with_refresh_token(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_refresh_token('token', 'some-file.p12') assert nubank_client._feed_url == 'https://mocked-proxy-url/api/proxy/events_123' assert nubank_client._client.get_header( 'Authorization') == 'Bearer access_token_123'
def test_get_account_feed(monkeypatch, authentication_return, account_statements_return): response = create_fake_response(authentication_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) nubank_client = Nubank('12345678909', '12345678') response = create_fake_response(account_statements_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) statements = nubank_client.get_account_feed() assert len(statements) == 6 assert statements[1]['id'] == 'abcde-fghi-jklmn-opqrst-uvxy' assert statements[1]['__typename'] == 'TransferOutReversalEvent' assert statements[1]['title'] == 'Transferência devolvida' assert statements[1]['detail'] == 'Juquinha da Silva Sauro - R$ 20,00' assert statements[1]['postDate'] == '2018-03-06' assert statements[2]['id'] == 'abcde-fghi-jklmn-opqrst-uvxz' assert statements[2]['__typename'] == 'TransferOutEvent' assert statements[2]['title'] == 'Transferência enviada' assert statements[2]['detail'] == 'Juquinha da Silva Sauro - R$ 20,00' assert statements[2]['postDate'] == '2018-03-06' assert statements[2]['amount'] == 20.0 assert statements[2]['destinationAccount'][ 'name'] == 'Juquinha da Silva Sauro'
def test_get_account_balance(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') balance = nubank_client.get_account_balance() assert balance == 127.33
def test_nubank_request_handler_throws_exception_with_response_attribute(): response = create_fake_response({}, 400) client = Nubank() with pytest.raises(NuException) as exception_info: client._handle_response(response) assert exception_info.value.response == response.json()
def test_get_account_investments_yield(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') month_yield = nubank_client.get_account_investments_yield() assert month_yield == 0.14
def test_should_generate_boleto(monkeypatch, create_boleto_return): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) monkeypatch.setattr(HttpClient, 'post', MagicMock(return_value=create_boleto_return)) client = Nubank() boleto = client.create_boleto(200.50) assert boleto == create_boleto_return['data']['createTransferInBoleto']['boleto']['readableBarcode']
def test_get_account_balance(monkeypatch, account_balance_return): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) monkeypatch.setattr(HttpClient, 'post', MagicMock(return_value=account_balance_return)) nubank_client = Nubank() balance = nubank_client.get_account_balance() assert balance == 127.33
def test_authenticate_with_qr_code_succeeds(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') assert nubank_client._feed_url == 'https://mocked-proxy-url/api/proxy/events_123' assert nubank_client._client.get_header( 'Authorization') == 'Bearer access_token_123'
def test_nubank_request_handler_throws_exception_with_status_code_attribute(): http_status = 400 response = create_fake_response({}, http_status) client = Nubank() with pytest.raises(NuException) as exception_info: client._handle_response(response) assert exception_info.value.status_code == http_status
def test_grapql_query_raises_exeption(monkeypatch, authentication_return): nubank_client = Nubank() response = create_fake_response({}, 401) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) with pytest.raises(NuException): nubank_client.get_account_balance()
def test_authenticate_with_qr_code_succeeds(monkeypatch, authentication_return): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) monkeypatch.setattr(HttpClient, 'post', MagicMock(return_value=authentication_return)) nubank_client = Nubank() nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') assert nubank_client.feed_url == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/events_123' assert nubank_client.client.get_header('Authorization') == 'Bearer access_token_123'
def test_get_account_balance(monkeypatch, authentication_return, account_balance_return): response = create_fake_response(authentication_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) nubank_client = Nubank('12345678909', '12345678') response = create_fake_response(account_balance_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) balance = nubank_client.get_account_balance() assert balance == 127.33
def test_should_create_money_request(monkeypatch, create_money_request_return, account_statements_return): monkeypatch.setattr(Discovery, '_update_proxy_urls', fake_update_proxy) post_mock = Mock() post_mock.side_effect = [account_statements_return, create_money_request_return] monkeypatch.setattr(HttpClient, 'post', post_mock) client = Nubank() url = client.create_money_request(200) assert url == create_money_request_return['data']['createMoneyRequest']['moneyRequest']['url']
def test_authenticate_with_qr_code_succeeds(monkeypatch, authentication_return, proxy_list_return): proxy_list = create_fake_response(proxy_list_return) monkeypatch.setattr('requests.get', MagicMock(return_value=proxy_list)) response = create_fake_response(authentication_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) nubank_client = Nubank() nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') assert nubank_client.feed_url == 'https://prod-s0-webapp-proxy.nubank.com.br/api/proxy/events_123' assert nubank_client.headers['Authorization'] == 'Bearer access_token_123'
def test_get_account_statements(monkeypatch, authentication_return, account_statements_return): response = create_fake_response(authentication_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) nubank_client = Nubank('12345678909', '12345678') response = create_fake_response(account_statements_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) statements = nubank_client.get_account_statements() assert len(statements) == 2
def test_should_fetch_pix_keys(): nubank_client = Nubank(client=MockHttpClient()) nubank_client.authenticate_with_qr_code('12345678912', 'hunter12', 'some-uuid') data = nubank_client.get_available_pix_keys() keys = data['keys'] account_id = data['account_id'] assert len(keys) == 2 assert keys[0]['value'] == '12345678912' assert account_id == 'xxxxxxxxxxxxxxxxxxxxxxxx'
def __init__(self, uuid): self.config = self.get_config() if self.config['develop'] == True: print(uuid) return self.cpf = self.config['cpf'] self.password = self.config['password'] self.nu = Nubank() self.nu.authenticate_with_qr_code(self.cpf, self.password, uuid)
def test_grapql_query_raises_exeption(monkeypatch, authentication_return, http_status): response = create_fake_response(authentication_return) monkeypatch.setattr('requests.post', MagicMock(return_value=response)) nubank_client = Nubank('12345678909', '12345678') response = Response() response.status_code = http_status monkeypatch.setattr('requests.post', MagicMock(return_value=response)) with pytest.raises(NuException): nubank_client.get_account_balance()