def test_get_user_action_permissions_with_group_project(users, user_action):
    user_id = users[0].id
    action_id = user_action.id
    project_id = sampledb.logic.projects.create_project(
        "Example Project", "", users[1].id).id
    assert action_permissions.get_user_action_permissions(
        user_id=user_id, action_id=action_id) == Permissions.NONE
    action_permissions.set_project_action_permissions(
        project_id=project_id,
        action_id=action_id,
        permissions=Permissions.GRANT)
    assert action_permissions.get_user_action_permissions(
        user_id=user_id, action_id=action_id) == Permissions.NONE
    group_id = sampledb.logic.groups.create_group("Example Group", "",
                                                  users[1].id).id
    sampledb.logic.projects.add_group_to_project(project_id, group_id,
                                                 Permissions.READ)
    assert action_permissions.get_user_action_permissions(
        user_id=user_id, action_id=action_id) == Permissions.NONE
    sampledb.logic.groups.add_user_to_group(group_id=group_id, user_id=user_id)
    assert action_permissions.get_user_action_permissions(
        user_id=user_id, action_id=action_id) == Permissions.READ
    sampledb.db.session.add(
        UserActionPermissions(user_id=user_id,
                              action_id=action_id,
                              permissions=Permissions.WRITE))
    sampledb.db.session.commit()
    assert action_permissions.get_user_action_permissions(
        user_id=user_id, action_id=action_id) == Permissions.WRITE
    sampledb.logic.projects.update_group_project_permissions(
        project_id, group_id, Permissions.GRANT)
    assert action_permissions.get_user_action_permissions(
        user_id=user_id, action_id=action_id) == Permissions.GRANT
def test_get_action_permissions_with_projects(users, user_action):
    user_id = users[0].id
    action_id = user_action.id

    assert action_permissions.get_action_permissions_for_users(action_id=action_id) == {
        users[1].id: Permissions.GRANT
    }

    project_id = sampledb.logic.projects.create_project("Example Project", "", users[1].id).id

    action_permissions.set_project_action_permissions(action_id=action_id, project_id=project_id, permissions=Permissions.WRITE)

    assert action_permissions.get_action_permissions_for_users(action_id=action_id) == {
        users[1].id: Permissions.GRANT
    }

    sampledb.logic.projects.add_user_to_project(project_id, user_id, Permissions.READ)

    assert action_permissions.get_action_permissions_for_users(action_id=action_id, include_projects=False) == {
        users[1].id: Permissions.GRANT
    }

    assert action_permissions.get_action_permissions_for_users(action_id=action_id) == {
        user_id: Permissions.READ,
        users[1].id: Permissions.GRANT
    }

    group_id = sampledb.logic.groups.create_group("Example Group", "", users[1].id).id

    sampledb.logic.projects.add_group_to_project(project_id=project_id, group_id=group_id, permissions=Permissions.WRITE)

    assert action_permissions.get_action_permissions_for_users(action_id=action_id) == {
        user_id: Permissions.READ,
        users[1].id: Permissions.GRANT
    }

    sampledb.logic.groups.add_user_to_group(group_id=group_id, user_id=user_id)

    assert action_permissions.get_action_permissions_for_users(action_id=action_id, include_groups=False) == {
        user_id: Permissions.READ,
        users[1].id: Permissions.GRANT
    }

    assert action_permissions.get_action_permissions_for_users(action_id=action_id) == {
        user_id: Permissions.WRITE,
        users[1].id: Permissions.GRANT
    }

    sampledb.logic.groups.remove_user_from_group(group_id=group_id, user_id=user_id)

    assert action_permissions.get_action_permissions_for_users(action_id=action_id) == {
        user_id: Permissions.READ,
        users[1].id: Permissions.GRANT
    }
def test_action_permissions_for_groups_with_project(users, user_action):
    user, creator = users
    action_id = user_action.id
    group_id = groups.create_group("Example Group", "", creator.id).id

    action_permissions.set_group_action_permissions(
        action_id=action_id, group_id=group_id, permissions=Permissions.READ)

    assert action_permissions.get_action_permissions_for_groups(action_id) == {
        group_id: Permissions.READ
    }

    project_id = sampledb.logic.projects.create_project(
        "Example Project", "", creator.id).id
    action_permissions.set_project_action_permissions(
        action_id=action_id,
        project_id=project_id,
        permissions=Permissions.GRANT)

    assert action_permissions.get_action_permissions_for_groups(action_id) == {
        group_id: Permissions.READ
    }

    sampledb.logic.projects.add_group_to_project(project_id=project_id,
                                                 group_id=group_id,
                                                 permissions=Permissions.WRITE)

    assert action_permissions.get_action_permissions_for_groups(action_id) == {
        group_id: Permissions.READ
    }

    assert action_permissions.get_action_permissions_for_groups(
        action_id, include_projects=True) == {
            group_id: Permissions.WRITE
        }

    sampledb.logic.projects.update_group_project_permissions(
        project_id=project_id,
        group_id=group_id,
        permissions=Permissions.GRANT)

    assert action_permissions.get_action_permissions_for_groups(
        action_id, include_projects=True) == {
            group_id: Permissions.GRANT
        }

    sampledb.logic.projects.remove_group_from_project(project_id=project_id,
                                                      group_id=group_id)

    assert action_permissions.get_action_permissions_for_groups(
        action_id, include_projects=True) == {
            group_id: Permissions.READ
        }
def test_action_permissions_for_projects(users, user_action):
    user, creator = users
    action_id = user_action.id
    project_id = sampledb.logic.projects.create_project("Example Project", "", creator.id).id

    assert action_permissions.get_action_permissions_for_projects(action_id) == {}

    action_permissions.set_project_action_permissions(action_id=action_id, project_id=project_id, permissions=Permissions.WRITE)

    assert action_permissions.get_action_permissions_for_projects(action_id) == {
        project_id: Permissions.WRITE
    }

    action_permissions.set_project_action_permissions(action_id=action_id, project_id=project_id, permissions=Permissions.GRANT)

    assert action_permissions.get_action_permissions_for_projects(action_id) == {
        project_id: Permissions.GRANT
    }

    action_permissions.set_project_action_permissions(action_id=action_id, project_id=project_id, permissions=Permissions.NONE)

    assert action_permissions.get_action_permissions_for_projects(action_id) == {}