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. 12
      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);
}
}
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;
protected $keyType = 'string';
protected $fillable = ['id', 'user_id', 'key', 'value'];
}

12
database/factories/ModelFactory.php

@ -2,6 +2,7 @@
use App\Couple;
use App\User;
use App\UserMetadata;
/*
|--------------------------------------------------------------------------
@ -48,3 +49,14 @@ $factory->define(Couple::class, function (Faker\Generator $faker) {
},
];
});
$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>
<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="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>
</fieldset>

21
tests/Feature/UsersProfileTest.php

@ -4,6 +4,8 @@ namespace Tests\Feature;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Uuid;
use Storage;
use Tests\TestCase;
@ -215,6 +217,25 @@ class UsersProfileTest extends TestCase
}
/** @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()
{
$manager = $this->loginAsUser();

33
tests/Unit/UserTest.php

@ -4,9 +4,12 @@ namespace Tests\Unit;
use App\Couple;
use App\User;
use App\UserMetadata;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Nonstandard\Uuid;
use Tests\TestCase;
class UserTest extends TestCase
@ -110,6 +113,34 @@ class UserTest extends TestCase
}
/** @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()
{
$mother = factory(User::class)->create();

Loading…
Cancel
Save