Skip to content

Commit fac11f4

Browse files
committed
getting ready for v1
changed single mode delete syntax
1 parent bb33583 commit fac11f4

9 files changed

+87
-34
lines changed

README.md

+2-5
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,7 @@ php artisan migrate
6464
*/
6565
public function down(): void
6666
{
67-
PreferenceBuilder::init("language")
68-
// optional if there is only one language preference
69-
->withGroup('general')
70-
->delete();
67+
PreferenceBuilder::delete("language");
7168
}
7269
```
7370
#### Bulk mode
@@ -135,7 +132,7 @@ public function getPreference(string $name, string $group = 'general', mixed $de
135132
$user->getPreference('language'); // 'de' as string
136133

137134
$user->setPreference('language',"fr");
138-
// ValidationException because of the rule: ->withRule(new InRule(["en","it","de"]))
135+
// ValidationException because of the rule: ->withRule(new InRule("en","it","de"))
139136
$user->setPreference('language',2);
140137
// ValidationException because of the cast: Cast::STRING
141138

composer.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
},
2222
"scripts" : {
2323
"analyse" : "vendor/bin/phpstan analyse",
24-
"test" : "vendor/bin/phpunit"
24+
"test" : "vendor/bin/phpunit",
25+
"coverage" : " php -d xdebug.mode=coverage vendor/bin/phpunit ./tests --coverage-clover='reports/coverage/coverage.xml' --coverage-html='reports/coverage'"
2526
},
2627
"minimum-stability": "dev",
2728
"prefer-stable": true,

src/Casts/EnumCaster.php

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ protected function deserializeEnum($value)
3535

3636
public function set(?Model $model, string $key, mixed $value, array $attributes)
3737
{
38+
if (empty($value)) {
39+
return null;
40+
}
41+
3842
return json_encode($this->serializeEnum($value));
3943
}
4044

src/Factory/PreferenceBuilder.php

+19-19
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ public static function init(string $name, CastableEnum $cast = Cast::STRING): st
2626
return $builder->withName($name)->withCast($cast)->withGroup('general');
2727
}
2828

29+
public static function delete(string $name, string $group = 'general'): int
30+
{
31+
$query = Preference::query()->where('name', $name);
32+
33+
if ($query->count() > 1) {
34+
$query->where('group', $group);
35+
}
36+
37+
return $query->delete();
38+
}
39+
2940
private function withCast(CastableEnum $cast): static
3041
{
3142
$this->preference->cast = $cast;
@@ -74,17 +85,6 @@ public function updateOrCreate(): Preference
7485
return $this->preference;
7586
}
7687

77-
public function delete(): int
78-
{
79-
$query = Preference::query()->where('name', $this->preference->name);
80-
81-
if ($query->count() > 1) {
82-
$query->where('group', $this->preference->group);
83-
}
84-
85-
return $query->delete();
86-
}
87-
8888
public static function initBulk(array $preferences)
8989
{
9090
if (empty($preferences)) {
@@ -112,17 +112,17 @@ public static function initBulk(array $preferences)
112112

113113
//cast values for DB
114114

115-
if(array_key_exists('rule',$preferenceData)){
116-
$ruleCaster = new RuleCaster();
117-
$preferenceData['rule'] = $ruleCaster->set(null,'',$preferenceData['rule'],[]);
115+
if (array_key_exists('rule', $preferenceData)) {
116+
$ruleCaster = new RuleCaster();
117+
$preferenceData['rule'] = $ruleCaster->set(null, '', $preferenceData['rule'], []);
118118
}
119-
if(array_key_exists('default_value',$preferenceData)){
120-
$valueCaster = new ValueCaster($preferenceData['cast']);
121-
$preferenceData['default_value'] = $valueCaster->set(null,'',$preferenceData['default_value'],[]);
119+
if (array_key_exists('default_value', $preferenceData)) {
120+
$valueCaster = new ValueCaster($preferenceData['cast']);
121+
$preferenceData['default_value'] = $valueCaster->set(null, '', $preferenceData['default_value'], []);
122122
}
123123

124-
$enumCaster = new EnumCaster();
125-
$preferenceData['cast'] = $enumCaster->set(null,'',$preferenceData['cast'],[]);
124+
$enumCaster = new EnumCaster();
125+
$preferenceData['cast'] = $enumCaster->set(null, '', $preferenceData['cast'], []);
126126

127127
// Ensure Defaults
128128
$preferenceData = array_merge([

src/Models/Preference.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* @property string $group
1919
* @property string $name
2020
* @property string|null $description
21-
* @property CastableEnum $cast
21+
* @property CastableEnum|null $cast
2222
* @property HasValidation|null $rule
2323
* @property mixed $default_value
2424
* @property Carbon $created_at

tests/Casts/ValueCasterTest.php

+15
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ public function test_get()
1616
{
1717
$caster = new ValueCaster();
1818

19+
$this->dummyPref->cast = Cast::BOOL;
20+
$result = $caster->get($this->dummyPref, '', false, []);
21+
$this->assertFalse($result);
22+
1923
// With Int Cast
2024
$this->dummyPref->cast = Cast::INT;
2125
$result = $caster->get($this->dummyPref, '', '123', []);
@@ -61,6 +65,12 @@ public function test_get()
6165
$this->assertInstanceOf(\Carbon\Carbon::class, $result);
6266
$this->assertEquals($timestamp, $result->getTimestamp());
6367

68+
69+
$this->dummyPref->cast = null;
70+
$val = 12345;
71+
$result = $caster->get($this->dummyPref, '', $val, []);
72+
$this->assertEquals($val, $result);
73+
6474
}
6575

6676
/** @test */
@@ -101,6 +111,11 @@ public function test_set()
101111
$result = $caster->set($this->dummyPref, '', $timestamp, []);
102112
$this->assertEquals((string)$timestamp, $result);
103113

114+
115+
$this->dummyPref->cast = null;
116+
$val = 12345;
117+
$result = $caster->set($this->dummyPref, '', $val, []);
118+
$this->assertEquals($val, $result);
104119
}
105120

106121
}

tests/PreferenceBasicTest.php

+21-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Illuminate\Validation\ValidationException;
88
use Matteoc99\LaravelPreference\Factory\PreferenceBuilder;
99
use Matteoc99\LaravelPreference\Rules\InRule;
10-
use Matteoc99\LaravelPreference\Tests\Models\User;
10+
use function PHPUnit\Framework\assertEquals;
1111

1212
class PreferenceBasicTest extends TestCase
1313
{
@@ -25,8 +25,7 @@ public function setUp(): void
2525

2626
public function tearDown(): void
2727
{
28-
PreferenceBuilder::init("language")
29-
->delete();
28+
PreferenceBuilder::delete("language");
3029

3130
parent::tearDown();
3231
}
@@ -79,5 +78,24 @@ public function preference_validation_cast()
7978
$this->testUser->setPreference('language', 2);
8079
}
8180

81+
/** @test */
82+
public function init_and_delete()
83+
{
84+
PreferenceBuilder::init("video")
85+
->withDescription("video quality")
86+
->create();
87+
PreferenceBuilder::init("video")
88+
->withGroup('test')
89+
->withDescription("video quality")
90+
->create();
91+
92+
$this->testUser->setPreference('video', "144p", 'test');
93+
94+
PreferenceBuilder::delete('video');
95+
96+
$this->assertEquals('144p',$this->testUser->getPreference('video','test'));
97+
98+
}
99+
82100

83101
}

tests/PreferenceBuilderBulkTest.php

+18-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public function init_bulk_creates_new_and_updates_existing_preferences()
108108
$this->assertDatabaseCount('preferences', 2);
109109
$this->assertDatabaseHas('preferences', ['name' => 'new_pref']);
110110

111-
$found = Preference::query()->where('name',"=",'existing_pref');
111+
$found = Preference::query()->where('name', "=", 'existing_pref');
112112
$this->assertEquals(1, $found->count());
113113
$this->assertEquals(Cast::INT, $found->first()->cast);
114114
}
@@ -140,4 +140,21 @@ public function init_bulk_handles_mixed_valid_and_invalid_preferences()
140140
PreferenceBuilder::initBulk($preferences);
141141
}
142142

143+
/** @test */
144+
145+
public function init_bulk_with_all_options()
146+
{
147+
$preferences = [
148+
['name' => 'pref2', 'cast' => Cast::BOOL, 'default_value' => 2, 'rule' => new LowerThanRule(5), 'description' => 'volume'],
149+
['name' => 'pref2', 'group' => 'test', 'cast' => Cast::BOOL, 'default_value' => 2, 'rule' => new LowerThanRule(5), 'description' => 'volume']
150+
];
151+
152+
PreferenceBuilder::initBulk($preferences);
153+
$this->assertDatabaseCount('preferences', 2);
154+
155+
PreferenceBuilder::deleteBulk($preferences);
156+
$this->assertDatabaseCount('preferences', 0);
157+
158+
}
159+
143160
}

tests/PreferenceCastTest.php

+5-4
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ public function setUp(): void
3636

3737
public function tearDown(): void
3838
{
39-
PreferenceBuilder::init("volume")->delete();
40-
PreferenceBuilder::init("receive_emails")->delete();
41-
PreferenceBuilder::init("birthday")->delete();
42-
PreferenceBuilder::init("timezone")->delete();
39+
PreferenceBuilder::delete("volume");
40+
PreferenceBuilder::delete("receive_emails");
41+
PreferenceBuilder::delete("birthday");
42+
PreferenceBuilder::delete("timezone");
4343

4444
parent::tearDown();
4545
}
@@ -55,6 +55,7 @@ public function user_can_set_and_get_integer_preference_with_custom_rule()
5555
$this->expectException(ValidationException::class);
5656
$this->testUser->setPreference('volume', 6);
5757
}
58+
5859
/** @test */
5960
public function user_can_set_and_get_boolean_preference()
6061
{

0 commit comments

Comments
 (0)