mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 08:18:41 +09:00
Dactyloidae iOS initial commit
This commit is contained in:
parent
daa6179d22
commit
7154a0497e
2123 changed files with 197052 additions and 0 deletions
115
mobile/ios/StorageTests/TestSQLiteMetadata.swift
Normal file
115
mobile/ios/StorageTests/TestSQLiteMetadata.swift
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
/* 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/. */
|
||||
|
||||
import Foundation
|
||||
import Shared
|
||||
@testable import Storage
|
||||
import Deferred
|
||||
|
||||
import XCTest
|
||||
|
||||
class TestSQLiteMetadata: XCTestCase {
|
||||
let files = MockFiles()
|
||||
var db: BrowserDB!
|
||||
var metadata: SQLiteMetadata!
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
self.db = BrowserDB(filename: "foo.db", schema: BrowserSchema(), files: self.files)
|
||||
self.metadata = SQLiteMetadata(db: db)
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
|
||||
removeAllMetadata(self.db).succeeded()
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
func testInsertMetadata() {
|
||||
let site = "http://test.com"
|
||||
|
||||
let page = PageMetadata(id: nil, siteURL: site, mediaURL: "http://image.com",
|
||||
title: "Test", description: "Test Description", type: nil, providerName: nil, mediaDataURI: nil, cacheImages: false)
|
||||
self.metadata.storeMetadata(page, forPageURL: site.asURL!, expireAt: Date.now() + 3000).succeeded()
|
||||
let results = metadataFromDB(self.db).value.successValue!
|
||||
XCTAssertEqual(results.count, 1)
|
||||
let metadata = results[0]!
|
||||
XCTAssertEqual(metadata.siteURL, site)
|
||||
}
|
||||
|
||||
func testDuplicateCacheKeyInsert() {
|
||||
let siteA = "http://test.com/site/A"
|
||||
let siteB = "http://test.com/site/B"
|
||||
|
||||
let metadataA1 = PageMetadata(id: nil, siteURL: siteA, mediaURL: nil,
|
||||
title: "First Visit", description: "", type: nil, providerName: nil, mediaDataURI: nil, cacheImages: false)
|
||||
let metadataB = PageMetadata(id: nil, siteURL: siteB, mediaURL: "http://image.com",
|
||||
title: "Test", description: "Test Description", type: nil, providerName: nil, mediaDataURI: nil, cacheImages: false)
|
||||
let metadataA2 = PageMetadata(id: nil, siteURL: siteA, mediaURL: "http://image.com",
|
||||
title: "Second Visit", description: "A new description", type: nil, providerName: nil, mediaDataURI: nil, cacheImages: false)
|
||||
|
||||
self.metadata.storeMetadata(metadataA1, forPageURL: siteA.asURL!, expireAt: Date.now() + 3000).succeeded()
|
||||
|
||||
let initialResults = metadataFromDB(self.db).value.successValue!
|
||||
XCTAssertEqual(initialResults.count, 1)
|
||||
|
||||
let initialA = initialResults[0]!
|
||||
XCTAssertEqual(initialA.siteURL, siteA)
|
||||
XCTAssertEqual(initialA.title, "First Visit")
|
||||
XCTAssertEqual(initialA.description, "")
|
||||
XCTAssertNil(initialA.mediaURL)
|
||||
|
||||
self.metadata.storeMetadata(metadataB, forPageURL: siteB.asURL!, expireAt: Date.now() + 3000).succeeded()
|
||||
self.metadata.storeMetadata(metadataA2, forPageURL: siteA.asURL!, expireAt: Date.now() + 3000).succeeded()
|
||||
|
||||
let results = metadataFromDB(self.db).value.successValue!
|
||||
|
||||
// Should only have 2 since we upsert
|
||||
XCTAssertEqual(results.count, 2)
|
||||
|
||||
let resultA = results[1]!
|
||||
let resultB = results[0]!
|
||||
|
||||
XCTAssertEqual(resultA.siteURL, siteA)
|
||||
XCTAssertEqual(resultB.siteURL, siteB)
|
||||
|
||||
XCTAssertEqual(resultA.title, "Second Visit")
|
||||
XCTAssertEqual(resultA.description, "A new description")
|
||||
XCTAssertEqual(resultA.mediaURL!, "http://image.com")
|
||||
}
|
||||
|
||||
func testExpirationPurging() {
|
||||
let baseTime = Date.now()
|
||||
let siteA = "http://test.com/site/A"
|
||||
let metadataA = PageMetadata(id: nil, siteURL: siteA, mediaURL: nil,
|
||||
title: "Test", description: "Test Description", type: nil, providerName: nil, mediaDataURI: nil, cacheImages: false)
|
||||
// Set expiration to base
|
||||
self.metadata.storeMetadata(metadataA, forPageURL: siteA.asURL!, expireAt: baseTime - 1000).succeeded()
|
||||
self.metadata.deleteExpiredMetadata().succeeded()
|
||||
|
||||
let results = metadataFromDB(self.db).value.successValue!
|
||||
XCTAssertEqual(results.count, 0)
|
||||
}
|
||||
}
|
||||
|
||||
private func metadataFromDB(_ db: BrowserDB) -> Deferred<Maybe<Cursor<PageMetadata>>> {
|
||||
let sql = "SELECT * FROM \(TablePageMetadata)"
|
||||
return db.runQuery(sql, args: nil, factory: pageMetadataFactory)
|
||||
}
|
||||
|
||||
private func removeAllMetadata(_ db: BrowserDB) -> Success {
|
||||
return db.run("DELETE FROM \(TablePageMetadata)")
|
||||
}
|
||||
|
||||
private func pageMetadataFactory(_ row: SDRow) -> PageMetadata {
|
||||
let id = row["id"] as! Int
|
||||
let siteURL = row["site_url"] as! String
|
||||
let mediaURL = row["media_url"] as? String
|
||||
let title = row["title"] as? String
|
||||
let description = row["description"] as? String
|
||||
let type = row["type"] as? String
|
||||
let providerName = row["provider_name"] as? String
|
||||
return PageMetadata(id: id, siteURL: siteURL, mediaURL: mediaURL, title: title,
|
||||
description: description, type: type, providerName: providerName, mediaDataURI: nil, cacheImages: false)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue