Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117682590
D3110.1774876538.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
25 KB
Referenced Files
None
Subscribers
None
D3110.1774876538.diff
View Options
diff --git a/src/app/Console/Commands/User/DomainsCommand.php b/src/app/Console/Commands/User/DomainsCommand.php
--- a/src/app/Console/Commands/User/DomainsCommand.php
+++ b/src/app/Console/Commands/User/DomainsCommand.php
@@ -2,40 +2,13 @@
namespace App\Console\Commands\User;
-use App\Console\Command;
+use App\Console\ObjectRelationListCommand;
-class DomainsCommand extends Command
+class DomainsCommand extends ObjectRelationListCommand
{
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'user:domains {user}';
-
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = "List a user's domains.";
-
- /**
- * Execute the console command.
- *
- * @return mixed
- */
- public function handle()
- {
- $user = $this->getUser($this->argument('user'));
-
- if (!$user) {
- $this->error("User not found.");
- return 1;
- }
-
- foreach ($user->domains() as $domain) {
- $this->info($domain->namespace);
- }
- }
+ protected $objectClass = \App\User::class;
+ protected $objectName = 'user';
+ protected $objectTitle = 'email';
+ protected $objectRelation = 'domains';
+ protected $objectRelationArgs = [true, false];
}
diff --git a/src/app/Console/Commands/User/GroupsCommand.php b/src/app/Console/Commands/User/GroupsCommand.php
new file mode 100644
--- /dev/null
+++ b/src/app/Console/Commands/User/GroupsCommand.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Console\Commands\User;
+
+use App\Console\ObjectRelationListCommand;
+
+class GroupsCommand extends ObjectRelationListCommand
+{
+ protected $objectClass = \App\User::class;
+ protected $objectName = 'user';
+ protected $objectTitle = 'email';
+ protected $objectRelation = 'groups';
+}
diff --git a/src/app/Console/Commands/User/ResourcesCommand.php b/src/app/Console/Commands/User/ResourcesCommand.php
new file mode 100644
--- /dev/null
+++ b/src/app/Console/Commands/User/ResourcesCommand.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Console\Commands\User;
+
+use App\Console\ObjectRelationListCommand;
+
+class ResourcesCommand extends ObjectRelationListCommand
+{
+ protected $objectClass = \App\User::class;
+ protected $objectName = 'user';
+ protected $objectTitle = 'email';
+ protected $objectRelation = 'resources';
+}
diff --git a/src/app/Console/Commands/User/SharedFoldersCommand.php b/src/app/Console/Commands/User/SharedFoldersCommand.php
new file mode 100644
--- /dev/null
+++ b/src/app/Console/Commands/User/SharedFoldersCommand.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Console\Commands\User;
+
+use App\Console\ObjectRelationListCommand;
+
+class SharedFoldersCommand extends ObjectRelationListCommand
+{
+ protected $objectClass = \App\User::class;
+ protected $objectName = 'user';
+ protected $objectTitle = 'email';
+ protected $objectRelation = 'sharedFolders';
+}
diff --git a/src/app/Console/Commands/User/UsersCommand.php b/src/app/Console/Commands/User/UsersCommand.php
new file mode 100644
--- /dev/null
+++ b/src/app/Console/Commands/User/UsersCommand.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Console\Commands\User;
+
+use App\Console\ObjectRelationListCommand;
+
+class UsersCommand extends ObjectRelationListCommand
+{
+ protected $objectClass = \App\User::class;
+ protected $objectName = 'user';
+ protected $objectTitle = 'email';
+ protected $objectRelation = 'users';
+}
diff --git a/src/app/Console/ObjectRelationListCommand.php b/src/app/Console/ObjectRelationListCommand.php
--- a/src/app/Console/ObjectRelationListCommand.php
+++ b/src/app/Console/ObjectRelationListCommand.php
@@ -2,6 +2,8 @@
namespace App\Console;
+use Illuminate\Support\Str;
+
/**
* This abstract class provides a means to treat objects in our model using CRUD, with the exception that
* this particular abstract class lists objects' relations.
@@ -16,6 +18,13 @@
protected $objectRelation;
/**
+ * Optional arguments for $objectRelation method
+ *
+ * @var array
+ */
+ protected $objectRelationArgs = [];
+
+ /**
* Supplement the base command constructor with a derived or generated signature and
* description.
*
@@ -29,7 +38,7 @@
"%s%s:%s {%s}",
$this->commandPrefix ? $this->commandPrefix . ":" : "",
$this->objectName,
- $this->objectRelation,
+ Str::kebab($this->objectRelation),
$this->objectName
);
@@ -59,7 +68,7 @@
}
if (method_exists($object, $this->objectRelation)) {
- $result = call_user_func([$object, $this->objectRelation]);
+ $result = call_user_func_array([$object, $this->objectRelation], $this->objectRelationArgs);
} elseif (property_exists($object, $this->objectRelation)) {
$result = $object->{"{$this->objectRelation}"};
} else {
@@ -68,7 +77,10 @@
}
// Convert query builder into a collection
- if ($result instanceof \Illuminate\Database\Eloquent\Relations\Relation) {
+ if (
+ ($result instanceof \Illuminate\Database\Eloquent\Relations\Relation)
+ || ($result instanceof \Illuminate\Database\Eloquent\Builder)
+ ) {
$result = $result->get();
}
diff --git a/src/app/Domain.php b/src/app/Domain.php
--- a/src/app/Domain.php
+++ b/src/app/Domain.php
@@ -440,17 +440,12 @@
return [];
}
- $entitlements = $wallet->entitlements()
+ return $wallet->entitlements()
->where('entitleable_type', \App\User::class)
- ->where('sku_id', $mailboxSKU->id)->get();
-
- $users = [];
-
- foreach ($entitlements as $entitlement) {
- $users[] = $entitlement->entitleable;
- }
-
- return $users;
+ ->where('sku_id', $mailboxSKU->id)
+ ->get()
+ ->pluck('entitleable')
+ ->all();
}
/**
diff --git a/src/app/Http/Controllers/API/V4/DomainsController.php b/src/app/Http/Controllers/API/V4/DomainsController.php
--- a/src/app/Http/Controllers/API/V4/DomainsController.php
+++ b/src/app/Http/Controllers/API/V4/DomainsController.php
@@ -25,15 +25,12 @@
{
$user = $this->guard()->user();
- $list = \collect($user->domains())
- ->filter(function ($domain) {
- return !$domain->isPublic();
- })
+ $list = $user->domains(true, false)
+ ->orderBy('namespace')
+ ->get()
->map(function ($domain) {
return $this->objectToClient($domain);
})
- ->sortBy('namespace')
- ->values()
->all();
return response()->json($list);
diff --git a/src/app/Http/Controllers/API/V4/UsersController.php b/src/app/Http/Controllers/API/V4/UsersController.php
--- a/src/app/Http/Controllers/API/V4/UsersController.php
+++ b/src/app/Http/Controllers/API/V4/UsersController.php
@@ -683,7 +683,7 @@
}
// Check if domain exists
- $domain = Domain::withEnvTenantContext()->where('namespace', $domain)->first();
+ $domain = Domain::withObjectTenantContext($user)->where('namespace', $domain)->first();
if (empty($domain)) {
return \trans('validation.domaininvalid');
@@ -700,9 +700,7 @@
}
// Check if it is one of domains available to the user
- $domains = \collect($user->domains())->pluck('namespace')->all();
-
- if (!in_array($domain->namespace, $domains)) {
+ if (!$user->domains()->where('namespace', $domain->namespace)->exists()) {
return \trans('validation.entryexists', ['attribute' => 'domain']);
}
@@ -760,7 +758,7 @@
}
// Check if domain exists
- $domain = Domain::withEnvTenantContext()->where('namespace', $domain)->first();
+ $domain = Domain::withObjectTenantContext($user)->where('namespace', $domain)->first();
if (empty($domain)) {
return \trans('validation.domaininvalid');
@@ -777,9 +775,7 @@
}
// Check if it is one of domains available to the user
- $domains = \collect($user->domains())->pluck('namespace')->all();
-
- if (!in_array($domain->namespace, $domains)) {
+ if (!$user->domains()->where('namespace', $domain->namespace)->exists()) {
return \trans('validation.entryexists', ['attribute' => 'domain']);
}
diff --git a/src/app/Rules/GroupName.php b/src/app/Rules/GroupName.php
--- a/src/app/Rules/GroupName.php
+++ b/src/app/Rules/GroupName.php
@@ -48,8 +48,8 @@
// Check if the name is unique in the domain
// FIXME: Maybe just using the whole groups table would be faster than groups()?
$exists = $this->owner->groups()
- ->where('groups.name', $name)
- ->where('groups.email', 'like', '%@' . $this->domain)
+ ->where('name', $name)
+ ->where('email', 'like', '%@' . $this->domain)
->exists();
if ($exists) {
diff --git a/src/app/Rules/ResourceName.php b/src/app/Rules/ResourceName.php
--- a/src/app/Rules/ResourceName.php
+++ b/src/app/Rules/ResourceName.php
@@ -53,8 +53,7 @@
}
// Check if specified domain belongs to the user
- $domains = \collect($this->owner->domains(true, false))->pluck('namespace')->all();
- if (!in_array($this->domain, $domains)) {
+ if (!$this->owner->domains(true, false)->where('namespace', $this->domain)->exists()) {
$this->message = \trans('validation.domaininvalid');
return false;
}
@@ -62,8 +61,8 @@
// Check if the name is unique in the domain
// FIXME: Maybe just using the whole resources table would be faster than resources()?
$exists = $this->owner->resources()
- ->where('resources.name', $name)
- ->where('resources.email', 'like', '%@' . $this->domain)
+ ->where('name', $name)
+ ->where('email', 'like', '%@' . $this->domain)
->exists();
if ($exists) {
diff --git a/src/app/Rules/SharedFolderName.php b/src/app/Rules/SharedFolderName.php
--- a/src/app/Rules/SharedFolderName.php
+++ b/src/app/Rules/SharedFolderName.php
@@ -53,8 +53,7 @@
}
// Check if specified domain belongs to the user
- $domains = \collect($this->owner->domains(true, false))->pluck('namespace')->all();
- if (!in_array($this->domain, $domains)) {
+ if (!$this->owner->domains(true, false)->where('namespace', $this->domain)->exists()) {
$this->message = \trans('validation.domaininvalid');
return false;
}
@@ -62,8 +61,8 @@
// Check if the name is unique in the domain
// FIXME: Maybe just using the whole shared_folders table would be faster than sharedFolders()?
$exists = $this->owner->sharedFolders()
- ->where('shared_folders.name', $name)
- ->where('shared_folders.email', 'like', '%@' . $this->domain)
+ ->where('name', $name)
+ ->where('email', 'like', '%@' . $this->domain)
->exists();
if ($exists) {
diff --git a/src/app/User.php b/src/app/User.php
--- a/src/app/User.php
+++ b/src/app/User.php
@@ -2,9 +2,7 @@
namespace App;
-use App\Entitlement;
use App\UserAlias;
-use App\Sku;
use App\Traits\BelongsToTenantTrait;
use App\Traits\EntitleableTrait;
use App\Traits\UserAliasesTrait;
@@ -13,6 +11,7 @@
use App\Traits\SettingsTrait;
use App\Wallet;
use Illuminate\Database\Eloquent\SoftDeletes;
+use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Iatstuti\Database\Support\NullableFields;
@@ -265,39 +264,23 @@
* the current user controls but not owns.
* @param bool $with_public Include active public domains (for the user tenant).
*
- * @return Domain[] List of Domain objects
+ * @return \Illuminate\Database\Eloquent\Builder Query builder
*/
- public function domains($with_accounts = true, $with_public = true): array
+ public function domains($with_accounts = true, $with_public = true)
{
- $domains = [];
+ $domains = $this->entitleables(Domain::class, $with_accounts);
if ($with_public) {
- if ($this->tenant_id) {
- $domains = Domain::where('tenant_id', $this->tenant_id);
- } else {
- $domains = Domain::withEnvTenantContext();
- }
-
- $domains = $domains->whereRaw(sprintf('(type & %s)', Domain::TYPE_PUBLIC))
- ->whereRaw(sprintf('(status & %s)', Domain::STATUS_ACTIVE))
- ->get()
- ->all();
- }
-
- foreach ($this->wallets as $wallet) {
- $entitlements = $wallet->entitlements()->where('entitleable_type', Domain::class)->get();
- foreach ($entitlements as $entitlement) {
- $domains[] = $entitlement->entitleable;
- }
- }
-
- if ($with_accounts) {
- foreach ($this->accounts as $wallet) {
- $entitlements = $wallet->entitlements()->where('entitleable_type', Domain::class)->get();
- foreach ($entitlements as $entitlement) {
- $domains[] = $entitlement->entitleable;
+ $domains->orWhere(function ($query) {
+ if (!$this->tenant_id) {
+ $query->where('tenant_id', $this->tenant_id);
+ } else {
+ $query->withEnvTenantContext();
}
- }
+
+ $query->whereRaw(sprintf('(domains.type & %s)', Domain::TYPE_PUBLIC))
+ ->whereRaw(sprintf('(domains.status & %s)', Domain::STATUS_ACTIVE));
+ });
}
return $domains;
@@ -329,6 +312,36 @@
}
/**
+ * Return entitleable objects of a specified type controlled by the current user.
+ *
+ * @param string $class Object class
+ * @param bool $with_accounts Include objects assigned to wallets
+ * the current user controls, but not owns.
+ *
+ * @return \Illuminate\Database\Eloquent\Builder Query builder
+ */
+ private function entitleables(string $class, bool $with_accounts = true)
+ {
+ $wallets = $this->wallets()->pluck('id')->all();
+
+ if ($with_accounts) {
+ $wallets = array_merge($wallets, $this->accounts()->pluck('wallet_id')->all());
+ }
+
+ $object = new $class();
+ $table = $object->getTable();
+
+ return $object->select("{$table}.*")
+ ->whereExists(function ($query) use ($table, $wallets, $class) {
+ $query->select(DB::raw(1))
+ ->from('entitlements')
+ ->whereColumn('entitleable_id', "{$table}.id")
+ ->whereIn('entitlements.wallet_id', $wallets)
+ ->where('entitlements.entitleable_type', $class);
+ });
+ }
+
+ /**
* Helper to find user by email address, whether it is
* main email address, alias or an external email.
*
@@ -374,17 +387,7 @@
*/
public function groups($with_accounts = true)
{
- $wallets = $this->wallets()->pluck('id')->all();
-
- if ($with_accounts) {
- $wallets = array_merge($wallets, $this->accounts()->pluck('wallet_id')->all());
- }
-
- return Group::select(['groups.*', 'entitlements.wallet_id'])
- ->distinct()
- ->join('entitlements', 'entitlements.entitleable_id', '=', 'groups.id')
- ->whereIn('entitlements.wallet_id', $wallets)
- ->where('entitlements.entitleable_type', Group::class);
+ return $this->entitleables(Group::class, $with_accounts);
}
/**
@@ -478,17 +481,7 @@
*/
public function resources($with_accounts = true)
{
- $wallets = $this->wallets()->pluck('id')->all();
-
- if ($with_accounts) {
- $wallets = array_merge($wallets, $this->accounts()->pluck('wallet_id')->all());
- }
-
- return \App\Resource::select(['resources.*', 'entitlements.wallet_id'])
- ->distinct()
- ->join('entitlements', 'entitlements.entitleable_id', '=', 'resources.id')
- ->whereIn('entitlements.wallet_id', $wallets)
- ->where('entitlements.entitleable_type', \App\Resource::class);
+ return $this->entitleables(\App\Resource::class, $with_accounts);
}
/**
@@ -501,17 +494,7 @@
*/
public function sharedFolders($with_accounts = true)
{
- $wallets = $this->wallets()->pluck('id')->all();
-
- if ($with_accounts) {
- $wallets = array_merge($wallets, $this->accounts()->pluck('wallet_id')->all());
- }
-
- return \App\SharedFolder::select(['shared_folders.*', 'entitlements.wallet_id'])
- ->distinct()
- ->join('entitlements', 'entitlements.entitleable_id', '=', 'shared_folders.id')
- ->whereIn('entitlements.wallet_id', $wallets)
- ->where('entitlements.entitleable_type', \App\SharedFolder::class);
+ return $this->entitleables(\App\SharedFolder::class, $with_accounts);
}
public function senderPolicyFrameworkWhitelist($clientName)
@@ -594,17 +577,7 @@
*/
public function users($with_accounts = true)
{
- $wallets = $this->wallets()->pluck('id')->all();
-
- if ($with_accounts) {
- $wallets = array_merge($wallets, $this->accounts()->pluck('wallet_id')->all());
- }
-
- return $this->select(['users.*', 'entitlements.wallet_id'])
- ->distinct()
- ->leftJoin('entitlements', 'entitlements.entitleable_id', '=', 'users.id')
- ->whereIn('entitlements.wallet_id', $wallets)
- ->where('entitlements.entitleable_type', User::class);
+ return $this->entitleables(User::class, $with_accounts);
}
/**
diff --git a/src/tests/Feature/Console/User/DomainsTest.php b/src/tests/Feature/Console/User/DomainsTest.php
--- a/src/tests/Feature/Console/User/DomainsTest.php
+++ b/src/tests/Feature/Console/User/DomainsTest.php
@@ -15,13 +15,14 @@
$output = trim(\Artisan::output());
$this->assertSame(1, $code);
- $this->assertSame("User not found.", $output);
+ $this->assertSame("No such user unknown", $output);
- $code = \Artisan::call("user:domains john@kolab.org");
+ $code = \Artisan::call("user:domains john@kolab.org --attr=namespace");
$output = trim(\Artisan::output());
+ $domain = $this->getTestDomain('kolab.org');
+
$this->assertSame(0, $code);
- $this->assertTrue(strpos($output, "kolab.org") !== false);
- $this->assertTrue(strpos($output, \config('app.domain')) !== false);
+ $this->assertSame("{$domain->id} {$domain->namespace}", $output);
}
}
diff --git a/src/tests/Feature/Console/User/GroupsTest.php b/src/tests/Feature/Console/User/GroupsTest.php
new file mode 100644
--- /dev/null
+++ b/src/tests/Feature/Console/User/GroupsTest.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Tests\Feature\Console\User;
+
+use Tests\TestCase;
+
+class GroupsTest extends TestCase
+{
+ /**
+ * {@inheritDoc}
+ */
+ public function setUp(): void
+ {
+ parent::setUp();
+
+ $this->deleteTestGroup('group-test@kolab.org');
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function tearDown(): void
+ {
+ $this->deleteTestGroup('group-test@kolab.org');
+
+ parent::tearDown();
+ }
+
+ /**
+ * Test command runs
+ */
+ public function testHandle(): void
+ {
+ $code = \Artisan::call("user:groups unknown");
+ $output = trim(\Artisan::output());
+
+ $this->assertSame(1, $code);
+ $this->assertSame("No such user unknown", $output);
+
+ $john = $this->getTestUser('john@kolab.org');
+ $group = $this->getTestGroup('group-test@kolab.org');
+ $group->assignToWallet($john->wallets->first());
+
+ $code = \Artisan::call("user:groups john@kolab.org --attr=name");
+ $output = trim(\Artisan::output());
+
+ $this->assertSame(0, $code);
+ $this->assertSame("{$group->id} {$group->name}", $output);
+ }
+}
diff --git a/src/tests/Feature/Console/User/ResourcesTest.php b/src/tests/Feature/Console/User/ResourcesTest.php
new file mode 100644
--- /dev/null
+++ b/src/tests/Feature/Console/User/ResourcesTest.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Tests\Feature\Console\User;
+
+use Tests\TestCase;
+
+class ResourcesTest extends TestCase
+{
+ /**
+ * Test command runs
+ */
+ public function testHandle(): void
+ {
+ $code = \Artisan::call("user:resources unknown");
+ $output = trim(\Artisan::output());
+
+ $this->assertSame(1, $code);
+ $this->assertSame("No such user unknown", $output);
+
+ $code = \Artisan::call("user:resources john@kolab.org --attr=name");
+ $output = trim(\Artisan::output());
+
+ $resource1 = $this->getTestResource('resource-test1@kolab.org');
+ $resource2 = $this->getTestResource('resource-test2@kolab.org');
+
+ $this->assertSame(0, $code);
+ $this->assertCount(2, explode("\n", $output));
+ $this->assertStringContainsString("{$resource1->id} {$resource1->name}", $output);
+ $this->assertStringContainsString("{$resource2->id} {$resource2->name}", $output);
+ }
+}
diff --git a/src/tests/Feature/Console/User/SharedFoldersTest.php b/src/tests/Feature/Console/User/SharedFoldersTest.php
new file mode 100644
--- /dev/null
+++ b/src/tests/Feature/Console/User/SharedFoldersTest.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Tests\Feature\Console\User;
+
+use Tests\TestCase;
+
+class SharedFoldersTest extends TestCase
+{
+ /**
+ * Test command runs
+ */
+ public function testHandle(): void
+ {
+ $code = \Artisan::call("user:shared-folders unknown");
+ $output = trim(\Artisan::output());
+
+ $this->assertSame(1, $code);
+ $this->assertSame("No such user unknown", $output);
+
+ $code = \Artisan::call("user:shared-folders john@kolab.org --attr=name");
+ $output = trim(\Artisan::output());
+
+ $folder1 = $this->getTestSharedFolder('folder-event@kolab.org');
+ $folder2 = $this->getTestSharedFolder('folder-contact@kolab.org');
+
+ $this->assertSame(0, $code);
+ $this->assertCount(2, explode("\n", $output));
+ $this->assertStringContainsString("{$folder1->id} {$folder1->name}", $output);
+ $this->assertStringContainsString("{$folder2->id} {$folder2->name}", $output);
+ }
+}
diff --git a/src/tests/Feature/Console/User/UsersTest.php b/src/tests/Feature/Console/User/UsersTest.php
new file mode 100644
--- /dev/null
+++ b/src/tests/Feature/Console/User/UsersTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Tests\Feature\Console\User;
+
+use Tests\TestCase;
+
+class UsersTest extends TestCase
+{
+ /**
+ * Test command runs
+ */
+ public function testHandle(): void
+ {
+ $code = \Artisan::call("user:users unknown");
+ $output = trim(\Artisan::output());
+
+ $this->assertSame(1, $code);
+ $this->assertSame("No such user unknown", $output);
+
+ $code = \Artisan::call("user:users john@kolab.org --attr=email");
+ $output = trim(\Artisan::output());
+
+ $this->assertSame(0, $code);
+ $this->assertCount(4, explode("\n", $output));
+ $this->assertStringContainsString("john@kolab.org", $output);
+ $this->assertStringContainsString("ned@kolab.org", $output);
+ $this->assertStringContainsString("joe@kolab.org", $output);
+ $this->assertStringContainsString("jack@kolab.org", $output);
+ }
+}
diff --git a/src/tests/Feature/UserTest.php b/src/tests/Feature/UserTest.php
--- a/src/tests/Feature/UserTest.php
+++ b/src/tests/Feature/UserTest.php
@@ -334,7 +334,7 @@
'type' => Domain::TYPE_PUBLIC,
]);
- $domains = collect($user->domains())->pluck('namespace')->all();
+ $domains = $user->domains()->pluck('namespace')->all();
$this->assertContains($domain->namespace, $domains);
$this->assertContains('kolab.org', $domains);
@@ -343,7 +343,7 @@
// include John's domains, kolab.org specifically
$user = $this->getTestUser('jack@kolab.org');
- $domains = collect($user->domains())->pluck('namespace')->all();
+ $domains = $user->domains()->pluck('namespace')->all();
$this->assertContains($domain->namespace, $domains);
$this->assertNotContains('kolab.org', $domains);
@@ -353,7 +353,7 @@
$domain->tenant_id = $tenant->id;
$domain->save();
- $domains = collect($user->domains())->pluck('namespace')->all();
+ $domains = $user->domains()->pluck('namespace')->all();
$this->assertNotContains($domain->namespace, $domains);
}
@@ -1063,10 +1063,6 @@
$this->assertEquals($joe->id, $users[1]->id);
$this->assertEquals($john->id, $users[2]->id);
$this->assertEquals($ned->id, $users[3]->id);
- $this->assertSame($wallet->id, $users[0]->wallet_id);
- $this->assertSame($wallet->id, $users[1]->wallet_id);
- $this->assertSame($wallet->id, $users[2]->wallet_id);
- $this->assertSame($wallet->id, $users[3]->wallet_id);
$users = $jack->users()->orderBy('email')->get();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 30, 1:15 PM (1 w, 4 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18769965
Default Alt Text
D3110.1774876538.diff (25 KB)
Attached To
Mode
D3110: Unify code of various object listing methods
Attached
Detach File
Event Timeline