From 231857047efc088eece75ab6de01246515f20eba Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Sun, 15 Mar 2026 20:08:37 +0100 Subject: [PATCH] Feat> DatbaseManagerTest and DonationTest is refurbisehed --- .../team6/database/DatabaseManagerTest.java | 167 +++++++++++++++ .../team6/models/DatabaseManagerTest.java | 194 ------------------ .../team6/models/DonationTest.java | 26 +-- 3 files changed, 180 insertions(+), 207 deletions(-) create mode 100644 helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java delete mode 100644 helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DatabaseManagerTest.java diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java new file mode 100644 index 0000000..fbef967 --- /dev/null +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java @@ -0,0 +1,167 @@ +package ntnu.systemutvikling.team6.models; + +import ntnu.systemutvikling.team6.database.DatabaseConnection; +import ntnu.systemutvikling.team6.scraper.APICharityData; +import ntnu.systemutvikling.team6.database.DatabaseManager; +import org.junit.jupiter.api.*; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.h2.jdbc.JdbcSQLNonTransientException; +import static org.junit.jupiter.api.Assertions.*; + +class DatabaseManagerTest { + + private DatabaseManager dbManager; + + @BeforeEach + public void setUp() throws SQLException{ + this.dbManager = new DatabaseManager(); + } + + // Make sure you're connected to the NTNU network for this to work + @Test + public void testConnectionShouldReturnTrue(){ + assertTrue(dbManager.testConnection()); + } + @Test + void createCharitiesTableShouldCreateTableSuccessfully() throws SQLException { + dbManager.createTables(); + + try (Connection conn = new DatabaseConnection().getMySqlConnection()) { + ResultSet rs = conn.getMetaData().getTables(null, null, + "Charities", null); + + assertTrue(rs.next()); + } + } + + @Test + void updateCharitiesShouldInsertCorrectData() throws SQLException { + dbManager.createTables(); + + String org_number = "12345"; + String name = "Test Charity"; + String status = "approved"; + String url = "https://www.svindel.no"; + boolean is_pre_approved = false; + + Charity charity = new Charity( + org_number, + url, + name, + is_pre_approved, + status + ); + dbManager.addAPIDataToTable(List.of(charity)); + + Charity charity2 = new Charity( + org_number, + url, + name + " Updated", + is_pre_approved, + status + ); + dbManager.addAPIDataToTable(List.of(charity2)); + + dbManager.createTables(); + + CharityRegistry registry = dbManager.getCharitiesFromDB(); + Charity insertedCharity = registry.findCharityByOrgnumber("12345").get(); + assertEquals("Test Charity Updated", insertedCharity.getName()); + + } + + @Test + void updateCharitiesShouldRemoveDataNotInList() throws SQLException { + String org_number = "12345"; + String name = "Svindelorg"; + String status = "approved"; + String url = "https://www.svindel.no"; + boolean is_pre_approved = false; + + var charity1 = new Charity( + org_number, + url, + name, + is_pre_approved, + status + + ); + + org_number = "23456"; + name = "SvindelKoin"; + status = "approved"; + url = "https://www.svindel.net"; + is_pre_approved = true; + + var charity2 = new Charity( + org_number, + url, + name, + is_pre_approved, + status + ); + + org_number = "345672"; + name = "Arme Svindlere"; + status = "approved"; + url = "https://www.armesvindlere.com"; + is_pre_approved = false; + + var charity3 = new Charity( + org_number, + url, + name, + is_pre_approved, + status + ); + + List charityListBefore = new ArrayList<>(); + charityListBefore.add(charity1); + charityListBefore.add(charity2); + charityListBefore.add(charity3); + + dbManager.addAPIDataToTable(charityListBefore); + + List charityListNew = new ArrayList<>(); + charityListNew.add(charity1); + charityListNew.add(charity3); + + dbManager.addAPIDataToTable(charityListNew); + + try (Connection conn = new DatabaseConnection().getMySqlConnection()) { + PreparedStatement stmt = conn.prepareStatement("SELECT COUNT(org_number) AS number_a FROM Charities"); + + ResultSet rs = stmt.executeQuery(); + + assertTrue(rs.next(), "Charities count row should exist."); + assertEquals(2, rs.getInt("number_a"), "The amount of org_numbers in the table" + + "should be 2 due to removal of 1 table."); + } + } + + @Test + void tempTableShouldNotExistAfterUpdating() throws SQLException{ + Charity charity = new Charity( + "99999", + "https://temp.no", + "Temp Charity", + false, + "approved" + ); + + dbManager.addAPIDataToTable(List.of(charity)); + + try (Connection conn = new DatabaseConnection().getMySqlConnection()) { + PreparedStatement stmt = conn.prepareStatement("SELECT * FROM temp_api_charities"); + + + assertThrows(java.sql.SQLSyntaxErrorException.class, () -> { + ResultSet rs = stmt.executeQuery(); + }); + } + } +} \ No newline at end of file diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DatabaseManagerTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DatabaseManagerTest.java deleted file mode 100644 index 3f60e15..0000000 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DatabaseManagerTest.java +++ /dev/null @@ -1,194 +0,0 @@ -/* -package ntnu.systemutvikling.team6.models; - -import ntnu.systemutvikling.team6.scraper.APICharityData; -import ntnu.systemutvikling.team6.database.DatabaseManager; -import org.junit.jupiter.api.*; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; -import org.h2.jdbc.JdbcSQLNonTransientException; -import static org.junit.jupiter.api.Assertions.*; - -class DatabaseManagerTest { - - private DatabaseManager dbManager; - private String db_url; - private String username; - private String password; - - @BeforeEach - void setUp() throws SQLException{ - db_url = "jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1"; - username = "user"; - password = "123"; - - // Removes tables due to quirk with H2 that keeps temporary tables - try (Connection conn = DriverManager.getConnection(db_url, username, password)) { - PreparedStatement endstmt = conn.prepareStatement("DROP TABLE IF EXISTS charities, temp"); - endstmt.execute(); - } - } - - - - - - @Test - void createCharitiesTableShouldCreateTableSuccessfully() throws SQLException { - dbManager.createTables(); - - try (Connection conn = DriverManager.getConnection(db_url, username, password)) { - ResultSet rs = conn.getMetaData().getTables(null, null, - "CHARITIES", null); - - assertTrue(rs.next(), "Connection to the database should be successful."); - } - } - - @Test - void updateCharitiesShouldInsertCorrectData() throws SQLException { - String org_number = "12345"; - String name = "Svindelorg"; - String status = "approved"; - String url = "https://www.svindel.no"; - boolean is_pre_approved = false; - - var charity = new APICharityData( - org_number, - name, - status, - url, - is_pre_approved - ); - - dbManager.createTables(); - - try (Connection conn = DriverManager.getConnection(db_url, username, password); - PreparedStatement stmt = conn.prepareStatement("SELECT * FROM charities WHERE org_number = ?")) { - - stmt.setString(1, org_number); - ResultSet rs = stmt.executeQuery(); - - assertTrue(rs.next()); - assertEquals(org_number, rs.getString("org_number"), "Organization number should " + - "be correct."); - assertEquals(name, rs.getString("name"), "Name of the organization should be correct."); - assertEquals(status, rs.getString("status"), "Status of the organization should be " + - "correct."); - assertEquals(url, rs.getString("url"), "Url of the organization should be correct."); - assertEquals(is_pre_approved, rs.getBoolean("is_pre_approved"), "Is_pre_approved " + - "value should be correct."); - } - } - - @Test - void updateCharitiesShouldRemoveDataNotInList() throws SQLException { - String org_number = "12345"; - String name = "Svindelorg"; - String status = "approved"; - String url = "https://www.svindel.no"; - boolean is_pre_approved = false; - - var charity1 = new APICharityData( - org_number, - name, - status, - url, - is_pre_approved - ); - - org_number = "23456"; - name = "SvindelKoin"; - status = "approved"; - url = "https://www.svindel.net"; - is_pre_approved = true; - - var charity2 = new APICharityData( - org_number, - name, - status, - url, - is_pre_approved - ); - - org_number = "345672"; - name = "Arme Svindlere"; - status = "approved"; - url = "https://www.armesvindlere.com"; - is_pre_approved = false; - - var charity3 = new APICharityData( - org_number, - name, - status, - url, - is_pre_approved - ); - - var charityListBefore = new ArrayList(); - charityListBefore.add(charity1); - charityListBefore.add(charity2); - charityListBefore.add(charity3); - - var charityListAfter = new ArrayList(); - charityListAfter.add(charity1); - charityListAfter.add(charity3); - - dbManager.createTables(); - - try (Connection conn = DriverManager.getConnection(db_url, username, password)) { - PreparedStatement stmt = conn.prepareStatement("SELECT COUNT(org_number) AS number_b FROM charities"); - - ResultSet rs = stmt.executeQuery(); - - assertTrue(rs.next(), "Charities count row should exist."); - assertEquals(3, rs.getInt("number_b"), "The amount of org_numbers in the table" + - "should be 3."); - PreparedStatement endstmt = conn.prepareStatement("DROP TABLE IF EXISTS temp"); - endstmt.execute(); - } - - try (Connection conn = DriverManager.getConnection(db_url, username, password)) { - PreparedStatement stmt = conn.prepareStatement("SELECT COUNT(org_number) AS number_a FROM charities"); - - ResultSet rs = stmt.executeQuery(); - - assertTrue(rs.next(), "Charities count row should exist."); - assertEquals(2, rs.getInt("number_a"), "The amount of org_numbers in the table" + - "should be 2 due to removal of 1 table."); - } - } - - @Test - void tempTableShouldNotExistAfterUpdating() throws SQLException{ - try (Connection conn = DriverManager.getConnection(db_url, username, password)) { - PreparedStatement endstmt = conn.prepareStatement("DROP TABLE IF EXISTS charities, temp"); - endstmt.execute(); - } - String org_number = "12345"; - String name = "Svindelorg"; - String status = "approved"; - String url = "https://www.svindel.no"; - boolean is_pre_approved = false; - - var charity = new APICharityData( - org_number, - name, - status, - url, - is_pre_approved - ); - - - try (Connection conn = DriverManager.getConnection(db_url, username, password)) { - PreparedStatement stmt = conn.prepareStatement("SELECT * FROM temp"); - - ResultSet rs = stmt.executeQuery(); - - assertThrows(JdbcSQLNonTransientException.class, () -> rs.getString("org_number"), - "Exception about table being empty should be thrown."); - } - } -} -*/ \ No newline at end of file diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DonationTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DonationTest.java index d0694b4..12a017e 100644 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DonationTest.java +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/DonationTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.*; +import java.time.LocalDate; import java.time.LocalDateTime; import ntnu.systemutvikling.team6.models.user.Inbox; import ntnu.systemutvikling.team6.models.user.Role; @@ -19,8 +20,7 @@ class DonationTest { @BeforeEach public void setup() { charity = - new Charity( - "1212", "Charity1", "Something Somewhere Somehow", "Cancer", false, "unverified"); + new Charity("Charity1", "www.aaaa.com", "Cancer", false, "unverified"); user = new User("Name", "Valid@gmail.com", "123", Role.NORMAL_USER, new Settings(), new Inbox()); @@ -31,40 +31,40 @@ public void setup() { void testDonationInitialization() { LocalDateTime now = LocalDateTime.now(); - Donation donation = new Donation(500.0, now, charity, user); + Donation donation = new Donation(500.0, LocalDate.from(now), charity, user); assertNotNull(donation.getCharityId()); assertEquals(500.0, donation.getAmount()); - assertEquals(now, donation.getDate()); + assertEquals(LocalDate.from(now), donation.getDate()); assertEquals(charity, donation.getCharity()); assertEquals(user, donation.getDonor()); } @Test void testAnonymousFlagWhenUserIsAnonymous() { - Donation donation = new Donation(100, LocalDateTime.now(), charity, user); + Donation donation = new Donation(100, LocalDate.from(LocalDateTime.now()), charity, user); assertFalse(donation.isAnonymous()); } @Test void testAnonymousFlagWhenUserIsNotAnonymous() { - Donation donation = new Donation(100, LocalDateTime.now(), charity, user); + Donation donation = new Donation(100, LocalDate.from(LocalDateTime.now()), charity, user); assertFalse(donation.isAnonymous()); } @Test void testCharityIdIsUnique() { - Donation d1 = new Donation(50, LocalDateTime.now(), charity, user); - Donation d2 = new Donation(75, LocalDateTime.now(), charity, user); + Donation d1 = new Donation(50, LocalDate.from(LocalDateTime.now()), charity, user); + Donation d2 = new Donation(75, LocalDate.from(LocalDateTime.now()), charity, user); assertNotEquals(d1.getCharityId(), d2.getCharityId()); } @Test void testAmountStoredCorrectly() { - Donation donation = new Donation(123.45, LocalDateTime.now(), charity, user); + Donation donation = new Donation(123.45, LocalDate.from(LocalDateTime.now()), charity, user); assertEquals(123.45, donation.getAmount()); } @@ -73,21 +73,21 @@ void testAmountStoredCorrectly() { void testDateStoredCorrectly() { LocalDateTime date = LocalDateTime.of(2024, 5, 10, 12, 30); - Donation donation = new Donation(200, date, charity, user); + Donation donation = new Donation(200, LocalDate.from(date), charity, user); - assertEquals(date, donation.getDate()); + assertEquals(LocalDate.from(date), donation.getDate()); } @Test void testCharityStoredCorrectly() { - Donation donation = new Donation(200, LocalDateTime.now(), charity, user); + Donation donation = new Donation(200, LocalDate.from(LocalDateTime.now()), charity, user); assertEquals(charity, donation.getCharity()); } @Test void testDonorStoredCorrectly() { - Donation donation = new Donation(200, LocalDateTime.now(), charity, user); + Donation donation = new Donation(200, LocalDate.from(LocalDateTime.now()), charity, user); assertEquals(user, donation.getDonor()); }