Browse Source

Add address, lat and long column to outlets table

pull/3/head
Nafies Luthfi 7 years ago
parent
commit
2556eb40f3
  1. 12
      app/Http/Controllers/OutletController.php
  2. 4
      app/Outlet.php
  3. 6
      database/factories/OutletFactory.php
  4. 4
      database/migrations/2018_12_10_125521_create_outlets_table.php
  5. 22
      resources/views/outlets/create.blade.php
  6. 24
      resources/views/outlets/edit.blade.php
  7. 28
      tests/Feature/ManageOutletTest.php

12
app/Http/Controllers/OutletController.php

@ -44,8 +44,10 @@ class OutletController extends Controller
$this->authorize('create', new Outlet); $this->authorize('create', new Outlet);
$newOutlet = $request->validate([ $newOutlet = $request->validate([
'name' => 'required|max:60',
'description' => 'nullable|max:255',
'name' => 'required|max:60',
'address' => 'nullable|max:255',
'latitude' => 'nullable|required_with:longitude|max:15',
'longitude' => 'nullable|required_with:latitude|max:15',
]); ]);
$newOutlet['creator_id'] = auth()->id(); $newOutlet['creator_id'] = auth()->id();
@ -90,8 +92,10 @@ class OutletController extends Controller
$this->authorize('update', $outlet); $this->authorize('update', $outlet);
$outletData = $request->validate([ $outletData = $request->validate([
'name' => 'required|max:60',
'description' => 'nullable|max:255',
'name' => 'required|max:60',
'address' => 'nullable|max:255',
'latitude' => 'nullable|required_with:longitude|max:15',
'longitude' => 'nullable|required_with:latitude|max:15',
]); ]);
$outlet->update($outletData); $outlet->update($outletData);

4
app/Outlet.php

