This repository was archived by the owner on Mar 20, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 335
/
Copy pathTestingDatabaseSeeder.php
145 lines (115 loc) · 4.42 KB
/
TestingDatabaseSeeder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
use Timegridio\Concierge\Models\Business;
use Timegridio\Concierge\Models\Contact;
use Timegridio\Concierge\Models\Service;
use App\Models\User;
use Timegridio\Concierge\Models\Vacancy;
use Illuminate\Database\QueryException;
use Illuminate\Database\Seeder;
class TestingDatabaseSeeder extends Seeder
{
/**
* Run the database seeds for a Demo Fixture.
*
* @return void
*/
public function run()
{
// Create some example Businesses with example owners
$this->createBusinessOwnedBy($this->createRandomGuestUser(), 'Tomy\'s Garage');
$this->createBusinessOwnedBy($this->createRandomGuestUser(), 'Pluto Garage');
$this->createBusinessOwnedBy($this->createRandomGuestUser(), 'Jenny\'s');
// Create a well known Demo Manager User
$demoManagerUser = $this->createDemoManagerUser();
// Create a Business managed by him
$business = $this->createBusinessOwnedBy($demoManagerUser, 'Demo Venue');
// Create a Demo Guest User
$demoGuestUser = $this->createDemoGuestUser();
// Create a Contact for Guest User
$contact = $this->createDemoGuestUserContact($demoGuestUser);
// Put the Contact into the Business addressbok
$this->putUserGuestContactOf($contact, $business);
// Generate some addressbook info to fill
$this->generateDemoAddressBook($business, 200);
// Generate Services provided by Business
$serviceA = $this->publishServiceFor($business);
$serviceB = $this->publishServiceFor($business);
$serviceC = $this->publishServiceFor($business);
// Publish Vacancies for each Service for Business
$this->publishVacanciesFor($business, $serviceA);
$this->publishVacanciesFor($business, $serviceA);
$this->publishVacanciesFor($business, $serviceA);
$this->publishVacanciesFor($business, $serviceB);
$this->publishVacanciesFor($business, $serviceB);
$this->publishVacanciesFor($business, $serviceC);
}
/////////////////////////
// SAMPLE DATA HELPERS //
/////////////////////////
private function createDemoManagerUser()
{
// Create demo user (Business Manager)
$user = factory(User::class)->create(['username' => 'manager', 'email' => '[email protected]', 'password' => bcrypt('demomanager')]);
return $user;
}
private function createDemoGuestUser()
{
// Create demo user (Business Guest)
$user = factory(User::class)->create(['username' => 'guest', 'email' => '[email protected]', 'password' => bcrypt('demoguest')]);
return $user;
}
private function createRandomGuestUser()
{
// Create random guest user (Business Guest)
$user = factory(User::class)->create();
return $user;
}
private function createBusinessOwnedBy(User $user, $name)
{
// Create demo Business
$business = factory(Business::class)->create(['name' => $name]);
$business->owners()->save($user);
return $business;
}
private function createDemoGuestUserContact(User $user = null)
{
// Create demo Contact for Guest User
$contact = factory(Contact::class)->create();
if ($user) {
$contact->user()->associate($user);
}
return $contact;
}
private function putUserGuestContactOf(Contact $contact, Business $business)
{
$business->contacts()->save($contact);
}
private function publishServiceFor(Business $business)
{
$service = factory(Service::class)->make();
$service->business()->associate($business);
$service->save();
return $service;
}
private function publishVacanciesFor(Business $business, Service $service)
{
$vacancy = factory(Vacancy::class)->make();
$vacancy->business()->associate($business);
$vacancy->service()->associate($service);
try {
$vacancy->save();
} catch (QueryException $e) {
// We are Ok with getting some key collisions since
// dates are generated randomly
}
return $vacancy;
}
private function generateDemoAddressBook(Business $business, $limit = 100)
{
for ($i = 0; $i <= $limit; $i++) {
$contact = $this->createDemoGuestUserContact();
$this->putUserGuestContactOf($contact, $business);
}
return $this;
}
}