From 50cacf389a436ed3096093e772d5a3325acd6840 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 8 Jul 2016 22:43:43 +0800 Subject: [PATCH] Update 2016-07-08.22.41 Add Customer Subsciption with TDD Add with roles on getUsers method on UsersRepository --- app/Entities/Subscriptions/Subscription.php | 28 ++++ .../Subscriptions/SubscriptionPresenter.php | 13 ++ .../Subscriptions/SubscriptionsRepository.php | 23 ++++ app/Entities/Users/UsersRepository.php | 1 + app/Http/Controllers/SubscriptionsController.php | 82 ++++++++++++ app/Http/Requests/Subscriptions/CreateRequest.php | 40 ++++++ app/Http/Requests/Subscriptions/DeleteRequest.php | 31 +++++ app/Http/Requests/Subscriptions/UpdateRequest.php | 40 ++++++ app/Http/routes.php | 3 +- app/Http/routes/subscriptions.php | 9 ++ app/Services/FormField.php | 1 + database/factories/ModelFactory.php | 23 ++++ resources/lang/id/subscription.php | 31 +++++ resources/views/layouts/partials/sidebar.blade.php | 3 + resources/views/subscriptions/create.blade.php | 55 ++++++++ resources/views/subscriptions/delete.blade.php | 18 +++ resources/views/subscriptions/edit.blade.php | 52 ++++++++ resources/views/subscriptions/index.blade.php | 51 +++++++ .../partials/subscription-show.blade.php | 28 ++++ resources/views/subscriptions/show.blade.php | 12 ++ tests/ManageSubscriptionsTest.php | 146 +++++++++++++++++++++ 21 files changed, 689 insertions(+), 1 deletion(-) create mode 100755 app/Entities/Subscriptions/Subscription.php create mode 100644 app/Entities/Subscriptions/SubscriptionPresenter.php create mode 100755 app/Entities/Subscriptions/SubscriptionsRepository.php create mode 100755 app/Http/Controllers/SubscriptionsController.php create mode 100644 app/Http/Requests/Subscriptions/CreateRequest.php create mode 100644 app/Http/Requests/Subscriptions/DeleteRequest.php create mode 100644 app/Http/Requests/Subscriptions/UpdateRequest.php create mode 100644 app/Http/routes/subscriptions.php create mode 100644 resources/lang/id/subscription.php create mode 100755 resources/views/subscriptions/create.blade.php create mode 100755 resources/views/subscriptions/delete.blade.php create mode 100755 resources/views/subscriptions/edit.blade.php create mode 100755 resources/views/subscriptions/index.blade.php create mode 100644 resources/views/subscriptions/partials/subscription-show.blade.php create mode 100755 resources/views/subscriptions/show.blade.php create mode 100644 tests/ManageSubscriptionsTest.php diff --git a/app/Entities/Subscriptions/Subscription.php b/app/Entities/Subscriptions/Subscription.php new file mode 100755 index 0000000..18213d3 --- /dev/null +++ b/app/Entities/Subscriptions/Subscription.php @@ -0,0 +1,28 @@ +belongsTo(Project::class); + } + + public function customer() + { + return $this->belongsTo(User::class,'customer_id'); + } + +} diff --git a/app/Entities/Subscriptions/SubscriptionPresenter.php b/app/Entities/Subscriptions/SubscriptionPresenter.php new file mode 100644 index 0000000..1f0e182 --- /dev/null +++ b/app/Entities/Subscriptions/SubscriptionPresenter.php @@ -0,0 +1,13 @@ +customer_id ? $this->customer->name . ' (' . $this->customer->email . ')' : '-'; + } +} \ No newline at end of file diff --git a/app/Entities/Subscriptions/SubscriptionsRepository.php b/app/Entities/Subscriptions/SubscriptionsRepository.php new file mode 100755 index 0000000..ffc64ad --- /dev/null +++ b/app/Entities/Subscriptions/SubscriptionsRepository.php @@ -0,0 +1,23 @@ +model->orderBy('due_date')->where('domain_name','like','%' . $q . '%')->paginate($this->_paginate); + } +} \ No newline at end of file diff --git a/app/Entities/Users/UsersRepository.php b/app/Entities/Users/UsersRepository.php index 1c32f1b..717bff2 100755 --- a/app/Entities/Users/UsersRepository.php +++ b/app/Entities/Users/UsersRepository.php @@ -29,6 +29,7 @@ class UsersRepository extends BaseRepository $query->whereIn('name', explode('|', $rolesString)); } }) + ->with('roles') ->paginate($this->_paginate); } diff --git a/app/Http/Controllers/SubscriptionsController.php b/app/Http/Controllers/SubscriptionsController.php new file mode 100755 index 0000000..967b470 --- /dev/null +++ b/app/Http/Controllers/SubscriptionsController.php @@ -0,0 +1,82 @@ +repo = $repo; + } + + public function index(Request $req) + { + $subscriptions = $this->repo->getAll($req->get('q')); + return view('subscriptions.index',compact('subscriptions')); + } + + public function create() + { + $projects = $this->repo->getProjectsList(); + $customers = $this->repo->getCustomersList(); + return view('subscriptions.create', compact('projects','customers')); + } + + public function store(CreateRequest $req) + { + $subscription = $this->repo->create($req->except('_token')); + flash()->success(trans('subscription.created')); + return redirect()->route('subscriptions.index'); + } + + public function show($subscriptionId) + { + $subscription = $this->repo->requireById($subscriptionId); + return view('subscriptions.show', compact('subscription')); + } + + public function edit($subscriptionId) + { + $subscription = $this->repo->requireById($subscriptionId); + $projects = $this->repo->getProjectsList(); + $customers = $this->repo->getCustomersList(); + return view('subscriptions.edit',compact('subscription','projects','customers')); + } + + public function update(UpdateRequest $req, $subscriptionId) + { + $subscription = $this->repo->update($req->except(['_method','_token']), $subscriptionId); + flash()->success(trans('subscription.updated')); + return redirect()->route('subscriptions.edit', $subscriptionId); + } + + public function delete($subscriptionId) + { + $subscription = $this->repo->requireById($subscriptionId); + return view('subscriptions.delete', compact('subscription')); + } + + public function destroy(DeleteRequest $req, $subscriptionId) + { + if ($subscriptionId == $req->get('subscription_id')) + { + $this->repo->delete($subscriptionId); + flash()->success(trans('subscription.deleted')); + } + else + flash()->error(trans('subscription.undeleted')); + + return redirect()->route('subscriptions.index'); + } + +} diff --git a/app/Http/Requests/Subscriptions/CreateRequest.php b/app/Http/Requests/Subscriptions/CreateRequest.php new file mode 100644 index 0000000..2b31e34 --- /dev/null +++ b/app/Http/Requests/Subscriptions/CreateRequest.php @@ -0,0 +1,40 @@ +user()->can('manage_subscriptions'); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'domain_name' => 'required|max:60|unique:subscriptions,domain_name', + 'epp_code' => 'max:60', + 'domain_price' => 'required|numeric', + 'hosting_capacity' => 'max:60', + 'hosting_price' => 'required_with:hosting_capacity|numeric', + 'start_date' => 'required|date|date_format:Y-m-d', + 'due_date' => 'required|date|date_format:Y-m-d', + 'customer_id' => 'required|numeric', + 'project_id' => 'required|numeric', + 'remark' => 'max:255', + ]; + } + +} diff --git a/app/Http/Requests/Subscriptions/DeleteRequest.php b/app/Http/Requests/Subscriptions/DeleteRequest.php new file mode 100644 index 0000000..675db2a --- /dev/null +++ b/app/Http/Requests/Subscriptions/DeleteRequest.php @@ -0,0 +1,31 @@ +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 new file mode 100644 index 0000000..058d5bd --- /dev/null +++ b/app/Http/Requests/Subscriptions/UpdateRequest.php @@ -0,0 +1,40 @@ +user()->can('manage_subscriptions'); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'domain_name' => 'required|max:60|unique:subscriptions,domain_name,' . $this->segment(2), + 'epp_code' => 'max:60', + 'domain_price' => 'required|numeric', + 'hosting_capacity' => 'max:60', + 'hosting_price' => 'required_with:hosting_capacity|numeric', + 'start_date' => 'required|date|date_format:Y-m-d', + 'due_date' => 'required|date|date_format:Y-m-d', + 'customer_id' => 'required|numeric', + 'project_id' => 'required|numeric', + 'remark' => 'max:255', + ]; + } + +} diff --git a/app/Http/routes.php b/app/Http/routes.php index aa3c77c..92a925b 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -7,4 +7,5 @@ require __DIR__ . '/routes/references.php'; require __DIR__ . '/routes/account.php'; require __DIR__ . '/routes/backup.php'; require __DIR__ . '/routes/projects.php'; -require __DIR__ . '/routes/payments.php'; \ No newline at end of file +require __DIR__ . '/routes/payments.php'; +require __DIR__ . '/routes/subscriptions.php'; \ No newline at end of file diff --git a/app/Http/routes/subscriptions.php b/app/Http/routes/subscriptions.php new file mode 100644 index 0000000..f47971a --- /dev/null +++ b/app/Http/routes/subscriptions.php @@ -0,0 +1,9 @@ + ['web','role:admin']], function() { + /** + * Subscriptions Routes + */ + Route::get('subscriptions/{id}/delete', ['as'=>'subscriptions.delete', 'uses'=>'SubscriptionsController@delete']); + Route::resource('subscriptions','SubscriptionsController'); +}); diff --git a/app/Services/FormField.php b/app/Services/FormField.php index 65c27d9..c9d3e6a 100644 --- a/app/Services/FormField.php +++ b/app/Services/FormField.php @@ -294,6 +294,7 @@ class FormField $options['type'] = 'number'; $options['addon'] = ['before' => isset($options['currency']) ? $options['currency'] : 'Rp']; $options['class'] = 'text-right'; + $options['min'] = '0'; return $this->text($name, $options); } diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 83bcdb6..c3f8680 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -2,6 +2,7 @@ use App\Entities\Payments\Payment; use App\Entities\Projects\Project; +use App\Entities\Subscriptions\Subscription; use App\Entities\Users\User; /* @@ -60,4 +61,26 @@ $factory->define(Payment::class, function (Faker\Generator $faker) { 'description' => $faker->paragraph, 'customer_id' => $customerId, ]; +}); + +$factory->define(Subscription::class, function (Faker\Generator $faker) { + $projectId = factory(Project::class)->create()->id; + + $customer = factory(User::class)->create(); + $customer->assignRole('customer'); + $customerId = $customer->id; + $startDate = Carbon::parse($faker->dateTimeBetween('-1 year', '-1 month')->format('Y-m-d')); + + return [ + 'project_id' => $projectId, + 'domain_name' => 'www.' . str_random(10) . '.com', + 'domain_price' => 125000, + 'epp_code' => str_random(10), + 'hosting_capacity' => rand(1,3) . ' GB', + 'hosting_price' => rand(1,5) * 100000, + 'start_date' => $startDate->format('Y-m-d'), + 'due_date' => $startDate->addYears(1)->format('Y-m-d'), + 'remark' => $faker->paragraph, + 'customer_id' => $customerId, + ]; }); \ No newline at end of file diff --git a/resources/lang/id/subscription.php b/resources/lang/id/subscription.php new file mode 100644 index 0000000..1446da1 --- /dev/null +++ b/resources/lang/id/subscription.php @@ -0,0 +1,31 @@ + 'Langganan', + 'subscriptions' => 'Daftar Langganan', + 'domain_name' => 'Domain', + 'domain_price' => 'Harga Domain', + 'epp_code' => 'Kode EPP', + 'hosting_capacity' => 'Kapasitas Hosting', + 'hosting_price' => 'Harga Hosting', + 'start_date' => 'Mulai Sewa', + 'due_date' => 'Perpanjangan', + 'extension_price' => 'Biaya Perpanjangan', + 'create' => 'Input Langganan Baru', + 'created' => 'Input Langganan baru telah berhasil.', + 'show' => 'Detail Langganan', + 'edit' => 'Edit Langganan', + 'update' => 'Update Langganan', + 'updated' => 'Update data Langganan telah berhasil.', + 'delete' => 'Hapus Langganan', + 'deleted' => 'Hapus data Langganan telah berhasil.', + 'undeleted' => 'Data Langganan gagal dihapus.', + 'remark' => 'Catatan', + 'search' => 'Cari Langganan', + 'found' => 'Langganan ditemukan', + 'not_found' => 'Langganan tidak ditemukan', + 'empty' => 'Belum ada Langganan', + 'back_to_index' => 'Kembali ke daftar Langganan', + 'customer' => 'Customer', + 'project' => 'Project', +]; \ No newline at end of file diff --git a/resources/views/layouts/partials/sidebar.blade.php b/resources/views/layouts/partials/sidebar.blade.php index 9d3bb14..fbc991d 100755 --- a/resources/views/layouts/partials/sidebar.blade.php +++ b/resources/views/layouts/partials/sidebar.blade.php @@ -21,6 +21,9 @@ @endcan + @can('manage_subscriptions') +
  • {!! html_link_to_route('subscriptions.index', trans('subscription.subscription'), [], ['icon' => 'retweet']) !!}
  • + @endcan @can('manage_payments')
  • {!! html_link_to_route('payments.index', trans('payment.payments') . ' ', [], ['icon' => 'money']) !!} diff --git a/resources/views/subscriptions/create.blade.php b/resources/views/subscriptions/create.blade.php new file mode 100755 index 0000000..2b49ef5 --- /dev/null +++ b/resources/views/subscriptions/create.blade.php @@ -0,0 +1,55 @@ +@extends('layouts.app') + +@section('title', trans('subscription.create')) + +@section('content') + + +
    +
    + {!! Form::open(['route'=>'subscriptions.store']) !!} +
    +

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

    +
    +
    +
    + {!! FormField::text('domain_name',['label'=> trans('subscription.domain_name')]) !!} +
    +
    + {!! FormField::price('domain_price',['label'=> trans('subscription.domain_price')]) !!} +
    +
    + {!! FormField::text('epp_code',['label'=> trans('subscription.epp_code')]) !!} +
    +
    + {!! FormField::text('hosting_capacity',['label'=> trans('subscription.hosting_capacity')]) !!} +
    +
    + {!! FormField::price('hosting_price',['label'=> trans('subscription.hosting_price')]) !!} +
    +
    +
    +
    + {!! FormField::text('start_date',['label'=> trans('subscription.start_date')]) !!} +
    +
    + {!! FormField::text('due_date',['label'=> trans('subscription.due_date')]) !!} +
    +
    + {!! FormField::select('customer_id', $customers,['label'=> trans('subscription.customer')]) !!} + {!! FormField::select('project_id', $projects,['label'=> trans('subscription.project')]) !!} + {!! FormField::textarea('remark',['label'=> trans('subscription.remark')]) !!} +
    + + +
    + {!! Form::close() !!} +
    +
    +@endsection \ No newline at end of file diff --git a/resources/views/subscriptions/delete.blade.php b/resources/views/subscriptions/delete.blade.php new file mode 100755 index 0000000..c00d4da --- /dev/null +++ b/resources/views/subscriptions/delete.blade.php @@ -0,0 +1,18 @@ +@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 new file mode 100755 index 0000000..44376d3 --- /dev/null +++ b/resources/views/subscriptions/edit.blade.php @@ -0,0 +1,52 @@ +@extends('layouts.app') + +@section('title', trans('subscription.edit')) + +@section('content') +

    +
    + {!! Form::model($subscription, ['route'=>['subscriptions.update', $subscription->id], 'method' => 'patch']) !!} +
    +

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

    +
    +
    +
    + {!! FormField::text('domain_name',['label'=> trans('subscription.domain_name')]) !!} +
    +
    + {!! FormField::price('domain_price',['label'=> trans('subscription.domain_price')]) !!} +
    +
    + {!! FormField::text('epp_code',['label'=> trans('subscription.epp_code')]) !!} +
    +
    + {!! FormField::text('hosting_capacity',['label'=> trans('subscription.hosting_capacity')]) !!} +
    +
    + {!! FormField::price('hosting_price',['label'=> trans('subscription.hosting_price')]) !!} +
    +
    +
    +
    + {!! FormField::text('start_date',['label'=> trans('subscription.start_date')]) !!} +
    +
    + {!! FormField::text('due_date',['label'=> trans('subscription.due_date')]) !!} +
    +
    + {!! FormField::select('customer_id', $customers,['label'=> trans('subscription.customer')]) !!} + {!! FormField::select('project_id', $projects,['label'=> trans('subscription.project')]) !!} + {!! FormField::textarea('remark',['label'=> trans('subscription.remark')]) !!} +
    + + +
    + {!! Form::close() !!} +
    +
    +@endsection \ No newline at end of file diff --git a/resources/views/subscriptions/index.blade.php b/resources/views/subscriptions/index.blade.php new file mode 100755 index 0000000..0a2dba1 --- /dev/null +++ b/resources/views/subscriptions/index.blade.php @@ -0,0 +1,51 @@ +@extends('layouts.app') + +@section('title', trans('subscription.subscriptions')) + +@section('content') +

    + {!! link_to_route('subscriptions.create', trans('subscription.create'), [], ['class'=>'btn btn-success pull-right']) !!} + {{ trans('subscription.subscriptions') }} {{ $subscriptions->total() }} {{ trans('subscription.found') }} +

    +
    + {!! 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::submit(trans('subscription.search'), ['class' => 'btn btn-info btn-sm']) !!} + {!! link_to_route('subscriptions.index','Reset',[],['class' => 'btn btn-default btn-sm']) !!} + {!! Form::close() !!} +
    + + + + + + + + + + + + @forelse($subscriptions as $key => $subscription) + due_date)->diffInDays(Carbon::now()) < 60 ? 'class=bg-danger' : '' }}> + + + + + + + + + @empty + + + + @endforelse + +
    {{ trans('app.table_no') }}{{ trans('subscription.domain_name') }}{{ trans('subscription.hosting_capacity') }}{{ trans('subscription.start_date') }}{{ trans('subscription.due_date') }}{{ trans('subscription.extension_price') }}{{ trans('app.action') }}
    + {{ $subscriptions->firstItem() + $key }} + {{ $subscription->domain_name }}{{ $subscription->hosting_capacity }}{{ dateId($subscription->start_date) }}{{ dateId($subscription->due_date) }}{{ formatRp($subscription->domain_price + $subscription->hosting_price) }} + {!! 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']) !!} +
    {{ trans('subscription.not_found') }}
    + {!! str_replace('/?', '?', $subscriptions->appends(Request::except('page'))->render()) !!} +@endsection diff --git a/resources/views/subscriptions/partials/subscription-show.blade.php b/resources/views/subscriptions/partials/subscription-show.blade.php new file mode 100644 index 0000000..54f3965 --- /dev/null +++ b/resources/views/subscriptions/partials/subscription-show.blade.php @@ -0,0 +1,28 @@ +
    +

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

    + + + + + + + + + + + + + + + +
    {{ trans('subscription.project') }}{{ $subscription->project->name }}
    {{ trans('subscription.domain_name') }}{{ $subscription->domain_name }}
    {{ trans('subscription.domain_price') }}{{ formatRp($subscription->domain_price) }}
    {{ trans('subscription.epp_code') }}{{ $subscription->epp_code }}
    {{ trans('subscription.hosting_capacity') }}{{ $subscription->hosting_capacity }}
    {{ trans('subscription.hosting_price') }}{{ formatRp($subscription->hosting_price) }}
    {{ trans('subscription.start_date') }}{{ dateId($subscription->start_date) }}
    {{ trans('subscription.due_date') }}{{ dateId($subscription->due_date) }}
    {{ trans('subscription.customer') }} + {{ $subscription->present()->customerNameAndEmail }} + @if ($subscription->project->customer_id && auth()->id() == $subscription->project->owner_id) + {!! link_to_route('users.edit', 'Edit', [$subscription->customer_id], ['title' => 'Edit Data Customer']) !!} + @endif +
    + +
    \ No newline at end of file diff --git a/resources/views/subscriptions/show.blade.php b/resources/views/subscriptions/show.blade.php new file mode 100755 index 0000000..98fde1d --- /dev/null +++ b/resources/views/subscriptions/show.blade.php @@ -0,0 +1,12 @@ +@extends('layouts.app') + +@section('title', trans('subscription.show')) + +@section('content') +

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

    +
    +
    + @include('subscriptions.partials.subscription-show') +
    +
    +@endsection \ No newline at end of file diff --git a/tests/ManageSubscriptionsTest.php b/tests/ManageSubscriptionsTest.php new file mode 100644 index 0000000..c633e3a --- /dev/null +++ b/tests/ManageSubscriptionsTest.php @@ -0,0 +1,146 @@ +create(); + $user->assignRole('admin'); + $this->actingAs($user); + + $project = factory(Project::class)->create(); + + $customer = factory(User::class)->create(); + $customer->assignRole('customer'); + + $this->visit('subscriptions'); + $this->seePageIs('subscriptions'); + $this->see(trans('subscription.subscriptions')); + $this->click(trans('subscription.create')); + $this->seePageIs('subscriptions/create'); + + // Fill Form + $this->type('www.domain.com','domain_name'); + $this->type(100000,'domain_price'); + $this->type('100000','epp_code'); + $this->type('3GB','hosting_capacity'); + $this->type(500000,'hosting_price'); + $this->type('2015-05-02','start_date'); + $this->type('2016-05-02','due_date'); + $this->select($project->id, 'project_id'); + $this->select($customer->id, 'customer_id'); + $this->type('','remark'); + $this->press(trans('subscription.create')); + + $this->seePageIs('subscriptions'); + $this->see(trans('subscription.created')); + $this->seeInDatabase('subscriptions', ['project_id' => $project->id,'domain_price' => 100000,'start_date' => '2015-05-02','due_date' => '2016-05-02']); + } + + /** @test */ + public function admin_can_edit_subscription_data() + { + $user = factory(User::class)->create(); + $user->assignRole('admin'); + $this->actingAs($user); + + $project = factory(Project::class)->create(); + + $customer = factory(User::class)->create(); + $customer->assignRole('customer'); + + $subscription = factory(Subscription::class)->create(['customer_id' => $customer->id, 'project_id' => $project->id]); + + $this->visit('subscriptions/' . $subscription->id . '/edit'); + $this->seePageIs('subscriptions/' . $subscription->id . '/edit'); + + // Fill Form + $this->type($eppCode = str_random(10),'epp_code'); + $this->type('4GB','hosting_capacity'); + $this->type(500000,'hosting_price'); + $this->type('2015-05-02','start_date'); + $this->type('2016-05-02','due_date'); + $this->press(trans('subscription.update')); + + $this->seePageIs('subscriptions/' . $subscription->id . '/edit'); + $this->see(trans('subscription.updated')); + $this->seeInDatabase('subscriptions', [ + 'epp_code' => $eppCode, + 'customer_id' => $customer->id, + 'project_id' => $project->id, + 'hosting_capacity' => '4GB', + 'hosting_price' => '500000', + 'start_date' => '2015-05-02', + 'due_date' => '2016-05-02', + ]); + } + + /** @test */ + public function admin_can_delete_a_subscription() + { + $user = factory(User::class)->create(); + $user->assignRole('admin'); + $this->actingAs($user); + + $subscription = factory(Subscription::class)->create(); + + $this->visit('/subscriptions'); + $this->click(trans('app.edit')); + $this->click(trans('subscription.delete')); + $this->press(trans('app.delete_confirm_button')); + $this->seePageIs('subscriptions'); + $this->see(trans('subscription.deleted')); + } + + /** @test */ + public function admin_can_see_a_subscription() + { + $user = factory(User::class)->create(); + $user->assignRole('admin'); + $this->actingAs($user); + + $subscription = factory(Subscription::class)->create(); + + $this->visit('/subscriptions'); + $this->click(trans('app.show')); + $this->seePageIs('subscriptions/' . $subscription->id); + $this->see(trans('subscription.show')); + $this->see($subscription->domain_name); + $this->see(formatRp($subscription->domain_price)); + $this->see($subscription->hosting_capacity); + $this->see(formatRp($subscription->hosting_price)); + $this->see(dateId($subscription->start_date)); + $this->see(dateId($subscription->due_date)); + } + + /** @test */ + public function admin_can_see_all_subscriptions() + { + $user = factory(User::class)->create(); + $user->assignRole('admin'); + $this->actingAs($user); + + $subscriptions = factory(Subscription::class, 30)->create(); + $this->assertEquals(30, $subscriptions->count()); + + $this->visit('/subscriptions'); + $this->see($subscriptions[1]->domain_name); + $this->see($subscriptions[1]->hosting_capacity); + $this->see(dateId($subscriptions[1]->start_date)); + $this->see(dateId($subscriptions[1]->due_date)); + $this->see(formatRp($subscriptions[1]->domain_price + $subscriptions[1]->hosting_price)); + + $this->click('2'); + $this->seePageIs('/subscriptions?page=2'); + } +}