| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //
- // CoreDataMigrationTests.swift
- // LoopKitHostedTests
- //
- // Created by Rick Pasetto on 8/9/21.
- // Copyright © 2021 LoopKit Authors. All rights reserved.
- //
- import CoreData
- import HealthKit
- import XCTest
- @testable import LoopKit
- class CoreDataV1MigrationTests: XCTestCase {
-
- var cacheStore: PersistenceController!
- let fileManager = FileManager()
- static let bundleURL = Bundle(for: CoreDataV1MigrationTests.self).bundleURL
- override func setUpWithError() throws {
- try? fileManager.removeItem(at: Self.bundleURL.appendingPathComponent("Model.sqlite"))
- try fileManager.copyItem(at: Self.bundleURL.appendingPathComponent("Model.sqlite.v1.original"),
- to: Self.bundleURL.appendingPathComponent("Model.sqlite"))
- }
- override func tearDownWithError() throws {
-
- // remove all stores
- try cacheStore.managedObjectContext.persistentStoreCoordinator?.persistentStores.forEach { store in
- try cacheStore.managedObjectContext.persistentStoreCoordinator?.remove(store)
- }
-
- try fileManager.removeItem(at: Self.bundleURL.appendingPathComponent("Model.sqlite"))
- cacheStore = nil
- }
- func testV1Migration() throws {
- let e = expectation(description: "\(#function): init")
- cacheStore = PersistenceController.init(directoryURL: Self.bundleURL)
- var error: Error?
- cacheStore.onReady {
- if let err = $0 {
- error = err
- XCTFail("Error opening \(Self.bundleURL): \(err)")
- }
- e.fulfill()
- }
- wait(for: [e], timeout: 10.0)
- if let error = error { throw error }
- var entries: [CachedCarbObject]!
- let e0 = expectation(description: "\(#function): fetch")
- cacheStore.managedObjectContext.performAndWait {
- do {
- entries = try cacheStore.managedObjectContext.fetch(CachedCarbObject.fetchRequest())
- } catch let err {
- error = err
- }
- e0.fulfill()
- }
- wait(for: [e0], timeout: 1.0)
- if let error = error { throw error }
- XCTAssertEqual(1, entries.count)
-
- // Do some spot checks.
- XCTAssertTrue(entityHasAttribute(entityName: "CachedGlucoseObject", attributeName: "device"))
- XCTAssertTrue(entityHasAttribute(entityName: "CachedGlucoseObject", attributeName: "trend"))
- }
-
- func entityHasAttribute(entityName: String, attributeName: String) -> Bool {
- XCTAssertNotNil(cacheStore.managedObjectContext.persistentStoreCoordinator?.managedObjectModel.entities)
- if let entities = cacheStore.managedObjectContext.persistentStoreCoordinator?.managedObjectModel.entities {
- for entity in entities {
- if entity.name == entityName, entity.attributesByName.contains(where: { (key: String, value: NSAttributeDescription) in
- key == attributeName
- }) {
- return true
- }
- }
- }
- return false
- }
- }
|