Skip to content

Commit c5eba47

Browse files
committed
Test that read-only transactions are not notified
1 parent fb18a39 commit c5eba47

File tree

1 file changed

+86
-1
lines changed

1 file changed

+86
-1
lines changed

Tests/GRDBTests/TransactionObserverTests.swift

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import XCTest
2-
import GRDB
2+
@testable import GRDB
33

44
private class Observer : TransactionObserver {
55
var lastCommittedEvents: [DatabaseEvent] = []
@@ -1784,4 +1784,89 @@ class TransactionObserverTests: GRDBTestCase {
17841784
}
17851785
}
17861786
}
1787+
1788+
// MARK: - Read-Only Connection
1789+
1790+
func testReadOnlyConnection() throws {
1791+
let dbQueue = try makeDatabaseQueue(filename: "database.sqlite")
1792+
try setupArtistDatabase(in: dbQueue)
1793+
1794+
dbConfiguration.readonly = true
1795+
let readOnlyQueue = try makeDatabaseQueue(filename: "database.sqlite")
1796+
1797+
let observer = Observer()
1798+
readOnlyQueue.add(transactionObserver: observer, extent: .databaseLifetime)
1799+
1800+
try readOnlyQueue.inDatabase { db in
1801+
do {
1802+
try db.execute(sql: """
1803+
BEGIN;
1804+
COMMIT;
1805+
""")
1806+
XCTAssertEqual(observer.didChangeCount, 0)
1807+
XCTAssertEqual(observer.willCommitCount, 0)
1808+
XCTAssertEqual(observer.didCommitCount, 0)
1809+
XCTAssertEqual(observer.didRollbackCount, 0)
1810+
#if SQLITE_ENABLE_PREUPDATE_HOOK
1811+
XCTAssertEqual(observer.willChangeCount, 0)
1812+
#endif
1813+
}
1814+
1815+
do {
1816+
try db.execute(sql: """
1817+
BEGIN;
1818+
SELECT * FROM artists;
1819+
COMMIT;
1820+
""")
1821+
XCTAssertEqual(observer.didChangeCount, 0)
1822+
XCTAssertEqual(observer.willCommitCount, 0)
1823+
XCTAssertEqual(observer.didCommitCount, 0)
1824+
XCTAssertEqual(observer.didRollbackCount, 0)
1825+
#if SQLITE_ENABLE_PREUPDATE_HOOK
1826+
XCTAssertEqual(observer.willChangeCount, 0)
1827+
#endif
1828+
}
1829+
}
1830+
}
1831+
1832+
func testReadOnlyBlock() throws {
1833+
let dbQueue = try makeDatabaseQueue()
1834+
try setupArtistDatabase(in: dbQueue)
1835+
1836+
let observer = Observer()
1837+
dbQueue.add(transactionObserver: observer, extent: .databaseLifetime)
1838+
1839+
try dbQueue.inDatabase { db in
1840+
try db.readOnly {
1841+
do {
1842+
try db.execute(sql: """
1843+
BEGIN;
1844+
COMMIT;
1845+
""")
1846+
XCTAssertEqual(observer.didChangeCount, 0)
1847+
XCTAssertEqual(observer.willCommitCount, 0)
1848+
XCTAssertEqual(observer.didCommitCount, 0)
1849+
XCTAssertEqual(observer.didRollbackCount, 0)
1850+
#if SQLITE_ENABLE_PREUPDATE_HOOK
1851+
XCTAssertEqual(observer.willChangeCount, 0)
1852+
#endif
1853+
}
1854+
1855+
do {
1856+
try db.execute(sql: """
1857+
BEGIN;
1858+
SELECT * FROM artists;
1859+
COMMIT;
1860+
""")
1861+
XCTAssertEqual(observer.didChangeCount, 0)
1862+
XCTAssertEqual(observer.willCommitCount, 0)
1863+
XCTAssertEqual(observer.didCommitCount, 0)
1864+
XCTAssertEqual(observer.didRollbackCount, 0)
1865+
#if SQLITE_ENABLE_PREUPDATE_HOOK
1866+
XCTAssertEqual(observer.willChangeCount, 0)
1867+
#endif
1868+
}
1869+
}
1870+
}
1871+
}
17871872
}

0 commit comments

Comments
 (0)