From d408d77f72d64a214a18dc520644d85a6e7a9621 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Tue, 7 Nov 2017 17:07:36 +0800 Subject: [PATCH] Use single SubscriptionFormRequest class to handle subscription CRUD Add some helper method to subscription model Move subscription insert and update script from SubscriptionController to SubscriptionFormRequest class Move subscription delete view to edit view file Add breadcrumbs to subscription pages --- app/Entities/Subscriptions/Subscription.php | 21 ++++ app/Http/Controllers/SubscriptionsController.php | 48 ++------- app/Http/Requests/SubscriptionRequest.php | 117 +++++++++++++++++++++ app/Http/Requests/Subscriptions/CreateRequest.php | 39 ------- app/Http/Requests/Subscriptions/DeleteRequest.php | 31 ------ app/Http/Requests/Subscriptions/UpdateRequest.php | 39 ------- resources/lang/id/subscription.php | 4 +- resources/views/subscriptions/delete.blade.php | 18 ---- resources/views/subscriptions/edit.blade.php | 43 +++++--- resources/views/subscriptions/index.blade.php | 17 ++- .../subscriptions/partials/breadcrumb.blade.php | 5 + .../views/subscriptions/partials/delete.blade.php | 20 ++++ .../partials/subscription-show.blade.php | 43 ++++---- resources/views/subscriptions/show.blade.php | 17 ++- routes/web.php | 6 +- routes/web/subscriptions.php | 9 -- tests/Feature/ManageSubscriptionsTest.php | 1 + tests/Unit/Models/SubscriptionTest.php | 49 +++++++++ 18 files changed, 297 insertions(+), 230 deletions(-) create mode 100644 app/Http/Requests/SubscriptionRequest.php delete mode 100644 app/Http/Requests/Subscriptions/CreateRequest.php delete mode 100644 app/Http/Requests/Subscriptions/DeleteRequest.php delete mode 100644 app/Http/Requests/Subscriptions/UpdateRequest.php delete mode 100755 resources/views/subscriptions/delete.blade.php create mode 100644 resources/views/subscriptions/partials/breadcrumb.blade.php create mode 100755 resources/views/subscriptions/partials/delete.blade.php delete mode 100644 routes/web/subscriptions.php diff --git a/app/Entities/Subscriptions/Subscription.php b/app/Entities/Subscriptions/Subscription.php index 19e02ee..e479378 100755 --- a/app/Entities/Subscriptions/Subscription.php +++ b/app/Entities/Subscriptions/Subscription.php @@ -2,6 +2,7 @@ namespace App\Entities\Subscriptions; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; use Laracasts\Presenter\PresentableTrait; @@ -12,6 +13,26 @@ class Subscription extends Model protected $presenter = 'App\Entities\Subscriptions\SubscriptionPresenter'; protected $guarded = ['id', 'created_at', 'updated_at']; + public function nameLink() + { + return link_to_route('subscriptions.show', $this->name, [$this->id], [ + 'title' => trans( + 'app.show_detail_title', + ['name' => $this->name, 'type' => trans('subscription.subscription')] + ), + ]); + } + + public function nearOfDueDate() + { + return Carbon::parse($this->due_date)->diffInDays(Carbon::now()) < 60; + } + + public function nearOfDueDateSign() + { + return $this->nearOfDueDate() ? '' : ''; + } + public function project() { return $this->belongsTo('App\Entities\Projects\Project'); diff --git a/app/Http/Controllers/SubscriptionsController.php b/app/Http/Controllers/SubscriptionsController.php index 546f320..db1daeb 100755 --- a/app/Http/Controllers/SubscriptionsController.php +++ b/app/Http/Controllers/SubscriptionsController.php @@ -5,9 +5,7 @@ namespace App\Http\Controllers; use App\Entities\Subscriptions\Subscription; use App\Entities\Subscriptions\SubscriptionsRepository; use App\Http\Controllers\Controller; -use App\Http\Requests\Subscriptions\CreateRequest; -use App\Http\Requests\Subscriptions\DeleteRequest; -use App\Http\Requests\Subscriptions\UpdateRequest; +use App\Http\Requests\SubscriptionRequest as FormRequest; use Illuminate\Http\Request; class SubscriptionsController extends Controller @@ -36,21 +34,9 @@ class SubscriptionsController extends Controller return view('subscriptions.create', compact('projects', 'vendors', 'subscriptionTypes')); } - public function store(CreateRequest $request) + public function store(FormRequest $subscriptionCreateRequest) { - $project = \App\Entities\Projects\Project::findOrFail($request->get('project_id')); - - $subscription = new Subscription; - $subscription->project_id = $project->id; - $subscription->vendor_id = $request->get('vendor_id'); - $subscription->customer_id = $project->customer_id; - $subscription->name = $request->get('name'); - $subscription->price = $request->get('price'); - $subscription->start_date = $request->get('start_date'); - $subscription->due_date = $request->get('due_date'); - $subscription->type_id = $request->get('type_id'); - $subscription->notes = $request->get('notes'); - $subscription->save(); + $subscriptionCreateRequest->approveFor(new Subscription); flash()->success(trans('subscription.created')); return redirect()->route('subscriptions.index'); @@ -67,36 +53,24 @@ class SubscriptionsController extends Controller $vendors = $this->repo->getVendorsList(); $subscriptionTypes = $this->getSubscriptionTypes(); - return view('subscriptions.edit', compact('subscription', 'projects', 'vendors', 'subscriptionTypes')); + $pageTitle = trans('subscription.edit').' - '.$subscription->name.' - '.$subscription->customer->name; + + return view('subscriptions.edit', compact('subscription', 'projects', 'vendors', 'subscriptionTypes', 'pageTitle')); } - public function update(UpdateRequest $request, Subscription $subscription) + public function update(FormRequest $subscriptionUpdateRequest, Subscription $subscription) { - $project = \App\Entities\Projects\Project::findOrFail($request->get('project_id')); - - $subscriptionData = $request->except(['_method', '_token']); - $subscriptionData['customer_id'] = $project->customer_id; - - $subscription->update($subscriptionData); + $subscriptionUpdateRequest->approveFor($subscription); flash()->success(trans('subscription.updated')); return redirect()->route('subscriptions.edit', $subscription->id); } - public function delete(Subscription $subscription) - { - return view('subscriptions.delete', compact('subscription')); - } - - public function destroy(DeleteRequest $request, Subscription $subscription) + public function destroy(FormRequest $subscriptionDeleteRequest, Subscription $subscription) { - if ($subscription->id == $request->get('subscription_id')) { - $subscription->delete(); - flash()->success(trans('subscription.deleted')); - } else { - flash()->error(trans('subscription.undeleted')); - } + $subscriptionDeleteRequest->approveToDelete($subscription); + flash()->success(trans('subscription.deleted')); return redirect()->route('subscriptions.index'); } diff --git a/app/Http/Requests/SubscriptionRequest.php b/app/Http/Requests/SubscriptionRequest.php new file mode 100644 index 0000000..4cde10a --- /dev/null +++ b/app/Http/Requests/SubscriptionRequest.php @@ -0,0 +1,117 @@ +user()->can('manage_subscriptions'); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + switch ($this->method()) { + case 'POST': + return $this->getCreateRules(); + break; + + case 'PATCH': + return $this->getUpdateRules(); + break; + + case 'DELETE': + return $this->getDeleteRules(); + break; + + default: + break; + } + } + + public function getCreateRules() + { + return [ + 'name' => 'required|max:60', + 'price' => 'required|numeric', + 'start_date' => 'required|date|date_format:Y-m-d', + 'due_date' => 'required|date|date_format:Y-m-d', + 'project_id' => 'required|numeric|exists:projects,id', + 'vendor_id' => 'required|numeric|exists:vendors,id', + 'type_id' => 'required|numeric', + 'remark' => 'max:255', + ]; + } + + public function getUpdateRules() + { + return [ + 'name' => 'required|max:60', + 'price' => 'required|numeric', + 'start_date' => 'required|date|date_format:Y-m-d', + 'due_date' => 'required|date|date_format:Y-m-d', + 'project_id' => 'required|numeric|exists:projects,id', + 'vendor_id' => 'required|numeric|exists:vendors,id', + 'type_id' => 'required|numeric', + 'remark' => 'max:255', + ]; + } + + public function getDeleteRules() + { + // dd($this->route('subscription')); + // dd($this->all(), $this->segment(2)); + return [ + 'subscription_id' => 'required|in:'.$this->segment(2), + ]; + } + + public function approveFor(Subscription $subscription) + { + $project = Project::findOrFail($this->get('project_id')); + + if ($subscription->exists) { + $subscriptionData = $this->except(['_method', '_token']); + $subscriptionData['customer_id'] = $project->customer_id; + + $subscription->update($subscriptionData); + + } else { + + $subscription->project_id = $project->id; + $subscription->vendor_id = $this->get('vendor_id'); + $subscription->customer_id = $project->customer_id; + $subscription->name = $this->get('name'); + $subscription->price = $this->get('price'); + $subscription->start_date = $this->get('start_date'); + $subscription->due_date = $this->get('due_date'); + $subscription->type_id = $this->get('type_id'); + $subscription->notes = $this->get('notes'); + + $subscription->save(); + } + + return $subscription; + } + + public function approveToDelete(Subscription $subscription) + { + $subscription->delete(); + } + +} diff --git a/app/Http/Requests/Subscriptions/CreateRequest.php b/app/Http/Requests/Subscriptions/CreateRequest.php deleted file mode 100644 index a883dd3..0000000 --- a/app/Http/Requests/Subscriptions/CreateRequest.php +++ /dev/null @@ -1,39 +0,0 @@ -user()->can('manage_subscriptions'); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|max:60', - 'price' => 'required|numeric', - 'start_date' => 'required|date|date_format:Y-m-d', - 'due_date' => 'required|date|date_format:Y-m-d', - 'project_id' => 'required|numeric|exists:projects,id', - 'vendor_id' => 'required|numeric|exists:vendors,id', - 'type_id' => 'required|numeric', - 'remark' => 'max:255', - ]; - } - -} diff --git a/app/Http/Requests/Subscriptions/DeleteRequest.php b/app/Http/Requests/Subscriptions/DeleteRequest.php deleted file mode 100644 index 675db2a..0000000 --- a/app/Http/Requests/Subscriptions/DeleteRequest.php +++ /dev/null @@ -1,31 +0,0 @@ -user()->can('manage_subscriptions'); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'subscription_id' => 'required' - ]; - } - -} diff --git a/app/Http/Requests/Subscriptions/UpdateRequest.php b/app/Http/Requests/Subscriptions/UpdateRequest.php deleted file mode 100644 index bc9b4ea..0000000 --- a/app/Http/Requests/Subscriptions/UpdateRequest.php +++ /dev/null @@ -1,39 +0,0 @@ -user()->can('manage_subscriptions'); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|max:60', - 'price' => 'required|numeric', - 'start_date' => 'required|date|date_format:Y-m-d', - 'due_date' => 'required|date|date_format:Y-m-d', - 'project_id' => 'required|numeric', - 'vendor_id' => 'required|numeric', - 'type_id' => 'required|numeric', - 'remark' => 'max:255', - ]; - } - -} diff --git a/resources/lang/id/subscription.php b/resources/lang/id/subscription.php index f2d32ee..f5763c9 100644 --- a/resources/lang/id/subscription.php +++ b/resources/lang/id/subscription.php @@ -5,6 +5,8 @@ return [ // Labels 'subscription' => 'Langganan', 'subscriptions' => 'Daftar Langganan', + 'list' => 'Daftar Langganan', + 'detail' => 'Detail Langganan', 'search' => 'Cari Langganan', 'found' => 'Langganan ditemukan', 'not_found' => 'Langganan tidak ditemukan', @@ -14,7 +16,7 @@ return [ // Actions 'create' => 'Input Langganan Baru', 'created' => 'Input Langganan baru telah berhasil.', - 'show' => 'Detail Langganan', + 'show' => 'Lihat Detail Langganan', 'edit' => 'Edit Langganan', 'update' => 'Update Langganan', 'updated' => 'Update data Langganan telah berhasil.', diff --git a/resources/views/subscriptions/delete.blade.php b/resources/views/subscriptions/delete.blade.php deleted file mode 100755 index c00d4da..0000000 --- a/resources/views/subscriptions/delete.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@extends('layouts.app') - -@section('title', trans('subscription.delete')) - -@section('content') -

-
- {!! delete_button(['route'=>['subscriptions.destroy',$subscription->id]], trans('app.delete_confirm_button'), ['class'=>'btn btn-danger'], ['subscription_id'=>$subscription->id]) !!} -
- {{ trans('app.delete_confirm') }} - {!! link_to_route('subscriptions.show', trans('app.cancel'), [$subscription->id], ['class' => 'btn btn-default']) !!} -

-
-
- @include('subscriptions.partials.subscription-show') -
-
-@endsection \ No newline at end of file diff --git a/resources/views/subscriptions/edit.blade.php b/resources/views/subscriptions/edit.blade.php index 7b7c88e..b43b148 100755 --- a/resources/views/subscriptions/edit.blade.php +++ b/resources/views/subscriptions/edit.blade.php @@ -1,45 +1,56 @@ @extends('layouts.app') -@section('title', trans('subscription.edit')) +@section('title', $pageTitle) @section('content') -

-
+@include('subscriptions.partials.breadcrumb', ['title' => $pageTitle]) + +@includeWhen(request('action') == 'delete', 'subscriptions.partials.delete') + +@if (request('action') == null) +
+
{!! Form::model($subscription, ['route'=>['subscriptions.update', $subscription->id], 'method' => 'patch']) !!}
-

{{ $subscription->domain_name }} {{ trans('subscription.edit') }}

+

{{ $pageTitle }}

+
{!! FormField::radios('type_id', $subscriptionTypes, ['label' => trans('subscription.type'), 'value' => Request::get('type_id')]) !!}
+
{!! FormField::radios('status_id', [trans('app.in_active'), trans('app.active')],['label' => trans('app.status')]) !!}
+
+
- {!! FormField::text('name',['label'=> trans('subscription.name')]) !!} + {!! FormField::text('name',['label' => trans('subscription.name')]) !!}
- {!! FormField::price('price',['label'=> trans('subscription.price')]) !!} + {!! FormField::price('price',['label' => trans('subscription.price')]) !!}
- {!! FormField::text('start_date',['label'=> trans('subscription.start_date')]) !!} + {!! FormField::text('start_date',['label' => trans('subscription.start_date')]) !!}
- {!! FormField::text('due_date',['label'=> trans('subscription.due_date')]) !!} + {!! FormField::text('due_date',['label' => trans('subscription.due_date')]) !!}
- {!! FormField::select('project_id', $projects,['label'=> trans('subscription.project')]) !!} - {!! FormField::select('vendor_id', $vendors,['label'=> trans('subscription.vendor')]) !!} - {!! FormField::radios('status_id', ['Non Active','Active'],['label'=> trans('app.status')]) !!} - {!! FormField::radios('type_id', $subscriptionTypes, ['label' => trans('subscription.type'), 'value' => Request::get('type_id')]) !!} - {!! FormField::textarea('notes',['label'=> trans('subscription.notes')]) !!} + {!! FormField::select('project_id', $projects,['label' => trans('subscription.project')]) !!} + {!! FormField::select('vendor_id', $vendors,['label' => trans('subscription.vendor')]) !!} + {!! FormField::textarea('notes',['label' => trans('subscription.notes')]) !!}
{!! Form::close() !!}
+
+ @lang('app.action') +

{!! link_to_route('subscriptions.show', trans('subscription.show'), [$subscription->id], ['class' => 'btn btn-info']) !!}

+

{!! link_to_route('subscriptions.index', trans('subscription.back_to_index'), [], ['class' => 'btn btn-default']) !!}

+

{!! link_to_route('subscriptions.edit', trans('subscription.delete'), [$subscription->id, 'action' => 'delete'], ['class'=>'btn btn-danger']) !!}

+
+@endif @endsection diff --git a/resources/views/subscriptions/index.blade.php b/resources/views/subscriptions/index.blade.php index cf8d472..e859030 100755 --- a/resources/views/subscriptions/index.blade.php +++ b/resources/views/subscriptions/index.blade.php @@ -9,7 +9,7 @@
{!! Form::open(['method'=>'get','class'=>'form-inline']) !!} - {!! Form::text('q', Request::get('q'), ['class'=>'form-control index-search-field','placeholder'=>trans('subscription.search'),'style' => 'width:350px']) !!} + {!! Form::text('q', request('q'), ['class'=>'form-control index-search-field','placeholder'=>trans('subscription.search'),'style' => 'width:350px']) !!} {!! Form::submit(trans('subscription.search'), ['class' => 'btn btn-info btn-sm']) !!} {!! link_to_route('subscriptions.index','Reset',[],['class' => 'btn btn-default btn-sm']) !!} {!! Form::close() !!} @@ -24,25 +24,22 @@ {{ trans('subscription.extension_price') }} {{ trans('subscription.vendor') }} {{ trans('app.status') }} - {{ trans('app.action') }} @forelse($subscriptions as $key => $subscription) - due_date)->diffInDays(Carbon::now()) < 60 ? 'class=bg-danger' : '' }}> + {{ $subscriptions->firstItem() + $key }} - {{ $subscription->name }} + {{ $subscription->nameLink() }} {{ $subscription->customer->name }} {{ dateId($subscription->due_date) }} + "> + {{ dateId($subscription->due_date) }} {!! $subscription->nearOfDueDateSign() !!} + {{ formatRp($subscription->price) }} {{ $subscription->vendor->name }} {{ $subscription->status() }} - - {!! link_to_route('subscriptions.show',trans('app.show'),[$subscription->id],['class'=>'btn btn-info btn-xs']) !!} - {!! link_to_route('subscriptions.edit',trans('app.edit'),[$subscription->id],['class'=>'btn btn-warning btn-xs']) !!} - @empty diff --git a/resources/views/subscriptions/partials/breadcrumb.blade.php b/resources/views/subscriptions/partials/breadcrumb.blade.php new file mode 100644 index 0000000..02ed975 --- /dev/null +++ b/resources/views/subscriptions/partials/breadcrumb.blade.php @@ -0,0 +1,5 @@ + diff --git a/resources/views/subscriptions/partials/delete.blade.php b/resources/views/subscriptions/partials/delete.blade.php new file mode 100755 index 0000000..6ff97a8 --- /dev/null +++ b/resources/views/subscriptions/partials/delete.blade.php @@ -0,0 +1,20 @@ +
+
+
+

