| 
 | 1 | +package g3401_3500.s3482_analyze_organization_hierarchy  | 
 | 2 | + | 
 | 3 | +import org.hamcrest.CoreMatchers.equalTo  | 
 | 4 | +import org.hamcrest.MatcherAssert.assertThat  | 
 | 5 | +import org.junit.jupiter.api.Test  | 
 | 6 | +import org.zapodot.junit.db.annotations.EmbeddedDatabase  | 
 | 7 | +import org.zapodot.junit.db.annotations.EmbeddedDatabaseTest  | 
 | 8 | +import org.zapodot.junit.db.common.CompatibilityMode  | 
 | 9 | +import java.io.BufferedReader  | 
 | 10 | +import java.io.FileNotFoundException  | 
 | 11 | +import java.io.FileReader  | 
 | 12 | +import java.sql.ResultSet  | 
 | 13 | +import java.sql.SQLException  | 
 | 14 | +import java.util.stream.Collectors  | 
 | 15 | +import javax.sql.DataSource  | 
 | 16 | + | 
 | 17 | +@EmbeddedDatabaseTest(  | 
 | 18 | +    compatibilityMode = CompatibilityMode.MySQL,  | 
 | 19 | +    initialSqls = [  | 
 | 20 | +        (  | 
 | 21 | +            "    CREATE TABLE Employees (" +  | 
 | 22 | +                "    employee_id INT," +  | 
 | 23 | +                "    employee_name VARCHAR(50)," +  | 
 | 24 | +                "    manager_id INT," +  | 
 | 25 | +                "    salary INT," +  | 
 | 26 | +                "    department VARCHAR(100)" +  | 
 | 27 | +                ");" +  | 
 | 28 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 29 | +                "(1, 'Alice', NULL, 12000, 'Executive');" +  | 
 | 30 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 31 | +                "(2, 'Bob', 1, 10000, 'Sales');" +  | 
 | 32 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 33 | +                "(3, 'Charlie', 1, 10000, 'Engineering');" +  | 
 | 34 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 35 | +                "(4, 'David', 2, 7500, 'Sales');" +  | 
 | 36 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 37 | +                "(5, 'Eva', 2, 7500, 'Sales');" +  | 
 | 38 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 39 | +                "(6, 'Frank', 3, 9000, 'Engineering');" +  | 
 | 40 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 41 | +                "(7, 'Grace', 3, 8500, 'Engineering');" +  | 
 | 42 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 43 | +                "(8, 'Hank', 4, 6000, 'Sales');" +  | 
 | 44 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 45 | +                "(9, 'Ivy', 6, 7000, 'Engineering');" +  | 
 | 46 | +                "insert into Employees (employee_id, employee_name, manager_id, salary, department) values " +  | 
 | 47 | +                "(10, 'Judy', 6, 7000, 'Engineering');"  | 
 | 48 | +            ),  | 
 | 49 | +    ],  | 
 | 50 | +)  | 
 | 51 | +internal class MysqlTest {  | 
 | 52 | +    @Test  | 
 | 53 | +    @Throws(SQLException::class, FileNotFoundException::class)  | 
 | 54 | +    fun testScript(@EmbeddedDatabase dataSource: DataSource) {  | 
 | 55 | +        dataSource.connection.use { connection ->  | 
 | 56 | +            connection.createStatement().use { statement ->  | 
 | 57 | +                statement.executeQuery(  | 
 | 58 | +                    BufferedReader(  | 
 | 59 | +                        FileReader(  | 
 | 60 | +                            (  | 
 | 61 | +                                "src/main/kotlin/g3401_3500/" +  | 
 | 62 | +                                    "s3482_analyze_organization_hierarchy/" +  | 
 | 63 | +                                    "script.sql"  | 
 | 64 | +                                ),  | 
 | 65 | +                        ),  | 
 | 66 | +                    )  | 
 | 67 | +                        .lines()  | 
 | 68 | +                        .collect(Collectors.joining("\n"))  | 
 | 69 | +                        .replace("#.*?\\r?\\n".toRegex(), ""),  | 
 | 70 | +                ).use { resultSet ->  | 
 | 71 | +                    checkRow(resultSet, arrayOf<String>("1", "Alice", "1", "9", "84500"))  | 
 | 72 | +                    checkRow(resultSet, arrayOf<String>("3", "Charlie", "2", "4", "41500"))  | 
 | 73 | +                    checkRow(resultSet, arrayOf<String>("2", "Bob", "2", "3", "31000"))  | 
 | 74 | +                    checkRow(resultSet, arrayOf<String>("6", "Frank", "3", "2", "23000"))  | 
 | 75 | +                    checkRow(resultSet, arrayOf<String>("4", "David", "3", "1", "13500"))  | 
 | 76 | +                    checkRow(resultSet, arrayOf<String>("7", "Grace", "3", "0", "8500"))  | 
 | 77 | +                    checkRow(resultSet, arrayOf<String>("5", "Eva", "3", "0", "7500"))  | 
 | 78 | +                    checkRow(resultSet, arrayOf<String>("9", "Ivy", "4", "0", "7000"))  | 
 | 79 | +                    checkRow(resultSet, arrayOf<String>("10", "Judy", "4", "0", "7000"))  | 
 | 80 | +                    checkRow(resultSet, arrayOf<String>("8", "Hank", "4", "0", "6000"))  | 
 | 81 | +                    assertThat<Boolean>(resultSet.next(), equalTo<Boolean>(false))  | 
 | 82 | +                }  | 
 | 83 | +            }  | 
 | 84 | +        }  | 
 | 85 | +    }  | 
 | 86 | + | 
 | 87 | +    @Throws(SQLException::class)  | 
 | 88 | +    private fun checkRow(resultSet: ResultSet, values: Array<String>) {  | 
 | 89 | +        assertThat<Boolean>(resultSet.next(), equalTo<Boolean>(true))  | 
 | 90 | +        assertThat<String>(resultSet.getNString(1), equalTo<String>(values[0]))  | 
 | 91 | +        assertThat<String>(resultSet.getNString(2), equalTo<String>(values[1]))  | 
 | 92 | +        assertThat<String>(resultSet.getNString(3), equalTo<String>(values[2]))  | 
 | 93 | +        assertThat<String>(resultSet.getNString(4), equalTo<String>(values[3]))  | 
 | 94 | +        assertThat<String>(resultSet.getNString(5), equalTo<String>(values[4]))  | 
 | 95 | +    }  | 
 | 96 | +}  | 
0 commit comments