diff options
author | Joas Schilling <213943+nickvergessen@users.noreply.github.com> | 2024-09-16 09:11:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-16 09:11:25 +0200 |
commit | 6e576e1fbdefd22384532e51944f952211018eb7 (patch) | |
tree | d19f4738e2e584b34b75ccfc377759e4d9ae2945 /tests | |
parent | ba94d22a630f25d8424ca8ec6ca93887f716e53d (diff) | |
parent | bc750a1d09daa8e0db7a1b61794c2ff7df19a279 (diff) | |
download | nextcloud-server-6e576e1fbdefd22384532e51944f952211018eb7.tar.gz nextcloud-server-6e576e1fbdefd22384532e51944f952211018eb7.zip |
Merge pull request #47941 from nextcloud/backport/47933/stable29
[stable29] fix(config): Throw PreconditionException always when it didn't match
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/AllConfigTest.php | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/lib/AllConfigTest.php b/tests/lib/AllConfigTest.php index 540eff42e51..79599866fe2 100644 --- a/tests/lib/AllConfigTest.php +++ b/tests/lib/AllConfigTest.php @@ -183,6 +183,42 @@ class AllConfigTest extends \Test\TestCase { $config->deleteUserValue('userPreCond1', 'appPreCond', 'keyPreCond'); } + public function testSetUserValueWithPreConditionFailureWhenResultStillMatches(): void { + $this->expectException(\OCP\PreConditionNotMetException::class); + + $config = $this->getConfig(); + + $selectAllSQL = 'SELECT `userid`, `appid`, `configkey`, `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ?'; + + $config->setUserValue('userPreCond1', 'appPreCond', 'keyPreCond', 'valuePreCond'); + + $result = $this->connection->executeQuery($selectAllSQL, ['userPreCond1'])->fetchAll(); + + $this->assertCount(1, $result); + $this->assertEquals([ + 'userid' => 'userPreCond1', + 'appid' => 'appPreCond', + 'configkey' => 'keyPreCond', + 'configvalue' => 'valuePreCond' + ], $result[0]); + + // test if the method throws with invalid precondition when the value is the same + $config->setUserValue('userPreCond1', 'appPreCond', 'keyPreCond', 'valuePreCond', 'valuePreCond3'); + + $result = $this->connection->executeQuery($selectAllSQL, ['userPreCond1'])->fetchAll(); + + $this->assertCount(1, $result); + $this->assertEquals([ + 'userid' => 'userPreCond1', + 'appid' => 'appPreCond', + 'configkey' => 'keyPreCond', + 'configvalue' => 'valuePreCond' + ], $result[0]); + + // cleanup + $config->deleteUserValue('userPreCond1', 'appPreCond', 'keyPreCond'); + } + public function testSetUserValueUnchanged() { // TODO - FIXME until the dependency injection is handled properly (in AllConfig) $this->markTestSkipped('Skipped because this is just testable if database connection can be injected'); |