Skip to content

Commit

Permalink
Merge pull request #54 from AKORA-Studios/test-unittst-coredata
Browse files Browse the repository at this point in the history
Test unittst coredata
  • Loading branch information
DragonCat4012 authored Sep 10, 2023
2 parents ca05960 + 2c2014f commit 2a1b677
Show file tree
Hide file tree
Showing 8 changed files with 273 additions and 109 deletions.
12 changes: 12 additions & 0 deletions Calq.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
F1B292DF2A3BC1DF00AF2ACD /* MockDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B292DE2A3BC1DF00AF2ACD /* MockDataProvider.swift */; };
F1B386472A1CFE6800F0C5AC /* CalqTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B386462A1CFE6800F0C5AC /* CalqTests.swift */; };
F1B52D172A323BCB0082DEBE /* MockCoreDataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B52D162A323BCB0082DEBE /* MockCoreDataStack.swift */; };
F1BC83E92AA78F17000D7CD2 /* JSONTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1BC83E82AA78F17000D7CD2 /* JSONTests.swift */; };
F1BE91C22A41DF2A00E85494 /* SubjectListVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1BE91C12A41DF2A00E85494 /* SubjectListVM.swift */; };
F1C04B5229BA376800DAC128 /* MediumBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1C04B5129BA376800DAC128 /* MediumBarChart.swift */; };
F1C04B5429BA3E2D00DAC128 /* SmallCircleChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1C04B5329BA3E2D00DAC128 /* SmallCircleChart.swift */; };
Expand All @@ -97,6 +98,8 @@
F1D29E7D2A17BCCB0001D469 /* LoadJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D29E7A2A17B8D90001D469 /* LoadJSON.swift */; };
F1D29E7E2A17BCCF0001D469 /* JSONUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD81F6822759091600B4A43B /* JSONUtil.swift */; };
F1D3433D29C37024002ED7DE /* SettingsVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D3433C29C37024002ED7DE /* SettingsVM.swift */; };
F1DD87EE2AA795910095C057 /* LineChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1DD87ED2AA795910095C057 /* LineChartTests.swift */; };
F1DD87F02AA799700095C057 /* BarChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1DD87EF2AA799700095C057 /* BarChartTests.swift */; };
F1E8BFE329900C5500486A6D /* CircleChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1E8BFE229900C5500486A6D /* CircleChart.swift */; };
F1F568C8298DA72100227F88 /* ImpactSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F568C7298DA72100227F88 /* ImpactSegment.swift */; };
/* End PBXBuildFile section */
Expand Down Expand Up @@ -211,12 +214,15 @@
F1B386442A1CFE6800F0C5AC /* CalqTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CalqTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
F1B386462A1CFE6800F0C5AC /* CalqTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalqTests.swift; sourceTree = "<group>"; };
F1B52D162A323BCB0082DEBE /* MockCoreDataStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCoreDataStack.swift; sourceTree = "<group>"; };
F1BC83E82AA78F17000D7CD2 /* JSONTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONTests.swift; sourceTree = "<group>"; };
F1BE91C12A41DF2A00E85494 /* SubjectListVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubjectListVM.swift; sourceTree = "<group>"; };
F1C04B5129BA376800DAC128 /* MediumBarChart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediumBarChart.swift; sourceTree = "<group>"; };
F1C04B5329BA3E2D00DAC128 /* SmallCircleChart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallCircleChart.swift; sourceTree = "<group>"; };
F1D29E782A17B8AF0001D469 /* ExportJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportJSON.swift; sourceTree = "<group>"; };
F1D29E7A2A17B8D90001D469 /* LoadJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadJSON.swift; sourceTree = "<group>"; };
F1D3433C29C37024002ED7DE /* SettingsVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsVM.swift; sourceTree = "<group>"; };
F1DD87ED2AA795910095C057 /* LineChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChartTests.swift; sourceTree = "<group>"; };
F1DD87EF2AA799700095C057 /* BarChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BarChartTests.swift; sourceTree = "<group>"; };
F1E8BFE229900C5500486A6D /* CircleChart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleChart.swift; sourceTree = "<group>"; };
F1F568C7298DA72100227F88 /* ImpactSegment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImpactSegment.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
Expand Down Expand Up @@ -437,6 +443,9 @@
F1B292DE2A3BC1DF00AF2ACD /* MockDataProvider.swift */,
F1A710322A437F8300255F10 /* exampleData_v1.json */,
F1A710342A4384D600255F10 /* exampleData_v0.json */,
F1BC83E82AA78F17000D7CD2 /* JSONTests.swift */,
F1DD87ED2AA795910095C057 /* LineChartTests.swift */,
F1DD87EF2AA799700095C057 /* BarChartTests.swift */,
);
path = CalqTests;
sourceTree = "<group>";
Expand Down Expand Up @@ -732,8 +741,11 @@
buildActionMask = 2147483647;
files = (
F1B52D172A323BCB0082DEBE /* MockCoreDataStack.swift in Sources */,
F1DD87EE2AA795910095C057 /* LineChartTests.swift in Sources */,
F1B292DF2A3BC1DF00AF2ACD /* MockDataProvider.swift in Sources */,
F1B386472A1CFE6800F0C5AC /* CalqTests.swift in Sources */,
F1DD87F02AA799700095C057 /* BarChartTests.swift in Sources */,
F1BC83E92AA78F17000D7CD2 /* JSONTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
3 changes: 2 additions & 1 deletion Calq.xcodeproj/xcshareddata/xcschemes/Calq.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES">
<Testables>
<TestableReference
skipped = "NO">
Expand Down
58 changes: 0 additions & 58 deletions Calq/lib/Util.swift
Original file line number Diff line number Diff line change
Expand Up @@ -281,29 +281,6 @@ struct Util {
return arr1+arr2
}

/// Returns one Subject
static func getSubject(_ subject: UserSubject) -> UserSubject? {
let all = self.getAllSubjects()
let filtered = all.filter {$0.objectID == subject.objectID}
if filtered.count < 1 { return nil }
return filtered[0]
}

/// Returns one Subject after ID
static func getSubject(_ id: NSManagedObjectID) -> UserSubject? {
let all = self.getAllSubjects()
let filtered = all.filter {$0.objectID == id}
if filtered.count < 1 { return nil }
return filtered[0]
}

/// Returns all Subjectnames
static func getAllSubjectNames() -> [String] {
var subjects = Util.getAllSubjects()
subjects = subjects.sorted(by: {$0.name < $1.name })
return subjects.map { $0.name }
}

static func deleteSubject(_ subject: UserSubject) {
context.delete(subject)
}
Expand Down Expand Up @@ -355,41 +332,6 @@ struct Util {
return arr.joined(separator: " ")
}

// MARK: Dates
/// Returns the last date when a grade was added
static func calcMaxDate() -> Date {
let allSubjects = self.getAllSubjects().filter { $0.subjecttests?.count != 0 }
if allSubjects.count == 0 { return Date() }

let allDates = allSubjects.map {
($0.subjecttests?.allObjects as? [UserTest] ?? [])}
.map {
$0.map {
$0.date.timeIntervalSince1970
}.sorted(by: {$0 > $1})[0]
}
if allDates.count == 0 { return Date(timeIntervalSince1970: 0.0) }

return Date(timeIntervalSince1970: allDates.sorted(by: {$0 > $1})[0])
}

/// Returns the first date when a grade was added
static func calcMinDate() -> Date {
let allSubjects = self.getAllSubjects().filter { $0.subjecttests?.count != 0 }
if allSubjects.count == 0 { return Date() }

let allDates = allSubjects.map {
($0.subjecttests?.allObjects as? [UserTest] ?? [])}
.map {
$0.map {
$0.date.timeIntervalSince1970
}.sorted(by: {$0 < $1})[0]
}
if allDates.count == 0 { return Date(timeIntervalSince1970: 0.0) }

return Date(timeIntervalSince1970: allDates.sorted(by: {$0 < $1})[0])
}

// MARK: Tests
static func filterTests(_ sub: UserSubject, checkinactive: Bool = true) -> [UserTest] {
if sub.subjecttests == nil { return [] }
Expand Down
20 changes: 20 additions & 0 deletions CalqTests/BarChartTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// BarChartTests.swift
// CalqTests
//
// Created by Kiara on 05.09.23.
//

import XCTest
@testable import Calq

final class BarChartTests: XCTestCase {

func testCreateSubjectBarData() {
// TODO:
}

func testCreateHalfYearBarChartData() {
// TODO:
}
}
196 changes: 146 additions & 50 deletions CalqTests/CalqTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,37 @@ final class CalqTests: XCTestCase {
return Util.getAllSubjects().first(where: {$0.name == "Kunst"})!
}

func testCheckString() {
func testCheckString_InvalidInput() {
let strChecked = Util.isStringInputInvalid("33 $%&&/%/%/%(!@-*1")

XCTAssertEqual(strChecked, true)
XCTAssertEqual( Util.isStringInputInvalid(""), true)
}

func testCheckString_ValidInput() {
let strChecked = Util.isStringInputInvalid("abc")
XCTAssertEqual(strChecked, false)
}

func testCheckString_EmptyString() {
XCTAssertEqual(Util.isStringInputInvalid(""), true)
}

func testAverage() {
let average = Util.average([1, 2, 3])
let values: [Int] = [1, 2, 3]
let average = Util.average(values)
XCTAssertEqual(average, 2.0)
}

func testAverage_EmptyArr() {
let values: [Int] = []
let average = Util.average(values)
XCTAssertEqual(average, 0.0)
}

func testAverage_WithoutTests() {
let average = Util.testAverage([])
XCTAssertEqual(average, 0)
}

func testGradeString() {
XCTAssertEqual(Util.grade(number: 11), 2.0)
}
Expand Down Expand Up @@ -57,56 +76,17 @@ final class CalqTests: XCTestCase {
XCTAssertEqual(types, 2)
}

// MARK: JSON Funcs
func testLoadDemoData() {
JSON.loadDemoData()
let count = Util.getAllSubjects().count

XCTAssertFalse(count == 0)
XCTAssertEqual(count, 12)
}

func testExport() {
let data = "idk"
let url = JSON.writeJSON(data)

do {
let fileContent = try String(contentsOf: url, encoding: .utf8)
XCTAssertEqual(data, fileContent)
} catch {
return assertionFailure("Exported File is empty")
}
}

func testImportV0() {
Util.deleteSettings()

let testBundle = Bundle(for: type(of: self))
guard let ressourceURL = testBundle.url(forResource: "exampleData_v0", withExtension: "json") else {
return assertionFailure("ExampleFile does not exist")
}

do { try JSON.importJSONfromDevice(ressourceURL) } catch { return assertionFailure("Failed to load resource") }
XCTAssertEqual(Util.getAllSubjects().count, 1)
}

func testImportV1() {
Util.deleteSettings()

let testBundle = Bundle(for: type(of: self))
guard let ressourceURL = testBundle.url(forResource: "exampleData_v1", withExtension: "json") else {
return assertionFailure("ExampleFile does not exist")
}

do { try JSON.importJSONfromDevice(ressourceURL) } catch { return assertionFailure("Failed to load resource") }
XCTAssertEqual(Util.getAllSubjects().count, 1)
}

func testAverageString() {
let average = Util.averageString(MockDataProvider.getSubjectWithTests())
XCTAssertEqual(average, "-- 11 -- -- ")
}

func testAverageString_WithoutTests() {
let sub = MockDataProvider.getSubjectWithoutTests()
let average = Util.averageString(MockDataProvider.getSubjectWithoutTests())
XCTAssertEqual(average, "-- -- -- -- ")
}

// MARK: Inactive Year funcs
func testDeactivateHalfyear() {
JSON.loadDemoData()
Expand Down Expand Up @@ -139,7 +119,7 @@ final class CalqTests: XCTestCase {
Util.addYear(getExampleSub(), 3)
let firstResult = Util.getinactiveYears(getExampleSub())
XCTAssertEqual(firstResult.count, 1)

Util.removeYear(getExampleSub(), 4)

let secondResult = Util.getinactiveYears(getExampleSub())
Expand All @@ -159,6 +139,24 @@ final class CalqTests: XCTestCase {
XCTAssertEqual(types.filter {$0.name == "Test" || $0.name == "Klausur"}.count, 2)
}

func testAddType_MoreThen100Percent() {
Util.addType(name: "someName", weigth: 0)
XCTAssertNotNil(Util.getTypes().filter {$0.name == "someName"})
}

func testAddType() {
Util.addType(name: "someName", weigth: 200)
XCTAssertNotNil(Util.getTypes().filter {$0.name == "someName"})
}

// TODO:
/* func testDeleteType() {
let gradeType = Util.getTypes().first
let id = gradeType!.id
Util.deleteType(type: id)
XCTAssertNil(Util.getTypes().filter {$0.id == id})
}*/

func testEditTypes() {
// add type
Util.addType(name: "someName", weigth: 0)
Expand All @@ -167,4 +165,102 @@ final class CalqTests: XCTestCase {
Util.deleteType(type: type.id)
XCTAssertTrue(Util.getTypes().filter {$0.name == "someName"}.isEmpty)
}

func testGetTypes() {
XCTAssertGreaterThan(Util.getTypes().count, 1)
}

func testGetTypes_WhenOnly1Exists() {
// TODO:
}

func testgetTypeGrades() {
XCTAssertNotNil(Util.getTypeGrades(0))
}

func testIsPrimaryType() {
// TODO:
}

func testIsPrimaryType_GradeType() {
// TODO:
}

// MARK: idk random
func testGetSubjectAverage() {
JSON.loadDemoData()
if let sub = Util.getAllSubjects().filter({ $0.name == "Kunst"}).first {
let subAverage = Util.getSubjectAverage(sub)
XCTAssertEqual(subAverage, 14.7)
}
}

func testGetSubjectAverage_WithoutTests() {
JSON.loadDemoData()
if let sub = Util.getAllSubjects().filter({ $0.name == "Kunst"}).first {
sub.subjecttests = nil
saveCoreData()
let subAverage = Util.getSubjectAverage(sub)
XCTAssertEqual(subAverage, 0.0)
}
}

func testGetSubjectAverage_WithYear() {
JSON.loadDemoData()
guard let sub = Util.getAllSubjects().filter({ $0.name == "Kunst"}).first else {
return XCTAssertTrue(false, "No subejct")
}

XCTAssertEqual(Util.getSubjectAverage(sub, year: 1), 15.0)
}

func testGetSubjectAverage_WithYear_WithoutTests() {
JSON.loadDemoData()
guard let sub = Util.getAllSubjects().filter({ $0.name == "Kunst"}).first else {
return XCTAssertTrue(false, "No subejct")
}
sub.subjecttests = nil
saveCoreData()
XCTAssertEqual(Util.getSubjectAverage(sub, year: 1), 0.0)
}

func testGetSubjectAverage_WithInvalidYear() {
JSON.loadDemoData()
guard let sub = Util.getAllSubjects().filter({ $0.name == "Kunst"}).first else {
return XCTAssertTrue(false, "No subejct")
}

XCTAssertEqual(Util.getSubjectAverage(sub, year: 5), 0.0)
}

func testGeneralAverage() {
JSON.loadDemoData()
XCTAssertEqual(Util.generalAverage().rounded(), 12.0)
}

func testGeneralAverage_WithoutSubejects() {
let settings = Util.getSettings()
settings.usersubjects = nil
saveCoreData()

XCTAssertEqual(Util.generalAverage(), 0.0)
}

func testGeneralAverage_WithoutTests() {
let subjects = Util.getAllSubjects()
subjects.forEach { sub in
sub.subjecttests = nil
}
saveCoreData()

XCTAssertEqual(Util.generalAverage(), 0.0)
}

func testDeleteTest() {
let sub = MockDataProvider.getSubjectWithTests()
XCTAssertEqual(sub.subjecttests?.count, 1)

Util.deleteTest((sub.subjecttests?.allObjects.first!)! as! UserTest)
XCTAssertEqual(sub.subjecttests?.count, 0)
}
}
Loading

0 comments on commit 2a1b677

Please sign in to comment.