ItemData.php

<?php

namespace Phad\Test\Integration;

/**
 * Tests for getting data from an item's view as an array
 */
class ItemData extends \Phad\Tester {

    public function testNestedObjects(){
        echo "\n\n\n-----------\n\n";
        echo "This test disabled because I've opted for a simpler data approach that just returns the rows of the first item ... rather than building a stack from all the items.";
        echo "\n\nI intend to change this in the future.";
        $this->disable();
        return;
        // 1. stack head is $stack->data
        // 2. start blog item. head is $stack->data['BlogList']
        // 3. start blog row. head is $stack->data['BlogList'][0]
            // 4. start song item. head is $stack->data['BlogList'][0]['SongList']
            // 5. start song row. head is $stack->data['BlogList'][0]['SongList'][0]
            // 6. end song row. head is $stack->data['BlogList'][0]['SongList']
            // 7. end song item. head is $stack->data['BlogList'][0]
        // 4. end blog row. head is $stack->data['BlogList']
        // 5. end blog item. head is $stack->data
        $args = $this->items($Blog,$Song);
        $view = $this->item('Other/OneNestedItem', $args);

        $BlogData = (array)$Blog;
        $BlogData['SongList'] = [(array)$Song];
        $this->compare(
            ['BlogList'=>[$BlogData]],
            $view->rows()
        );
    }

    /**
     * @todo re-implement the stack to get data from multiple objects at once
     */
    public function testAdjacentObjects(){
        echo "\n\n\n-----------\n\n";
        echo "This test disabled because I've opted for a simpler data approach that just returns the rows of the first item ... rather than building a stack from all the items.";
        echo "\n\nI intend to change this in the future.";
        $this->disable();
        return;
        // 1. stack head is $stack->data
        // 2. start blog item. head is $stack->data['BlogList']
        // 3. start blog row. head is $stack->data['BlogList'][0]
        // 4. end blog row. head is $stack->data['BlogList']
        // 5. end blog item. head is $stack->data
        // 6. start song item. head is $stack->data['SongList']
        // 7. ... repeat 3-5, but with SongList.
        $args = $this->items($Blog, $Song);
        $view = $this->item('Other/AdjacentItems', $args);
        $data = $view->rows();

        $this->compare(['BlogList'=>[(array)$Blog], 'SongList'=>[(array)$Song]], $data);
    }

    public function testOneObject(){
        // 1. stack head is $stack->data
        // 2. start blog item. head is $stack->data['BlogList']
        // 3. start blog row. head is $stack->data['BlogList'][0]
        // 4. end blog row. head is $stack->data['BlogList']
        // 5. end blog item. head is $stack->data

        // return;
        $phad = $this->phad();
        $args = $this->rows($Blog);
        // return
        // print_r($args);
        // exit;
        // $view = $phad->item('Other/NoAccess', $args);
        // $data = $view->rows();
        $view = $phad->item('Other/NoAccess', $args);
        $output = $view->html();
        echo($output);
        $data = $view->rows();
        // print_r($phad->stack->data);

        print_r($data);

        $this->compare([$Blog], $data);
    }

    public function phad(){
        $phad = new \Phad();
        $phad->exit_on_redirect = false;
        $phad->force_compile = true;
        $phad->item_dir = $this->file('test/input/views/');
        $phad->sitemap = new \Phad\SitemapBuilder($this->file('test/input/sitemap/'));
        $phad->router = new \Lia\Addon\Router();
        $phad->sitemap->router = &$phad->router;
        $phad->sitemap->pdo = &$phad->pdo;
        $phad->sitemap->throw_on_query_failure = true;
        return $phad;
    }
}