@ -7,7 +7,9 @@ use Illuminate\Database\Eloquent\Model;
class Outlet extends Model class Outlet extends Model
{ {
protected $fillable = ['name', 'description', 'creator_id'];
protected $fillable = [
'name', 'address', 'latitude', 'longitude', 'creator_id',
];
public function getNameLinkAttribute() public function getNameLinkAttribute()
{ {

6
database/factories/OutletFactory.php

@ -7,8 +7,10 @@ use Faker\Generator as Faker;
$factory->define(Outlet::class, function (Faker $faker) { $factory->define(Outlet::class, function (Faker $faker) {
return [ return [
'name' => $faker->word,
'description' => $faker->sentence,
'name' => $faker->word,
'address' => $faker->address,
'latitude' => $faker->latitude(-3.29, -3.35),
'longitude' => $faker->longitude(114.56, 114.63),
'creator_id' => function () { 'creator_id' => function () {
return factory(User::class)->create()->id; return factory(User::class)->create()->id;
}, },

4
database/migrations/2018_12_10_125521_create_outlets_table.php

@ -16,7 +16,9 @@ class CreateOutletsTable extends Migration
Schema::create('outlets', function (Blueprint $table) { Schema::create('outlets', function (Blueprint $table) {
$table->increments('id'); $table->increments('id');
$table->string('name', 60); $table->string('name', 60);
$table->string('description')->nullable();
$table->string('address')->nullable();
$table->string('latitude', 15)->nullable();
$table->string('longitude', 15)->nullable();
$table->unsignedInteger('creator_id'); $table->unsignedInteger('creator_id');
$table->timestamps(); $table->timestamps();

22
resources/views/outlets/create.blade.php

@ -16,9 +16,25 @@
{!! $errors->first('name', '<span class="invalid-feedback" role="alert">:message</span>') !!} {!! $errors->first('name', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="description" class="control-label">{{ __('outlet.description') }}</label>
<textarea id="description" class="form-control{{ $errors->has('description') ? ' is-invalid' : '' }}" name="description" rows="4">{{ old('description') }}</textarea>
{!! $errors->first('description', '<span class="invalid-feedback" role="alert">:message</span>') !!}
<label for="address" class="control-label">{{ __('outlet.address') }}</label>
<textarea id="address" class="form-control{{ $errors->has('address') ? ' is-invalid' : '' }}" name="address" rows="4">{{ old('address') }}</textarea>
{!! $errors->first('address', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="latitude" class="control-label">{{ __('outlet.latitude') }}</label>
<input id="latitude" type="text" class="form-control{{ $errors->has('latitude') ? ' is-invalid' : '' }}" name="latitude" value="{{ old('latitude') }}" required>
{!! $errors->first('latitude', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="longitude" class="control-label">{{ __('outlet.longitude') }}</label>
<input id="longitude" type="text" class="form-control{{ $errors->has('longitude') ? ' is-invalid' : '' }}" name="longitude" value="{{ old('longitude') }}" required>
{!! $errors->first('longitude', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div>
</div>
</div> </div>
</div> </div>
<div class="card-footer"> <div class="card-footer">

24
resources/views/outlets/edit.blade.php

@ -12,8 +12,12 @@
<div class="card-body"> <div class="card-body">
<label class="control-label text-primary">{{ __('outlet.name') }}</label> <label class="control-label text-primary">{{ __('outlet.name') }}</label>
<p>{{ $outlet->name }}</p> <p>{{ $outlet->name }}</p>
<label class="control-label text-primary">{{ __('outlet.description') }}</label>
<p>{{ $outlet->description }}</p>
<label class="control-label text-primary">{{ __('outlet.address') }}</label>
<p>{{ $outlet->address }}</p>
<label class="control-label text-primary">{{ __('outlet.latitude') }}</label>
<p>{{ $outlet->latitude }}</p>
<label class="control-label text-primary">{{ __('outlet.longitude') }}</label>
<p>{{ $outlet->longitude }}</p>
{!! $errors->first('outlet_id', '<span class="invalid-feedback" role="alert">:message</span>') !!} {!! $errors->first('outlet_id', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div> </div>
<hr style="margin:0"> <hr style="margin:0">
@ -40,9 +44,19 @@
{!! $errors->first('name', '<span class="invalid-feedback" role="alert">:message</span>') !!} {!! $errors->first('name', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="description" class="control-label">{{ __('outlet.description') }}</label>
<textarea id="description" class="form-control{{ $errors->has('description') ? ' is-invalid' : '' }}" name="description" rows="4">{{ old('description', $outlet->description) }}</textarea>
{!! $errors->first('description', '<span class="invalid-feedback" role="alert">:message</span>') !!}
<label for="address" class="control-label">{{ __('outlet.address') }}</label>
<textarea id="address" class="form-control{{ $errors->has('address') ? ' is-invalid' : '' }}" name="address" rows="4">{{ old('address', $outlet->address) }}</textarea>
{!! $errors->first('address', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div>
<div class="form-group">
<label for="latitude" class="control-label">{{ __('outlet.latitude') }}</label>
<input id="latitude" type="text" class="form-control{{ $errors->has('latitude') ? ' is-invalid' : '' }}" name="latitude" value="{{ old('latitude', $outlet->latitude) }}" required>
{!! $errors->first('latitude', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div>
<div class="form-group">
<label for="longitude" class="control-label">{{ __('outlet.longitude') }}</label>
<input id="longitude" type="text" class="form-control{{ $errors->has('longitude') ? ' is-invalid' : '' }}" name="longitude" value="{{ old('longitude', $outlet->longitude) }}" required>
{!! $errors->first('longitude', '<span class="invalid-feedback" role="alert">:message</span>') !!}
</div> </div>
</div> </div>
<div class="card-footer"> <div class="card-footer">

28
tests/Feature/ManageOutletTest.php

@ -23,8 +23,10 @@ class ManageOutletTest extends TestCase
private function getCreateFields(array $overrides = []) private function getCreateFields(array $overrides = [])
{ {
return array_merge([ return array_merge([
'name' => 'Outlet 1 name',
'description' => 'Outlet 1 description',
'name' => 'Outlet 1 name',
'address' => 'Outlet 1 address',
'latitude' => '-3.333333',
'longitude' => '114.583333',
], $overrides); ], $overrides);
} }
@ -67,22 +69,24 @@ class ManageOutletTest extends TestCase
} }
/** @test */ /** @test */
public function validate_outlet_description_is_not_more_than_255_characters()
public function validate_outlet_address_is_not_more_than_255_characters()
{ {
$this->loginAsUser(); $this->loginAsUser();
// description 256 characters
// address 256 characters
$this->post(route('outlets.store'), $this->getCreateFields([ $this->post(route('outlets.store'), $this->getCreateFields([
'description' => str_repeat('Long description', 16),
'address' => str_repeat('Long outlet address', 16),
])); ]));
$this->assertSessionHasErrors('description');
$this->assertSessionHasErrors('address');
} }
private function getEditFields(array $overrides = []) private function getEditFields(array $overrides = [])
{ {
return array_merge([ return array_merge([
'name' => 'Outlet 1 name',
'description' => 'Outlet 1 description',
'name' => 'Outlet 1 name',
'address' => 'Outlet 1 address',
'latitude' => '-3.333333',
'longitude' => '114.583333',
], $overrides); ], $overrides);
} }
@ -130,16 +134,16 @@ class ManageOutletTest extends TestCase
} }
/** @test */ /** @test */
public function validate_outlet_description_update_is_not_more_than_255_characters()
public function validate_outlet_address_update_is_not_more_than_255_characters()
{ {
$this->loginAsUser(); $this->loginAsUser();
$outlet = factory(Outlet::class)->create(['name' => 'Testing 123']); $outlet = factory(Outlet::class)->create(['name' => 'Testing 123']);
// description 256 characters
// address 256 characters
$this->patch(route('outlets.update', $outlet), $this->getEditFields([ $this->patch(route('outlets.update', $outlet), $this->getEditFields([
'description' => str_repeat('Long description', 16),
'address' => str_repeat('Long outlet address', 16),
])); ]));
$this->assertSessionHasErrors('description');
$this->assertSessionHasErrors('address');
} }
/** @test */ /** @test */

Loading…
Cancel
Save