{{ trans('subscription.delete') }}

+ @include('subscriptions.partials.subscription-show') +
+ {{ trans('app.delete_confirm') }} +
+ +
+
+
diff --git a/resources/views/subscriptions/partials/subscription-show.blade.php b/resources/views/subscriptions/partials/subscription-show.blade.php index 084b054..75e7812 100644 --- a/resources/views/subscriptions/partials/subscription-show.blade.php +++ b/resources/views/subscriptions/partials/subscription-show.blade.php @@ -1,25 +1,18 @@ -
-

{{ trans('subscription.show') }}

- - - - - - - - - - - - - - - -
{{ trans('subscription.project') }}{{ $subscription->project->name }}
{{ trans('subscription.name') }}{{ $subscription->name }}
{{ trans('subscription.price') }}{{ formatRp($subscription->price) }}
{{ trans('subscription.type') }}{{ $subscription->type }}
{{ trans('subscription.start_date') }}{{ dateId($subscription->start_date) }}
{{ trans('subscription.due_date') }}{{ dateId($subscription->due_date) }}
{{ trans('subscription.customer') }}{{ $subscription->customer->name }}
{{ trans('subscription.project') }} - {{ link_to_route('projects.subscriptions', $subscription->project->name, [$subscription->project_id], ['target' => '_blank']) }} -
{{ trans('subscription.notes') }}{!! nl2br($subscription->notes) !!}
- -
+ + + + + + + + + + + + + + + +
{{ trans('subscription.project') }}{{ $subscription->project->name }}
{{ trans('subscription.name') }}{{ $subscription->name }}
{{ trans('subscription.price') }}{{ formatRp($subscription->price) }}
{{ trans('subscription.type') }}{{ $subscription->type }}
{{ trans('subscription.start_date') }}{{ dateId($subscription->start_date) }}
{{ trans('subscription.due_date') }}{{ dateId($subscription->due_date) }}
{{ trans('subscription.customer') }}{{ $subscription->customer->name }}
{{ trans('subscription.project') }} + {{ link_to_route('projects.subscriptions', $subscription->project->name, [$subscription->project_id], ['target' => '_blank']) }} +
{{ trans('subscription.notes') }}{!! nl2br($subscription->notes) !!}
diff --git a/resources/views/subscriptions/show.blade.php b/resources/views/subscriptions/show.blade.php index eaf7ef0..74579f7 100755 --- a/resources/views/subscriptions/show.blade.php +++ b/resources/views/subscriptions/show.blade.php @@ -1,12 +1,21 @@ @extends('layouts.app') -@section('title', trans('subscription.show')) +@section('title', trans('subscription.detail')) @section('content') -

