Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
ControlCenter
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Note that this file is imported into SyncTests, too.
import Deferred
import Foundation
import Shared
@testable import Storage
import XCTest
extension BrowserDB {
func assertQueryReturns(_ query: String, int: Int) {
XCTAssertEqual(int, self.runQuery(query, args: nil, factory: IntFactory).value.successValue![0])
}
}
extension BrowserDB {
func moveLocalToMirrorForTesting() {
// This is a risky process -- it's not the same logic that the real synchronizer uses
// (because I haven't written it yet), so it might end up lying. We do what we can.
let valueSQL = [
"INSERT OR IGNORE INTO \(TableBookmarksMirror)",
"(guid, type, date_added, bmkUri, title, parentid, parentName, feedUri, siteUri, pos,",
" description, tags, keyword, folderName, queryId,",
" is_overridden, server_modified, faviconID)",
"SELECT guid, type, date_added, bmkUri, title, parentid, parentName,",
"feedUri, siteUri, pos, description, tags, keyword, folderName, queryId,",
"0 AS is_overridden, \(Date.now()) AS server_modified, faviconID",
"FROM \(TableBookmarksLocal)",
].joined(separator: " ")
// Copy its mirror structure.
let structureSQL = "INSERT INTO \(TableBookmarksMirrorStructure) SELECT * FROM \(TableBookmarksLocalStructure)"
// Throw away the old.
let deleteLocalStructureSQL = "DELETE FROM \(TableBookmarksLocalStructure)"
let deleteLocalSQL = "DELETE FROM \(TableBookmarksLocal)"
self.run([
valueSQL,
structureSQL,
deleteLocalStructureSQL,
deleteLocalSQL,
]).succeeded()
}
func moveBufferToMirrorForTesting() {
let valueSQL = [
"INSERT OR IGNORE INTO \(TableBookmarksMirror)",
"(guid, type, date_added, bmkUri, title, parentid, parentName, feedUri, siteUri, pos,",
"description, tags, keyword, folderName, queryId, server_modified)",
"SELECT",
"guid, type, date_added, bmkUri, title, parentid, parentName, feedUri, siteUri, pos,",
"description, tags, keyword, folderName, queryId, server_modified",
"FROM \(TableBookmarksBuffer)",
].joined(separator: " ")
let structureSQL = "INSERT INTO \(TableBookmarksMirrorStructure) SELECT * FROM \(TableBookmarksBufferStructure)"
let deleteBufferStructureSQL = "DELETE FROM \(TableBookmarksBufferStructure)"
let deleteBufferSQL = "DELETE FROM \(TableBookmarksBuffer)"
self.run([
valueSQL,
structureSQL,
deleteBufferStructureSQL,
deleteBufferSQL,
]).succeeded()
}
}
extension BrowserDB {
func getGUIDs(_ sql: String) -> [GUID] {
func guidFactory(_ row: SDRow) -> GUID {
return row[0] as! GUID
}
guard let cursor = self.runQuery(sql, args: nil, factory: guidFactory).value.successValue else {
XCTFail("Unable to get cursor.")
return []
}
return cursor.asArray()
}
func getPositionsForChildrenOfParent(_ parent: GUID, fromTable table: String) -> [GUID: Int] {
let args: Args = [parent]
let factory: (SDRow) -> (GUID, Int) = {
return ($0["child"] as! GUID, $0["idx"] as! Int)
}
let cursor = self.runQuery("SELECT child, idx FROM \(table) WHERE parent = ?", args: args, factory: factory).value.successValue!
return cursor.reduce([:], { (dict, pair) in
var dict = dict
if let (k, v) = pair {
dict[k] = v
}
return dict
})
}
func isLocallyDeleted(_ guid: GUID) -> Bool? {
let args: Args = [guid]
let cursor = self.runQuery("SELECT is_deleted FROM \(TableBookmarksLocal) WHERE guid = ?", args: args, factory: { $0.getBoolean("is_deleted") }).value.successValue!
return cursor[0]
}
func isOverridden(_ guid: GUID) -> Bool? {
let args: Args = [guid]
let cursor = self.runQuery("SELECT is_overridden FROM \(TableBookmarksMirror) WHERE guid = ?", args: args, factory: { $0.getBoolean("is_overridden") }).value.successValue!
return cursor[0]
}
func getSyncStatusForGUID(_ guid: GUID) -> SyncStatus? {
let args: Args = [guid]
let cursor = self.runQuery("SELECT sync_status FROM \(TableBookmarksLocal) WHERE guid = ?", args: args, factory: { $0[0] as! Int }).value.successValue!
if let raw = cursor[0] {
return SyncStatus(rawValue: raw)
}
return nil
}
func getRecordByURL(_ url: String, fromTable table: String) -> BookmarkMirrorItem {
let args: Args = [url]
return self.runQuery("SELECT * FROM \(table) WHERE bmkUri = ?", args: args, factory: BookmarkFactory.mirrorItemFactory).value.successValue![0]!
}
func getRecordByGUID(_ guid: GUID, fromTable table: String) -> BookmarkMirrorItem {
let args: Args = [guid]
return self.runQuery("SELECT * FROM \(table) WHERE guid = ?", args: args, factory: BookmarkFactory.mirrorItemFactory).value.successValue![0]!
}
func getChildrenOfFolder(_ folder: GUID) -> [GUID] {
let args: Args = [folder]
let sql =
"SELECT child FROM \(ViewBookmarksLocalStructureOnMirror) " +
"WHERE parent = ? " +
"ORDER BY idx ASC"
return self.runQuery(sql, args: args, factory: { $0[0] as! GUID }).value.successValue!.asArray()
}
}