diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DAO/CategoryDAOTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DAO/CategoryDAOTest.java index 90c8028..677feb0 100644 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DAO/CategoryDAOTest.java +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DAO/CategoryDAOTest.java @@ -1,4 +1,75 @@ package ntnu.systemutvikling.team6.database.DAO; +import ntnu.systemutvikling.team6.database.DatabaseConnection; +import org.junit.jupiter.api.*; +import java.sql.*; +import java.util.List; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + public class CategoryDAOTest { -} + + // --- Mocks --- + private DatabaseConnection mockDbConnection; + private Connection mockConn; + private Statement mockStmt; + private ResultSet mockRs; + + private CategoryDAO categoryDAO; + + @BeforeEach + void setUp() throws SQLException { + mockDbConnection = mock(DatabaseConnection.class); + mockConn = mock(Connection.class); + mockStmt = mock(Statement.class); + mockRs = mock(ResultSet.class); + + when(mockDbConnection.getMySqlConnection()).thenReturn(mockConn); + when(mockConn.createStatement()).thenReturn(mockStmt); + when(mockStmt.executeQuery(anyString())).thenReturn(mockRs); + + categoryDAO = new CategoryDAO(mockDbConnection); + } + + @Test + void getCategoriesFromDB_returnsAllCategories() throws SQLException { + when(mockRs.next()).thenReturn(true, true, true, false); + when(mockRs.getString("category")).thenReturn("Education", "Health", "Youth"); + + List result = categoryDAO.getCategoriesFromDB(); + + assertNotNull(result); + assertEquals(3, result.size()); + assertTrue(result.contains("Education")); + assertTrue(result.contains("Health")); + assertTrue(result.contains("Youth")); + } + + @Test + void getCategoriesFromDB_returnsEmptyListWhenNoCategories() throws SQLException { + when(mockRs.next()).thenReturn(false); + + List result = categoryDAO.getCategoriesFromDB(); + + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void getCategoriesFromDB_returnsSingleCategory() throws SQLException { + when(mockRs.next()).thenReturn(true, false); + when(mockRs.getString("category")).thenReturn("Environment"); + + List result = categoryDAO.getCategoriesFromDB(); + + assertEquals(1, result.size()); + assertEquals("Environment", result.getFirst()); + } + + @Test + void getCategoriesFromDB_throwsRuntimeExceptionOnSQLException() throws SQLException { + when(mockConn.createStatement()).thenThrow(new SQLException("DB down")); + + assertThrows(RuntimeException.class, () -> categoryDAO.getCategoriesFromDB()); + } +} \ No newline at end of file