success in testing updateBalances with: 'sudo -u www-data ./vendor/bin/phpunit --filter testAjaxGetBalance'

This commit is contained in:
Dario Rekowski on RockPI 2021-04-14 15:02:17 +00:00
parent 1a22c3dd82
commit b5ad8ced68
2 changed files with 85 additions and 54 deletions

View File

@ -44,7 +44,6 @@ class StateBalancesController extends AppController
private function updateBalances($stateUserId) private function updateBalances($stateUserId)
{ {
echo "stateUserId: $stateUserId\n";
$stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions'); $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions');
$transactionsTable = TableRegistry::getTableLocator()->get('Transactions'); $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
// info: cakephp use lazy loading, query will be executed later only if needed // info: cakephp use lazy loading, query will be executed later only if needed
@ -128,7 +127,7 @@ class StateBalancesController extends AppController
$transaction_ids = []; $transaction_ids = [];
if($recalculate_state_user_transactions_balance) { if($recalculate_state_user_transactions_balance) {
echo "recalculate state user transaction balances \n";
$state_user_transactions_array = $state_user_transactions->toArray(); $state_user_transactions_array = $state_user_transactions->toArray();
foreach($state_user_transactions_array as $i => $state_user_transaction) { foreach($state_user_transactions_array as $i => $state_user_transaction) {
$transaction_ids[$state_user_transaction->transaction_id] = $i; $transaction_ids[$state_user_transaction->transaction_id] = $i;
@ -148,23 +147,19 @@ class StateBalancesController extends AppController
$amount_date = null; $amount_date = null;
$amount = 0; $amount = 0;
if($transaction->transaction_type_id == 1) { // creation if($transaction->transaction_type_id == 1) { // creation
echo "creation\n";
$temp = $transaction->transaction_creations[0]; $temp = $transaction->transaction_creations[0];
echo "creation amount: " . $temp->amount . "\n";
echo "target date: " . $temp->target_date . "\n";
$balance_temp = $this->StateBalances->newEntity(); $balance_temp = $this->StateBalances->newEntity();
$balance_temp->amount = $temp->amount; $balance_temp->amount = $temp->amount;
$balance_temp->record_date = $temp->target_date; $balance_temp->record_date = $temp->target_date;
$amount = $balance_temp->partDecay($transaction->received); $amount = $balance_temp->partDecay($transaction->received);
$amount_date = $transaction->received; $amount_date = $transaction->received;
echo "amount in state_user_transactions: $amount\n";
echo "date in state_user_transactions: $amount_date\n";
echo "diff: " . ($temp->amount - $amount) . "\n";
//$amount_date = //$amount_date =
} else if($transaction->transaction_type_id == 2) { // transfer } else if($transaction->transaction_type_id == 2) { // transfer
echo "send coins\n";
$temp = $transaction->transaction_send_coins[0]; $temp = $transaction->transaction_send_coins[0];
$amount = intval($temp->amount); $amount = intval($temp->amount);
// reverse if sender // reverse if sender
@ -172,21 +167,20 @@ class StateBalancesController extends AppController
$amount *= -1.0; $amount *= -1.0;
} }
$amount_date = $transaction->received; $amount_date = $transaction->received;
echo "amount: " . $amount . "\n";
echo "date: " . $amount_date . "\n";
} }
if($i == 0) { if($i == 0) {
$balance_cursor->amount = $amount; $balance_cursor->amount = $amount;
} else { } else {
$balance_cursor->amount = $balance_cursor->partDecay($amount_date) + $amount; $balance_cursor->amount = $balance_cursor->partDecay($amount_date) + $amount;
} }
echo "balance cursor amount: " . $balance_cursor->amount . "\n";
$balance_cursor->record_date = $amount_date; $balance_cursor->record_date = $amount_date;
$state_user_transaction_index = $transaction_ids[$transaction->id]; $state_user_transaction_index = $transaction_ids[$transaction->id];
$state_user_transactions_array[$state_user_transaction_index]->balance = $balance_cursor->amount; $state_user_transactions_array[$state_user_transaction_index]->balance = $balance_cursor->amount;
$state_user_transactions_array[$state_user_transaction_index]->balance_date = $balance_cursor->record_date; $state_user_transactions_array[$state_user_transaction_index]->balance_date = $balance_cursor->record_date;
$i++; $i++;
echo "##########################\n";
} }
$results = $stateUserTransactionsTable->saveMany($state_user_transactions_array); $results = $stateUserTransactionsTable->saveMany($state_user_transactions_array);
@ -464,45 +458,17 @@ class StateBalancesController extends AppController
$this->updateBalances($user['id']); $this->updateBalances($user['id']);
$state_balance = $this->StateBalances->find()->where(['state_user_id' => $user['id']])->first();
echo "try to unhex: ". $user['public_hex'] . "\n";
$public_key_bin = hex2bin($user['public_hex']);
//var_dump($public_key_bin);
$stateUserQuery = $this->StateBalances->StateUsers
->find('all')
//->where(['public_key' => $public_key_bin])
->where(['id' => $user['id']])
//->contain(['StateBalances'])
;
$hex_from_db = bin2hex(stream_get_contents($stateUserQuery->first()->public_key));
echo "hex from db: $hex_from_db\n";
echo "state user query array: \n";
var_dump($stateUserQuery->toArray());
echo "\n";
$state_balance = $this->StateBalances->find()->where(['state_user_id' => $user['id']]);
echo "state balance:\n";
var_dump($state_balance->toArray());
echo "\n";
$result_user_count = $stateUserQuery->count();
if($result_user_count < 1) {
return $this->returnJson(['state' => 'success', 'balance' => 0]);
}
else if($result_user_count > 1) {
return $this->returnJson([
'state' => 'error',
'msg' => 'multiple entrys found',
'details' => ['public_key' => $user['public_hex'], 'entry_count' => $result_count]
]);
}
//$state_balance = $stateUserQuery->first()->state_balances;
if(!$state_balance) { if(!$state_balance) {
return $this->returnJson(['state' => 'success', 'balance' => 0]); return $this->returnJson(['state' => 'success', 'balance' => 0]);
} }
return $this->returnJson(['state' => 'success', 'balance' => $state_balance->amount]); return $this->returnJson([
'state' => 'success',
'balance' => $state_balance->amount,
'decay' => $state_balance->decay
]);
} }

