mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-03 10:54:34 -04:00
Implement type checking for settings objects
This commit is contained in:
parent
056b2cbdb7
commit
e56aac5e73
@ -60,7 +60,7 @@ class Company extends BaseModel
|
|||||||
// 'vat_number',
|
// 'vat_number',
|
||||||
// 'id_number',
|
// 'id_number',
|
||||||
'size_id',
|
'size_id',
|
||||||
'settings',
|
//'settings',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $hidden = [
|
protected $hidden = [
|
||||||
|
@ -35,8 +35,7 @@ trait CompanySettingsSaver
|
|||||||
//make sure the inbound settings have the correct casts!
|
//make sure the inbound settings have the correct casts!
|
||||||
//$settings = CompanySettings::setCasts($settings, CompanySettings::$casts);
|
//$settings = CompanySettings::setCasts($settings, CompanySettings::$casts);
|
||||||
|
|
||||||
//todo checks are here
|
$settings = $this->checkSettingType($settings, CompanySettings::$casts);
|
||||||
// $settings = $this->checkSettingType($settings, CompanySettings::$casts);
|
|
||||||
|
|
||||||
//iterate through set properties with new values;
|
//iterate through set properties with new values;
|
||||||
foreach($settings as $key => $value)
|
foreach($settings as $key => $value)
|
||||||
@ -53,38 +52,37 @@ trait CompanySettingsSaver
|
|||||||
|
|
||||||
foreach ($casts as $key => $value){
|
foreach ($casts as $key => $value){
|
||||||
|
|
||||||
\Log::error("the gettype of {$key} = ". gettype($settings->{$key}));
|
/*Separate loop if it is a _id field which is an integer cast as a string*/
|
||||||
|
if(substr($key, -3) == '_id' || substr($key, -8) == '_counter'){
|
||||||
if(substr($key, -3) == '_id'){
|
|
||||||
$value = "integer";
|
$value = "integer";
|
||||||
|
|
||||||
if($this->checkAttribute($value, (int)$settings->{$key})){
|
if($this->checkAttribute($value, $settings->{$key})){
|
||||||
//throw new \Exception($settings->{$key}. " " . $key . " is not type ". $value);
|
\Log::error("System says true {$key} a {$value} = ".$settings->{$key});
|
||||||
\Log::error($settings->{$key}. " " . $key . " is type ". $value);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
\Log::error($settings->{$key}. " " . $key . " is nottype ". $value);
|
\Log::error('popping '.$key.' '.$value.' '.$settings->{$key}.' off the stack');
|
||||||
|
unset($settings->{$key});
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handles unset settings or blank strings */
|
||||||
if(is_null($settings->{$key}) || !isset($settings->{$key}) || $settings->{$key} == ''){
|
if(is_null($settings->{$key}) || !isset($settings->{$key}) || $settings->{$key} == ''){
|
||||||
\Log::error("skipping ".$settings->{$key}. " " . $key . " is type ". $value);
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
\Log::error("checking ".$settings->{$key}. " " . $key . " is type ". $value);
|
/*Catch all filter */
|
||||||
|
|
||||||
if($this->checkAttribute($value, $settings->{$key})){
|
if($this->checkAttribute($value, $settings->{$key})){
|
||||||
//throw new \Exception($settings->{$key}. " " . $key . " is not type ". $value);
|
|
||||||
\Log::error($settings->{$key}. " " . $key . " is type ". $value);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
\Log::error($settings->{$key}. " " . $key . " is nottype ". $value);
|
unset($settings->{$key});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
\Log::error(print_r($settings,1));
|
||||||
|
return $settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -94,7 +92,9 @@ trait CompanySettingsSaver
|
|||||||
{
|
{
|
||||||
case 'int':
|
case 'int':
|
||||||
case 'integer':
|
case 'integer':
|
||||||
return is_int($value);
|
//return is_int($value);
|
||||||
|
//return strval($value) === strval(intval($value)) ;
|
||||||
|
return ctype_digit(strval($value));
|
||||||
case 'real':
|
case 'real':
|
||||||
case 'float':
|
case 'float':
|
||||||
case 'double':
|
case 'double':
|
||||||
|
@ -70,6 +70,7 @@ class CompanySettingsTest extends TestCase
|
|||||||
$settings = $this->company->settings;
|
$settings = $this->company->settings;
|
||||||
|
|
||||||
$settings->client_number_counter = "a";
|
$settings->client_number_counter = "a";
|
||||||
|
$settings->invoice_number_counter = 1000;
|
||||||
|
|
||||||
$this->company->settings = $settings;
|
$this->company->settings = $settings;
|
||||||
|
|
||||||
@ -78,12 +79,12 @@ class CompanySettingsTest extends TestCase
|
|||||||
'X-API-Token' => $this->token,
|
'X-API-Token' => $this->token,
|
||||||
])->put('/api/v1/companies/'.$this->encodePrimaryKey($this->company->id), $this->company->toArray());
|
])->put('/api/v1/companies/'.$this->encodePrimaryKey($this->company->id), $this->company->toArray());
|
||||||
|
|
||||||
|
|
||||||
$response->assertStatus(200);
|
$response->assertStatus(200);
|
||||||
|
|
||||||
$arr = $response->json();
|
$arr = $response->json();
|
||||||
//\Log::error($arr);
|
\Log::error($arr);
|
||||||
|
|
||||||
// $this->assertEquals($arr['data']['settings']['client_number_counter'],1);
|
$this->assertEquals($arr['data']['settings']['client_number_counter'],1);
|
||||||
|
$this->assertEquals($arr['data']['settings']['invoice_number_counter'],1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user