|
21 | 21 | GroupExtraPropertiesRepo, |
22 | 22 | ) |
23 | 23 | from sqlalchemy import literal_column |
| 24 | +from sqlalchemy.ext.asyncio import AsyncEngine |
24 | 25 |
|
25 | 26 |
|
26 | 27 | async def test_get_raises_if_not_found( |
@@ -101,6 +102,28 @@ async def test_get( |
101 | 102 | assert created_extra_properties == received_extra_properties |
102 | 103 |
|
103 | 104 |
|
| 105 | +async def test_get_v2( |
| 106 | + asyncpg_engine: AsyncEngine, |
| 107 | + registered_user: RowProxy, |
| 108 | + product_name: str, |
| 109 | + create_fake_product: Callable[..., Awaitable[RowProxy]], |
| 110 | + create_fake_group_extra_properties: Callable[..., Awaitable[GroupExtraProperties]], |
| 111 | +): |
| 112 | + with pytest.raises(GroupExtraPropertiesNotFoundError): |
| 113 | + await GroupExtraPropertiesRepo.get_v2( |
| 114 | + asyncpg_engine, gid=registered_user.primary_gid, product_name=product_name |
| 115 | + ) |
| 116 | + |
| 117 | + await create_fake_product(product_name) |
| 118 | + created_extra_properties = await create_fake_group_extra_properties( |
| 119 | + registered_user.primary_gid, product_name |
| 120 | + ) |
| 121 | + received_extra_properties = await GroupExtraPropertiesRepo.get_v2( |
| 122 | + asyncpg_engine, gid=registered_user.primary_gid, product_name=product_name |
| 123 | + ) |
| 124 | + assert created_extra_properties == received_extra_properties |
| 125 | + |
| 126 | + |
104 | 127 | @pytest.fixture |
105 | 128 | async def everyone_group_id(connection: aiopg.sa.connection.SAConnection) -> int: |
106 | 129 | result = await connection.scalar( |
@@ -355,3 +378,114 @@ async def test_get_aggregated_properties_for_user_returns_property_values_as_tru |
355 | 378 | assert aggregated_group_properties.internet_access is False |
356 | 379 | assert aggregated_group_properties.override_services_specifications is False |
357 | 380 | assert aggregated_group_properties.use_on_demand_clusters is True |
| 381 | + |
| 382 | + |
| 383 | +async def test_get_aggregated_properties_for_user_returns_property_values_as_truthy_if_one_of_them_is_v2( |
| 384 | + asyncpg_engine: AsyncEngine, |
| 385 | + connection: aiopg.sa.connection.SAConnection, |
| 386 | + product_name: str, |
| 387 | + registered_user: RowProxy, |
| 388 | + create_fake_product: Callable[..., Awaitable[RowProxy]], |
| 389 | + create_fake_group: Callable[..., Awaitable[RowProxy]], |
| 390 | + create_fake_group_extra_properties: Callable[..., Awaitable[GroupExtraProperties]], |
| 391 | + everyone_group_id: int, |
| 392 | +): |
| 393 | + await create_fake_product(product_name) |
| 394 | + await create_fake_product(f"{product_name}_additional_just_for_fun") |
| 395 | + |
| 396 | + # create a specific extra properties for group that disallow everything |
| 397 | + everyone_group_extra_properties = await create_fake_group_extra_properties( |
| 398 | + everyone_group_id, |
| 399 | + product_name, |
| 400 | + internet_access=False, |
| 401 | + override_services_specifications=False, |
| 402 | + use_on_demand_clusters=False, |
| 403 | + ) |
| 404 | + # this should return the everyone group properties |
| 405 | + aggregated_group_properties = ( |
| 406 | + await GroupExtraPropertiesRepo.get_aggregated_properties_for_user_v2( |
| 407 | + asyncpg_engine, user_id=registered_user.id, product_name=product_name |
| 408 | + ) |
| 409 | + ) |
| 410 | + assert aggregated_group_properties == everyone_group_extra_properties |
| 411 | + |
| 412 | + # now we create some standard groups and add the user to them and make everything false for now |
| 413 | + standard_groups = [await create_fake_group(connection) for _ in range(5)] |
| 414 | + for group in standard_groups: |
| 415 | + await create_fake_group_extra_properties( |
| 416 | + group.gid, |
| 417 | + product_name, |
| 418 | + internet_access=False, |
| 419 | + override_services_specifications=False, |
| 420 | + use_on_demand_clusters=False, |
| 421 | + ) |
| 422 | + await _add_user_to_group( |
| 423 | + connection, user_id=registered_user.id, group_id=group.gid |
| 424 | + ) |
| 425 | + |
| 426 | + # now we still should not have any of these value Truthy |
| 427 | + aggregated_group_properties = ( |
| 428 | + await GroupExtraPropertiesRepo.get_aggregated_properties_for_user_v2( |
| 429 | + asyncpg_engine, user_id=registered_user.id, product_name=product_name |
| 430 | + ) |
| 431 | + ) |
| 432 | + assert aggregated_group_properties.internet_access is False |
| 433 | + assert aggregated_group_properties.override_services_specifications is False |
| 434 | + assert aggregated_group_properties.use_on_demand_clusters is False |
| 435 | + |
| 436 | + # let's change one of these standard groups |
| 437 | + random_standard_group = random.choice(standard_groups) # noqa: S311 |
| 438 | + result = await connection.execute( |
| 439 | + groups_extra_properties.update() |
| 440 | + .where(groups_extra_properties.c.group_id == random_standard_group.gid) |
| 441 | + .values(internet_access=True) |
| 442 | + ) |
| 443 | + assert result.rowcount == 1 |
| 444 | + |
| 445 | + # now we should have internet access |
| 446 | + aggregated_group_properties = ( |
| 447 | + await GroupExtraPropertiesRepo.get_aggregated_properties_for_user_v2( |
| 448 | + asyncpg_engine, user_id=registered_user.id, product_name=product_name |
| 449 | + ) |
| 450 | + ) |
| 451 | + assert aggregated_group_properties.internet_access is True |
| 452 | + assert aggregated_group_properties.override_services_specifications is False |
| 453 | + assert aggregated_group_properties.use_on_demand_clusters is False |
| 454 | + |
| 455 | + # let's change another one of these standard groups |
| 456 | + random_standard_group = random.choice(standard_groups) # noqa: S311 |
| 457 | + result = await connection.execute( |
| 458 | + groups_extra_properties.update() |
| 459 | + .where(groups_extra_properties.c.group_id == random_standard_group.gid) |
| 460 | + .values(override_services_specifications=True) |
| 461 | + ) |
| 462 | + assert result.rowcount == 1 |
| 463 | + |
| 464 | + # now we should have internet access and service override |
| 465 | + aggregated_group_properties = ( |
| 466 | + await GroupExtraPropertiesRepo.get_aggregated_properties_for_user_v2( |
| 467 | + asyncpg_engine, user_id=registered_user.id, product_name=product_name |
| 468 | + ) |
| 469 | + ) |
| 470 | + assert aggregated_group_properties.internet_access is True |
| 471 | + assert aggregated_group_properties.override_services_specifications is True |
| 472 | + assert aggregated_group_properties.use_on_demand_clusters is False |
| 473 | + |
| 474 | + # and we can deny it again by setting a primary extra property |
| 475 | + # now create some personal extra properties |
| 476 | + personal_group_extra_properties = await create_fake_group_extra_properties( |
| 477 | + registered_user.primary_gid, |
| 478 | + product_name, |
| 479 | + internet_access=False, |
| 480 | + use_on_demand_clusters=True, |
| 481 | + ) |
| 482 | + assert personal_group_extra_properties |
| 483 | + |
| 484 | + aggregated_group_properties = ( |
| 485 | + await GroupExtraPropertiesRepo.get_aggregated_properties_for_user_v2( |
| 486 | + asyncpg_engine, user_id=registered_user.id, product_name=product_name |
| 487 | + ) |
| 488 | + ) |
| 489 | + assert aggregated_group_properties.internet_access is False |
| 490 | + assert aggregated_group_properties.override_services_specifications is False |
| 491 | + assert aggregated_group_properties.use_on_demand_clusters is True |
0 commit comments