View File

@ -3,6 +3,9 @@ namespace App\Test\TestCase\Controller;
use Cake\TestSuite\IntegrationTestTrait; use Cake\TestSuite\IntegrationTestTrait;
use Cake\TestSuite\TestCase; use Cake\TestSuite\TestCase;
use Cake\ORM\TableRegistry;
use Cake\I18n\Time;
/** /**
* App\Controller\StateBalancesController Test Case * App\Controller\StateBalancesController Test Case
@ -29,6 +32,12 @@ class StateBalancesControllerTest extends TestCase
'app.StateBalances', 'app.StateBalances',
'app.TransactionTypes' 'app.TransactionTypes'
]; ];
public function setUp()
{
parent::setUp();
$this->StateBalances = TableRegistry::getTableLocator()->get('StateBalances');
}
/** /**
* Test initialize method * Test initialize method
@ -65,7 +74,7 @@ class StateBalancesControllerTest extends TestCase
* *
* @return void * @return void
*/ */
public function testAjaxGetBalance() public function testAjaxGetBalance1()
{ {
$session_id = rand(); $session_id = rand();
$this->session([ $this->session([
@ -77,10 +86,49 @@ class StateBalancesControllerTest extends TestCase
'public_hex' => 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f' 'public_hex' => 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'
] ]
]); ]);
//echo "balance: $balance";
$this->getAndParse('/state-balances/ajaxGetBalance/' . $session_id, $response = $this->getAndParseWithoutCompare('/state-balances/ajaxGetBalance/' . $session_id);
['state' => 'success', 'balance' => 1200000]
); $this->assertEquals('success', $response->state);
$this->assertEquals(7321828, $response->balance);
$this->assertLessThan(7321828, $response->decay);
}
public function testAjaxGetBalance2()
{
$session_id = rand();
$this->session([
'session_id' => $session_id,
'Transaction' => ['pending' => 0, 'executing' => 0],
'StateUser' => [
'id' => 3,
'email_checked' => 1,
'public_hex' => '131c7f68dd94b2be4c913400ff7ff4cdc03ac2bda99c2d29edcacb3b065c67e6'
]
]);
$response = $this->getAndParseWithoutCompare('/state-balances/ajaxGetBalance/' . $session_id);
$this->assertEquals('success', $response->state);
$this->assertEquals(0, $response->balance);
}
public function testAjaxGetBalance3()
{
$session_id = rand();
$this->session([
'session_id' => $session_id,
'Transaction' => ['pending' => 0, 'executing' => 0],
'StateUser' => [
'id' => 4,
'email_checked' => 1,
'public_hex' => 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'
]
]);
$response = $this->getAndParseWithoutCompare('/state-balances/ajaxGetBalance/' . $session_id);
$this->assertEquals('success', $response->state);
$this->assertEquals(9112595, $response->balance);
$this->assertLessThan(9112595, $response->decay);
} }
public function testAjaxGetBalanceInvalidSession() public function testAjaxGetBalanceInvalidSession()
@ -243,7 +291,24 @@ class StateBalancesControllerTest extends TestCase
$expected = json_encode($expected); $expected = json_encode($expected);
} }
$this->assertEquals($expected, $responseBodyString); $this->assertEquals($expected, $responseBodyString);
} }
private function getAndParseWithoutCompare($path)
{
$this->configRequest([
'headers' => ['Accept' => 'application/json']
]);
$this->disableErrorHandlerMiddleware();
$this->get($path);
// Check that the response was a 200
$this->assertResponseOk();
$responseBodyString = (string)$this->_response->getBody();
$json = json_decode($responseBodyString);
$this->assertNotFalse($json);
return $json;
}
} }