Browse Source

Add prefilled input value from user metadata

pull/68/head
Nafies Luthfi 5 years ago
parent
commit
680e46eedf
  1. 18
      app/User.php
  2. 2
      app/UserMetadata.php
  3. 26
      database/factories/ModelFactory.php
  4. 8
      resources/views/users/partials/edit_death.blade.php
  5. 21
      tests/Feature/UsersProfileTest.php
  6. 33
      tests/Unit/UserTest.php

18
app/User.php

@ -314,4 +314,22 @@ class User extends Authenticatable
return Carbon::now()->diffInDays($this->birthday, false); return Carbon::now()->diffInDays($this->birthday, false);
} }
} }
public function metadata()
{
return $this->hasMany(UserMetadata::class, 'user_id', 'id');
}
public function getMetadata($key)
{
$metadata = $this->metadata;
$meta = $metadata->filter(function ($meta) use ($key) {
return $meta->key == $key;
})->first();
if ($meta) {
return $meta->value;
}
}
} }

2
app/UserMetadata.php

@ -9,4 +9,6 @@ class UserMetadata extends Model
public $incrementing = false; public $incrementing = false;
protected $keyType = 'string'; protected $keyType = 'string';
protected $fillable = ['id', 'user_id', 'key', 'value'];
} }

26
database/factories/ModelFactory.php

@ -2,6 +2,7 @@
use App\Couple; use App\Couple;
use App\User; use App\User;
use App\UserMetadata;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -18,10 +19,10 @@ use App\User;
$factory->define(User::class, function (Faker\Generator $faker) { $factory->define(User::class, function (Faker\Generator $faker) {
$name = $faker->name; $name = $faker->name;
return [ return [
'id' => $faker->uuid,
'name' => $name,
'nickname' => $name,
'gender_id' => rand(1, 2),
'id' => $faker->uuid,
'name' => $name,
'nickname' => $name,
'gender_id' => rand(1, 2),
'manager_id' => $faker->uuid, 'manager_id' => $faker->uuid,
]; ];
}); });
@ -36,15 +37,26 @@ $factory->state(User::class, 'female', function (Faker\Generator $faker) {
$factory->define(Couple::class, function (Faker\Generator $faker) { $factory->define(Couple::class, function (Faker\Generator $faker) {
return [ return [
'id' => $faker->uuid,
'id' => $faker->uuid,
'husband_id' => function () { 'husband_id' => function () {
return factory(User::class)->states('male')->create()->id; return factory(User::class)->states('male')->create()->id;
}, },
'wife_id' => function () {
'wife_id' => function () {
return factory(User::class)->states('female')->create()->id; return factory(User::class)->states('female')->create()->id;
}, },
'manager_id' => function () { 'manager_id' => function () {
return factory(User::class)->create()->id; return factory(User::class)->create()->id;
}, },
]; ];
});
});
$factory->define(UserMetadata::class, function (Faker\Generator $faker) {
return [
'id' => $faker->uuid,
'user_id' => function () {
return factory(User::class)->create()->id;
},
'key' => $faker->name,
'value' => $faker->sentence,
];
});

8
resources/views/users/partials/edit_death.blade.php

@ -5,10 +5,10 @@
<fieldset> <fieldset>
<legend>{{ __('user.cemetery_location') }}</legend> <legend>{{ __('user.cemetery_location') }}</legend>
{!! FormField::text('cemetery_location_name', ['label' => __('address.location_name')]) !!}
{!! FormField::textarea('cemetery_location_address', ['label' => __('address.address')]) !!}
{!! FormField::text('cemetery_location_name', ['label' => __('address.location_name'), 'value' => old('cemetery_location_name', $user->getMetadata('cemetery_location_name'))]) !!}
{!! FormField::textarea('cemetery_location_address', ['label' => __('address.address'), 'value' => old('cemetery_location_address', $user->getMetadata('cemetery_location_address'))]) !!}
<div class="row"> <div class="row">
<div class="col-md-6">{!! FormField::text('cemetery_location_latitude', ['label' => __('address.latitude')]) !!}</div>
<div class="col-md-6">{!! FormField::text('cemetery_location_longitude', ['label' => __('address.longitude')]) !!}</div>
<div class="col-md-6">{!! FormField::text('cemetery_location_latitude', ['label' => __('address.latitude'), 'value' => old('cemetery_location_latitude', $user->getMetadata('cemetery_location_latitude'))]) !!}</div>
<div class="col-md-6">{!! FormField::text('cemetery_location_longitude', ['label' => __('address.longitude'), 'value' => old('cemetery_location_longitude', $user->getMetadata('cemetery_location_longitude'))]) !!}</div>
</div> </div>
</fieldset> </fieldset>

21
tests/Feature/UsersProfileTest.php

@ -4,6 +4,8 @@ namespace Tests\Feature;
use App\User; use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Uuid;
use Storage; use Storage;
use Tests\TestCase; use Tests\TestCase;
@ -215,6 +217,25 @@ class UsersProfileTest extends TestCase
} }
/** @test */ /** @test */
public function user_metadata_can_be_prefilled_on_the_edit_form()
{
$user = $this->loginAsUser();
DB::table('user_metadata')->insert([
'id' => Uuid::uuid4()->toString(),
'user_id' => $user->id,
'key' => 'cemetery_location_name',
'value' => 'Some place name',
]);
$this->visit(route('users.edit', [$user->id, 'tab' => 'death']));
$this->seePageIs(route('users.edit', [$user->id, 'tab' => 'death']));
$this->seeElement('input', [
'name' => 'cemetery_location_name',
'value' => 'Some place name',
]);
}
/** @test */
public function manager_can_add_login_account_on_a_user() public function manager_can_add_login_account_on_a_user()
{ {
$manager = $this->loginAsUser(); $manager = $this->loginAsUser();

33
tests/Unit/UserTest.php

@ -4,9 +4,12 @@ namespace Tests\Unit;
use App\Couple; use App\Couple;
use App\User; use App\User;
use App\UserMetadata;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Nonstandard\Uuid;
use Tests\TestCase; use Tests\TestCase;
class UserTest extends TestCase class UserTest extends TestCase
@ -110,6 +113,34 @@ class UserTest extends TestCase
} }
/** @test */ /** @test */
public function a_user_has_many_metadata_relation()
{
$user = factory(User::class)->create();
$metadata = factory(UserMetadata::class)->create(['user_id' => $user->id]);
$this->assertInstanceOf(Collection::class, $user->metadata);
$this->assertInstanceOf(UserMetadata::class, $user->metadata->first());
}
/** @test */
public function user_model_has_get_metadata_method()
{
$user = factory(User::class)->create();
$this->assertNull($user->getMetadata('cemetery_location_address'));
DB::table('user_metadata')->insert([
'id' => Uuid::uuid4()->toString(),
'user_id' => $user->id,
'key' => 'cemetery_location_address',
'value' => 'Some address',
]);
$user = $user->fresh();
$this->assertEquals('Some address', $user->getMetadata('cemetery_location_address'));
}
/** @test */
public function user_have_mother_link_method() public function user_have_mother_link_method()
{ {
$mother = factory(User::class)->create(); $mother = factory(User::class)->create();

Loading…
Cancel
Save