Browse Source

User can update profile data and agency data

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
0d2500fccd
  1. 5
      app/Entities/Agencies/Agency.php
  2. 5
      app/Entities/Users/User.php
  3. 24
      app/Http/Controllers/Users/AgencyController.php
  4. 31
      app/Http/Controllers/Users/ProfileController.php
  5. 15
      database/factories/AgencyFactory.php
  6. 26
      resources/views/users/profile/edit.blade.php
  7. 38
      routes/web/account.php
  8. 6
      routes/web/pages.php
  9. 2
      tests/Feature/Users/ManageUsersTest.php
  10. 74
      tests/Feature/Users/UserProfileTest.php
  11. 8
      tests/TestCase.php
  12. 17
      tests/Unit/Models/AgencyTest.php
  13. 21
      tests/Unit/Models/UserTest.php

5
app/Entities/Agencies/Agency.php

@ -7,4 +7,9 @@ use Illuminate\Database\Eloquent\Model;
class Agency extends Model
{
protected $fillable = ['name', 'email', 'address', 'phone', 'website', 'owner_id'];
public function owner()
{
return $this->belongsTo('App\Entities\Users\User');
}
}

5
app/Entities/Users/User.php

@ -95,4 +95,9 @@ class User extends Authenticatable
$q->whereIn('name', $roleNameArray);
});
}
public function agency()
{
return $this->hasOne('App\Entities\Agencies\Agency', 'owner_id');
}
}

24
app/Http/Controllers/Users/AgencyController.php

@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Users;
use App\Http\Controllers\Controller;
class AgencyController extends Controller
{
public function update()
{
$agency = auth()->user()->agency;
$agency->name = request('name');
$agency->email = request('email');
$agency->website = request('website');
$agency->address = request('address');
$agency->phone = request('phone');
$agency->save();
flash(trans('agency.updated'), 'success');
return back();
}
}

31
app/Http/Controllers/Users/ProfileController.php

@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers\Users;
use App\Http\Controllers\Controller;
class ProfileController extends Controller
{
public function show()
{
return auth()->user();
}
public function edit()
{
return view('users.profile.edit');
}
public function update()
{
$user = auth()->user();
$user->name = request('name');
$user->email = request('email');
$user->save();
flash(trans('auth.profile_updated'), 'success');
return back();
}
}

15
database/factories/AgencyFactory.php

@ -0,0 +1,15 @@
<?php
use App\Entities\Agencies\Agency;
use App\Entities\Users\User;
use Faker\Generator as Faker;
$factory->define(Agency::class, function (Faker $faker) {
return [
'name' => $faker->company,
'email' => $faker->safeEmail,
'owner_id' => function () {
return factory(User::class)->create()->id;
},
];
});

26
resources/views/users/profile/edit.blade.php

@ -0,0 +1,26 @@
@extends('layouts.app')
@section('content')
<h3 class="page-header">@lang('auth.profile_edit')</h3>
<div class="row">
<div class="col-md-6">
{{ Form::model(auth()->user(), ['route' => 'users.profile.update', 'method' => 'patch']) }}
{!! FormField::text('name') !!}
{!! FormField::email('email') !!}
{{ Form::submit(trans('auth.update_profile'), ['class' => 'btn btn-info']) }}
{{ Form::close() }}
</div>
<div class="col-md-6">
<?php $agency = auth()->user()->agency;?>
{{ Form::model($agency, ['route' => 'users.agency.update', 'method' => 'patch']) }}
{!! FormField::text('name') !!}
{!! FormField::email('email') !!}
{!! FormField::text('website') !!}
{!! FormField::textarea('address') !!}
{!! FormField::text('phone') !!}
{{ Form::submit(trans('agency.update'), ['class' => 'btn btn-info']) }}
{{ Form::close() }}
</div>
</div>
@endsection

38
routes/web/account.php

