Changeset 1140

Show
Ignore:
Timestamp:
12/13/07 15:38:37 (1 year ago)
Author:
mikey
Message:

added possibility to deny caching for a page element (part of enhancement #116)
(makes more then 4000 tests now...)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisAbstractExtension.php

    r1113 r1140  
    6969 
    7070    /** 
     71     * checks whether extension is cachable or not 
     72     * 
     73     * @return  bool 
     74     */ 
     75    public function isCachable() 
     76    { 
     77        return true; 
     78    } 
     79 
     80    /** 
    7181     * returns a list of variables that have an influence on caching 
    7282     * 
  • trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisExtension.php

    r1113 r1140  
    3636 
    3737    /** 
     38     * checks whether extension is cachable or not 
     39     * 
     40     * @return  bool 
     41     */ 
     42    public function isCachable(); 
     43 
     44    /** 
    3845     * returns a list of variables that have an influence on caching 
    3946     * 
  • trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisLoadExtensionPageElement.php

    r1127 r1140  
    8585 
    8686    /** 
     87     * checks whether page element is cachable or not 
     88     * 
     89     * @return  bool 
     90     */ 
     91    public function isCachable() 
     92    { 
     93        return $this->extension->isCachable(); 
     94    } 
     95 
     96    /** 
    8797     * returns a list of variables that have an influence on caching 
    8898     * 
  • trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisProcessor.php

    r1138 r1140  
    109109        $frameId       = $this->getFrameId($page); 
    110110        if (null !== $this->cache) { 
    111             $this->processCacheVars($prefixRequest, $elements, $pageName, $frameId, $context); 
    112             if ($this->cache->retrieve($this->request, $this->session, $this->response, $pageName) === true) { 
     111            $cachable = $this->processCacheVars($prefixRequest, $elements, $pageName, $frameId, $context); 
     112            if (true === $cachable && $this->cache->retrieve($this->request, $this->session, $this->response, $pageName) === true) { 
    113113                return; 
    114114            } 
     
    121121        $this->processPageElements($prefixRequest, $elements, $context); 
    122122        if (null !== $this->cache) { 
    123             $this->cache->store($this->request, $this->response, $pageName); 
     123            if (true === $cachable) { 
     124                $this->cache->store($this->request, $this->response, $pageName); 
     125            } 
     126             
    124127            $contents = str_replace('$SID', $this->session->getName() . '=' . $this->session->getId(), $this->response->getData()); 
    125128            $contents = str_replace('$SESSION_NAME', $this->session->getName(), $contents); 
     
    159162     * helper method to set the cache variables 
    160163     * 
    161      * @param  stubRequest  $prefixRequest 
    162      * @param  array        $elements 
    163      * @param  string       $pageName 
    164      * @param  string       $frameId 
    165      * @param  array        $context 
     164     * @param   stubRequest  $prefixRequest 
     165     * @param   array        $elements 
     166     * @param   string       $pageName 
     167     * @param   string       $frameId 
     168     * @param   array        $context 
     169     * @return  bool         true if page is cachable, else false 
    166170     */ 
    167171    protected function processCacheVars(stubRequest $prefixRequest, array $elements, $pageName, $frameId, array $context) 
     
    183187                if ($defaultElement->isAvailable() === false) { 
    184188                    continue; 
     189                } elseif ($defaultElement->isCachable() === false) { 
     190                    return false; 
    185191                } 
    186192                 
     
    194200                if ($element->isAvailable() === false) { 
    195201                    continue; 
     202                } elseif ($element->isCachable() === false) { 
     203                    return false; 
    196204                } 
    197205                 
     
    200208            } 
    201209        } 
     210         
     211        return true; 
    202212    } 
    203213 
  • trunk/src/main/php/net/stubbles/websites/stubAbstractPageElement.php

    r1113 r1140  
    104104 
    105105    /** 
     106     * checks whether page element is cachable or not 
     107     * 
     108     * @return  bool 
     109     */ 
     110    public function isCachable() 
     111    { 
     112        return true; 
     113    } 
     114 
     115    /** 
    106116     * returns a list of variables that have an influence on caching 
    107117     * 
  • trunk/src/main/php/net/stubbles/websites/stubPageElement.php

    r1113 r1140  
    5959 
    6060    /** 
     61     * checks whether page element is cachable or not 
     62     * 
     63     * @return  bool 
     64     */ 
     65    public function isCachable(); 
     66 
     67    /** 
    6168     * returns a list of variables that have an influence on caching 
    6269     * 
  • trunk/src/main/php/net/stubbles/websites/xml/stubXMLPageElementDecorator.php

    r1113 r1140  
    115115 
    116116    /** 
     117     * checks whether page element is cachable or not 
     118     * 
     119     * @return  bool 
     120     */ 
     121    public function isCachable() 
     122    { 
     123        return $this->element->isCachable(); 
     124    } 
     125 
     126    /** 
    117127     * returns a list of variables that have an influence on caching 
    118128     * 
  • trunk/src/test/php/net/stubbles/websites/memphis/stubMemphisProcessorTestCase.php

    r1138 r1140  
    132132     * helper method to access protected method processCacheVars() 
    133133     * 
    134      * @param  stubRequest  $prefixRequest 
    135      * @param  array        $elements 
    136      * @param  string       $pageName 
    137      * @param  string       $frameId 
    138      * @param  array        $context 
     134     * @param   stubRequest  $prefixRequest 
     135     * @param   array        $elements 
     136     * @param   string       $pageName 
     137     * @param   string       $frameId 
     138     * @param   array        $context 
     139     * @return  bool 
    139140     */ 
    140141    public function callProcessCacheVars(stubRequest $prefixRequest, array $elements, $pageName, $frameId, array $context) 
    141142    { 
    142         $this->processCacheVars($prefixRequest, $elements, $pageName, $frameId, $context); 
     143        return $this->processCacheVars($prefixRequest, $elements, $pageName, $frameId, $context); 
    143144    } 
    144145 
     
    351352        $this->mockPage->setReturnValue('getElements', array('baz' => $mockPageElement)); 
    352353        $memphisProcessor->expectOnce('processCacheVars', array('*', array('baz' => $mockPageElement), 'foo', 'bar', '*')); 
     354        $memphisProcessor->setReturnValue('processCacheVars', true); 
    353355        $this->mockMemphisConfig->expectOnce('getFrame', array('bar')); 
    354356        $this->mockMemphisConfig->setReturnValue('getFrame', 'frame/default.tmpl'); 
     
    372374     * test the processing algorithm using a cache 
    373375     */ 
     376    public function testDoProcessWithCacheButUncachableElement() 
     377    { 
     378        $memphisProcessor = new TestPartialMockstubMemphisProcessor($this->mockRequest, $this->mockSession, $this->mockResponse, $this->mockPageFactory); 
     379        $memphisProcessor->setConfig($this->mockMemphisConfig); 
     380        $memphisProcessor->setReturnValue('createTemplate', $this->mockMemphisTemplate); 
     381        $memphisProcessor->setReturnValue('getPageName', 'foo'); 
     382        $memphisProcessor->setReturnValue('getFrameId', 'bar'); 
     383        $memphisProcessor->setReturnValue('getPage', $this->mockPage); 
     384        $mockPageElement = new MockstubPageElement(); 
     385        $this->mockPage->setReturnValue('getElements', array('baz' => $mockPageElement)); 
     386        $memphisProcessor->expectOnce('processCacheVars', array('*', array('baz' => $mockPageElement), 'foo', 'bar', '*')); 
     387        $memphisProcessor->setReturnValue('processCacheVars', false); 
     388        $this->mockMemphisConfig->expectOnce('getFrame', array('bar')); 
     389        $this->mockMemphisConfig->setReturnValue('getFrame', 'frame/default.tmpl'); 
     390        $this->mockMemphisTemplate->expectOnce('readTemplatesFromInput', array('frame/default.tmpl')); 
     391        $memphisProcessor->expectOnce('setTemplateVars', array('*', 'foo', 'bar')); 
     392        $memphisProcessor->expectOnce('processPageElements', array('*', array('baz' => $mockPageElement), '*')); 
     393        $mockCache = new MockstubWebsiteCache(); 
     394        $mockCache->expectNever('retrieve'); 
     395        $mockCache->expectNever('store'); 
     396        $memphisProcessor->setWebsiteCache($mockCache); 
     397        $this->mockResponse->expectOnce('getData'); 
     398        $this->mockResponse->setReturnValue('getData', '$SID$SESSION_NAME$SESSION_ID'); 
     399        $this->mockSession->setReturnValue('getId', 'id'); 
     400        $this->mockSession->setReturnValue('getName', 'name'); 
     401        $this->mockResponse->expectOnce('replaceData', array('name=idnameid')); 
     402        $memphisProcessor->callDoProcess(); 
     403    } 
     404 
     405    /** 
     406     * test the processing algorithm using a cache 
     407     */ 
    374408    public function testDoProcessWithCacheAndCached() 
    375409    { 
     
    383417        $this->mockPage->setReturnValue('getElements', array('baz' => $mockPageElement)); 
    384418        $memphisProcessor->expectOnce('processCacheVars', array('*', array('baz' => $mockPageElement), 'foo', 'bar', '*')); 
     419        $memphisProcessor->setReturnValue('processCacheVars', true); 
    385420        $this->mockMemphisConfig->expectNever('getFrame'); 
    386421        $this->mockMemphisTemplate->expectNever('readTemplatesFromInput'); 
     
    445480        $mockDefaultPageElement1->expectAt(1, 'init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'teaser'))); 
    446481        $mockDefaultPageElement1->setReturnValue('isAvailable', false); 
     482        $mockDefaultPageElement1->expectNever('isCachable'); 
    447483        $mockDefaultPageElement1->expectNever('getCacheVars'); 
    448484        $mockDefaultPageElement1->expectNever('getUsedFiles'); 
     
    453489        $mockDefaultPageElement2->expectAt(1, 'init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'teaser'))); 
    454490        $mockDefaultPageElement2->setReturnValue('isAvailable', true); 
     491        $mockDefaultPageElement2->setReturnValue('isCachable', true); 
    455492        $mockDefaultPageElement2->expectCallCount('getCacheVars', 2); 
    456493        $mockDefaultPageElement2->setReturnValue('getCacheVars', array('one' => 'defaultMock2')); 
     
    464501        $mockPageElement1->expectAt(1, 'init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'teaser'))); 
    465502        $mockPageElement1->setReturnValue('isAvailable', false); 
     503        $mockPageElement1->expectNever('isCachable'); 
    466504        $mockPageElement1->expectNever('getCacheVars'); 
    467505        $mockPageElement1->expectNever('getUsedFiles'); 
     
    472510        $mockPageElement2->expectAt(1, 'init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'teaser'))); 
    473511        $mockPageElement2->setReturnValue('isAvailable', true); 
     512        $mockPageElement2->setReturnValue('isCachable', true); 
    474513        $mockPageElement2->expectCallCount('getCacheVars', 2); 
    475514        $mockPageElement2->setReturnValue('getCacheVars', array('two' => 'Mock2')); 
     
    493532        $mockCache->expectCallcount('addUsedFiles', 4); 
    494533        $this->memphisProcessor->setWebsiteCache($mockCache); 
    495         $this->memphisProcessor->callProcessCacheVars($prefixRequest, array('mock1' => $mockPageElement1, 'mock2' => $mockPageElement2), 'foo', 'bar', array()); 
     534        $this->assertTrue($this->memphisProcessor->callProcessCacheVars($prefixRequest, array('mock1' => $mockPageElement1, 'mock2' => $mockPageElement2), 'foo', 'bar', array())); 
     535    } 
     536 
     537    /** 
     538     * test that collecting the cache variables works as expected 
     539     */ 
     540    public function testProcessCacheVarsWithUncachableElement() 
     541    { 
     542        $prefixRequest = new stubRequestPrefixDecorator($this->mockRequest, ''); 
     543        $this->mockMemphisConfig->setReturnValue('getParts', array('content', 'teaser')); 
     544        $mockDefaultPageElement1 = new MockstubPageElement(); 
     545        $mockDefaultPageElement1->setReturnValue('getName', 'defaultMock1'); 
     546        $mockDefaultPageElement1->expectOnce('init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'content'))); 
     547        $mockDefaultPageElement1->setReturnValue('isAvailable', false); 
     548        $mockDefaultPageElement1->expectNever('isCachable'); 
     549        $mockDefaultPageElement1->expectNever('getCacheVars'); 
     550        $mockDefaultPageElement1->expectNever('getUsedFiles'); 
     551        $mockDefaultPageElement2 = new MockstubPageElement(); 
     552        $mockDefaultPageElement2->setReturnValue('getName', 'defaultMock2'); 
     553        $mockDefaultPageElement2->expectOnce('init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'content'))); 
     554        $mockDefaultPageElement2->setReturnValue('isAvailable', true); 
     555        $mockDefaultPageElement2->setReturnValue('isCachable', true); 
     556        $mockDefaultPageElement2->expectOnce('getCacheVars'); 
     557        $mockDefaultPageElement2->setReturnValue('getCacheVars', array('one' => 'defaultMock2')); 
     558        $mockDefaultPageElement2->expectOnce('getUsedFiles'); 
     559        $mockDefaultPageElement2->setReturnValue('getUsedFiles', array('defaultMock2.tmpl')); 
     560        $this->mockMemphisConfig->setReturnValue('getDefaultElements', array($mockDefaultPageElement1, $mockDefaultPageElement2)); 
     561        $mockPageElement1 = new MockstubPageElement(); 
     562        $mockPageElement1->setReturnValue('getName', 'Mock1'); 
     563        $mockPageElement1->expectOnce('init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'content'))); 
     564        $mockPageElement1->setReturnValue('isAvailable', false); 
     565        $mockPageElement1->expectNever('isCachable'); 
     566        $mockPageElement1->expectNever('getCacheVars'); 
     567        $mockPageElement1->expectNever('getUsedFiles'); 
     568        $mockPageElement2 = new MockstubPageElement(); 
     569        $mockPageElement2->setReturnValue('getName', 'Mock2'); 
     570        $mockPageElement2->expectOnce('init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'content'))); 
     571        $mockPageElement2->setReturnValue('isAvailable', true); 
     572        $mockPageElement2->setReturnValue('isCachable', false); 
     573        $mockPageElement2->expectNever('getCacheVars'); 
     574        $mockPageElement2->expectNever('getUsedFiles'); 
     575        $mockCache = new MockstubWebsiteCache(); 
     576        $mockCache->expectAt(0, 'addCacheVar', array('page', 'foo')); 
     577        $mockCache->expectAt(1, 'addCacheVar', array('frame', 'bar')); 
     578        $mockCache->expectAt(2, 'addCacheVar', array('variant', null)); 
     579        $mockCache->expectAt(3, 'addCacheVar', array('ssl', 'no')); 
     580        $mockCache->expectOnce('addCacheVars', array(array('one' => 'defaultMock2'))); 
     581        $mockCache->expectCallcount('addCacheVar', 4); 
     582        $mockCache->expectOnce('addUsedFiles', array(array('defaultMock2.tmpl'))); 
     583        $this->memphisProcessor->setWebsiteCache($mockCache); 
     584        $this->assertFalse($this->memphisProcessor->callProcessCacheVars($prefixRequest, array('mock1' => $mockPageElement1, 'mock2' => $mockPageElement2), 'foo', 'bar', array())); 
     585    } 
     586 
     587    /** 
     588     * test that collecting the cache variables works as expected 
     589     */ 
     590    public function testProcessCacheVarsWithUncachableDefaultElement() 
     591    { 
     592        $prefixRequest = new stubRequestPrefixDecorator($this->mockRequest, ''); 
     593        $this->mockMemphisConfig->setReturnValue('getParts', array('content', 'teaser')); 
     594        $mockDefaultPageElement1 = new MockstubPageElement(); 
     595        $mockDefaultPageElement1->setReturnValue('getName', 'defaultMock1'); 
     596        $mockDefaultPageElement1->expectOnce('init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'content'))); 
     597        $mockDefaultPageElement1->setReturnValue('isAvailable', false); 
     598        $mockDefaultPageElement1->expectNever('isCachable'); 
     599        $mockDefaultPageElement1->expectNever('getCacheVars'); 
     600        $mockDefaultPageElement1->expectNever('getUsedFiles'); 
     601        $mockDefaultPageElement2 = new MockstubPageElement(); 
     602        $mockDefaultPageElement2->setReturnValue('getName', 'defaultMock2'); 
     603        $mockDefaultPageElement2->expectOnce('init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'content'))); 
     604        $mockDefaultPageElement2->setReturnValue('isAvailable', true); 
     605        $mockDefaultPageElement2->setReturnValue('isCachable', false); 
     606        $mockDefaultPageElement2->expectNever('getCacheVars'); 
     607        $mockDefaultPageElement2->expectNever('getUsedFiles'); 
     608        $this->mockMemphisConfig->setReturnValue('getDefaultElements', array($mockDefaultPageElement1, $mockDefaultPageElement2)); 
     609        $mockPageElement1 = new MockstubPageElement(); 
     610        $mockPageElement1->setReturnValue('getName', 'Mock1'); 
     611        $mockPageElement1->expectNever('init'); 
     612        $mockPageElement1->expectNever('isAvailable'); 
     613        $mockPageElement1->expectNever('isCachable'); 
     614        $mockPageElement1->expectNever('getCacheVars'); 
     615        $mockPageElement1->expectNever('getUsedFiles'); 
     616        $mockPageElement2 = new MockstubPageElement(); 
     617        $mockPageElement2->setReturnValue('getName', 'Mock2'); 
     618        $mockPageElement2->expectNever('init', array($prefixRequest, $this->mockSession, $this->mockResponse, array('part' => 'content'))); 
     619        $mockPageElement2->expectNever('isAvailable'); 
     620        $mockPageElement2->expectNever('isCachable'); 
     621        $mockPageElement2->expectNever('getCacheVars'); 
     622        $mockPageElement2->expectNever('getUsedFiles'); 
     623        $mockCache = new MockstubWebsiteCache(); 
     624        $mockCache->expectAt(0, 'addCacheVar', array('page', 'foo')); 
     625        $mockCache->expectAt(1, 'addCacheVar', array('frame', 'bar')); 
     626        $mockCache->expectAt(2, 'addCacheVar', array('variant', null)); 
     627        $mockCache->expectAt(3, 'addCacheVar', array('ssl', 'no')); 
     628        $mockCache->expectNever('addCacheVars'); 
     629        $mockCache->expectNever('addUsedFiles'); 
     630        $this->memphisProcessor->setWebsiteCache($mockCache); 
     631        $this->assertFalse($this->memphisProcessor->callProcessCacheVars($prefixRequest, array('mock1' => $mockPageElement1, 'mock2' => $mockPageElement2), 'foo', 'bar', array())); 
    496632    } 
    497633