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

conedevelopment / bazar / 20303456369

17 Dec 2025 12:52PM UTC coverage: 64.206% (+0.7%) from 63.48%
20303456369

Pull #235

github

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

176 of 240 new or added lines in 23 files covered. (73.33%)

3 existing lines in 2 files now uncovered.

1087 of 1693 relevant lines covered (64.21%)

16.93 hits per line

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

87.5
/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\Root\Fields\Boolean;
10
use Cone\Root\Fields\Date;
11
use Cone\Root\Fields\Fieldset;
12
use Cone\Root\Fields\ID;
13
use Cone\Root\Fields\Number;
14
use Cone\Root\Fields\Select;
15
use Cone\Root\Fields\Text;
16
use Cone\Root\Resources\Resource;
17
use Illuminate\Database\Eloquent\Model;
18
use Illuminate\Http\Request;
19
use Illuminate\Validation\Rule;
20

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

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

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

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

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

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

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

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

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

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

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

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

97
            Fieldset::make(__('Rules'), 'rules')
67✔
98
                ->withFields(static function (): array {
67✔
99
                    return [
67✔
100
                        Number::make(__('Limit'), 'rules->limit')
67✔
101
                            ->min(0)
67✔
102
                            ->rules(['nullable', 'numeric', 'min:0']),
67✔
103
                    ];
67✔
104
                }),
67✔
105
        ];
67✔
106
    }
107
}
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