new tests
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
import XCTest
|
||||
@testable import DBSyn
|
||||
|
||||
final class DBSynTests: XCTestCase {
|
||||
func testSQLSplitsMultipleStatements() {
|
||||
XCTAssertEqual(SQLStatementSplitter.split("USE AAMEDIUK; SELECT * FROM ADCUSERS;"),
|
||||
["USE AAMEDIUK", "SELECT * FROM ADCUSERS"])
|
||||
}
|
||||
|
||||
func testSQLSplitterPreservesQuotedSemicolons() {
|
||||
XCTAssertEqual(SQLStatementSplitter.split("SELECT 'a;b'; SELECT `a;b` FROM t;"),
|
||||
["SELECT 'a;b'", "SELECT `a;b` FROM t"])
|
||||
}
|
||||
|
||||
func testSQLSplitterIgnoresComments() {
|
||||
XCTAssertEqual(SQLStatementSplitter.split("# comment;\nUSE db; /* comment; */ SELECT 1;"),
|
||||
["USE db", "SELECT 1"])
|
||||
}
|
||||
|
||||
func testSQLSplitterIgnoresEmptyStatements() {
|
||||
XCTAssertEqual(SQLStatementSplitter.split(";; SELECT 1;;;"), ["SELECT 1"])
|
||||
}
|
||||
|
||||
func testUSEDatabaseUnquoted() {
|
||||
XCTAssertEqual(SQLStatementSplitter.usedDatabase("USE AAMEDIUK"), "AAMEDIUK")
|
||||
}
|
||||
|
||||
func testUSEDatabaseQuoted() {
|
||||
XCTAssertEqual(SQLStatementSplitter.usedDatabase("USE `my``db`"), "my`db")
|
||||
}
|
||||
|
||||
func testUSEDatabaseRejectsOtherStatements() {
|
||||
XCTAssertNil(SQLStatementSplitter.usedDatabase("SELECT * FROM ADCUSERS"))
|
||||
}
|
||||
|
||||
func testSQLFormatterUppercasesKeywords() {
|
||||
XCTAssertEqual(SQLFormatter.uppercaseKeywords("select * from ADCUSERS where id = 1"),
|
||||
"SELECT * FROM ADCUSERS WHERE id = 1")
|
||||
}
|
||||
|
||||
func testSQLFormatterPreservesStringLiteralsAndComments() {
|
||||
let input = "select 'select from' # select stays lower\nfrom users"
|
||||
XCTAssertEqual(SQLFormatter.uppercaseKeywords(input),
|
||||
"SELECT 'select from' # select stays lower\nFROM users")
|
||||
}
|
||||
|
||||
func testConnectionProfileCodableRoundTrip() throws {
|
||||
var profile = ConnectionProfile()
|
||||
profile.name = "Development"
|
||||
profile.database = "AAMEDIUK"
|
||||
let decoded = try JSONDecoder().decode(ConnectionProfile.self, from: JSONEncoder().encode(profile))
|
||||
XCTAssertEqual(decoded, profile)
|
||||
}
|
||||
|
||||
func testIntrospectionCacheCodableRoundTrip() throws {
|
||||
let connectionID = UUID()
|
||||
let column = DatabaseModel.IntrospectedColumn(table: "ADCUSERS", name: "id", dataType: "bigint", nullable: false, key: "PRI", defaultValue: nil, extra: "auto_increment")
|
||||
let snapshot = DatabaseModel.SchemaIntrospection(connectionID: connectionID, database: "AAMEDIUK", loadedAt: Date(timeIntervalSince1970: 1000), tables: ["ADCUSERS"], views: ["ACTIVE_USERS"], columnsByTable: ["ADCUSERS": [column]])
|
||||
let decoded = try JSONDecoder().decode(DatabaseModel.SchemaIntrospection.self, from: JSONEncoder().encode(snapshot))
|
||||
XCTAssertEqual(decoded.connectionID, connectionID)
|
||||
XCTAssertEqual(decoded.database, "AAMEDIUK")
|
||||
XCTAssertEqual(decoded.tables, ["ADCUSERS"])
|
||||
XCTAssertEqual(decoded.views, ["ACTIVE_USERS"])
|
||||
XCTAssertEqual(decoded.columnsByTable["ADCUSERS"]?.first?.name, "id")
|
||||
}
|
||||
|
||||
func testDiagramSelectNone() {
|
||||
XCTAssertEqual(DiagramLogic.selectedObjects([], available: ["A", "B"]), [])
|
||||
}
|
||||
|
||||
func testDiagramSelectSubsetAndIgnoreRemovedObjects() {
|
||||
XCTAssertEqual(DiagramLogic.selectedObjects(["A", "MISSING"], available: ["A", "B"]), ["A"])
|
||||
}
|
||||
|
||||
func testDiagramSelectAll() {
|
||||
let available = ["A", "B", "VIEW_C"]
|
||||
XCTAssertEqual(DiagramLogic.selectedObjects(Set(available), available: available), Set(available))
|
||||
}
|
||||
|
||||
func testDiagramLayoutContainsEverySelectedTable() {
|
||||
let names = (0..<25).map { "table_\($0)" }
|
||||
let positions = DiagramLogic.arrangedPositions(names)
|
||||
XCTAssertEqual(positions.count, names.count)
|
||||
XCTAssertEqual(positions["table_0"], CGPoint(x: 30, y: 30))
|
||||
XCTAssertEqual(Set(positions.values.map { "\($0.x),\($0.y)" }).count, names.count)
|
||||
}
|
||||
|
||||
func testDiagramDragRespectsZoom() {
|
||||
let origin = CGPoint(x: 100, y: 200)
|
||||
XCTAssertEqual(DiagramLogic.translatedPosition(origin, translation: CGSize(width: 60, height: -40), zoom: 2),
|
||||
CGPoint(x: 130, y: 180))
|
||||
}
|
||||
|
||||
func testDiagramDragHandlesZeroZoom() {
|
||||
let point = DiagramLogic.translatedPosition(.zero, translation: CGSize(width: 10, height: 5), zoom: 0)
|
||||
XCTAssertTrue(point.x.isFinite && point.y.isFinite)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user