2017-06-18 14:23:37 +00:00
|
|
|
<?php
|
2017-11-17 01:23:18 +00:00
|
|
|
/** @license MIT
|
|
|
|
* Copyright 2017 J. King, Dustin Wilson et al.
|
|
|
|
* See LICENSE and AUTHORS files for details */
|
|
|
|
|
2017-06-18 14:23:37 +00:00
|
|
|
declare(strict_types=1);
|
2017-12-22 03:47:19 +00:00
|
|
|
namespace JKingWeb\Arsse\TestCase\Misc;
|
2017-06-18 14:23:37 +00:00
|
|
|
|
2019-02-26 03:41:12 +00:00
|
|
|
use JKingWeb\Arsse\Context\Context;
|
2019-02-22 17:34:06 +00:00
|
|
|
use JKingWeb\Arsse\Misc\ValueInfo;
|
2017-06-18 14:23:37 +00:00
|
|
|
|
2019-02-26 03:41:12 +00:00
|
|
|
/** @covers \JKingWeb\Arsse\Context\Context<extended> */
|
2017-12-22 03:47:19 +00:00
|
|
|
class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
2020-01-20 18:52:48 +00:00
|
|
|
public function testVerifyInitialState(): void {
|
2017-06-18 14:23:37 +00:00
|
|
|
$c = new Context;
|
2017-08-29 14:50:31 +00:00
|
|
|
foreach ((new \ReflectionObject($c))->getMethods(\ReflectionMethod::IS_PUBLIC) as $m) {
|
2019-02-25 15:46:43 +00:00
|
|
|
if ($m->isStatic() || strpos($m->name, "__") === 0) {
|
2017-07-21 02:40:09 +00:00
|
|
|
continue;
|
|
|
|
}
|
2017-06-18 14:23:37 +00:00
|
|
|
$method = $m->name;
|
|
|
|
$this->assertFalse($c->$method(), "Context method $method did not initially return false");
|
|
|
|
$this->assertEquals(null, $c->$method, "Context property $method is not initially falsy");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-20 18:52:48 +00:00
|
|
|
public function testSetContextOptions(): void {
|
2017-06-18 14:23:37 +00:00
|
|
|
$v = [
|
2020-03-01 20:16:50 +00:00
|
|
|
'reverse' => true,
|
|
|
|
'limit' => 10,
|
|
|
|
'offset' => 5,
|
|
|
|
'folder' => 42,
|
|
|
|
'folders' => [12,22],
|
|
|
|
'folderShallow' => 42,
|
|
|
|
'foldersShallow' => [0,1],
|
|
|
|
'tag' => 44,
|
|
|
|
'tags' => [44, 2112],
|
|
|
|
'tagName' => "XLIV",
|
|
|
|
'tagNames' => ["XLIV", "MMCXII"],
|
|
|
|
'subscription' => 2112,
|
|
|
|
'subscriptions' => [44, 2112],
|
|
|
|
'article' => 255,
|
|
|
|
'edition' => 65535,
|
|
|
|
'latestArticle' => 47,
|
|
|
|
'oldestArticle' => 1337,
|
|
|
|
'latestEdition' => 47,
|
|
|
|
'oldestEdition' => 1337,
|
|
|
|
'unread' => true,
|
|
|
|
'starred' => true,
|
|
|
|
'modifiedSince' => new \DateTime(),
|
2017-06-18 14:23:37 +00:00
|
|
|
'notModifiedSince' => new \DateTime(),
|
2020-03-01 20:16:50 +00:00
|
|
|
'markedSince' => new \DateTime(),
|
|
|
|
'notMarkedSince' => new \DateTime(),
|
|
|
|
'editions' => [1,2],
|
|
|
|
'articles' => [1,2],
|
|
|
|
'label' => 2112,
|
|
|
|
'labels' => [2112, 1984],
|
|
|
|
'labelName' => "Rush",
|
|
|
|
'labelNames' => ["Rush", "Orwell"],
|
|
|
|
'labelled' => true,
|
|
|
|
'annotated' => true,
|
|
|
|
'searchTerms' => ["foo", "bar"],
|
|
|
|
'annotationTerms' => ["foo", "bar"],
|
|
|
|
'titleTerms' => ["foo", "bar"],
|
|
|
|
'authorTerms' => ["foo", "bar"],
|
|
|
|
'not' => (new Context)->subscription(5),
|
2017-06-18 14:23:37 +00:00
|
|
|
];
|
2017-11-17 22:52:00 +00:00
|
|
|
$times = ['modifiedSince','notModifiedSince','markedSince','notMarkedSince'];
|
2017-06-18 14:23:37 +00:00
|
|
|
$c = new Context;
|
2017-08-29 14:50:31 +00:00
|
|
|
foreach ((new \ReflectionObject($c))->getMethods(\ReflectionMethod::IS_PUBLIC) as $m) {
|
2019-02-25 15:46:43 +00:00
|
|
|
if ($m->isStatic() || strpos($m->name, "__") === 0) {
|
2017-07-21 02:40:09 +00:00
|
|
|
continue;
|
|
|
|
}
|
2017-06-18 14:23:37 +00:00
|
|
|
$method = $m->name;
|
|
|
|
$this->assertArrayHasKey($method, $v, "Context method $method not included in test");
|
|
|
|
$this->assertInstanceOf(Context::class, $c->$method($v[$method]));
|
|
|
|
$this->assertTrue($c->$method());
|
2017-08-29 14:50:31 +00:00
|
|
|
if (in_array($method, $times)) {
|
2017-09-28 14:16:24 +00:00
|
|
|
$this->assertTime($c->$method, $v[$method], "Context method $method did not return the expected results");
|
2017-06-18 14:23:37 +00:00
|
|
|
} else {
|
2017-09-28 14:16:24 +00:00
|
|
|
$this->assertSame($c->$method, $v[$method], "Context method $method did not return the expected results");
|
2017-06-18 14:23:37 +00:00
|
|
|
}
|
2018-12-05 17:54:19 +00:00
|
|
|
// clear the context option
|
|
|
|
$c->$method(null);
|
|
|
|
$this->assertFalse($c->$method());
|
2017-06-18 14:23:37 +00:00
|
|
|
}
|
|
|
|
}
|
2017-07-07 02:53:17 +00:00
|
|
|
|
2020-01-20 18:52:48 +00:00
|
|
|
public function testCleanIdArrayValues(): void {
|
2019-04-02 13:32:31 +00:00
|
|
|
$methods = ["articles", "editions", "tags", "labels", "subscriptions"];
|
|
|
|
$in = [1, "2", 3.5, 4.0, 4, "ook", 0, -20, true, false, null, new \DateTime(), -1.0];
|
|
|
|
$out = [1, 2, 4];
|
|
|
|
$c = new Context;
|
|
|
|
foreach ($methods as $method) {
|
|
|
|
$this->assertSame($out, $c->$method($in)->$method, "Context method $method did not return the expected results");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-20 18:52:48 +00:00
|
|
|
public function testCleanFolderIdArrayValues(): void {
|
2019-04-02 13:32:31 +00:00
|
|
|
$methods = ["folders", "foldersShallow"];
|
|
|
|
$in = [1, "2", 3.5, 4.0, 4, "ook", 0, -20, true, false, null, new \DateTime(), -1.0];
|
|
|
|
$out = [1, 2, 4, 0];
|
2017-07-07 02:53:17 +00:00
|
|
|
$c = new Context;
|
2017-08-29 14:50:31 +00:00
|
|
|
foreach ($methods as $method) {
|
2017-07-07 02:53:17 +00:00
|
|
|
$this->assertSame($out, $c->$method($in)->$method, "Context method $method did not return the expected results");
|
|
|
|
}
|
|
|
|
}
|
2019-02-22 17:34:06 +00:00
|
|
|
|
2020-01-20 18:52:48 +00:00
|
|
|
public function testCleanStringArrayValues(): void {
|
2019-04-02 13:32:31 +00:00
|
|
|
$methods = ["searchTerms", "annotationTerms", "titleTerms", "authorTerms", "tagNames", "labelNames"];
|
2019-02-22 17:34:06 +00:00
|
|
|
$now = new \DateTime;
|
|
|
|
$in = [1, 3.0, "ook", 0, true, false, null, $now, ""];
|
|
|
|
$out = ["1", "3", "ook", "0", valueInfo::normalize($now, ValueInfo::T_STRING)];
|
|
|
|
$c = new Context;
|
|
|
|
foreach ($methods as $method) {
|
|
|
|
$this->assertSame($out, $c->$method($in)->$method, "Context method $method did not return the expected results");
|
|
|
|
}
|
|
|
|
}
|
2019-02-26 03:41:12 +00:00
|
|
|
|
2020-01-20 18:52:48 +00:00
|
|
|
public function testCloneAContext(): void {
|
2019-02-26 03:41:12 +00:00
|
|
|
$c1 = new Context;
|
|
|
|
$c2 = clone $c1;
|
|
|
|
$this->assertEquals($c1, $c2);
|
|
|
|
$this->assertEquals($c1->not, $c2->not);
|
|
|
|
$this->assertNotSame($c1, $c2);
|
|
|
|
$this->assertNotSame($c1->not, $c2->not);
|
2019-02-26 04:37:14 +00:00
|
|
|
$this->assertSame($c1, $c1->not->article(null));
|
|
|
|
$this->assertSame($c2, $c2->not->article(null));
|
2019-02-26 03:41:12 +00:00
|
|
|
}
|
2017-08-29 14:50:31 +00:00
|
|
|
}
|