@ -2,9 +2,9 @@
/**
* Account Routes
*/
Route::group(['middleware' => 'web','as'=>'auth.'], function() {
Route::get('register', ['as'=>'register', 'uses' => 'AuthController@getRegister']);
Route::post('register', ['as'=>'register', 'uses' => 'AuthController@postRegister']);
Route::group(['middleware' => 'web', 'as' => 'auth.'], function () {
Route::get('register', ['as' => 'register', 'uses' => 'AuthController@getRegister']);
Route::post('register', ['as' => 'register', 'uses' => 'AuthController@postRegister']);
});
// Authentication Routes...
@ -12,10 +12,6 @@ Route::get('login', 'Auth\LoginController@showLoginForm')->name('auth.login');
Route::post('login', 'Auth\LoginController@login');
Route::get('logout', 'Auth\LoginController@logout')->name('auth.logout');
// User Profile Routes...
Route::get('profile', ['uses' => 'Auth\ProfileController@show'])->name('auth.profile');
Route::patch('profile', ['uses' => 'Auth\ProfileController@update'])->name('auth.profile');
// Change Password Routes...
Route::get('change-password', 'Auth\ChangePasswordController@show')->name('auth.change-password');
Route::patch('change-password', 'Auth\ChangePasswordController@update')->name('auth.change-password');
@ -24,4 +20,30 @@ Route::patch('change-password', 'Auth\ChangePasswordController@update')->name('a
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('auth.reset-request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('auth.reset-email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('reset-password');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('reset-password');
// User's Profile routes
Route::get('profile', [
'as' => 'users.profile.show',
'uses' => 'Users\ProfileController@show',
'middleware' => ['web', 'auth'],
]);
Route::get('profile/edit', [
'as' => 'users.profile.edit',
'uses' => 'Users\ProfileController@edit',
'middleware' => ['web', 'auth'],
]);
Route::patch('profile/update', [
'as' => 'users.profile.update',
'uses' => 'Users\ProfileController@update',
'middleware' => ['web', 'auth'],
]);
Route::patch('agency/update', [
'as' => 'users.agency.update',
'uses' => 'Users\AgencyController@update',
'middleware' => ['web', 'auth'],
]);

6
routes/web/pages.php

@ -3,6 +3,6 @@
/**
* Pages Routes
*/
Route::get('/', function () { return redirect()->route('home'); });
Route::get('about', ['as'=>'about', 'uses' => 'PagesController@about', 'middleware'=>['web']]);
Route::get('home', ['as'=>'home', 'uses' => 'PagesController@home', 'middleware'=>['web','auth']]);
Route::get('/', function () {return redirect()->route('home');});
Route::get('about', ['as' => 'about', 'uses' => 'PagesController@about', 'middleware' => ['web']]);
Route::get('home', ['as' => 'home', 'uses' => 'PagesController@home', 'middleware' => ['web', 'auth']]);

2
tests/Feature/ManageUsersTest.php → tests/Feature/Users/ManageUsersTest.php

@ -1,6 +1,6 @@
<?php
namespace Tests\Feature;
namespace Tests\Feature\Users;
use App\Entities\Users\User;
use Tests\TestCase;

74
tests/Feature/Users/UserProfileTest.php

@ -0,0 +1,74 @@
<?php
namespace Tests\Feature\Users;
use App\Entities\Agencies\Agency;
use Tests\TestCase;
class UserProfileTest extends TestCase
{
/** @test */
public function a_user_can_visit_their_profile_page()
{
$user = $this->userSigningIn();
$this->visit(route('users.profile.show'));
$this->seePageIs(route('users.profile.show'));
}
/** @test */
public function a_user_can_visit_their_profile_edit_page()
{
$user = $this->userSigningIn();
$this->visit(route('users.profile.edit'));
$this->seePageIs(route('users.profile.edit'));
}
/** @test */
public function a_user_can_update_their_profile()
{
$user = $this->userSigningIn();
$this->visit(route('users.profile.edit'));
$this->submitForm(trans('auth.update_profile'), [
'name' => 'Nama Saya',
'email' => 'me@domain.com',
]);
$this->see(trans('auth.profile_updated'));
$this->seePageIs(route('users.profile.edit'));
$this->seeInDatabase('users', [
'id' => $user->id,
'name' => 'Nama Saya',
'email' => 'me@domain.com',
]);
}
/** @test */
public function a_user_can_update_their_agency_data()
{
$user = $this->userSigningIn();
$agency = factory(Agency::class)->create(['owner_id' => $user]);
$this->visit(route('users.profile.edit'));
$this->submitForm(trans('agency.update'), [
'name' => 'Nama Agensi Saya',
'email' => 'nama_agensi@domain.com',
'address' => 'Jln. Kalimantan, No. 20, Kota',
'phone' => '081234567890',
'website' => 'https://example.com',
]);
$this->see(trans('agency.updated'));
$this->seePageIs(route('users.profile.edit'));
$this->seeInDatabase('agencies', [
'id' => $agency->id,
'name' => 'Nama Agensi Saya',
'email' => 'nama_agensi@domain.com',
'address' => 'Jln. Kalimantan, No. 20, Kota',
'phone' => '081234567890',
'website' => 'https://example.com',
]);
}
}

8
tests/TestCase.php

@ -28,6 +28,14 @@ abstract class TestCase extends BaseTestCase
return $user;
}
protected function userSigningIn()
{
$user = factory(User::class)->create();
$this->actingAs($user);
return $user;
}
protected function createUser($role = 'admin')
{
$user = factory(User::class)->create();

17
tests/Unit/Models/AgencyTest.php

@ -0,0 +1,17 @@
<?php
namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency;
use App\Entities\Users\User;
use Tests\TestCase;
class AgencyTest extends TestCase
{
/** @test */
public function agency_has_an_owner()
{
$agency = factory(Agency::class)->create();
$this->assertTrue($agency->owner instanceof User);
}
}

21
tests/Unit/Models/UserTest.php

@ -2,13 +2,14 @@
namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency;
use App\Entities\Users\User;
use Tests\TestCase;
class UserTest extends TestCase
{
/** @test */
public function it_has_name_link_method()
public function user_has_name_link_method()
{
$user = factory(User::class)->create();
@ -18,7 +19,7 @@ class UserTest extends TestCase
}
/** @test */
public function it_can_assigned_to_a_role()
public function user_can_assigned_to_a_role()
{
$user = factory(User::class)->create();
$user->assignRole('admin');
@ -27,7 +28,7 @@ class UserTest extends TestCase
}
/** @test */
public function it_has_many_roles()
public function user_has_many_roles()
{
$user = factory(User::class)->create();
$user->assignRole('admin');
@ -37,7 +38,7 @@ class UserTest extends TestCase
}
/** @test */
public function it_can_be_removed_from_a_role()
public function user_can_be_removed_from_a_role()
{
$user = factory(User::class)->create();
$user->assignRole('admin');
@ -50,11 +51,21 @@ class UserTest extends TestCase
}
/** @test */
public function it_can_queried_by_roles()
public function user_can_queried_by_roles()
{
$user = factory(User::class)->create();
$user->assignRole('worker');
$this->assertCount(1, User::orderBy('name')->hasRoles(['worker'])->get());
}
/** @test */
public function user_can_owns_one_agency()
{
$user = factory(User::class)->create();
$agency = factory(Agency::class)->create(['owner_id' => $user->id]);
$this->assertTrue($user->agency instanceof Agency);
$this->assertEquals($user->agency->id, $agency->id);
}
}
Loading…
Cancel
Save