Skip to content

Commit 66b1310

Browse files
committed
add tests
1 parent 527b948 commit 66b1310

File tree

1 file changed

+274
-0
lines changed

1 file changed

+274
-0
lines changed

backend/pkg/database/gorm_repository_test.go

Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,3 +1437,277 @@ func (suite *RepositoryTestSuite) TestUpdateBackgroundJob() {
14371437
require.Equal(suite.T(), pkg.BackgroundJobStatusFailed, foundAllBackgroundJobs[0].JobStatus)
14381438
require.NotNil(suite.T(), foundAllBackgroundJobs[0].DoneTime)
14391439
}
1440+
1441+
func (suite *RepositoryTestSuite) TestUpdateUserAndPermissions() {
1442+
//setup
1443+
fakeConfig := mock_config.NewMockInterface(suite.MockCtrl)
1444+
fakeConfig.EXPECT().GetString("database.location").Return(suite.TestDatabase.Name()).AnyTimes()
1445+
fakeConfig.EXPECT().GetString("database.type").Return("sqlite").AnyTimes()
1446+
fakeConfig.EXPECT().IsSet("database.encryption.key").Return(false).AnyTimes()
1447+
fakeConfig.EXPECT().GetString("log.level").Return("INFO").AnyTimes()
1448+
dbRepo, err := NewRepository(fakeConfig, logrus.WithField("test", suite.T().Name()), event_bus.NewNoopEventBusServer())
1449+
require.NoError(suite.T(), err)
1450+
1451+
// Create initial user
1452+
userModel := &models.User{
1453+
Username: "test_username",
1454+
Password: "testpassword",
1455+
Email: "test@test.com",
1456+
FullName: "Test User",
1457+
Role: pkg.UserRoleUser,
1458+
}
1459+
err = dbRepo.CreateUser(context.Background(), userModel)
1460+
require.NoError(suite.T(), err)
1461+
1462+
// Create target user for permissions
1463+
targetUser := &models.User{
1464+
Username: "target_user",
1465+
Password: "targetpass",
1466+
Email: "target@test.com",
1467+
FullName: "Target User",
1468+
Role: pkg.UserRoleUser,
1469+
}
1470+
err = dbRepo.CreateUser(context.Background(), targetUser)
1471+
require.NoError(suite.T(), err)
1472+
1473+
// Update user with new details and permissions
1474+
updatedUser := models.User{
1475+
ModelBase: models.ModelBase{ID: userModel.ID},
1476+
Username: "test_username",
1477+
Email: "newemail@test.com",
1478+
FullName: "Updated Name",
1479+
Role: pkg.UserRoleAdmin,
1480+
Permissions: map[string]map[string]bool{
1481+
targetUser.ID.String(): {
1482+
"read": true,
1483+
"manage_sources": true,
1484+
},
1485+
},
1486+
}
1487+
1488+
// Test
1489+
err = dbRepo.UpdateUserAndPermissions(context.WithValue(context.Background(), pkg.ContextKeyTypeAuthUsername, "test_username"), updatedUser)
1490+
require.NoError(suite.T(), err)
1491+
1492+
// Verify
1493+
updatedUserResult, err := dbRepo.GetUser(context.Background(), userModel.ID)
1494+
require.NoError(suite.T(), err)
1495+
require.Equal(suite.T(), "newemail@test.com", updatedUserResult.Email)
1496+
require.Equal(suite.T(), "Updated Name", updatedUserResult.FullName)
1497+
require.Equal(suite.T(), pkg.UserRoleAdmin, updatedUserResult.Role)
1498+
require.Equal(suite.T(), true, updatedUserResult.Permissions[targetUser.ID.String()]["read"])
1499+
require.Equal(suite.T(), true, updatedUserResult.Permissions[targetUser.ID.String()]["manage_sources"])
1500+
}
1501+
1502+
func (suite *RepositoryTestSuite) TestUpdateUserAndPermissions_NonExistentUser() {
1503+
//setup
1504+
fakeConfig := mock_config.NewMockInterface(suite.MockCtrl)
1505+
fakeConfig.EXPECT().GetString("database.location").Return(suite.TestDatabase.Name()).AnyTimes()
1506+
fakeConfig.EXPECT().GetString("database.type").Return("sqlite").AnyTimes()
1507+
fakeConfig.EXPECT().IsSet("database.encryption.key").Return(false).AnyTimes()
1508+
fakeConfig.EXPECT().GetString("log.level").Return("INFO").AnyTimes()
1509+
dbRepo, err := NewRepository(fakeConfig, logrus.WithField("test", suite.T().Name()), event_bus.NewNoopEventBusServer())
1510+
require.NoError(suite.T(), err)
1511+
1512+
// Try to update non-existent user
1513+
nonExistentUser := models.User{
1514+
ModelBase: models.ModelBase{ID: uuid.New()},
1515+
Username: "nonexistent",
1516+
Email: "nonexistent@test.com",
1517+
FullName: "Non Existent",
1518+
Role: pkg.UserRoleUser,
1519+
}
1520+
1521+
// Test
1522+
err = dbRepo.UpdateUserAndPermissions(context.Background(), nonExistentUser)
1523+
require.Error(suite.T(), err)
1524+
}
1525+
1526+
func (suite *RepositoryTestSuite) TestUpdateUserAndPermissions_RemovePermissions() {
1527+
//setup
1528+
fakeConfig := mock_config.NewMockInterface(suite.MockCtrl)
1529+
fakeConfig.EXPECT().GetString("database.location").Return(suite.TestDatabase.Name()).AnyTimes()
1530+
fakeConfig.EXPECT().GetString("database.type").Return("sqlite").AnyTimes()
1531+
fakeConfig.EXPECT().IsSet("database.encryption.key").Return(false).AnyTimes()
1532+
fakeConfig.EXPECT().GetString("log.level").Return("INFO").AnyTimes()
1533+
dbRepo, err := NewRepository(fakeConfig, logrus.WithField("test", suite.T().Name()), event_bus.NewNoopEventBusServer())
1534+
require.NoError(suite.T(), err)
1535+
1536+
// Create initial user
1537+
userModel := &models.User{
1538+
Username: "test_username",
1539+
Password: "testpassword",
1540+
Email: "test@test.com",
1541+
FullName: "Test User",
1542+
Role: pkg.UserRoleUser,
1543+
}
1544+
err = dbRepo.CreateUser(context.Background(), userModel)
1545+
require.NoError(suite.T(), err)
1546+
1547+
// Create target user for permissions
1548+
targetUser := &models.User{
1549+
Username: "target_user",
1550+
Password: "targetpass",
1551+
Email: "target@test.com",
1552+
FullName: "Target User",
1553+
Role: pkg.UserRoleUser,
1554+
}
1555+
err = dbRepo.CreateUser(context.Background(), targetUser)
1556+
require.NoError(suite.T(), err)
1557+
1558+
// First update: add permissions
1559+
userWithPermissions := models.User{
1560+
ModelBase: models.ModelBase{ID: userModel.ID},
1561+
Username: "test_username",
1562+
Email: "test@test.com",
1563+
FullName: "Test User",
1564+
Role: pkg.UserRoleUser,
1565+
Permissions: map[string]map[string]bool{
1566+
targetUser.ID.String(): {
1567+
"read": true,
1568+
"manage_sources": true,
1569+
},
1570+
},
1571+
}
1572+
1573+
err = dbRepo.UpdateUserAndPermissions(context.WithValue(context.Background(), pkg.ContextKeyTypeAuthUsername, "test_username"), userWithPermissions)
1574+
require.NoError(suite.T(), err)
1575+
1576+
// Second update: remove all permissions
1577+
userWithoutPermissions := models.User{
1578+
ModelBase: models.ModelBase{ID: userModel.ID},
1579+
Username: "test_username",
1580+
Email: "test@test.com",
1581+
FullName: "Test User",
1582+
Role: pkg.UserRoleUser,
1583+
Permissions: map[string]map[string]bool{},
1584+
}
1585+
1586+
// Test
1587+
err = dbRepo.UpdateUserAndPermissions(context.WithValue(context.Background(), pkg.ContextKeyTypeAuthUsername, "test_username"), userWithoutPermissions)
1588+
require.NoError(suite.T(), err)
1589+
1590+
// Verify
1591+
updatedUserResult, err := dbRepo.GetUser(context.Background(), userModel.ID)
1592+
require.NoError(suite.T(), err)
1593+
require.Empty(suite.T(), updatedUserResult.Permissions[targetUser.ID.String()])
1594+
}
1595+
1596+
func (suite *RepositoryTestSuite) TestGetUser() {
1597+
//setup
1598+
fakeConfig := mock_config.NewMockInterface(suite.MockCtrl)
1599+
fakeConfig.EXPECT().GetString("database.location").Return(suite.TestDatabase.Name()).AnyTimes()
1600+
fakeConfig.EXPECT().GetString("database.type").Return("sqlite").AnyTimes()
1601+
fakeConfig.EXPECT().IsSet("database.encryption.key").Return(false).AnyTimes()
1602+
fakeConfig.EXPECT().GetString("log.level").Return("INFO").AnyTimes()
1603+
dbRepo, err := NewRepository(fakeConfig, logrus.WithField("test", suite.T().Name()), event_bus.NewNoopEventBusServer())
1604+
require.NoError(suite.T(), err)
1605+
1606+
// Create initial user
1607+
userModel := &models.User{
1608+
Username: "test_username",
1609+
Password: "testpassword",
1610+
Email: "test@test.com",
1611+
FullName: "Test User",
1612+
Role: pkg.UserRoleUser,
1613+
}
1614+
err = dbRepo.CreateUser(context.Background(), userModel)
1615+
require.NoError(suite.T(), err)
1616+
1617+
// Create target user for permissions
1618+
targetUser := &models.User{
1619+
Username: "target_user",
1620+
Password: "targetpass",
1621+
Email: "target@test.com",
1622+
FullName: "Target User",
1623+
Role: pkg.UserRoleUser,
1624+
}
1625+
err = dbRepo.CreateUser(context.Background(), targetUser)
1626+
require.NoError(suite.T(), err)
1627+
1628+
// Add permissions
1629+
userWithPermissions := models.User{
1630+
ModelBase: models.ModelBase{ID: userModel.ID},
1631+
Username: "test_username",
1632+
Email: "test@test.com",
1633+
FullName: "Test User",
1634+
Role: pkg.UserRoleUser,
1635+
Permissions: map[string]map[string]bool{
1636+
targetUser.ID.String(): {
1637+
"read": true,
1638+
"manage_sources": true,
1639+
},
1640+
},
1641+
}
1642+
1643+
err = dbRepo.UpdateUserAndPermissions(context.WithValue(context.Background(), pkg.ContextKeyTypeAuthUsername, "test_username"), userWithPermissions)
1644+
require.NoError(suite.T(), err)
1645+
1646+
// Test
1647+
foundUser, err := dbRepo.GetUser(context.Background(), userModel.ID)
1648+
1649+
// Verify
1650+
require.NoError(suite.T(), err)
1651+
require.Equal(suite.T(), userModel.ID, foundUser.ID)
1652+
require.Equal(suite.T(), userModel.Username, foundUser.Username)
1653+
require.Equal(suite.T(), userModel.Email, foundUser.Email)
1654+
require.Equal(suite.T(), userModel.FullName, foundUser.FullName)
1655+
require.Equal(suite.T(), userModel.Role, foundUser.Role)
1656+
require.Empty(suite.T(), foundUser.Password) // Password should be sanitized
1657+
require.Equal(suite.T(), true, foundUser.Permissions[targetUser.ID.String()]["read"])
1658+
require.Equal(suite.T(), true, foundUser.Permissions[targetUser.ID.String()]["manage_sources"])
1659+
}
1660+
1661+
func (suite *RepositoryTestSuite) TestGetUser_NonExistentUser() {
1662+
//setup
1663+
fakeConfig := mock_config.NewMockInterface(suite.MockCtrl)
1664+
fakeConfig.EXPECT().GetString("database.location").Return(suite.TestDatabase.Name()).AnyTimes()
1665+
fakeConfig.EXPECT().GetString("database.type").Return("sqlite").AnyTimes()
1666+
fakeConfig.EXPECT().IsSet("database.encryption.key").Return(false).AnyTimes()
1667+
fakeConfig.EXPECT().GetString("log.level").Return("INFO").AnyTimes()
1668+
dbRepo, err := NewRepository(fakeConfig, logrus.WithField("test", suite.T().Name()), event_bus.NewNoopEventBusServer())
1669+
require.NoError(suite.T(), err)
1670+
1671+
// Test
1672+
nonExistentID := uuid.New()
1673+
foundUser, err := dbRepo.GetUser(context.Background(), nonExistentID)
1674+
1675+
// Verify
1676+
require.Error(suite.T(), err)
1677+
require.Nil(suite.T(), foundUser)
1678+
}
1679+
1680+
func (suite *RepositoryTestSuite) TestGetUser_NoPermissions() {
1681+
//setup
1682+
fakeConfig := mock_config.NewMockInterface(suite.MockCtrl)
1683+
fakeConfig.EXPECT().GetString("database.location").Return(suite.TestDatabase.Name()).AnyTimes()
1684+
fakeConfig.EXPECT().GetString("database.type").Return("sqlite").AnyTimes()
1685+
fakeConfig.EXPECT().IsSet("database.encryption.key").Return(false).AnyTimes()
1686+
fakeConfig.EXPECT().GetString("log.level").Return("INFO").AnyTimes()
1687+
dbRepo, err := NewRepository(fakeConfig, logrus.WithField("test", suite.T().Name()), event_bus.NewNoopEventBusServer())
1688+
require.NoError(suite.T(), err)
1689+
1690+
// Create user without any permissions
1691+
userModel := &models.User{
1692+
Username: "test_username",
1693+
Password: "testpassword",
1694+
Email: "test@test.com",
1695+
FullName: "Test User",
1696+
Role: pkg.UserRoleUser,
1697+
}
1698+
err = dbRepo.CreateUser(context.Background(), userModel)
1699+
require.NoError(suite.T(), err)
1700+
1701+
// Test
1702+
foundUser, err := dbRepo.GetUser(context.Background(), userModel.ID)
1703+
1704+
// Verify
1705+
require.NoError(suite.T(), err)
1706+
require.Equal(suite.T(), userModel.ID, foundUser.ID)
1707+
require.Equal(suite.T(), userModel.Username, foundUser.Username)
1708+
require.Equal(suite.T(), userModel.Email, foundUser.Email)
1709+
require.Equal(suite.T(), userModel.FullName, foundUser.FullName)
1710+
require.Equal(suite.T(), userModel.Role, foundUser.Role)
1711+
require.Empty(suite.T(), foundUser.Password) // Password should be sanitized
1712+
require.Empty(suite.T(), foundUser.Permissions) // No permissions should be present
1713+
}

0 commit comments

Comments
 (0)