Exemple #1
0
 def test_wallet_ok(self):
     ''' Сервер возвращает содержимое кошелька '''
     wallet = FakeWallet()
     APP.test_client().put('/wallet/%s' % wallet.id(),
                           data=str(WalletString(wallet)))
     response = APP.test_client().get('/wallet/%s' % wallet.id())
     assert response.status_code == status.HTTP_200_OK
Exemple #2
0
 def test_wrong_key(self):
     ''' Зaгрузка кошелька с другим ключем - это ошибка 400 '''
     wallet = FakeWallet()
     self.put_wallet(wallet)
     fake = FakeWallet()
     response = APP.test_client().put('/wallet/%s' % wallet.id(),
                                      data=str(WalletString(fake)).replace(
                                          fake.id(), wallet.id()))
     assert response.status_code == status.HTTP_400_BAD_REQUEST
 def test_remotes_not_need_tasks(self):
     ''' В списке задач отсутствую задачи поиска, если кошелек присутствует '''
     wallet = FakeWallet()
     APP.test_client().get(
         '/', headers={'X-Zold-Score': '3/3: %s' % WalletScore(wallet)})
     APP.test_client().put('/wallet/%s' % wallet.id(),
                           data=str(WalletString(wallet)))
     response = APP.test_client().get('/tasks')
     assert response.status_code == status.HTTP_200_OK
     assert not any(t['id'] == wallet.id() for t in response.json['tasks']
                    if t['type'] == 'wanted')
Exemple #4
0
 def test_incoming_transaction_approved(self):
     ''' Входящая транзакций должна сразу появиться в кошельке получателе '''
     root_wallet = RootWallet()
     wallet = FakeWallet()
     transaction = FakeTransaction(root_wallet, wallet, -777)
     APP.test_client().put('/wallet/%s' % wallet.id(),
                           data=str(WalletString(wallet)))
     APP.test_client().put(
         '/wallet/%s' % root_wallet.id(),
         data=str(WalletString(TransactionWallet(root_wallet,
                                                 transaction))))
     response = APP.test_client().get('/wallet/%s' % wallet.id())
     assert root_wallet.id() in response.json['body']
    def test_src_wallet_from_wanted_anyway(self):
        '''
		В случае загрузки кошелька он удаляется из поиска,
		даже если искомых транзакций там нет.
		'''
        src = FakeWallet()
        dst = IncomeWallet(src, 555)
        APP.test_client().put('/wallet/%s' % dst.id(),
                              data=str(WalletString(dst)))
        APP.test_client().put('/wallet/%s' % src.id(),
                              data=str(WalletString(src)))
        response = APP.test_client().get('/tasks')
        assert not any(t['id'] == src.id() for t in response.json['tasks']
                       if t['type'] == 'wanted')
