Bravo3\Orm\Tests\Indices\SortedQueryTest::testSortOrder PHP Method

testSortOrder() public method

public testSortOrder ( EntityManager $em )
$em Bravo3\Orm\Services\EntityManager
    public function testSortOrder(EntityManager $em)
    {
        $category = new Category();
        $category->setId(600);
        $em->persist($category);
        for ($i = 0; $i < 15; $i++) {
            $article = new Article();
            $article->setId(601 + $i);
            $article->setTitle('Art ' . (601 + $i));
            $time = new \DateTime();
            $time->modify('+' . ($i + 1) . ' minutes');
            $article->setSortDate($time);
            $article->setCanonicalCategory($category);
            $em->persist($article);
        }
        $em->flush();
        /** @var Article $article */
        // Date sorting -
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date'));
        $this->assertCount(15, $results);
        $article = $results[0];
        $this->assertEquals('Art 601', $article->getTitle());
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::DESC()));
        $this->assertCount(15, $results);
        $this->assertEquals(15, $results->getFullSize());
        $article = $results[0];
        $this->assertEquals('Art 615', $article->getTitle());
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::DESC(), 5, -6), true);
        $this->assertCount(5, $results);
        $this->assertEquals(15, $results->getFullSize());
        $article = $results[0];
        $this->assertEquals('Art 610', $article->getTitle());
        $article = $results[4];
        $this->assertEquals('Art 606', $article->getTitle());
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::ASC(), 2, 5));
        $this->assertCount(4, $results);
        $this->assertNull($results->getFullSize());
        $article = $results[0];
        $this->assertEquals('Art 603', $article->getTitle());
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::ASC(), 20, 29));
        $this->assertCount(0, $results);
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'title'));
        $this->assertCount(15, $results);
        $article = $results[0];
        $this->assertEquals('Art 601', $article->getTitle());
        // Lexicographic sorting -
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'title'));
        $this->assertCount(15, $results);
        $article = $results[0];
        $this->assertEquals('Art 601', $article->getTitle());
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'title', Direction::DESC()));
        $this->assertCount(15, $results);
        $article = $results[0];
        $this->assertEquals('Art 615', $article->getTitle());
        // Modify an entity's sort-by column
        $article = $em->retrieve(Article::class, 609);
        $time = $article->getSortDate();
        $time->modify('+1 day');
        $article->setSortDate($time);
        $em->persist($article)->flush();
        $results = $em->sortedQuery(new SortedQuery($category, 'articles', 'sort_date', Direction::DESC()));
        $this->assertCount(15, $results);
        $article = $results[0];
        $this->assertEquals('Art 609', $article->getTitle());
    }