connection = \OC::$server->getDatabaseConnection(); // clear occasional leftover shares from other tests $this->connection->executeUpdate('DELETE FROM `*PREFIX*share`'); $this->user1 = $this->getUniqueID('user1_'); $this->user2 = $this->getUniqueID('user2_'); $userManager = \OC::$server->getUserManager(); $userManager->createUser($this->user1, 'longrandompassword'); $userManager->createUser($this->user2, 'longrandompassword'); \OC::registerShareHooks(\OC::$server->getSystemConfig()); $this->job = new ExpireSharesJob(\OC::$server->get(ITimeFactory::class), \OC::$server->get(IManager::class), $this->connection); } protected function tearDown(): void { $this->connection->executeUpdate('DELETE FROM `*PREFIX*share`'); $userManager = \OC::$server->getUserManager(); $user1 = $userManager->get($this->user1); if ($user1) { $user1->delete(); } $user2 = $userManager->get($this->user2); if ($user2) { $user2->delete(); } $this->logout(); parent::tearDown(); } private function getShares() { $shares = []; $qb = $this->connection->getQueryBuilder(); $result = $qb->select('*') ->from('share') ->execute(); while ($row = $result->fetch()) { $shares[] = $row; } $result->closeCursor(); return $shares; } public function dataExpireLinkShare() { return [ [false, '', false, false], [false, '', true, false], [true, 'P1D', false, true], [true, 'P1D', true, false], [true, 'P1W', false, true], [true, 'P1W', true, false], [true, 'P1M', false, true], [true, 'P1M', true, false], [true, 'P1Y', false, true], [true, 'P1Y', true, false], ]; } /** * @dataProvider dataExpireLinkShare * * @param bool addExpiration Should we add an expire date * @param string $interval The dateInterval * @param bool $addInterval If true add to the current time if false subtract * @param bool $shouldExpire Should this share be expired */ public function testExpireLinkShare($addExpiration, $interval, $addInterval, $shouldExpire): void { $this->loginAsUser($this->user1); $user1Folder = \OC::$server->getUserFolder($this->user1); $testFolder = $user1Folder->newFolder('test'); $shareManager = \OC::$server->getShareManager(); $share = $shareManager->newShare(); $share->setNode($testFolder) ->setShareType(IShare::TYPE_LINK) ->setPermissions(Constants::PERMISSION_READ) ->setSharedBy($this->user1); $shareManager->createShare($share); $shares = $this->getShares(); $this->assertCount(1, $shares); reset($shares); $share = current($shares); if ($addExpiration) { $expire = new \DateTime(); $expire->setTime(0, 0, 0); if ($addInterval) { $expire->add(new \DateInterval($interval)); } else { $expire->sub(new \DateInterval($interval)); } $expire = $expire->format('Y-m-d 00:00:00'); // Set expiration date to yesterday $qb = $this->connection->getQueryBuilder(); $qb->update('share') ->set('expiration', $qb->createParameter('expiration')) ->where($qb->expr()->eq('id', $qb->createParameter('id'))) ->setParameter('id', $share['id']) ->setParameter('expiration', $expire) ->execute(); $shares = $this->getShares(); $this->assertCount(1, $shares); } $this->logout(); $this->job->run([]); $shares = $this->getShares(); if ($shouldExpire) { $this->assertCount(0, $shares); } else { $this->assertCount(1, $shares); } } public function testDoNotExpireOtherShares(): void { $this->loginAsUser($this->user1); $user1Folder = \OC::$server->getUserFolder($this->user1); $testFolder = $user1Folder->newFolder('test'); $shareManager = \OC::$server->getShareManager(); $share = $shareManager->newShare(); $share->setNode($testFolder) ->setShareType(IShare::TYPE_USER) ->setPermissions(Constants::PERMISSION_READ) ->setSharedBy($this->user1) ->setSharedWith($this->user2); $shareManager->createShare($share); $shares = $this->getShares(); $this->assertCount(1, $shares); $this->logout(); $this->job->run([]); $shares = $this->getShares(); $this->assertCount(1, $shares); } } ions/github-actions-a2938ab9b9&id=a4fd5449b24b998ffa514f01b735da2b6465a80a'>tests/unit/subsuiteRunner.js
blob: ddfccc7c1e1028532594ae9cd369de685fddc9ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
(function( QUnit ) {

var subsuiteFrame;

QUnit.extend( QUnit, {
	testSuites: function( suites ) {
		for ( var i = 0; i < suites.length; i++ ) {
			(function( suite ) {
				asyncTest( suite, function() {
					QUnit.runSuite( suite );
				});
			}( suites[i] ) );
		}
		QUnit.done = function() {
			subsuiteFrame.style.display = "none";
		};
	},

	testStart: function( data ) {
		// update the test status to show which test suite is running
		QUnit.id( "qunit-testresult" ).innerHTML = "Running " + data.name + "...<br>&nbsp;";
	},

	testDone: function() {
		var current = QUnit.id( this.config.current.id ),
			children = current.children;

		// undo the auto-expansion of failed tests
		for ( var i = 0; i < children.length; i++ ) {
			if ( children[i].nodeName === "OL" ) {
				children[i].style.display = "none";
			}
		}
	},

	runSuite: function( suite ) {
		var body = document.getElementsByTagName( "body" )[0],
			iframe = subsuiteFrame = document.createElement( "iframe" ),
			iframeWin;

		iframe.className = "qunit-subsuite";
		body.appendChild( iframe );

		function onIframeLoad() {
			var module, test,
				count = 0;

			QUnit.extend( iframeWin.QUnit, {
				moduleStart: function( data ) {
					// capture module name for messages
					module = data.name;
				},

				testStart: function( data ) {
					// capture test name for messages
					test = data.name;
				},

				log: function( data ) {
					// pass all test details through to the main page
					var message = module + ": " + test + ": " + data.message;
					expect( ++count );
					QUnit.push( data.result, data.actual, data.expected, message );
				},

				done: function() {
					// start the wrapper test from the main page
					start();
				}
			});
		}
		QUnit.addEvent( iframe, "load", onIframeLoad );

		iframeWin = iframe.contentWindow;
		iframe.setAttribute( "src", suite );

		this.runSuite = function( suite ) {
			iframe.setAttribute( "src", suite );
		};
	}
});
}( QUnit ) );