{{ $subscription->domain_name }} {{ trans('subscription.show') }}

+@include('subscriptions.partials.breadcrumb') + +

{{ $subscription->name }} {{ trans('subscription.detail') }}

- @include('subscriptions.partials.subscription-show') +
+

{{ trans('subscription.detail') }}

+ @include('subscriptions.partials.subscription-show') + +
-@endsection \ No newline at end of file +@endsection diff --git a/routes/web.php b/routes/web.php index d6dc8ec..1f051ef 100644 --- a/routes/web.php +++ b/routes/web.php @@ -6,13 +6,17 @@ require __DIR__.'/web/references.php'; require __DIR__.'/web/account.php'; require __DIR__.'/web/projects.php'; require __DIR__.'/web/payments.php'; -require __DIR__.'/web/subscriptions.php'; require __DIR__.'/web/reports.php'; require __DIR__.'/web/invoices.php'; require __DIR__.'/web/options-vue.php'; require __DIR__.'/web/calendar.php'; Route::group(['middleware' => ['web', 'auth']], function () { + /** + * Subscriptions Routes + */ + Route::resource('subscriptions', 'SubscriptionsController'); + /* * Backup Restore Database Routes */ diff --git a/routes/web/subscriptions.php b/routes/web/subscriptions.php deleted file mode 100644 index a2abe39..0000000 --- a/routes/web/subscriptions.php +++ /dev/null @@ -1,9 +0,0 @@ - ['web', 'auth']], function () { - /** - * Subscriptions Routes - */ - Route::get('subscriptions/{subscription}/delete', ['as' => 'subscriptions.delete', 'uses' => 'SubscriptionsController@delete']); - Route::resource('subscriptions', 'SubscriptionsController'); -}); diff --git a/tests/Feature/ManageSubscriptionsTest.php b/tests/Feature/ManageSubscriptionsTest.php index 2cd5835..b8ad28d 100644 --- a/tests/Feature/ManageSubscriptionsTest.php +++ b/tests/Feature/ManageSubscriptionsTest.php @@ -90,6 +90,7 @@ class ManageSubscriptionsTest extends TestCase $this->visit(route('subscriptions.edit', $subscription->id)); $this->click(trans('subscription.delete')); + $this->press(trans('app.delete_confirm_button')); $this->seePageIs(route('subscriptions.index')); diff --git a/tests/Unit/Models/SubscriptionTest.php b/tests/Unit/Models/SubscriptionTest.php index 3ab89e4..3df094c 100644 --- a/tests/Unit/Models/SubscriptionTest.php +++ b/tests/Unit/Models/SubscriptionTest.php @@ -6,11 +6,60 @@ use App\Entities\Partners\Customer; use App\Entities\Partners\Vendor; use App\Entities\Projects\Project; use App\Entities\Subscriptions\Subscription; +use Carbon\Carbon; use Tests\TestCase as TestCase; class SubscriptionTest extends TestCase { /** @test */ + public function it_has_name_link_method() + { + $subscription = factory(Subscription::class)->create(); + + $this->assertEquals( + link_to_route('subscriptions.show', $subscription->name, [$subscription->id], [ + 'title' => trans( + 'app.show_detail_title', + ['name' => $subscription->name, 'type' => trans('subscription.subscription')] + ), + ]), $subscription->nameLink() + ); + } + + /** @test */ + public function it_has_near_of_due_date_method() + { + $next3Months = Carbon::now()->addMonths(2)->format('Y-m-d'); + $subscription = factory(Subscription::class)->make(['due_date' => $next3Months]); + + $this->assertFalse($subscription->nearOfDueDate()); + + $next1Months = Carbon::now()->addMonth()->format('Y-m-d'); + $subscription = factory(Subscription::class)->make(['due_date' => $next1Months]); + + $this->assertTrue($subscription->nearOfDueDate()); + } + + /** @test */ + public function it_has_near_of_due_date_sign_method() + { + // Due date within next 3 months + $next3Months = Carbon::now()->addMonths(2)->format('Y-m-d'); + $subscription = factory(Subscription::class)->make(['due_date' => $next3Months]); + + $this->assertEquals('', $subscription->nearOfDueDateSign()); + + // Due date within next month + $next1Months = Carbon::now()->addMonth()->format('Y-m-d'); + $subscription = factory(Subscription::class)->make(['due_date' => $next1Months]); + + $this->assertEquals( + '', + $subscription->nearOfDueDateSign() + ); + } + + /** @test */ public function it_has_project_relation() { $subscription = factory(Subscription::class)->create();