Files

210 lines
6.7 KiB
Python
Raw Permalink Normal View History

"""
Copyright 2024-2026 ReplyPier
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
import pytest
from app.repositories.user_group import UserGroupRepository
from app.models.user import User, UserGroup
from uuid import uuid4
from app.models.organization import Organization
@pytest.fixture
def user_group_repo(db):
"""Create a UserGroupRepository instance"""
return UserGroupRepository(db)
@pytest.fixture
def test_user(db, test_organization_id):
"""Create a test user"""
user = User(
id=uuid4(),
email="test@example.com",
hashed_password="hashed_password",
is_active=True,
organization_id=test_organization_id,
full_name="Test User"
)
db.add(user)
db.commit()
db.refresh(user)
return user
@pytest.fixture
def test_group(db, test_organization_id):
"""Create a test group"""
group = UserGroup(
name="Test Group",
description="Test group description",
organization_id=test_organization_id
)
db.add(group)
db.commit()
db.refresh(group)
return group
def test_get_groups_by_organization(user_group_repo, test_organization_id, test_group):
"""Test retrieving groups by organization"""
# Create another organization for testing
other_org = Organization(
name="Other Organization",
domain="other.com",
timezone="UTC"
)
user_group_repo.db.add(other_org)
user_group_repo.db.commit()
user_group_repo.db.refresh(other_org)
# Create another group in a different organization
other_group = UserGroup(
name="Other Group",
description="Other group description",
organization_id=other_org.id
)
user_group_repo.db.add(other_group)
user_group_repo.db.commit()
# Get groups for test organization
groups = user_group_repo.get_groups_by_organization(test_organization_id)
assert len(groups) == 1
assert groups[0].id == test_group.id
assert groups[0].name == test_group.name
# Get groups for other organization
other_groups = user_group_repo.get_groups_by_organization(other_org.id)
assert len(other_groups) == 1
assert other_groups[0].name == other_group.name
assert other_groups[0].organization_id == other_org.id
def test_get_group(user_group_repo, test_group):
"""Test retrieving a group by ID"""
# Get existing group
group = user_group_repo.get_group(test_group.id)
assert group is not None
assert group.id == test_group.id
assert group.name == test_group.name
# Try to get non-existent group
non_existent_group = user_group_repo.get_group(uuid4())
assert non_existent_group is None
def test_create_group(user_group_repo, test_organization_id):
"""Test creating a new group"""
name = "New Group"
description = "New group description"
group = user_group_repo.create_group(name, description, test_organization_id)
assert group is not None
assert group.name == name
assert group.description == description
assert group.organization_id == test_organization_id
# Verify group was saved to database
saved_group = user_group_repo.get_group(group.id)
assert saved_group is not None
assert saved_group.name == name
def test_update_group(user_group_repo, test_group):
"""Test updating a group"""
new_name = "Updated Group"
new_description = "Updated description"
# Update existing group
updated_group = user_group_repo.update_group(
test_group.id,
name=new_name,
description=new_description
)
assert updated_group is not None
assert updated_group.name == new_name
assert updated_group.description == new_description
# Try to update non-existent group
non_existent_update = user_group_repo.update_group(
uuid4(),
name="Non-existent Group"
)
assert non_existent_update is None
def test_delete_group(user_group_repo, test_group):
"""Test deleting a group"""
# Delete existing group
success = user_group_repo.delete_group(test_group.id)
assert success is True
# Verify group was deleted
deleted_group = user_group_repo.get_group(test_group.id)
assert deleted_group is None
# Try to delete non-existent group
success = user_group_repo.delete_group(uuid4())
assert success is False
def test_add_user(user_group_repo, test_group, test_user):
"""Test adding a user to a group"""
# Add user to group
success = user_group_repo.add_user(test_group.id, test_user.id)
assert success is True
# Verify user was added
group = user_group_repo.get_group(test_group.id)
assert test_user in group.users
# Try to add user again (should still return True but not duplicate)
success = user_group_repo.add_user(test_group.id, test_user.id)
assert success is True
assert len(group.users) == 1
# Try to add user to non-existent group
success = user_group_repo.add_user(uuid4(), test_user.id)
assert success is False
def test_remove_user(user_group_repo, test_group, test_user):
"""Test removing a user from a group"""
# First add user to group
user_group_repo.add_user(test_group.id, test_user.id)
# Remove user from group
success = user_group_repo.remove_user(test_group.id, test_user.id)
assert success is True
# Verify user was removed
group = user_group_repo.get_group(test_group.id)
assert test_user not in group.users
# Try to remove user again (should still return True)
success = user_group_repo.remove_user(test_group.id, test_user.id)
assert success is True
# Try to remove user from non-existent group
success = user_group_repo.remove_user(uuid4(), test_user.id)
assert success is False
def test_get_user_groups(user_group_repo, test_group, test_user):
"""Test getting all groups a user belongs to"""
# Initially user should have no groups
groups = user_group_repo.get_user_groups(test_user.id)
assert len(groups) == 0
# Add user to a group
user_group_repo.add_user(test_group.id, test_user.id)
# User should now have one group
groups = user_group_repo.get_user_groups(test_user.id)
assert len(groups) == 1
assert groups[0].id == test_group.id
# Test with non-existent user
groups = user_group_repo.get_user_groups(uuid4())
assert len(groups) == 0