|
20 | 20 | import org.junit.jupiter.api.DisplayName; |
21 | 21 | import org.junit.jupiter.api.Nested; |
22 | 22 | import org.junit.jupiter.api.Test; |
| 23 | +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; |
23 | 24 | import org.junit.jupiter.params.ParameterizedTest; |
24 | 25 | import org.junit.jupiter.params.provider.MethodSource; |
25 | 26 |
|
|
33 | 34 | import java.util.stream.Stream; |
34 | 35 |
|
35 | 36 | import static it.aboutbits.postgresql.core.Privilege.CREATE; |
| 37 | +import static it.aboutbits.postgresql.core.Privilege.MAINTAIN; |
36 | 38 | import static it.aboutbits.postgresql.core.Privilege.SELECT; |
37 | 39 | import static it.aboutbits.postgresql.core.Privilege.USAGE; |
38 | 40 | import static it.aboutbits.postgresql.crd.defaultprivilege.DefaultPrivilegeObjectType.SCHEMA; |
@@ -308,29 +310,79 @@ void failWhenDatabaseHasSchema() { |
308 | 310 | @Test |
309 | 311 | @DisplayName("Should reconcile to ERROR when privileges are invalid for objectType") |
310 | 312 | void errorWhenInvalidPrivileges() { |
311 | | - // given |
312 | | - var now = OffsetDateTime.now(ZoneOffset.UTC); |
313 | | - |
314 | | - // when |
| 313 | + // given / when |
315 | 314 | var defaultPrivilege = given.one() |
316 | 315 | .defaultPrivilege() |
317 | 316 | .withObjectType(SCHEMA) |
318 | 317 | // SELECT is not allowed for SCHEMA |
319 | 318 | .withPrivileges(SELECT) |
320 | 319 | .returnFirst(); |
321 | 320 |
|
322 | | - var expectedStatus = new CRStatus() |
323 | | - .setName("") |
324 | | - .setPhase(CRPhase.ERROR) |
325 | | - .setMessage("DefaultPrivilege contains invalid privileges for the specified objectType") |
326 | | - .setObservedGeneration(1L); |
| 321 | + // then |
| 322 | + assertThat(defaultPrivilege) |
| 323 | + .isNotNull() |
| 324 | + .extracting(DefaultPrivilege::getStatus) |
| 325 | + .satisfies(status -> { |
| 326 | + assertThat(status.getPhase()).isEqualTo(CRPhase.ERROR); |
| 327 | + assertThat(status.getMessage()).startsWith("DefaultPrivilege contains invalid privileges for the specified objectType"); |
| 328 | + }); |
| 329 | + } |
| 330 | + |
| 331 | + @Test |
| 332 | + @EnabledIfSystemProperty( |
| 333 | + named = "quarkus.test.profile", |
| 334 | + matches = "test-pg(15|16)", |
| 335 | + disabledReason = "PostgreSQL 15 and 16 do not support the MAINTAIN privilege" |
| 336 | + ) |
| 337 | + @DisplayName( |
| 338 | + "Should reconcile to ERROR when the PostgreSQL version does not support the MAINTAIN table privilege") |
| 339 | + void errorWhenUnsupportedMaintainTablePrivilege() { |
| 340 | + // given |
| 341 | + var clusterConnectionMain = given.one() |
| 342 | + .clusterConnection() |
| 343 | + .returnFirst(); |
| 344 | + |
| 345 | + var database = given.one() |
| 346 | + .database() |
| 347 | + .withClusterConnectionName(clusterConnectionMain.getMetadata().getName()) |
| 348 | + .returnFirst(); |
| 349 | + |
| 350 | + var clusterConnectionDb = given.one() |
| 351 | + .clusterConnection() |
| 352 | + .withDatabase(database.getSpec().getName()) |
| 353 | + .returnFirst(); |
| 354 | + |
| 355 | + var schema = given.one() |
| 356 | + .schema() |
| 357 | + .withClusterConnectionName(clusterConnectionDb.getMetadata().getName()) |
| 358 | + .returnFirst(); |
| 359 | + |
| 360 | + var role = given.one() |
| 361 | + .role() |
| 362 | + .withClusterConnectionName(clusterConnectionMain.getMetadata().getName()) |
| 363 | + .returnFirst(); |
| 364 | + |
| 365 | + // when |
| 366 | + var defaultPrivilege = given.one() |
| 367 | + .defaultPrivilege() |
| 368 | + .withClusterConnectionName(clusterConnectionDb.getMetadata().getName()) |
| 369 | + .withDatabase(database.getSpec().getName()) |
| 370 | + .withSchema(schema.getSpec().getName()) |
| 371 | + .withRole(role.getSpec().getName()) |
| 372 | + .withObjectType(TABLE) |
| 373 | + .withPrivileges(MAINTAIN) |
| 374 | + .returnFirst(); |
327 | 375 |
|
328 | 376 | // then |
329 | | - assertThatDefaultPrivilegeHasStatus( |
330 | | - defaultPrivilege, |
331 | | - expectedStatus, |
332 | | - now |
333 | | - ); |
| 377 | + assertThat(defaultPrivilege) |
| 378 | + .isNotNull() |
| 379 | + .extracting(DefaultPrivilege::getStatus) |
| 380 | + .satisfies(status -> { |
| 381 | + assertThat(status.getPhase()).isEqualTo(CRPhase.ERROR); |
| 382 | + assertThat(status.getMessage()) |
| 383 | + .startsWith("The following privileges require a newer PostgreSQL version (current:") |
| 384 | + .contains("{MAINTAIN=17}"); |
| 385 | + }); |
334 | 386 | } |
335 | 387 | } |
336 | 388 | } |
|
0 commit comments