Skip to content

Instantly share code, notes, and snippets.

View Arrlindii's full-sized avatar

Arlind Aliu Arrlindii

View GitHub Profile
func retrivePassword(for account: String) -> String? {
let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: account,
kSecMatchLimit as String: kSecMatchLimitOne,
kSecReturnData as String: kCFBooleanTrue]
var retrivedData: AnyObject? = nil
let _ = SecItemCopyMatching(query as CFDictionary, &retrivedData)
func testPaswordRetrive() {
let password = "123456"
let account = "User"
keyChainService.save(password, for: account)
XCTAssertEqual(keyChainService.retrivePassword(for: account), password)
}
authManager.login(key, user)
func saveEncryptedPassword(_ password: String, for account: String) {
let salt = Array("salty".utf8)
let key = try! HKDF(password: Array(password.utf8), salt: salt, variant: .sha256).calculate().toHexString()
keychainService.save(key, for: account)
}
protocol CoreDataStack {
var persistentContainer: NSPersistentContainer! {get}
var managedObjectContext: NSManagedObjectContext! {get}
func saveContext()
}
class MainCoreDataStack: CoreDataStack {
var persistentContainer: NSPersistentContainer!
var managedObjectContext: NSManagedObjectContext!
init() {
persistentContainer = NSPersistentContainer(name: "MediumMockingProject")
persistentContainer.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
class MockCoreDataStack: CoreDataStack {
var managedObjectContext: NSManagedObjectContext!
var persistentContainer: NSPersistentContainer!
init() {
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!
persistentContainer = NSPersistentContainer(name: "TestingContainer", managedObjectModel: managedObjectModel)
let description = NSPersistentStoreDescription()
description.type = NSInMemoryStoreType
persistentContainer.persistentStoreDescriptions = [description]
class DatabaseService {
var persistentContainer: NSPersistentContainer!
var managedObjectContext: NSManagedObjectContext!
init(stack: CoreDataStack = MainCoreDataStack()) {
persistentContainer = stack.persistentContainer
managedObjectContext = stack.managedObjectContext
}
func insertProject(id: String, name: String) -> Project {
var databaseService: DatabaseService!
override func setUp() {
super.setUp()
databaseService = DatabaseService(stack: MockCoreDataStack())
}
func testProjecInsert() {
let allItems = databaseService.getAllProjects()
XCTAssertEqual(allItems.count, 0)
XCTAssertNotNil(databaseService.insertProject(id: "A123", name: "First Project"))
XCTAssertNotNil(databaseService.insertProject(id: "A123", name: "Second Project"))
let itemsAfterInserts = databaseService.getAllProjects()
XCTAssertEqual(itemsAfterInserts.count, 2)
}