2021-06-10 09:11:40 -04:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Illuminate\Tests\Support;
|
|
|
|
|
|
|
|
|
|
use Illuminate\Support\Traits\Conditionable;
|
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
|
|
|
|
|
|
class SupportConditionableTest extends TestCase
|
|
|
|
|
{
|
|
|
|
|
public function testWhenConditionCallback()
|
|
|
|
|
{
|
2021-06-17 16:58:17 -04:00
|
|
|
// With static condition
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger = (new ConditionableLogger())
|
|
|
|
|
->when(2, function ($logger, $condition) {
|
|
|
|
|
$logger->log('when', $condition);
|
2021-06-17 16:58:17 -04:00
|
|
|
}, function ($logger, $condition) {
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger->log('default', $condition);
|
2021-06-10 09:11:40 -04:00
|
|
|
});
|
|
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
$this->assertSame(['when', 2], $logger->values);
|
2021-06-17 16:58:17 -04:00
|
|
|
|
|
|
|
|
// With callback condition
|
|
|
|
|
$logger = (new ConditionableLogger())->log('init')
|
|
|
|
|
->when(function ($logger) {
|
|
|
|
|
return $logger->has('init');
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('when', $condition);
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('default', $condition);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$this->assertSame(['init', 'when', true], $logger->values);
|
2021-06-10 09:11:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testWhenDefaultCallback()
|
|
|
|
|
{
|
2021-06-17 16:58:17 -04:00
|
|
|
// With static condition
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger = (new ConditionableLogger())
|
2021-06-17 16:58:17 -04:00
|
|
|
->when(null, function ($logger, $condition) {
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger->log('when', $condition);
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('default', $condition);
|
2021-06-10 09:11:40 -04:00
|
|
|
});
|
|
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
$this->assertSame(['default', null], $logger->values);
|
2021-06-17 16:58:17 -04:00
|
|
|
|
|
|
|
|
// With callback condition
|
|
|
|
|
$logger = (new ConditionableLogger())
|
|
|
|
|
->when(function ($logger) {
|
|
|
|
|
return $logger->has('missing');
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('when', $condition);
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('default', $condition);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$this->assertSame(['default', false], $logger->values);
|
2021-06-10 09:11:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnlessConditionCallback()
|
|
|
|
|
{
|
2021-06-17 16:58:17 -04:00
|
|
|
// With static condition
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger = (new ConditionableLogger())
|
|
|
|
|
->unless(null, function ($logger, $condition) {
|
|
|
|
|
$logger->log('unless', $condition);
|
2021-06-17 16:58:17 -04:00
|
|
|
}, function ($logger, $condition) {
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger->log('default', $condition);
|
2021-06-10 09:11:40 -04:00
|
|
|
});
|
|
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
$this->assertSame(['unless', null], $logger->values);
|
2021-06-17 16:58:17 -04:00
|
|
|
|
|
|
|
|
// With callback condition
|
|
|
|
|
$logger = (new ConditionableLogger())
|
|
|
|
|
->unless(function ($logger) {
|
|
|
|
|
return $logger->has('missing');
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('unless', $condition);
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('default', $condition);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$this->assertSame(['unless', false], $logger->values);
|
2021-06-10 09:11:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnlessDefaultCallback()
|
|
|
|
|
{
|
2021-06-17 16:58:17 -04:00
|
|
|
// With static condition
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger = (new ConditionableLogger())
|
2021-06-17 16:58:17 -04:00
|
|
|
->unless(2, function ($logger, $condition) {
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger->log('unless', $condition);
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('default', $condition);
|
2021-06-10 09:11:40 -04:00
|
|
|
});
|
|
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
$this->assertSame(['default', 2], $logger->values);
|
2021-06-17 16:58:17 -04:00
|
|
|
|
|
|
|
|
// With callback condition
|
|
|
|
|
$logger = (new ConditionableLogger())->log('init')
|
|
|
|
|
->unless(function ($logger) {
|
|
|
|
|
return $logger->has('init');
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('unless', $condition);
|
|
|
|
|
}, function ($logger, $condition) {
|
|
|
|
|
$logger->log('default', $condition);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$this->assertSame(['init', 'default', true], $logger->values);
|
2021-06-10 09:11:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testWhenProxy()
|
|
|
|
|
{
|
2021-06-17 16:58:17 -04:00
|
|
|
// With static condition
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger = (new ConditionableLogger())
|
|
|
|
|
->when(true)->log('one')
|
|
|
|
|
->when(false)->log('two');
|
2021-06-10 09:11:40 -04:00
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
$this->assertSame(['one'], $logger->values);
|
2021-06-17 16:58:17 -04:00
|
|
|
|
|
|
|
|
// With callback condition
|
|
|
|
|
$logger = (new ConditionableLogger())->log('init')
|
|
|
|
|
->when(function ($logger) {
|
|
|
|
|
return $logger->has('init');
|
|
|
|
|
})
|
|
|
|
|
->log('one')
|
|
|
|
|
->when(function ($logger) {
|
|
|
|
|
return $logger->has('missing');
|
|
|
|
|
})
|
2022-07-29 21:44:19 +02:00
|
|
|
->log('two')
|
|
|
|
|
->when()->has('init')->log('three')
|
|
|
|
|
->when()->has('missing')->log('four')
|
|
|
|
|
->when()->toggle->log('five')
|
|
|
|
|
->toggle()
|
|
|
|
|
->when()->toggle->log('six');
|
|
|
|
|
|
|
|
|
|
$this->assertSame(['init', 'one', 'three', 'six'], $logger->values);
|
2021-06-10 09:11:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnlessProxy()
|
|
|
|
|
{
|
2021-06-17 16:58:17 -04:00
|
|
|
// With static condition
|
2021-06-11 09:28:43 -04:00
|
|
|
$logger = (new ConditionableLogger())
|
|
|
|
|
->unless(true)->log('one')
|
|
|
|
|
->unless(false)->log('two');
|
2021-06-10 09:11:40 -04:00
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
$this->assertSame(['two'], $logger->values);
|
2021-06-17 16:58:17 -04:00
|
|
|
|
|
|
|
|
// With callback condition
|
|
|
|
|
$logger = (new ConditionableLogger())->log('init')
|
|
|
|
|
->unless(function ($logger) {
|
|
|
|
|
return $logger->has('init');
|
|
|
|
|
})
|
|
|
|
|
->log('one')
|
|
|
|
|
->unless(function ($logger) {
|
|
|
|
|
return $logger->has('missing');
|
|
|
|
|
})
|
2022-07-29 21:44:19 +02:00
|
|
|
->log('two')
|
|
|
|
|
->unless()->has('init')->log('three')
|
|
|
|
|
->unless()->has('missing')->log('four')
|
|
|
|
|
->unless()->toggle->log('five')
|
|
|
|
|
->toggle()
|
|
|
|
|
->unless()->toggle->log('six');
|
|
|
|
|
|
|
|
|
|
$this->assertSame(['init', 'two', 'four', 'five'], $logger->values);
|
2021-06-10 09:11:40 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
class ConditionableLogger
|
2021-06-10 09:11:40 -04:00
|
|
|
{
|
|
|
|
|
use Conditionable;
|
|
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
public $values = [];
|
2021-06-10 09:11:40 -04:00
|
|
|
|
2022-07-29 21:44:19 +02:00
|
|
|
public $toggle = false;
|
|
|
|
|
|
2021-06-11 09:28:43 -04:00
|
|
|
public function log(...$values)
|
2021-06-10 09:11:40 -04:00
|
|
|
{
|
2021-06-11 09:28:43 -04:00
|
|
|
array_push($this->values, ...$values);
|
2021-06-10 09:11:40 -04:00
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
2021-06-17 16:58:17 -04:00
|
|
|
|
|
|
|
|
public function has($value)
|
|
|
|
|
{
|
|
|
|
|
return in_array($value, $this->values);
|
|
|
|
|
}
|
2022-07-29 21:44:19 +02:00
|
|
|
|
|
|
|
|
public function toggle()
|
|
|
|
|
{
|
|
|
|
|
$this->toggle = ! $this->toggle;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
2021-06-10 09:11:40 -04:00
|
|
|
}
|