Exemple #6
0
 def test_wrong_request(self):
     ''' Зaгрузка другого кошелька - это ошибка 400 '''
     wallet = FakeWallet()
     self.put_wallet(wallet)
     response = APP.test_client().put('/wallet/%s' % wallet.id(),
                                      data=str(WalletString(FakeWallet())))
     assert response.status_code == status.HTTP_400_BAD_REQUEST
    def test_dst_wallet_from_wanted_if_not_match(self):
        '''
		Кошельки получатели удаляются из списка tasks,
		даже если не совпадает префикс
		'''
        src = FullWallet(RootWallet(), 1000, APP.test_client())
        dst = FakeWallet()
        transaction = BadPrefixTransaction(src, dst, -100)
        APP.test_client().put(
            '/wallet/%s' % src.id(),
            data=str(WalletString(TransactionWallet(src, transaction))))
        APP.test_client().put('/wallet/%s' % dst.id(),
                              data=str(WalletString(dst)))
        response = APP.test_client().get('/tasks')
        assert not any(t['id'] in [src.id(), dst.id()]
                       for t in response.json['tasks']
                       if t['type'] == 'wanted')
 def test_remotes_tasks(self):
     ''' В списке задач присутствуют задачи поиска кошелька '''
     wallet = FakeWallet()
     APP.test_client().get(
         '/', headers={'X-Zold-Score': '3/3: %s' % WalletScore(wallet)})
     response = APP.test_client().get('/tasks')
     assert response.status_code == status.HTTP_200_OK
     assert any(t['id'] == wallet.id() and t['prefix'] in wallet.public()
                for t in response.json['tasks'] if t['type'] == 'wanted')
 def test_src_wallet_to_wanted(self):
     ''' Кошельки отправители помещаются в список tasks '''
     src = FakeWallet()
     dst = IncomeWallet(src, 1500)
     APP.test_client().put('/wallet/%s' % dst.id(),
                           data=str(WalletString(dst)))
     response = APP.test_client().get('/tasks')
     assert any(t['id'] == src.id() and t.get('who', None) == dst.id()
                for t in response.json['tasks'] if t['type'] == 'wanted')
    def test_src_wallet_wanted_once(self):
        '''
		Известные отправители отправители помещаются в список tasks
		только один раз
		'''
        src = FakeWallet()
        dst = IncomeWallet(src, 777)
        APP.test_client().put('/wallet/%s' % dst.id(),
                              data=str(WalletString(dst)))
        APP.test_client().put('/wallet/%s' % dst.id(),
                              data=str(WalletString(dst)))
        response = APP.test_client().get('/tasks')
        assert len([
            t for t in response.json['tasks']
            if t['type'] == 'wanted' and t['id'] == src.id()
        ]) == 1
 def test_src_wallet_from_wanted_trivial(self):
     ''' Кошелек убирается из поиска, простой случай '''
     src = FullWallet(RootWallet(), 3000, APP.test_client())
     dst = FakeWallet()
     transaction = FakeTransaction(src, dst, -777)
     APP.test_client().put(
         '/wallet/%s' % dst.id(),
         data=str(
             WalletString(
                 TransactionWallet(dst,
                                   IncomingTransaction(src, transaction)))))
     APP.test_client().put(
         '/wallet/%s' % src.id(),
         data=str(WalletString(TransactionWallet(src, transaction))))
     response = APP.test_client().get('/tasks')
     assert not any(t['id'] == src.id() for t in response.json['tasks']
                    if t['type'] == 'wanted')
    def test_src_wallet_to_wanted_alone(self):
        '''
		Ищем кошелек только один раз, не зависимо от того,
		для каких еще кошельков он нужен
		'''
        src = FakeWallet()
        dst1 = IncomeWallet(src, 1500)
        APP.test_client().put('/wallet/%s' % dst1.id(),
                              data=str(WalletString(dst1)))
        dst2 = IncomeWallet(src, 100)
        APP.test_client().put('/wallet/%s' % dst2.id(),
                              data=str(WalletString(dst2)))
        response = APP.test_client().get('/tasks')
        assert len([
            t for t in response.json['tasks']
            if t['type'] == 'wanted' and t['id'] == src.id()
        ]) == 1
Exemple #13
0
    def test_put_wallet_negative_balance_partial(self):
        '''
		Загрузка кошелька с негативным балансом - не ошибка
		но избыточные транзакции не проверяем и не сохраняем
		Но хорошие принимаем
		'''
        root_wallet = RootWallet()
        src_wallet = FakeWallet()
        self.put_wallet(
            TransactionWallet(root_wallet,
                              FakeTransaction(root_wallet, src_wallet, -1500)))
        dst_wallet = FakeWallet()
        transaction1 = FakeTransaction(src_wallet, dst_wallet, -1000)
        transaction2 = FakeTransaction(src_wallet, dst_wallet, -600)
        self.put_wallet(
            TransactionWallet(src_wallet, transaction1, transaction2))
        response = APP.test_client().get('/wallet/%s' % src_wallet.id())
        assert response.status_code == status.HTTP_200_OK
        assert str(TransactionString(transaction1)) in response.json['body']
        # Вторая транзакция не должна проходить
        assert str(
            TransactionString(transaction2)) not in response.json['body']
 def test_known_src_wallet_not_wanted(self):
     ''' Известные отправители отправители не помещаются в список tasks '''
     src_wallet = FullWallet(RootWallet(), 1000, APP.test_client())
     wallet = FakeWallet()
     dst_wallet = FakeWallet()
     src_transaction = FakeTransaction(src_wallet, dst_wallet, -777)
     transaction = FakeTransaction(wallet, dst_wallet, -1500)
     APP.test_client().put(
         '/wallet/%s' % src_wallet.id(),
         data=str(
             WalletString(TransactionWallet(src_wallet, src_transaction))))
     APP.test_client().put(
         '/wallet/%s' % dst_wallet.id(),
         data=str(
             WalletString(
                 TransactionWallet(
                     dst_wallet,
                     IncomingTransaction(src_wallet, src_transaction),
                     IncomingTransaction(wallet, transaction),
                 ))))
     response = APP.test_client().get('/tasks')
     assert not any(t['id'] == src_wallet.id()
                    for t in response.json['tasks']
                    if t['type'] == 'wanted')