Skip to content

Commit 0438f95

Browse files
committed
refactor(ios): handle every writePermission case in grid save and insert gates
1 parent 122c3b0 commit 0438f95

3 files changed

Lines changed: 29 additions & 7 deletions

File tree

TableProMobile/TableProMobile/ViewModels/RowDetailViewModel.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,13 +188,16 @@ final class RowDetailViewModel {
188188
primaryKeys: pkValues
189189
)
190190

191-
if safeModeLevel.writePermission == .requiresConfirmation {
191+
switch safeModeLevel.writePermission {
192+
case .blocked:
193+
return false
194+
case .requiresConfirmation:
192195
pendingSaveSQL = sql
193196
pendingWriteConfirmation = true
194197
return false
198+
case .proceed:
199+
return await execute(sql: sql, session: session)
195200
}
196-
197-
return await execute(sql: sql, session: session)
198201
}
199202

200203
func executePendingSave() async -> Bool {

TableProMobile/TableProMobile/Views/InsertRowView.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,15 @@ struct InsertRowView: View {
187187

188188
let sql = buildInsertSQL()
189189

190-
if safeModeLevel.writePermission == .requiresConfirmation {
190+
switch safeModeLevel.writePermission {
191+
case .blocked:
192+
return
193+
case .requiresConfirmation:
191194
pendingInsertSQL = sql
192195
showInsertConfirmation = true
193-
return
196+
case .proceed:
197+
await executeInsert(sql: sql, session: session)
194198
}
195-
196-
await executeInsert(sql: sql, session: session)
197199
}
198200

199201
private func executePendingInsert() async {

TableProMobile/TableProMobileTests/RowDetailViewModelTests.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,23 @@ struct RowDetailViewModelTests {
164164
#expect(driver.executedQueries[0].uppercased().hasPrefix("UPDATE"))
165165
}
166166

167+
@Test("saveChanges under readOnly never executes")
168+
func saveReadOnlyBlocks() async {
169+
let driver = MockDatabaseDriver()
170+
let vm = RowDetailViewModel(
171+
columns: makeColumns(), rows: makeRows(), initialIndex: 0,
172+
table: TableInfo(name: "users"), session: makeSession(driver: driver),
173+
columnDetails: makeColumns(), safeModeLevel: .readOnly
174+
)
175+
vm.startEditing()
176+
vm.setEditedValue("Charlie", at: 1)
177+
178+
let success = await vm.saveChanges()
179+
#expect(success == false)
180+
#expect(vm.pendingWriteConfirmation == false)
181+
#expect(driver.executedQueries.isEmpty)
182+
}
183+
167184
@Test("saveChanges fails when no primary key value present")
168185
func saveWithoutPrimaryKey() async {
169186
let driver = MockDatabaseDriver()

0 commit comments

Comments
 (0)