• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

conedevelopment / bazar / 20270383925

16 Dec 2025 01:55PM UTC coverage: 62.787% (-0.7%) from 63.48%
20270383925

Pull #235

github

web-flow
Merge b534520a4 into 090ff8496
Pull Request #235: Coupons & Discounts

157 of 248 new or added lines in 23 files covered. (63.31%)

3 existing lines in 2 files now uncovered.

1068 of 1701 relevant lines covered (62.79%)

16.76 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.0
/src/Resources/CouponResource.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Cone\Bazar\Resources;
6

7
use Cone\Bazar\Enums\CouponType;
8
use Cone\Bazar\Models\Coupon;
9
use Cone\Bazar\Models\Product;
10
use Cone\Root\Fields\Boolean;
11
use Cone\Root\Fields\Date;
12
use Cone\Root\Fields\Fieldset;
13
use Cone\Root\Fields\ID;
14
use Cone\Root\Fields\Number;
15
use Cone\Root\Fields\Select;
16
use Cone\Root\Fields\Text;
17
use Cone\Root\Resources\Resource;
18
use Illuminate\Database\Eloquent\Model;
19
use Illuminate\Http\Request;
20
use Illuminate\Validation\Rule;
21

22
class CouponResource extends Resource
23
{
24
    /**
25
     * The model class.
26
     */
27
    protected string $model = Coupon::class;
28

29
    /**
30
     * The group for the resource.
31
     */
32
    protected string $group = 'Shop';
33

34
    /**
35
     * The relations to eager load on every query.
36
     */
37
    protected array $withCount = [
38
        'applications',
39
    ];
40

41
    /**
42
     * Get the model for the resource.
43
     */
44
    public function getModel(): string
45
    {
46
        return $this->model::getProxiedClass();
66✔
47
    }
48

49
    /**
50
     * {@inheritdoc}
51
     */
52
    public function modelTitle(Model $model): string
53
    {
NEW
54
        return $model->code;
×
55
    }
56

57
    /**
58
     * Define the fields.
59
     */
60
    public function fields(Request $request): array
61
    {
62
        return [
66✔
63
            ID::make(),
66✔
64

65
            Text::make(__('Code'), 'code')
66✔
66
                ->rules(['required', 'string', 'max:256'])
66✔
67
                ->searchable()
66✔
68
                ->sortable()
66✔
69
                ->required(),
66✔
70

71
            Select::make(__('Type'), 'type')
66✔
72
                ->options(CouponType::toArray())
66✔
73
                ->required()
66✔
74
                ->rules(['required', Rule::in(array_column(CouponType::cases(), 'value'))]),
66✔
75

76
            Number::make(__('Value'), 'value')
66✔
77
                ->required()
66✔
78
                ->rules(['required', 'numeric', 'min:0'])
66✔
79
                ->step(0.1)
66✔
80
                ->min(0)
66✔
81
                ->format(static function (Request $request, Model $model): string {
66✔
NEW
82
                    return (string) match ($model->type) {
×
NEW
83
                        CouponType::PERCENT => $model->value.'%',
×
NEW
84
                        default => $model->value,
×
NEW
85
                    };
×
86
                }),
66✔
87

88
            Boolean::make(__('Active'), 'active')
66✔
89
                ->sortable(),
66✔
90

91
            Date::make(__('Expires At'), 'expires_at')
66✔
92
                ->withTime()
66✔
93
                ->sortable(),
66✔
94

95
            Boolean::make(__('Stackable'), 'stackable')
66✔
96
                ->sortable(),
66✔
97

98
            Fieldset::make(__('Rules'), 'rules')
66✔
99
                ->withFields(static function (): array {
66✔
100
                    return [
66✔
101
                        Number::make(__('Limit'), 'rules->limit')
66✔
102
                            ->min(0)
66✔
103
                            ->rules(['nullable', 'numeric', 'min:0']),
66✔
104

105
                        Select::make(__('Products'), 'rules->products')
66✔
106
                            ->multiple()
66✔
107
                            ->options(function (): array {
66✔
NEW
108
                                return Product::proxy()
×
NEW
109
                                    ->query()
×
NEW
110
                                    ->get()
×
NEW
111
                                    ->pluck('name', 'id')
×
NEW
112
                                    ->toArray();
×
113
                            })
66✔
114
                            ->rules(['nullable', 'array']),
66✔
115
                    ];
66✔
116
                }),
66✔
117
        ];
66✔
118
    }
119
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc