Skip to content

Commit fbde435

Browse files
authored
Merge pull request #25 from laravelcm/patch-fix
feat: fix slug generation and add new tests
2 parents 98fd039 + 825e38c commit fbde435

23 files changed

+144
-110
lines changed

.github/workflows/phpstan.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,4 @@ jobs:
4444
run: composer install --prefer-dist --no-interaction
4545

4646
- name: Run PHPStan
47-
run: composer stan
47+
run: composer types

composer.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,11 @@
4242
"spatie/laravel-translatable": "^6.5.0"
4343
},
4444
"require-dev": {
45-
"laravel/pint": "^1.13",
4645
"larastan/larastan": "^2.0",
46+
"laravel/pint": "^1.13",
4747
"orchestra/testbench": "^8.0|^9.0",
48-
"pestphp/pest": "^2.18"
48+
"pestphp/pest": "^2.18",
49+
"spatie/test-time": "^1.3"
4950
},
5051
"autoload": {
5152
"psr-4": {
@@ -59,9 +60,9 @@
5960
}
6061
},
6162
"scripts": {
62-
"pest": "./vendor/bin/pest",
63-
"pint": "./vendor/bin/pint",
64-
"stan": "./vendor/bin/phpstan analyse --memory-limit=2g"
63+
"test": "./vendor/bin/pest",
64+
"lint": "./vendor/bin/pint",
65+
"types": "./vendor/bin/phpstan analyse --memory-limit=2g"
6566
},
6667
"config": {
6768
"sort-packages": true,

database/migrations/create_plan_features_table.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
use Illuminate\Database\Schema\Blueprint;
77
use Illuminate\Support\Facades\Schema;
88

9-
return new class () extends Migration {
9+
return new class extends Migration
10+
{
1011
public function up(): void
1112
{
1213
Schema::create(config('laravel-subscriptions.tables.features'), function (Blueprint $table): void {

database/migrations/create_plan_subscription_usage_table.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
use Illuminate\Database\Schema\Blueprint;
77
use Illuminate\Support\Facades\Schema;
88

9-
return new class () extends Migration {
9+
return new class extends Migration
10+
{
1011
public function up(): void
1112
{
1213
Schema::create(config('laravel-subscriptions.tables.subscription_usage'), function (Blueprint $table): void {

database/migrations/create_plan_subscriptions_table.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
use Illuminate\Database\Schema\Blueprint;
77
use Illuminate\Support\Facades\Schema;
88

9-
return new class () extends Migration {
9+
return new class extends Migration
10+
{
1011
public function up(): void
1112
{
1213
Schema::create(config('laravel-subscriptions.tables.subscriptions'), function (Blueprint $table): void {

database/migrations/create_plans_table.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
use Illuminate\Support\Facades\Schema;
88
use Laravelcm\Subscriptions\Interval;
99

10-
return new class () extends Migration {
10+
return new class extends Migration
11+
{
1112
public function up(): void
1213
{
1314
Schema::create(config('laravel-subscriptions.tables.plans'), function (Blueprint $table): void {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Illuminate\Database\Migrations\Migration;
6+
use Illuminate\Database\Schema\Blueprint;
7+
use Illuminate\Support\Facades\Schema;
8+
9+
return new class extends Migration
10+
{
11+
public function up(): void
12+
{
13+
Schema::table(config('laravel-subscriptions.tables.subscriptions'), function (Blueprint $table): void {
14+
$table->dropUnique(config('laravel-subscriptions.tables.subscriptions') . '_slug_unique');
15+
});
16+
}
17+
};

pint.json

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,14 @@
11
{
2-
"preset": "psr12",
2+
"preset": "laravel",
33
"rules": {
4-
"align_multiline_comment": true,
4+
"concat_space": {
5+
"spacing": "one"
6+
},
57
"array_indentation": true,
68
"array_syntax": true,
7-
"blank_line_after_namespace": true,
8-
"blank_line_after_opening_tag": true,
9-
"combine_consecutive_issets": true,
10-
"combine_consecutive_unsets": true,
11-
"concat_space": true,
12-
"declare_parentheses": true,
9+
"blank_line_before_statement": true,
1310
"declare_strict_types": true,
14-
"explicit_string_variable": true,
15-
"final_internal_class": false,
16-
"fully_qualified_strict_types": true,
17-
"global_namespace_import": {
18-
"import_classes": true,
19-
"import_constants": true,
20-
"import_functions": true
21-
},
22-
"is_null": true,
23-
"lambda_not_used_import": true,
24-
"logical_operators": true,
25-
"mb_str_functions": true,
26-
"method_chaining_indentation": true,
27-
"modernize_strpos": true,
28-
"new_with_braces": true,
29-
"no_empty_comment": true,
30-
"not_operator_with_space": true,
31-
"ordered_traits": true,
32-
"protected_to_private": true,
33-
"simplified_if_return": true,
34-
"strict_comparison": true,
35-
"ternary_to_null_coalescing": true,
36-
"trim_array_spaces": true,
37-
"use_arrow_functions": true,
38-
"void_return": true
11+
"declare_parentheses": true,
12+
"ordered_traits": true
3913
}
4014
}

src/Models/Feature.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,20 @@
55
namespace Laravelcm\Subscriptions\Models;
66

77
use Carbon\Carbon;
8-
use Illuminate\Database\Eloquent\Model;
98
use Illuminate\Database\Eloquent\Factories\HasFactory;
10-
use Illuminate\Database\Eloquent\SoftDeletes;
9+
use Illuminate\Database\Eloquent\Model;
1110
use Illuminate\Database\Eloquent\Relations\HasMany;
12-
use Laravelcm\Subscriptions\Traits\HasSlug;
13-
use Laravelcm\Subscriptions\Traits\HasTranslations;
11+
use Illuminate\Database\Eloquent\SoftDeletes;
1412
use Laravelcm\Subscriptions\Services\Period;
1513
use Laravelcm\Subscriptions\Traits\BelongsToPlan;
14+
use Laravelcm\Subscriptions\Traits\HasSlug;
15+
use Laravelcm\Subscriptions\Traits\HasTranslations;
1616
use Spatie\EloquentSortable\Sortable;
1717
use Spatie\EloquentSortable\SortableTrait;
1818
use Spatie\Sluggable\SlugOptions;
1919

2020
/**
21-
* Laravelcm\Subscriptions\Models\PlanFeature.
22-
*
23-
* @property int $id
21+
* @property-read int|string $id
2422
* @property string $slug
2523
* @property array $title
2624
* @property array $description

src/Models/Plan.php

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@
44

55
namespace Laravelcm\Subscriptions\Models;
66

7+
use Illuminate\Database\Eloquent\Factories\HasFactory;
78
use Illuminate\Database\Eloquent\Model;
8-
use Illuminate\Database\Eloquent\SoftDeletes;
99
use Illuminate\Database\Eloquent\Relations\HasMany;
10-
use Illuminate\Database\Eloquent\Factories\HasFactory;
10+
use Illuminate\Database\Eloquent\SoftDeletes;
1111
use Laravelcm\Subscriptions\Traits\HasSlug;
1212
use Laravelcm\Subscriptions\Traits\HasTranslations;
13+
use Spatie\EloquentSortable\Sortable;
1314
use Spatie\EloquentSortable\SortableTrait;
1415
use Spatie\Sluggable\SlugOptions;
15-
use Spatie\EloquentSortable\Sortable;
1616

1717
/**
18-
* Laravelcm\Subscriptions\Models\Plan.
19-
*
20-
* @property int $id
18+
* @property-read int|string $id
2119
* @property string $slug
2220
* @property array $name
2321
* @property array $description
@@ -96,22 +94,9 @@ class Plan extends Model implements Sortable
9694
];
9795

9896
protected $casts = [
99-
'slug' => 'string',
10097
'is_active' => 'boolean',
10198
'price' => 'float',
10299
'signup_fee' => 'float',
103-
'currency' => 'string',
104-
'trial_period' => 'integer',
105-
'trial_interval' => 'string',
106-
'invoice_period' => 'integer',
107-
'invoice_interval' => 'string',
108-
'grace_period' => 'integer',
109-
'grace_interval' => 'string',
110-
'prorate_day' => 'integer',
111-
'prorate_period' => 'integer',
112-
'prorate_extend_due' => 'integer',
113-
'active_subscribers_limit' => 'integer',
114-
'sort_order' => 'integer',
115100
'deleted_at' => 'datetime',
116101
];
117102

@@ -149,7 +134,8 @@ public function getSlugOptions(): SlugOptions
149134
return SlugOptions::create()
150135
->doNotGenerateSlugsOnUpdate()
151136
->generateSlugsFrom('name')
152-
->saveSlugsTo('slug');
137+
->saveSlugsTo('slug')
138+
->allowDuplicateSlugs();
153139
}
154140

155141
public function features(): HasMany

0 commit comments

Comments
 (0)