[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/_test/tests/inc/ -> changelog_getlastrevisionat.test.php (source)

   1  <?php
   2  
   3  use dokuwiki\ChangeLog\MediaChangeLog;
   4  use dokuwiki\ChangeLog\PageChangeLog;
   5  
   6  /**
   7   * Tests for requesting revisioninfo of a revision of a page with getRevisionInfo()
   8   *
   9   * This class uses the files:
  10   * - data/pages/mailinglist.txt
  11   * - data/meta/mailinglist.changes
  12   */
  13  class changelog_getlastrevisionat_test extends DokuWikiTest {
  14  
  15      private $pageid = 'mailinglist';
  16  
  17      function setup() : void {
  18          parent::setup();
  19          global $cache_revinfo;
  20          $cache =& $cache_revinfo;
  21          unset($cache['nonexist']);
  22          unset($cache['mailinglist']);
  23      }
  24  
  25  
  26      /**
  27       * no nonexist.changes meta file available
  28       */
  29      function test_changemetadatanotexists() {
  30          $rev = 1362525899;
  31          $id = 'nonexist';
  32          $revsexpected = false;
  33  
  34          $pagelog = new PageChangeLog($id, $chunk_size = 8192);
  35          $revs = $pagelog->getLastRevisionAt($rev);
  36          $this->assertEquals($revsexpected, $revs);
  37      }
  38  
  39      /**
  40       * start at exact current revision of mailinglist page
  41       *
  42       */
  43      function test_startatexactcurrentrev() {
  44          $rev = 1385051947;
  45          $revsexpected = '';
  46  
  47          //set a known timestamp
  48          touch(wikiFN($this->pageid), $rev);
  49  
  50          $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
  51          $revs = $pagelog->getLastRevisionAt($rev);
  52          $this->assertEquals($revsexpected, $revs);
  53  
  54      }
  55  
  56      /**
  57       * test a future revision
  58       *
  59       */
  60      function test_futurerev() {
  61          $rev = 1385051947;
  62          $revsexpected = '';
  63  
  64          //set a known timestamp
  65          touch(wikiFN($this->pageid), $rev);
  66  
  67          $rev +=1;
  68  
  69          $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
  70          $revs = $pagelog->getLastRevisionAt($rev);
  71          $this->assertEquals($revsexpected, $revs);
  72  
  73      }
  74  
  75      /**
  76       * start at exact last revision of mailinglist page
  77       *
  78       */
  79      function test_exactlastrev() {
  80          $rev = 1360110636;
  81          $revsexpected = 1360110636;
  82  
  83          $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
  84          $revs = $pagelog->getLastRevisionAt($rev);
  85          $this->assertEquals($revsexpected, $revs);
  86      }
  87  
  88  
  89      /**
  90       * Request not existing revision
  91       *
  92       */
  93      function test_olderrev() {
  94          $rev = 1;
  95          $revexpected = false;
  96  
  97          $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
  98          $revfound = $pagelog->getLastRevisionAt($rev);
  99          $this->assertEquals($revexpected, $revfound);
 100      }
 101  
 102      /**
 103       * Start at non existing revision somewhere between existing revisions
 104       */
 105      function test_notexistingrev() {
 106          $rev = 1362525890;
 107          $revexpected = 1362525359;
 108  
 109          $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
 110          $revfound = $pagelog->getLastRevisionAt($rev);
 111          $this->assertEquals($revexpected, $revfound);
 112      }
 113  
 114      /**
 115       * request nonexisting page
 116       *
 117       */
 118      function test_notexistingpage() {
 119          $rev = 1385051947;
 120          $currentexpected = false;
 121  
 122          $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192);
 123          $current = $pagelog->getLastRevisionAt($rev);
 124          $this->assertEquals($currentexpected, $current);
 125      }
 126  
 127      /**
 128       * test get correct revision on deleted media
 129       *
 130       */
 131      function test_deletedimage() {
 132          global $conf;
 133          global $AUTH_ACL;
 134  
 135          //we need to have a user with AUTH_DELETE rights
 136          //save settings
 137          $oldSuperUser = $conf['superuser'];
 138          $oldUseacl = $conf['useacl'];
 139          $oldRemoteUser = isset($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'] : null;
 140  
 141          $conf['superuser'] = 'admin';
 142          $conf['useacl']    = 1;
 143          $_SERVER['REMOTE_USER'] = 'admin';
 144  
 145          $image = 'wiki:imageat.png';
 146  
 147          $ret = copy(mediaFn('wiki:kind_zu_katze.png'),mediaFn($image));
 148  
 149          $revexpected = @filemtime(mediaFn($image));
 150          $rev = $revexpected + 10;
 151  
 152          $this->waitForTick(true);
 153  
 154          $ret = media_delete($image, 0);
 155  
 156          $medialog = new MediaChangeLog($image);
 157          $current = $medialog->getLastRevisionAt($rev);
 158          // as we wait for a tick, we should get something greater than the timestamp
 159          $this->assertGreaterThan($revexpected, $current);
 160          // however, it should be less than the current time or equal to it
 161          $this->assertLessThanOrEqual(time(), $current);
 162  
 163          //restore settings
 164          if ($oldRemoteUser !== null) {
 165              $_SERVER['REMOTE_USER'] = $oldRemoteUser;
 166          }
 167          $conf['superuser'] = $oldSuperUser;
 168          $conf['useacl'] = $oldUseacl;
 169      }
 170  }