From d90acc79e0437e3445213103ee61dd8c39224546 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 25 Jul 2022 13:59:45 +0300 Subject: [PATCH 01/53] add .gitignore to repo --- .gitignore | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31ab0ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,88 @@ +# Created by https://www.toptal.com/developers/gitignore/api/swift +# Edit at https://www.toptal.com/developers/gitignore?templates=swift + +### Swift ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +# End of https://www.toptal.com/developers/gitignore/api/swift From 8049ed4ba9c6753e1698cccb98d3dda8e60812e8 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 26 Jul 2022 10:26:14 +0300 Subject: [PATCH 02/53] setup structure --- .../Hearthstone.xcodeproj/project.pbxproj | 652 ++++++++++++++++++ Hearthstone/Hearthstone/AppDelegate.swift | 81 +++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++ .../Assets/Assets.xcassets/Contents.json | 6 + .../Hearthstone/Assets/cards.json | 0 .../Base.lproj/LaunchScreen.storyboard | 25 + .../.xccurrentversion | 8 + .../Hearthstone.xcdatamodel/contents | 4 + Hearthstone/Hearthstone/Info.plist | 25 + Hearthstone/Hearthstone/SceneDelegate.swift | 55 ++ .../HearthstoneTests/HearthstoneTests.swift | 36 + .../HearthstoneUITests.swift | 41 ++ .../HearthstoneUITestsLaunchTests.swift | 32 + README.md => Hearthstone/README.md | 0 15 files changed, 1074 insertions(+) create mode 100644 Hearthstone/Hearthstone.xcodeproj/project.pbxproj create mode 100644 Hearthstone/Hearthstone/AppDelegate.swift create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/Contents.json rename cards.json => Hearthstone/Hearthstone/Assets/cards.json (100%) create mode 100644 Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard create mode 100644 Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/.xccurrentversion create mode 100644 Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents create mode 100644 Hearthstone/Hearthstone/Info.plist create mode 100644 Hearthstone/Hearthstone/SceneDelegate.swift create mode 100644 Hearthstone/HearthstoneTests/HearthstoneTests.swift create mode 100644 Hearthstone/HearthstoneUITests/HearthstoneUITests.swift create mode 100644 Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift rename README.md => Hearthstone/README.md (100%) diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1f8afac --- /dev/null +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -0,0 +1,652 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FED288EED28001D4559 /* AppDelegate.swift */; }; + 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FEF288EED28001D4559 /* SceneDelegate.swift */; }; + 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */; }; + 305C6FFA288EED2B001D4559 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FF9288EED2B001D4559 /* Assets.xcassets */; }; + 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */; }; + 305C7008288EED2C001D4559 /* HearthstoneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C7007288EED2C001D4559 /* HearthstoneTests.swift */; }; + 305C7012288EED2C001D4559 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C7011288EED2C001D4559 /* HearthstoneUITests.swift */; }; + 305C7014288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C7013288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift */; }; + 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 305C7004288EED2C001D4559 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 305C6FE2288EED28001D4559 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 305C6FE9288EED28001D4559; + remoteInfo = Hearthstone; + }; + 305C700E288EED2C001D4559 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 305C6FE2288EED28001D4559 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 305C6FE9288EED28001D4559; + remoteInfo = Hearthstone; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 305C6FEA288EED28001D4559 /* Hearthstone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Hearthstone.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 305C6FED288EED28001D4559 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 305C6FEF288EED28001D4559 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 305C6FF7288EED28001D4559 /* Hearthstone.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Hearthstone.xcdatamodel; sourceTree = ""; }; + 305C6FF9288EED2B001D4559 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 305C6FFC288EED2B001D4559 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 305C6FFE288EED2B001D4559 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 305C7007288EED2C001D4559 /* HearthstoneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneTests.swift; sourceTree = ""; }; + 305C700D288EED2C001D4559 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 305C7011288EED2C001D4559 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; + 305C7013288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; + 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 305C6FE7288EED28001D4559 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 305C7000288EED2C001D4559 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 305C700A288EED2C001D4559 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 305C6FE1288EED28001D4559 = { + isa = PBXGroup; + children = ( + 305C6FEC288EED28001D4559 /* Hearthstone */, + 305C7006288EED2C001D4559 /* HearthstoneTests */, + 305C7010288EED2C001D4559 /* HearthstoneUITests */, + 305C6FEB288EED28001D4559 /* Products */, + ); + sourceTree = ""; + }; + 305C6FEB288EED28001D4559 /* Products */ = { + isa = PBXGroup; + children = ( + 305C6FEA288EED28001D4559 /* Hearthstone.app */, + 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */, + 305C700D288EED2C001D4559 /* HearthstoneUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 305C6FEC288EED28001D4559 /* Hearthstone */ = { + isa = PBXGroup; + children = ( + 305C6FED288EED28001D4559 /* AppDelegate.swift */, + 30818455288FCCBF00838205 /* Assets */, + 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */, + 3081845B288FCE2300838205 /* Helpers */, + 305C6FFE288EED2B001D4559 /* Info.plist */, + 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */, + 3081845A288FCE1C00838205 /* Models */, + 305C6FEF288EED28001D4559 /* SceneDelegate.swift */, + 3081845C288FCE2E00838205 /* ViewModels */, + 30818459288FCE1600838205 /* Views */, + ); + path = Hearthstone; + sourceTree = ""; + }; + 305C7006288EED2C001D4559 /* HearthstoneTests */ = { + isa = PBXGroup; + children = ( + 305C7007288EED2C001D4559 /* HearthstoneTests.swift */, + ); + path = HearthstoneTests; + sourceTree = ""; + }; + 305C7010288EED2C001D4559 /* HearthstoneUITests */ = { + isa = PBXGroup; + children = ( + 305C7011288EED2C001D4559 /* HearthstoneUITests.swift */, + 305C7013288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift */, + ); + path = HearthstoneUITests; + sourceTree = ""; + }; + 30818455288FCCBF00838205 /* Assets */ = { + isa = PBXGroup; + children = ( + 30818456288FCCCB00838205 /* cards.json */, + 305C6FF9288EED2B001D4559 /* Assets.xcassets */, + ); + path = Assets; + sourceTree = ""; + }; + 30818459288FCE1600838205 /* Views */ = { + isa = PBXGroup; + children = ( + ); + path = Views; + sourceTree = ""; + }; + 3081845A288FCE1C00838205 /* Models */ = { + isa = PBXGroup; + children = ( + ); + path = Models; + sourceTree = ""; + }; + 3081845B288FCE2300838205 /* Helpers */ = { + isa = PBXGroup; + children = ( + ); + path = Helpers; + sourceTree = ""; + }; + 3081845C288FCE2E00838205 /* ViewModels */ = { + isa = PBXGroup; + children = ( + ); + path = ViewModels; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 305C6FE9288EED28001D4559 /* Hearthstone */ = { + isa = PBXNativeTarget; + buildConfigurationList = 305C7017288EED2C001D4559 /* Build configuration list for PBXNativeTarget "Hearthstone" */; + buildPhases = ( + 305C6FE6288EED28001D4559 /* Sources */, + 305C6FE7288EED28001D4559 /* Frameworks */, + 305C6FE8288EED28001D4559 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Hearthstone; + productName = Hearthstone; + productReference = 305C6FEA288EED28001D4559 /* Hearthstone.app */; + productType = "com.apple.product-type.application"; + }; + 305C7002288EED2C001D4559 /* HearthstoneTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 305C701A288EED2C001D4559 /* Build configuration list for PBXNativeTarget "HearthstoneTests" */; + buildPhases = ( + 305C6FFF288EED2C001D4559 /* Sources */, + 305C7000288EED2C001D4559 /* Frameworks */, + 305C7001288EED2C001D4559 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 305C7005288EED2C001D4559 /* PBXTargetDependency */, + ); + name = HearthstoneTests; + productName = HearthstoneTests; + productReference = 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 305C700C288EED2C001D4559 /* HearthstoneUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 305C701D288EED2C001D4559 /* Build configuration list for PBXNativeTarget "HearthstoneUITests" */; + buildPhases = ( + 305C7009288EED2C001D4559 /* Sources */, + 305C700A288EED2C001D4559 /* Frameworks */, + 305C700B288EED2C001D4559 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 305C700F288EED2C001D4559 /* PBXTargetDependency */, + ); + name = HearthstoneUITests; + productName = HearthstoneUITests; + productReference = 305C700D288EED2C001D4559 /* HearthstoneUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 305C6FE2288EED28001D4559 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1340; + LastUpgradeCheck = 1340; + TargetAttributes = { + 305C6FE9288EED28001D4559 = { + CreatedOnToolsVersion = 13.4.1; + }; + 305C7002288EED2C001D4559 = { + CreatedOnToolsVersion = 13.4.1; + TestTargetID = 305C6FE9288EED28001D4559; + }; + 305C700C288EED2C001D4559 = { + CreatedOnToolsVersion = 13.4.1; + TestTargetID = 305C6FE9288EED28001D4559; + }; + }; + }; + buildConfigurationList = 305C6FE5288EED28001D4559 /* Build configuration list for PBXProject "Hearthstone" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 305C6FE1288EED28001D4559; + productRefGroup = 305C6FEB288EED28001D4559 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 305C6FE9288EED28001D4559 /* Hearthstone */, + 305C7002288EED2C001D4559 /* HearthstoneTests */, + 305C700C288EED2C001D4559 /* HearthstoneUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 305C6FE8288EED28001D4559 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */, + 305C6FFA288EED2B001D4559 /* Assets.xcassets in Resources */, + 30818457288FCCCC00838205 /* cards.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 305C7001288EED2C001D4559 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 305C700B288EED2C001D4559 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 305C6FE6288EED28001D4559 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */, + 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, + 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 305C6FFF288EED2C001D4559 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 305C7008288EED2C001D4559 /* HearthstoneTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 305C7009288EED2C001D4559 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 305C7014288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift in Sources */, + 305C7012288EED2C001D4559 /* HearthstoneUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 305C7005288EED2C001D4559 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 305C6FE9288EED28001D4559 /* Hearthstone */; + targetProxy = 305C7004288EED2C001D4559 /* PBXContainerItemProxy */; + }; + 305C700F288EED2C001D4559 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 305C6FE9288EED28001D4559 /* Hearthstone */; + targetProxy = 305C700E288EED2C001D4559 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 305C6FFC288EED2B001D4559 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 305C7015288EED2C001D4559 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 305C7016288EED2C001D4559 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 305C7018288EED2C001D4559 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Hearthstone/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.Hearthstone; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 305C7019288EED2C001D4559 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Hearthstone/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.Hearthstone; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 305C701B288EED2C001D4559 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Hearthstone.app/Hearthstone"; + }; + name = Debug; + }; + 305C701C288EED2C001D4559 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.5; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Hearthstone.app/Hearthstone"; + }; + name = Release; + }; + 305C701E288EED2C001D4559 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Hearthstone; + }; + name = Debug; + }; + 305C701F288EED2C001D4559 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Hearthstone; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 305C6FE5288EED28001D4559 /* Build configuration list for PBXProject "Hearthstone" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 305C7015288EED2C001D4559 /* Debug */, + 305C7016288EED2C001D4559 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 305C7017288EED2C001D4559 /* Build configuration list for PBXNativeTarget "Hearthstone" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 305C7018288EED2C001D4559 /* Debug */, + 305C7019288EED2C001D4559 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 305C701A288EED2C001D4559 /* Build configuration list for PBXNativeTarget "HearthstoneTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 305C701B288EED2C001D4559 /* Debug */, + 305C701C288EED2C001D4559 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 305C701D288EED2C001D4559 /* Build configuration list for PBXNativeTarget "HearthstoneUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 305C701E288EED2C001D4559 /* Debug */, + 305C701F288EED2C001D4559 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 305C6FF7288EED28001D4559 /* Hearthstone.xcdatamodel */, + ); + currentVersion = 305C6FF7288EED28001D4559 /* Hearthstone.xcdatamodel */; + path = Hearthstone.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 305C6FE2288EED28001D4559 /* Project object */; +} diff --git a/Hearthstone/Hearthstone/AppDelegate.swift b/Hearthstone/Hearthstone/AppDelegate.swift new file mode 100644 index 0000000..8cc73bc --- /dev/null +++ b/Hearthstone/Hearthstone/AppDelegate.swift @@ -0,0 +1,81 @@ +// +// AppDelegate.swift +// Hearthstone +// +// Created by Epsilon User on 25/7/22. +// + +import UIKit +import CoreData + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + // MARK: - Core Data stack + + lazy var persistentContainer: NSPersistentContainer = { + /* + The persistent container for the application. This implementation + creates and returns a container, having loaded the store for the + application to it. This property is optional since there are legitimate + error conditions that could cause the creation of the store to fail. + */ + let container = NSPersistentContainer(name: "Hearthstone") + container.loadPersistentStores(completionHandler: { (storeDescription, error) in + if let error = error as NSError? { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + + /* + Typical reasons for an error here include: + * The parent directory does not exist, cannot be created, or disallows writing. + * The persistent store is not accessible, due to permissions or data protection when the device is locked. + * The device is out of space. + * The store could not be migrated to the current model version. + Check the error message to determine what the actual problem was. + */ + fatalError("Unresolved error \(error), \(error.userInfo)") + } + }) + return container + }() + + // MARK: - Core Data Saving support + + func saveContext () { + let context = persistentContainer.viewContext + if context.hasChanges { + do { + try context.save() + } catch { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + let nserror = error as NSError + fatalError("Unresolved error \(nserror), \(nserror.userInfo)") + } + } + } + +} + diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/AccentColor.colorset/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/cards.json b/Hearthstone/Hearthstone/Assets/cards.json similarity index 100% rename from cards.json rename to Hearthstone/Hearthstone/Assets/cards.json diff --git a/Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard b/Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/.xccurrentversion b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..782ed92 --- /dev/null +++ b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Hearthstone.xcdatamodel + + diff --git a/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents new file mode 100644 index 0000000..50d2514 --- /dev/null +++ b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Hearthstone/Hearthstone/Info.plist b/Hearthstone/Hearthstone/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/Hearthstone/Hearthstone/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/Hearthstone/Hearthstone/SceneDelegate.swift b/Hearthstone/Hearthstone/SceneDelegate.swift new file mode 100644 index 0000000..cc72b20 --- /dev/null +++ b/Hearthstone/Hearthstone/SceneDelegate.swift @@ -0,0 +1,55 @@ +// +// SceneDelegate.swift +// Hearthstone +// +// Created by Epsilon User on 25/7/22. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + + // Save changes in the application's managed object context when the application transitions to the background. + (UIApplication.shared.delegate as? AppDelegate)?.saveContext() + } + + +} + diff --git a/Hearthstone/HearthstoneTests/HearthstoneTests.swift b/Hearthstone/HearthstoneTests/HearthstoneTests.swift new file mode 100644 index 0000000..9059ada --- /dev/null +++ b/Hearthstone/HearthstoneTests/HearthstoneTests.swift @@ -0,0 +1,36 @@ +// +// HearthstoneTests.swift +// HearthstoneTests +// +// Created by Epsilon User on 25/7/22. +// + +import XCTest +@testable import Hearthstone + +class HearthstoneTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift new file mode 100644 index 0000000..914107b --- /dev/null +++ b/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift @@ -0,0 +1,41 @@ +// +// HearthstoneUITests.swift +// HearthstoneUITests +// +// Created by Epsilon User on 25/7/22. +// + +import XCTest + +class HearthstoneUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift new file mode 100644 index 0000000..38b58be --- /dev/null +++ b/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift @@ -0,0 +1,32 @@ +// +// HearthstoneUITestsLaunchTests.swift +// HearthstoneUITests +// +// Created by Epsilon User on 25/7/22. +// + +import XCTest + +class HearthstoneUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/README.md b/Hearthstone/README.md similarity index 100% rename from README.md rename to Hearthstone/README.md From a2bf3cdae99ccb8fe740cf3d420be5e804d50a87 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 27 Jul 2022 17:19:45 +0300 Subject: [PATCH 03/53] setup model and test json file --- .../Hearthstone.xcodeproj/project.pbxproj | 262 ++++++++++-------- Hearthstone/Hearthstone/Main.storyboard | 32 +++ Hearthstone/Hearthstone/Models/Card.swift | 57 ++++ .../Views/MainViewController.swift | 17 ++ .../Helpers/TestCardsFileExists.swift | 24 ++ .../HearthstoneTests/HearthstoneTests.swift | 36 --- .../HearthstoneUITests.swift | 2 +- .../HearthstoneUITestsLaunchTests.swift | 2 +- 8 files changed, 283 insertions(+), 149 deletions(-) create mode 100644 Hearthstone/Hearthstone/Main.storyboard create mode 100644 Hearthstone/Hearthstone/Models/Card.swift create mode 100644 Hearthstone/Hearthstone/Views/MainViewController.swift create mode 100644 Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift delete mode 100644 Hearthstone/HearthstoneTests/HearthstoneTests.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 1f8afac..488d944 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -7,26 +7,29 @@ objects = { /* Begin PBXBuildFile section */ + 30070E4328916E450062F0E6 /* TestCardsFileExists.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFileExists.swift */; }; + 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */; }; + 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */; }; 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FED288EED28001D4559 /* AppDelegate.swift */; }; 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FEF288EED28001D4559 /* SceneDelegate.swift */; }; 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */; }; 305C6FFA288EED2B001D4559 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FF9288EED2B001D4559 /* Assets.xcassets */; }; 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */; }; - 305C7008288EED2C001D4559 /* HearthstoneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C7007288EED2C001D4559 /* HearthstoneTests.swift */; }; - 305C7012288EED2C001D4559 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C7011288EED2C001D4559 /* HearthstoneUITests.swift */; }; - 305C7014288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C7013288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift */; }; 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; + 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; + 30B71184288FE74C00935D29 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30B71183288FE74C00935D29 /* Main.storyboard */; }; + 30B71186288FE76A00935D29 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71185288FE76A00935D29 /* MainViewController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 305C7004288EED2C001D4559 /* PBXContainerItemProxy */ = { + 30070E4E289180A70062F0E6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 305C6FE2288EED28001D4559 /* Project object */; proxyType = 1; remoteGlobalIDString = 305C6FE9288EED28001D4559; remoteInfo = Hearthstone; }; - 305C700E288EED2C001D4559 /* PBXContainerItemProxy */ = { + 305C7004288EED2C001D4559 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 305C6FE2288EED28001D4559 /* Project object */; proxyType = 1; @@ -36,6 +39,10 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 30070E4228916E450062F0E6 /* TestCardsFileExists.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardsFileExists.swift; sourceTree = ""; }; + 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; + 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; 305C6FEA288EED28001D4559 /* Hearthstone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Hearthstone.app; sourceTree = BUILT_PRODUCTS_DIR; }; 305C6FED288EED28001D4559 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 305C6FEF288EED28001D4559 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -44,29 +51,28 @@ 305C6FFC288EED2B001D4559 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 305C6FFE288EED2B001D4559 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 305C7007288EED2C001D4559 /* HearthstoneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneTests.swift; sourceTree = ""; }; - 305C700D288EED2C001D4559 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 305C7011288EED2C001D4559 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; - 305C7013288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; + 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; + 30B71183288FE74C00935D29 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + 30B71185288FE76A00935D29 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 305C6FE7288EED28001D4559 /* Frameworks */ = { + 30070E45289180A70062F0E6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 305C7000288EED2C001D4559 /* Frameworks */ = { + 305C6FE7288EED28001D4559 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 305C700A288EED2C001D4559 /* Frameworks */ = { + 305C7000288EED2C001D4559 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -76,12 +82,37 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 30070E4028916DF50062F0E6 /* CardsTests */ = { + isa = PBXGroup; + children = ( + 30070E4128916E010062F0E6 /* Helpers */, + ); + path = CardsTests; + sourceTree = ""; + }; + 30070E4128916E010062F0E6 /* Helpers */ = { + isa = PBXGroup; + children = ( + 30070E4228916E450062F0E6 /* TestCardsFileExists.swift */, + ); + path = Helpers; + sourceTree = ""; + }; + 30070E49289180A70062F0E6 /* HearthstoneUITests */ = { + isa = PBXGroup; + children = ( + 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */, + 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */, + ); + path = HearthstoneUITests; + sourceTree = ""; + }; 305C6FE1288EED28001D4559 = { isa = PBXGroup; children = ( 305C6FEC288EED28001D4559 /* Hearthstone */, 305C7006288EED2C001D4559 /* HearthstoneTests */, - 305C7010288EED2C001D4559 /* HearthstoneUITests */, + 30070E49289180A70062F0E6 /* HearthstoneUITests */, 305C6FEB288EED28001D4559 /* Products */, ); sourceTree = ""; @@ -91,7 +122,7 @@ children = ( 305C6FEA288EED28001D4559 /* Hearthstone.app */, 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */, - 305C700D288EED2C001D4559 /* HearthstoneUITests.xctest */, + 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */, ); name = Products; sourceTree = ""; @@ -109,6 +140,7 @@ 305C6FEF288EED28001D4559 /* SceneDelegate.swift */, 3081845C288FCE2E00838205 /* ViewModels */, 30818459288FCE1600838205 /* Views */, + 30B71183288FE74C00935D29 /* Main.storyboard */, ); path = Hearthstone; sourceTree = ""; @@ -116,20 +148,11 @@ 305C7006288EED2C001D4559 /* HearthstoneTests */ = { isa = PBXGroup; children = ( - 305C7007288EED2C001D4559 /* HearthstoneTests.swift */, + 30070E4028916DF50062F0E6 /* CardsTests */, ); path = HearthstoneTests; sourceTree = ""; }; - 305C7010288EED2C001D4559 /* HearthstoneUITests */ = { - isa = PBXGroup; - children = ( - 305C7011288EED2C001D4559 /* HearthstoneUITests.swift */, - 305C7013288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift */, - ); - path = HearthstoneUITests; - sourceTree = ""; - }; 30818455288FCCBF00838205 /* Assets */ = { isa = PBXGroup; children = ( @@ -142,6 +165,7 @@ 30818459288FCE1600838205 /* Views */ = { isa = PBXGroup; children = ( + 30B71185288FE76A00935D29 /* MainViewController.swift */, ); path = Views; sourceTree = ""; @@ -149,6 +173,7 @@ 3081845A288FCE1C00838205 /* Models */ = { isa = PBXGroup; children = ( + 30B71180288FE1BA00935D29 /* Card.swift */, ); path = Models; sourceTree = ""; @@ -170,6 +195,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 30070E47289180A70062F0E6 /* HearthstoneUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 30070E50289180A70062F0E6 /* Build configuration list for PBXNativeTarget "HearthstoneUITests" */; + buildPhases = ( + 30070E44289180A70062F0E6 /* Sources */, + 30070E45289180A70062F0E6 /* Frameworks */, + 30070E46289180A70062F0E6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 30070E4F289180A70062F0E6 /* PBXTargetDependency */, + ); + name = HearthstoneUITests; + productName = HearthstoneUITests; + productReference = 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; 305C6FE9288EED28001D4559 /* Hearthstone */ = { isa = PBXNativeTarget; buildConfigurationList = 305C7017288EED2C001D4559 /* Build configuration list for PBXNativeTarget "Hearthstone" */; @@ -205,24 +248,6 @@ productReference = 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 305C700C288EED2C001D4559 /* HearthstoneUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 305C701D288EED2C001D4559 /* Build configuration list for PBXNativeTarget "HearthstoneUITests" */; - buildPhases = ( - 305C7009288EED2C001D4559 /* Sources */, - 305C700A288EED2C001D4559 /* Frameworks */, - 305C700B288EED2C001D4559 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 305C700F288EED2C001D4559 /* PBXTargetDependency */, - ); - name = HearthstoneUITests; - productName = HearthstoneUITests; - productReference = 305C700D288EED2C001D4559 /* HearthstoneUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -233,15 +258,16 @@ LastSwiftUpdateCheck = 1340; LastUpgradeCheck = 1340; TargetAttributes = { - 305C6FE9288EED28001D4559 = { + 30070E47289180A70062F0E6 = { CreatedOnToolsVersion = 13.4.1; + TestTargetID = 305C6FE9288EED28001D4559; }; - 305C7002288EED2C001D4559 = { + 305C6FE9288EED28001D4559 = { CreatedOnToolsVersion = 13.4.1; - TestTargetID = 305C6FE9288EED28001D4559; }; - 305C700C288EED2C001D4559 = { + 305C7002288EED2C001D4559 = { CreatedOnToolsVersion = 13.4.1; + LastSwiftMigration = 1340; TestTargetID = 305C6FE9288EED28001D4559; }; }; @@ -261,30 +287,31 @@ targets = ( 305C6FE9288EED28001D4559 /* Hearthstone */, 305C7002288EED2C001D4559 /* HearthstoneTests */, - 305C700C288EED2C001D4559 /* HearthstoneUITests */, + 30070E47289180A70062F0E6 /* HearthstoneUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 305C6FE8288EED28001D4559 /* Resources */ = { + 30070E46289180A70062F0E6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */, - 305C6FFA288EED2B001D4559 /* Assets.xcassets in Resources */, - 30818457288FCCCC00838205 /* cards.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 305C7001288EED2C001D4559 /* Resources */ = { + 305C6FE8288EED28001D4559 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */, + 305C6FFA288EED2B001D4559 /* Assets.xcassets in Resources */, + 30818457288FCCCC00838205 /* cards.json in Resources */, + 30B71184288FE74C00935D29 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 305C700B288EED2C001D4559 /* Resources */ = { + 305C7001288EED2C001D4559 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -294,45 +321,47 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 305C6FE6288EED28001D4559 /* Sources */ = { + 30070E44289180A70062F0E6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */, - 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, - 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, + 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */, + 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 305C6FFF288EED2C001D4559 /* Sources */ = { + 305C6FE6288EED28001D4559 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 305C7008288EED2C001D4559 /* HearthstoneTests.swift in Sources */, + 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */, + 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, + 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, + 30B71181288FE1BA00935D29 /* Card.swift in Sources */, + 30B71186288FE76A00935D29 /* MainViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 305C7009288EED2C001D4559 /* Sources */ = { + 305C6FFF288EED2C001D4559 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 305C7014288EED2C001D4559 /* HearthstoneUITestsLaunchTests.swift in Sources */, - 305C7012288EED2C001D4559 /* HearthstoneUITests.swift in Sources */, + 30070E4328916E450062F0E6 /* TestCardsFileExists.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 305C7005288EED2C001D4559 /* PBXTargetDependency */ = { + 30070E4F289180A70062F0E6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 305C6FE9288EED28001D4559 /* Hearthstone */; - targetProxy = 305C7004288EED2C001D4559 /* PBXContainerItemProxy */; + targetProxy = 30070E4E289180A70062F0E6 /* PBXContainerItemProxy */; }; - 305C700F288EED2C001D4559 /* PBXTargetDependency */ = { + 305C7005288EED2C001D4559 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 305C6FE9288EED28001D4559 /* Hearthstone */; - targetProxy = 305C700E288EED2C001D4559 /* PBXContainerItemProxy */; + targetProxy = 305C7004288EED2C001D4559 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -348,6 +377,40 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 30070E51289180A70062F0E6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Hearthstone; + }; + name = Debug; + }; + 30070E52289180A70062F0E6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7BS7VD55S5; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Hearthstone; + }; + name = Release; + }; 305C7015288EED2C001D4559 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -523,15 +586,22 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 7BS7VD55S5; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Hearthstone.app/Hearthstone"; @@ -543,11 +613,17 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 7BS7VD55S5; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -558,45 +634,18 @@ }; name = Release; }; - 305C701E288EED2C001D4559 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 7BS7VD55S5; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Hearthstone; - }; - name = Debug; - }; - 305C701F288EED2C001D4559 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 7BS7VD55S5; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Hearthstone; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 30070E50289180A70062F0E6 /* Build configuration list for PBXNativeTarget "HearthstoneUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 30070E51289180A70062F0E6 /* Debug */, + 30070E52289180A70062F0E6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 305C6FE5288EED28001D4559 /* Build configuration list for PBXProject "Hearthstone" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -624,15 +673,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 305C701D288EED2C001D4559 /* Build configuration list for PBXNativeTarget "HearthstoneUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 305C701E288EED2C001D4559 /* Debug */, - 305C701F288EED2C001D4559 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ diff --git a/Hearthstone/Hearthstone/Main.storyboard b/Hearthstone/Hearthstone/Main.storyboard new file mode 100644 index 0000000..e2ad9b6 --- /dev/null +++ b/Hearthstone/Hearthstone/Main.storyboard @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Hearthstone/Hearthstone/Models/Card.swift b/Hearthstone/Hearthstone/Models/Card.swift new file mode 100644 index 0000000..f3717ae --- /dev/null +++ b/Hearthstone/Hearthstone/Models/Card.swift @@ -0,0 +1,57 @@ +// +// Card.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 26/7/22. +// + +import Foundation + +struct Card { + + let cardId: String? + let name: String? + let cardSet: String? + let type: String? + let rarity: String? + let cost: Int? + let attack: Int? + let health: Int? + let text: String? + let flavor: String? + let artist: String? + let collectible: Bool? + let elite: Bool? + let playerClass: String? + let multiClassGroup: String? + let classes: [String]? + let img: String? + let imgGold: String? + let locale: String? + let mechanics: [String]? + + // JSON file returns a Dictionary in categories + init(from dictionary: [String: Any]) { + self.cardId = dictionary["cardId"] as? String + self.name = dictionary["name"] as? String + self.cardSet = dictionary["cardSet"] as? String + self.type = dictionary["type"] as? String + self.rarity = dictionary["rarity"] as? String + self.cost = dictionary["cost"] as? Int + self.attack = dictionary["attack"] as? Int + self.health = dictionary["health"] as? Int + self.text = dictionary["text"] as? String + self.flavor = dictionary["flavor"] as? String + self.artist = dictionary["artist"] as? String + self.collectible = dictionary["collectible"] as? Bool + self.elite = dictionary["elite"] as? Bool + self.playerClass = dictionary["playerClass"] as? String + self.multiClassGroup = dictionary["multiClassGroup"] as? String + self.classes = dictionary["classes"] as? [String] + self.img = dictionary["img"] as? String + self.imgGold = dictionary["imgGold"] as? String + self.locale = dictionary["locale"] as? String + self.mechanics = dictionary["mechanics"] as? [String] + } + +} diff --git a/Hearthstone/Hearthstone/Views/MainViewController.swift b/Hearthstone/Hearthstone/Views/MainViewController.swift new file mode 100644 index 0000000..68f0342 --- /dev/null +++ b/Hearthstone/Hearthstone/Views/MainViewController.swift @@ -0,0 +1,17 @@ +// +// MainViewController.swift +// Hearthstone +// +// Created by Epsilon User on 26/7/22. +// + +import UIKit + +class MainViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + } + +} diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift new file mode 100644 index 0000000..0c3d297 --- /dev/null +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift @@ -0,0 +1,24 @@ +// +// TestCardsFileExists.swift +// HearthstoneTests +// +// Created by Epsilon User on 27/7/22. +// + +import XCTest + +class TestCardsFileExists: XCTestCase { + + override func setUpWithError() throws { + super.setUp() + } + + func testJSONFileExists() { + guard let _ = Bundle.main.url(forResource: "cards", withExtension: "json") else { + XCTFail("File is Missing") + return + } + + } + +} diff --git a/Hearthstone/HearthstoneTests/HearthstoneTests.swift b/Hearthstone/HearthstoneTests/HearthstoneTests.swift deleted file mode 100644 index 9059ada..0000000 --- a/Hearthstone/HearthstoneTests/HearthstoneTests.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// HearthstoneTests.swift -// HearthstoneTests -// -// Created by Epsilon User on 25/7/22. -// - -import XCTest -@testable import Hearthstone - -class HearthstoneTests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - // Any test you write for XCTest can be annotated as throws and async. - // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. - // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. - } - - func testPerformanceExample() throws { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift index 914107b..7152200 100644 --- a/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift +++ b/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift @@ -2,7 +2,7 @@ // HearthstoneUITests.swift // HearthstoneUITests // -// Created by Epsilon User on 25/7/22. +// Created by Epsilon User on 27/7/22. // import XCTest diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift index 38b58be..f417332 100644 --- a/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift +++ b/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift @@ -2,7 +2,7 @@ // HearthstoneUITestsLaunchTests.swift // HearthstoneUITests // -// Created by Epsilon User on 25/7/22. +// Created by Epsilon User on 27/7/22. // import XCTest From 38d3274c76c54fc4e0ba671ddb0be3eab7c79339 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 28 Jul 2022 11:00:30 +0300 Subject: [PATCH 04/53] add tests for json file validation --- .../Hearthstone.xcodeproj/project.pbxproj | 12 +++-- .../CardsTests/Helpers/CardsHelper.swift | 30 +++++++++++ .../CardsTests/Helpers/TestCardsFile.swift | 51 +++++++++++++++++++ .../Helpers/TestCardsFileExists.swift | 24 --------- 4 files changed, 89 insertions(+), 28 deletions(-) create mode 100644 Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift create mode 100644 Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift delete mode 100644 Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 488d944..f8b5420 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -7,7 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 30070E4328916E450062F0E6 /* TestCardsFileExists.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFileExists.swift */; }; + 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFile.swift */; }; 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */; }; 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */; }; 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FED288EED28001D4559 /* AppDelegate.swift */; }; @@ -15,6 +15,7 @@ 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */; }; 305C6FFA288EED2B001D4559 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FF9288EED2B001D4559 /* Assets.xcassets */; }; 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */; }; + 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3063DB77289273C100715E98 /* CardsHelper.swift */; }; 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; 30B71184288FE74C00935D29 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30B71183288FE74C00935D29 /* Main.storyboard */; }; @@ -39,7 +40,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 30070E4228916E450062F0E6 /* TestCardsFileExists.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardsFileExists.swift; sourceTree = ""; }; + 30070E4228916E450062F0E6 /* TestCardsFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardsFile.swift; sourceTree = ""; }; 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; @@ -51,6 +52,7 @@ 305C6FFC288EED2B001D4559 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 305C6FFE288EED2B001D4559 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3063DB77289273C100715E98 /* CardsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsHelper.swift; sourceTree = ""; }; 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 30B71183288FE74C00935D29 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; @@ -93,7 +95,8 @@ 30070E4128916E010062F0E6 /* Helpers */ = { isa = PBXGroup; children = ( - 30070E4228916E450062F0E6 /* TestCardsFileExists.swift */, + 30070E4228916E450062F0E6 /* TestCardsFile.swift */, + 3063DB77289273C100715E98 /* CardsHelper.swift */, ); path = Helpers; sourceTree = ""; @@ -346,7 +349,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 30070E4328916E450062F0E6 /* TestCardsFileExists.swift in Sources */, + 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */, + 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift new file mode 100644 index 0000000..02d5c08 --- /dev/null +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift @@ -0,0 +1,30 @@ +// +// CardsHelper.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 28/7/22. +// + +import Foundation + + +/// +/// Test helper method of retrieving the json url. +/// +func getUrlFile(from name: String?, typed: String?) -> URL? { + + return Bundle.main.url(forResource: name, withExtension: typed) +} + +/// +/// Test helper method of converting url to json string. +/// +func getJSONString(from url: URL) throws -> String? { + + do { + return try String(contentsOf: url, encoding: .utf8) + } catch { + return nil + } + +} diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift new file mode 100644 index 0000000..a96ce21 --- /dev/null +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift @@ -0,0 +1,51 @@ +// +// TestCardsFileExists.swift +// HearthstoneTests +// +// Created by Epsilon User on 27/7/22. +// + +import XCTest +@testable import Hearthstone + +class TestCardsFile: XCTestCase { + + override func setUpWithError() throws { + super.setUp() + } + + func testJSONFileExists() { + guard let _ = getUrlFile(from: "cards", typed: "json") else { + XCTFail("File is Missing") + return + } + } + + func testJSONFileIsValid() { + guard let cardsUrl = getUrlFile(from: "cards", typed: "json") else { + XCTFail("File is missing") + return + } + + do { + if let cardsJSON = try getJSONString(from: cardsUrl) { + guard let cardsData = cardsJSON.data(using: .utf8) else { + XCTFail("Cards data can't be created from JSON") + return + } + + guard let cardsDictionary = try JSONSerialization.jsonObject(with: cardsData) as? [String: Any] else { + XCTFail("Cards Dictionary can't be created from Data object") + return + } + + XCTAssertTrue(JSONSerialization.isValidJSONObject(cardsDictionary)) + } else { + XCTFail("Can't parse cards.json into JSON string") + } + } catch { + XCTFail("Cards data can't be created") + } + } + +} diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift deleted file mode 100644 index 0c3d297..0000000 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFileExists.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// TestCardsFileExists.swift -// HearthstoneTests -// -// Created by Epsilon User on 27/7/22. -// - -import XCTest - -class TestCardsFileExists: XCTestCase { - - override func setUpWithError() throws { - super.setUp() - } - - func testJSONFileExists() { - guard let _ = Bundle.main.url(forResource: "cards", withExtension: "json") else { - XCTFail("File is Missing") - return - } - - } - -} From 400963b363b828fcdd4fbbd24ee8479910fe176f Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 28 Jul 2022 12:22:15 +0300 Subject: [PATCH 05/53] Init of Card with parameters (testing mainly) --- Hearthstone/Hearthstone/Models/Card.swift | 66 +++++++++++++------ .../CardsTests/Helpers/CardsHelper.swift | 4 +- .../CardsTests/Helpers/TestCardsFile.swift | 1 - 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/Hearthstone/Hearthstone/Models/Card.swift b/Hearthstone/Hearthstone/Models/Card.swift index f3717ae..948b23f 100644 --- a/Hearthstone/Hearthstone/Models/Card.swift +++ b/Hearthstone/Hearthstone/Models/Card.swift @@ -9,28 +9,52 @@ import Foundation struct Card { - let cardId: String? - let name: String? - let cardSet: String? - let type: String? - let rarity: String? - let cost: Int? - let attack: Int? - let health: Int? - let text: String? - let flavor: String? - let artist: String? - let collectible: Bool? - let elite: Bool? - let playerClass: String? - let multiClassGroup: String? - let classes: [String]? - let img: String? - let imgGold: String? - let locale: String? - let mechanics: [String]? + var cardId: String? + var name: String? + var cardSet: String? + var type: String? + var rarity: String? + var cost: Int? + var attack: Int? + var health: Int? + var text: String? + var flavor: String? + var artist: String? + var collectible: Bool? + var elite: Bool? + var playerClass: String? + var multiClassGroup: String? + var classes: [String]? + var img: String? + var imgGold: String? + var locale: String? + var mechanics: [String]? - // JSON file returns a Dictionary in categories + // Instantiation of a Card object for testing and internal purposes + init(cardId: String? = nil, name: String? = nil, cardSet: String? = nil, type: String? = nil, rarity: String? = nil, cost: Int? = nil, attack: Int? = nil, health: Int? = nil, text: String? = nil, flavor: String? = nil, artist: String? = nil, collectible: Bool? = nil, elite: Bool? = nil, playerClass: String? = nil, multiClassGroup: String? = nil, classes: [String]? = nil, img: String? = nil, imgGold: String? = nil, locale: String? = nil, mechanics: [String]? = nil) { + self.cardId = cardId + self.name = name + self.cardSet = cardSet + self.type = type + self.rarity = rarity + self.cost = cost + self.attack = attack + self.health = health + self.text = text + self.flavor = flavor + self.artist = artist + self.collectible = collectible + self.elite = elite + self.playerClass = playerClass + self.multiClassGroup = multiClassGroup + self.classes = classes + self.img = img + self.imgGold = imgGold + self.locale = locale + self.mechanics = mechanics + } + + // JSON Serialization returns a Dictionary of card category arrays init(from dictionary: [String: Any]) { self.cardId = dictionary["cardId"] as? String self.name = dictionary["name"] as? String diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift index 02d5c08..42cfc29 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift @@ -6,14 +6,14 @@ // import Foundation +@testable import Hearthstone /// /// Test helper method of retrieving the json url. /// func getUrlFile(from name: String?, typed: String?) -> URL? { - - return Bundle.main.url(forResource: name, withExtension: typed) + Bundle.main.url(forResource: name, withExtension: typed) } /// diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift index a96ce21..ea77da1 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift @@ -6,7 +6,6 @@ // import XCTest -@testable import Hearthstone class TestCardsFile: XCTestCase { From dc50ddb817f16e5eb9c33cfde4a0ca64ff06174c Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 28 Jul 2022 14:12:11 +0300 Subject: [PATCH 06/53] setup initial view model --- .../Hearthstone.xcodeproj/project.pbxproj | 10 +++++- Hearthstone/Hearthstone/AppDelegate.swift | 2 +- .../Hearthstone/Helpers/Extensions.swift | 8 +++++ Hearthstone/Hearthstone/SceneDelegate.swift | 2 +- .../ViewModels/CardViewModel.swift | 32 +++++++++++++++++++ .../Views/MainViewController.swift | 2 +- .../{Helpers => }/TestCardsFile.swift | 2 +- .../HearthstoneUITests.swift | 2 +- .../HearthstoneUITestsLaunchTests.swift | 2 +- 9 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 Hearthstone/Hearthstone/Helpers/Extensions.swift create mode 100644 Hearthstone/Hearthstone/ViewModels/CardViewModel.swift rename Hearthstone/HearthstoneTests/CardsTests/{Helpers => }/TestCardsFile.swift (96%) diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index f8b5420..1c7f621 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -17,6 +17,8 @@ 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */; }; 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3063DB77289273C100715E98 /* CardsHelper.swift */; }; 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; + 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56428929D1B00849D1F /* CardViewModel.swift */; }; + 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; 30B71184288FE74C00935D29 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30B71183288FE74C00935D29 /* Main.storyboard */; }; 30B71186288FE76A00935D29 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71185288FE76A00935D29 /* MainViewController.swift */; }; @@ -54,6 +56,8 @@ 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3063DB77289273C100715E98 /* CardsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsHelper.swift; sourceTree = ""; }; 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; + 30A8D56428929D1B00849D1F /* CardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModel.swift; sourceTree = ""; }; + 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 30B71183288FE74C00935D29 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 30B71185288FE76A00935D29 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; @@ -87,6 +91,7 @@ 30070E4028916DF50062F0E6 /* CardsTests */ = { isa = PBXGroup; children = ( + 30070E4228916E450062F0E6 /* TestCardsFile.swift */, 30070E4128916E010062F0E6 /* Helpers */, ); path = CardsTests; @@ -95,7 +100,6 @@ 30070E4128916E010062F0E6 /* Helpers */ = { isa = PBXGroup; children = ( - 30070E4228916E450062F0E6 /* TestCardsFile.swift */, 3063DB77289273C100715E98 /* CardsHelper.swift */, ); path = Helpers; @@ -184,6 +188,7 @@ 3081845B288FCE2300838205 /* Helpers */ = { isa = PBXGroup; children = ( + 30A8D5682892A67600849D1F /* Extensions.swift */, ); path = Helpers; sourceTree = ""; @@ -191,6 +196,7 @@ 3081845C288FCE2E00838205 /* ViewModels */ = { isa = PBXGroup; children = ( + 30A8D56428929D1B00849D1F /* CardViewModel.swift */, ); path = ViewModels; sourceTree = ""; @@ -339,9 +345,11 @@ files = ( 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */, 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, + 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */, 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, 30B71181288FE1BA00935D29 /* Card.swift in Sources */, 30B71186288FE76A00935D29 /* MainViewController.swift in Sources */, + 30A8D5692892A67600849D1F /* Extensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Hearthstone/Hearthstone/AppDelegate.swift b/Hearthstone/Hearthstone/AppDelegate.swift index 8cc73bc..ac29fc1 100644 --- a/Hearthstone/Hearthstone/AppDelegate.swift +++ b/Hearthstone/Hearthstone/AppDelegate.swift @@ -2,7 +2,7 @@ // AppDelegate.swift // Hearthstone // -// Created by Epsilon User on 25/7/22. +// Created by Stavros Tsikinas on 25/7/22. // import UIKit diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift new file mode 100644 index 0000000..5df03ef --- /dev/null +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -0,0 +1,8 @@ +// +// Extensions.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 28/7/22. +// + +import Foundation diff --git a/Hearthstone/Hearthstone/SceneDelegate.swift b/Hearthstone/Hearthstone/SceneDelegate.swift index cc72b20..b37c962 100644 --- a/Hearthstone/Hearthstone/SceneDelegate.swift +++ b/Hearthstone/Hearthstone/SceneDelegate.swift @@ -2,7 +2,7 @@ // SceneDelegate.swift // Hearthstone // -// Created by Epsilon User on 25/7/22. +// Created by Stavros Tsikinas on 25/7/22. // import UIKit diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift new file mode 100644 index 0000000..4f64290 --- /dev/null +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -0,0 +1,32 @@ +// +// CardViewModel.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 28/7/22. +// + +import Foundation + +struct CardViewModel { + + let title: String + let image: String? + +} + +extension CardViewModel { + + static var placeholderTitle: String { + "No Name" + } + +} + +extension CardViewModel { + + init(card: Card) { + title = card.name ?? CardViewModel.placeholderTitle + image = card.img + } + +} diff --git a/Hearthstone/Hearthstone/Views/MainViewController.swift b/Hearthstone/Hearthstone/Views/MainViewController.swift index 68f0342..dc6dbfe 100644 --- a/Hearthstone/Hearthstone/Views/MainViewController.swift +++ b/Hearthstone/Hearthstone/Views/MainViewController.swift @@ -2,7 +2,7 @@ // MainViewController.swift // Hearthstone // -// Created by Epsilon User on 26/7/22. +// Created by Stavros Tsikinas on 26/7/22. // import UIKit diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift b/Hearthstone/HearthstoneTests/CardsTests/TestCardsFile.swift similarity index 96% rename from Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift rename to Hearthstone/HearthstoneTests/CardsTests/TestCardsFile.swift index ea77da1..8a1f786 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/TestCardsFile.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestCardsFile.swift @@ -2,7 +2,7 @@ // TestCardsFileExists.swift // HearthstoneTests // -// Created by Epsilon User on 27/7/22. +// Created by Stavros Tsikinas on 27/7/22. // import XCTest diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift index 7152200..037ec7d 100644 --- a/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift +++ b/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift @@ -2,7 +2,7 @@ // HearthstoneUITests.swift // HearthstoneUITests // -// Created by Epsilon User on 27/7/22. +// Created by Stavros Tsikinas on 27/7/22. // import XCTest diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift index f417332..3f8f70c 100644 --- a/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift +++ b/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift @@ -2,7 +2,7 @@ // HearthstoneUITestsLaunchTests.swift // HearthstoneUITests // -// Created by Epsilon User on 27/7/22. +// Created by Stavros Tsikinas on 27/7/22. // import XCTest From 73fcd42eca709f8223c6f993476b8c39588ca25f Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 28 Jul 2022 14:24:48 +0300 Subject: [PATCH 07/53] add UIImageView extensions to download card images --- .../Hearthstone/Helpers/Extensions.swift | 38 +++++++++++++++++++ .../ViewModels/CardViewModel.swift | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 5df03ef..1dbda20 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -6,3 +6,41 @@ // import Foundation +import UIKit + + +extension UIImageView { + + // Create a placeholder image, since some cards don't have "working" img paths. + // Also, seems cooler ;) + static var placeholderImageUrl = URL(string: "https://via.placeholder.com/500x500.png?text=No+Image+Found")! + + func load(from url: URL) { + + DispatchQueue.global().async { [weak self] in + if let imgData = try? Data(contentsOf: url) { + if let img = UIImage(data: imgData) { + DispatchQueue.main.async { + self?.image = img + } + } else { + self?.addPlaceholderImage() + } + } else { + self?.addPlaceholderImage() + } + } + } + + private func addPlaceholderImage() { + + if let imgData = try? Data(contentsOf: UIImageView.placeholderImageUrl) { + if let img = UIImage(data: imgData) { + DispatchQueue.main.async { [weak self] in + self?.image = img + } + } + } + } + +} diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index 4f64290..17df040 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -16,10 +16,10 @@ struct CardViewModel { extension CardViewModel { + // In case new entries have "corrupt" data static var placeholderTitle: String { "No Name" } - } extension CardViewModel { From ce3e62bcd3479cfd149c9417a09e1d279e0a8679 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 28 Jul 2022 14:38:03 +0300 Subject: [PATCH 08/53] add tests for view model --- .../Hearthstone.xcodeproj/project.pbxproj | 4 +++ .../CardsTests/TestCardViewModel.swift | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 1c7f621..a26a998 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56428929D1B00849D1F /* CardViewModel.swift */; }; 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; + 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; 30B71184288FE74C00935D29 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30B71183288FE74C00935D29 /* Main.storyboard */; }; 30B71186288FE76A00935D29 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71185288FE76A00935D29 /* MainViewController.swift */; }; @@ -58,6 +59,7 @@ 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; 30A8D56428929D1B00849D1F /* CardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModel.swift; sourceTree = ""; }; 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; + 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardViewModel.swift; sourceTree = ""; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 30B71183288FE74C00935D29 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 30B71185288FE76A00935D29 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; @@ -93,6 +95,7 @@ children = ( 30070E4228916E450062F0E6 /* TestCardsFile.swift */, 30070E4128916E010062F0E6 /* Helpers */, + 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */, ); path = CardsTests; sourceTree = ""; @@ -359,6 +362,7 @@ files = ( 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */, 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */, + 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift new file mode 100644 index 0000000..66bd259 --- /dev/null +++ b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift @@ -0,0 +1,33 @@ +// +// TestCardViewModel.swift +// HearthstoneTests +// +// Created by Epsilon User on 28/7/22. +// + +import XCTest +@testable import Hearthstone + +class TestCardViewModel: XCTestCase { + + override func setUpWithError() throws { + super.setUp() + + } + + func testCardViewModelInitialization() { + let cardVM = CardViewModel(card: Card(name: "a Card", img: "https://www.cardlink.card/card.png")) + + XCTAssertNotNil(cardVM.title, "No title found on cardVM") + XCTAssertNotNil(cardVM.image, "No image path found on cardVM") + } + + func testCardViewModelTitlePlaceholder() { + + let cardVM = CardViewModel(card: Card()) + + XCTAssertEqual(cardVM.title, CardViewModel.placeholderTitle, "Placeholder title should've been provided on an empty Card") + + } + +} From 8742e8d1ec20e0fee7583bf6cab28d89e4b0d8a3 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 28 Jul 2022 14:46:50 +0300 Subject: [PATCH 09/53] add Splash Screen icon --- .../SplashScreen.imageset/Contents.json | 12 ++++++++++++ .../Hearthstone-PNG-High-Quality-Image.png | Bin 0 -> 79812 bytes 2 files changed, 12 insertions(+) create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/SplashScreen.imageset/Contents.json create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/SplashScreen.imageset/Hearthstone-PNG-High-Quality-Image.png diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/SplashScreen.imageset/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/SplashScreen.imageset/Contents.json new file mode 100644 index 0000000..bc6d81b --- /dev/null +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/SplashScreen.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Hearthstone-PNG-High-Quality-Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/SplashScreen.imageset/Hearthstone-PNG-High-Quality-Image.png b/Hearthstone/Hearthstone/Assets/Assets.xcassets/SplashScreen.imageset/Hearthstone-PNG-High-Quality-Image.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac414fbe87ed114d6cf8f49258865373aabecb1 GIT binary patch literal 79812 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

    26M19?ldeW%hWp5;=a82=f zdAUBwFk8~qd2n=+QJ!j1(N9(3(k`lwz^GwN+#we(TP{160Tj{tscG%$>DztVd0nqk zg?p$?ru5A2>;FE{SC2-HhFr@3axjPrwWuqSS0=V3RpFou(}LA?{uX2ya-;Z5(=+(7 z$%x(+oEZ_F$RsglWOW;w>Xl08Us47nug^@wWMr(8@KYky%W-XRv2k&D-}ENkdQN^% zKK8d+>SD>Z=%*Lb;HpVjQl#m}>754*TMG|*!zbw+|ttAyROCpZ?0vP zDxx;dZ-jN?1w*b*9=)7Gq3~zfVZp6yzp~~y3uJ#;u+#8S{p;)R9lXI&(@oRANFGe? z8@iioewL_2+XL|N-D}?6T}=DbXOk#ly__3bw@NYb%Q0SiewDKKuPXJ|u3gJv?XI%x zVR32i_?e5b@~?y%P(#+)JX=?96W3hvcsx>j@HfH7!?Jw*zORkL!{V Date: Thu, 28 Jul 2022 14:52:23 +0300 Subject: [PATCH 10/53] create Splash Screen --- .../Base.lproj/LaunchScreen.storyboard | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard b/Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard index 865e932..880bb34 100644 --- a/Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard +++ b/Hearthstone/Hearthstone/Base.lproj/LaunchScreen.storyboard @@ -1,8 +1,10 @@ - - + + + - + + @@ -11,10 +13,21 @@ - + - + + + + + + + + + + + + @@ -22,4 +35,10 @@ + + + + + + From b81f05d576172b369775e557cf834473bcfc25a9 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Fri, 29 Jul 2022 11:20:21 +0300 Subject: [PATCH 11/53] main skeleton (no style added) --- .../Hearthstone.xcodeproj/project.pbxproj | 28 ++++++--- Hearthstone/Hearthstone/AppDelegate.swift | 61 ------------------- .../Hearthstone/Helpers/Extensions.swift | 33 ++++++++++ Hearthstone/Hearthstone/Info.plist | 2 - Hearthstone/Hearthstone/Main.storyboard | 32 ---------- Hearthstone/Hearthstone/SceneDelegate.swift | 50 +++++---------- .../Views/MainViewController.swift | 17 ------ .../CardsCollectionViewController.swift | 17 ++++++ .../HomeTabViewController.swift | 21 +++++++ 9 files changed, 103 insertions(+), 158 deletions(-) delete mode 100644 Hearthstone/Hearthstone/Main.storyboard delete mode 100644 Hearthstone/Hearthstone/Views/MainViewController.swift create mode 100644 Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift create mode 100644 Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index a26a998..f696783 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 3006060828939EFC00EF0BE4 /* CardsCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3006060728939EFC00EF0BE4 /* CardsCollectionViewController.swift */; }; 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFile.swift */; }; 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */; }; 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */; }; @@ -21,8 +22,7 @@ 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; - 30B71184288FE74C00935D29 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30B71183288FE74C00935D29 /* Main.storyboard */; }; - 30B71186288FE76A00935D29 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71185288FE76A00935D29 /* MainViewController.swift */; }; + 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B88F80289319C5005D326E /* HomeTabViewController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -43,6 +43,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 3006060728939EFC00EF0BE4 /* CardsCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsCollectionViewController.swift; sourceTree = ""; }; 30070E4228916E450062F0E6 /* TestCardsFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardsFile.swift; sourceTree = ""; }; 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; @@ -61,8 +62,7 @@ 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardViewModel.swift; sourceTree = ""; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; - 30B71183288FE74C00935D29 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; - 30B71185288FE76A00935D29 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; + 30B88F80289319C5005D326E /* HomeTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTabViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -150,7 +150,6 @@ 305C6FEF288EED28001D4559 /* SceneDelegate.swift */, 3081845C288FCE2E00838205 /* ViewModels */, 30818459288FCE1600838205 /* Views */, - 30B71183288FE74C00935D29 /* Main.storyboard */, ); path = Hearthstone; sourceTree = ""; @@ -175,7 +174,7 @@ 30818459288FCE1600838205 /* Views */ = { isa = PBXGroup; children = ( - 30B71185288FE76A00935D29 /* MainViewController.swift */, + 30B88F8428931DC4005D326E /* ViewControllers */, ); path = Views; sourceTree = ""; @@ -204,6 +203,15 @@ path = ViewModels; sourceTree = ""; }; + 30B88F8428931DC4005D326E /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 30B88F80289319C5005D326E /* HomeTabViewController.swift */, + 3006060728939EFC00EF0BE4 /* CardsCollectionViewController.swift */, + ); + path = ViewControllers; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -319,7 +327,6 @@ 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */, 305C6FFA288EED2B001D4559 /* Assets.xcassets in Resources */, 30818457288FCCCC00838205 /* cards.json in Resources */, - 30B71184288FE74C00935D29 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -349,9 +356,10 @@ 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */, 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */, + 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */, 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, 30B71181288FE1BA00935D29 /* Card.swift in Sources */, - 30B71186288FE76A00935D29 /* MainViewController.swift in Sources */, + 3006060828939EFC00EF0BE4 /* CardsCollectionViewController.swift in Sources */, 30A8D5692892A67600849D1F /* Extensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -553,7 +561,7 @@ INFOPLIST_FILE = Hearthstone/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = ""; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; LD_RUNPATH_SEARCH_PATHS = ( @@ -581,7 +589,7 @@ INFOPLIST_FILE = Hearthstone/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = ""; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/Hearthstone/Hearthstone/AppDelegate.swift b/Hearthstone/Hearthstone/AppDelegate.swift index ac29fc1..bcb5df2 100644 --- a/Hearthstone/Hearthstone/AppDelegate.swift +++ b/Hearthstone/Hearthstone/AppDelegate.swift @@ -11,71 +11,10 @@ import CoreData @main class AppDelegate: UIResponder, UIApplicationDelegate { - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } - // MARK: UISceneSession Lifecycle - - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } - - // MARK: - Core Data stack - - lazy var persistentContainer: NSPersistentContainer = { - /* - The persistent container for the application. This implementation - creates and returns a container, having loaded the store for the - application to it. This property is optional since there are legitimate - error conditions that could cause the creation of the store to fail. - */ - let container = NSPersistentContainer(name: "Hearthstone") - container.loadPersistentStores(completionHandler: { (storeDescription, error) in - if let error = error as NSError? { - // Replace this implementation with code to handle the error appropriately. - // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - - /* - Typical reasons for an error here include: - * The parent directory does not exist, cannot be created, or disallows writing. - * The persistent store is not accessible, due to permissions or data protection when the device is locked. - * The device is out of space. - * The store could not be migrated to the current model version. - Check the error message to determine what the actual problem was. - */ - fatalError("Unresolved error \(error), \(error.userInfo)") - } - }) - return container - }() - - // MARK: - Core Data Saving support - - func saveContext () { - let context = persistentContainer.viewContext - if context.hasChanges { - do { - try context.save() - } catch { - // Replace this implementation with code to handle the error appropriately. - // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - let nserror = error as NSError - fatalError("Unresolved error \(nserror), \(nserror.userInfo)") - } - } - } - } diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 1dbda20..5979c94 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -9,6 +9,7 @@ import Foundation import UIKit +// - MARK: UIKit Extensions extension UIImageView { // Create a placeholder image, since some cards don't have "working" img paths. @@ -44,3 +45,35 @@ extension UIImageView { } } + +extension HomeTabViewController { + + func initView() { + view.backgroundColor = .systemBackground + UITabBar.appearance().barTintColor = .systemBackground + tabBar.tintColor = .label + } + +} + +extension HomeTabViewController { + + func createTabNavigation(for root: UIViewController, with title: String? = "Title", and icon: String? = nil) -> UIViewController { + let navigation = UINavigationController(rootViewController: root) + if let title = title { + navigation.tabBarItem.title = title + } + if let icon = icon { + navigation.tabBarItem.image = UIImage( + systemName: icon, + withConfiguration:UIImage.SymbolConfiguration(scale: .large) + ) + } + navigation.navigationBar.prefersLargeTitles = true + root.navigationItem.title = title + root.navigationItem.largeTitleDisplayMode = .always + + return navigation + } + +} diff --git a/Hearthstone/Hearthstone/Info.plist b/Hearthstone/Hearthstone/Info.plist index dd3c9af..0eb786d 100644 --- a/Hearthstone/Hearthstone/Info.plist +++ b/Hearthstone/Hearthstone/Info.plist @@ -15,8 +15,6 @@ Default Configuration UISceneDelegateClassName $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main diff --git a/Hearthstone/Hearthstone/Main.storyboard b/Hearthstone/Hearthstone/Main.storyboard deleted file mode 100644 index e2ad9b6..0000000 --- a/Hearthstone/Hearthstone/Main.storyboard +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Hearthstone/Hearthstone/SceneDelegate.swift b/Hearthstone/Hearthstone/SceneDelegate.swift index b37c962..94c2b6c 100644 --- a/Hearthstone/Hearthstone/SceneDelegate.swift +++ b/Hearthstone/Hearthstone/SceneDelegate.swift @@ -12,44 +12,22 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? + // Init scene programmatically to "get rid" of Storyboards func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } + + guard let windowScene = (scene as? UIWindowScene) else { return } + + window = UIWindow(frame: UIScreen.main.bounds) + + let homeView = HomeTabViewController() + window?.rootViewController = homeView + window?.makeKeyAndVisible() + window?.windowScene = windowScene + } - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - - // Save changes in the application's managed object context when the application transitions to the background. - (UIApplication.shared.delegate as? AppDelegate)?.saveContext() - } - - +// func sceneDidEnterBackground(_ scene: UIScene) { +// +// } } diff --git a/Hearthstone/Hearthstone/Views/MainViewController.swift b/Hearthstone/Hearthstone/Views/MainViewController.swift deleted file mode 100644 index dc6dbfe..0000000 --- a/Hearthstone/Hearthstone/Views/MainViewController.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// MainViewController.swift -// Hearthstone -// -// Created by Stavros Tsikinas on 26/7/22. -// - -import UIKit - -class MainViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - - } - -} diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift new file mode 100644 index 0000000..1176d3e --- /dev/null +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -0,0 +1,17 @@ +// +// CardsCollectionViewController.swift +// Hearthstone +// +// Created by Epsilon User on 29/7/22. +// + +import UIKit + +class CardsCollectionViewController: UICollectionViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + } + +} diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift new file mode 100644 index 0000000..404e0e4 --- /dev/null +++ b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift @@ -0,0 +1,21 @@ +// +// HomeTabViewController.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 26/7/22. +// + +import UIKit + +class HomeTabViewController: UITabBarController { + + override func viewDidLoad() { + super.viewDidLoad() + + initView() + viewControllers = [ + createTabNavigation(for: CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()), with: "Cards", and: "lanyardcard.fill"), + createTabNavigation(for: CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()), with: "Favorites", and: "star.fill") + ] + } +} From 84b96520b577cb5cf9887ed324c22aff0cce200b Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Fri, 29 Jul 2022 16:06:35 +0300 Subject: [PATCH 12/53] set tab bar styling --- .../AppIcon.appiconset/Contents.json | 5 ----- .../Hearthstone/Helpers/Extensions.swift | 18 ++++++++++++++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json index 9221b9b..5a3257a 100644 --- a/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -70,11 +70,6 @@ "scale" : "2x", "size" : "40x40" }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, { "idiom" : "ipad", "scale" : "2x", diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 5979c94..a29aaac 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -46,12 +46,26 @@ extension UIImageView { } +extension UIColor { + + static var primaryColor: UIColor { + UIColor(red: 0.29, green: 0.79, blue: 0.79, alpha: 1.0) + } + + static var accentColor: UIColor { + UIColor(red: 0.28, green: 0.21, blue: 0.11, alpha: 1.0) + } + +} + + +// - MARK: HomeTabViewController extensionss extension HomeTabViewController { func initView() { view.backgroundColor = .systemBackground - UITabBar.appearance().barTintColor = .systemBackground - tabBar.tintColor = .label + tabBar.tintColor = .primaryColor + tabBar.backgroundColor = .accentColor } } From 5ff4406dd31a38d2d3d25d080fb398971b5415fb Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Sun, 31 Jul 2022 22:28:54 +0300 Subject: [PATCH 13/53] setup grid item view (no view model added) --- .../Hearthstone.xcodeproj/project.pbxproj | 12 ++ .../Hearthstone/Helpers/Extensions.swift | 105 +++++++++++++++--- .../Views/Cells/CardGridViewCell.swift | 53 +++++++++ .../CardsCollectionViewController.swift | 31 +++++- 4 files changed, 183 insertions(+), 18 deletions(-) create mode 100644 Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index f696783..9fc7a2d 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56428929D1B00849D1F /* CardViewModel.swift */; }; 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */; }; + 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B596172896DF3F00253379 /* CardGridViewCell.swift */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B88F80289319C5005D326E /* HomeTabViewController.swift */; }; /* End PBXBuildFile section */ @@ -61,6 +62,7 @@ 30A8D56428929D1B00849D1F /* CardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModel.swift; sourceTree = ""; }; 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardViewModel.swift; sourceTree = ""; }; + 30B596172896DF3F00253379 /* CardGridViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardGridViewCell.swift; sourceTree = ""; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 30B88F80289319C5005D326E /* HomeTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTabViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -174,6 +176,7 @@ 30818459288FCE1600838205 /* Views */ = { isa = PBXGroup; children = ( + 30B596162896DF1C00253379 /* Cells */, 30B88F8428931DC4005D326E /* ViewControllers */, ); path = Views; @@ -203,6 +206,14 @@ path = ViewModels; sourceTree = ""; }; + 30B596162896DF1C00253379 /* Cells */ = { + isa = PBXGroup; + children = ( + 30B596172896DF3F00253379 /* CardGridViewCell.swift */, + ); + path = Cells; + sourceTree = ""; + }; 30B88F8428931DC4005D326E /* ViewControllers */ = { isa = PBXGroup; children = ( @@ -358,6 +369,7 @@ 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */, 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */, 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, + 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */, 30B71181288FE1BA00935D29 /* Card.swift in Sources */, 3006060828939EFC00EF0BE4 /* CardsCollectionViewController.swift in Sources */, 30A8D5692892A67600849D1F /* Extensions.swift in Sources */, diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index a29aaac..2c5f01a 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -16,29 +16,32 @@ extension UIImageView { // Also, seems cooler ;) static var placeholderImageUrl = URL(string: "https://via.placeholder.com/500x500.png?text=No+Image+Found")! - func load(from url: URL) { + func load(from url: URL, mode: UIView.ContentMode) { - DispatchQueue.global().async { [weak self] in - if let imgData = try? Data(contentsOf: url) { - if let img = UIImage(data: imgData) { - DispatchQueue.main.async { - self?.image = img - } - } else { - self?.addPlaceholderImage() + URLSession.shared.dataTask(with: url) { [weak self] data, response, error in + guard + let httpURLResponse = response as? HTTPURLResponse, + httpURLResponse.statusCode == 200, + let data = data, error == nil, + let image = UIImage(data: data) + else { + self?.addPlaceholderImage(with: mode) + return } - } else { - self?.addPlaceholderImage() - } - } + DispatchQueue.main.async() { + self?.image = image + self?.contentMode = mode + } + }.resume() } - private func addPlaceholderImage() { + private func addPlaceholderImage(with mode: UIView.ContentMode) { if let imgData = try? Data(contentsOf: UIImageView.placeholderImageUrl) { if let img = UIImage(data: imgData) { DispatchQueue.main.async { [weak self] in self?.image = img + self?.contentMode = mode } } } @@ -58,6 +61,79 @@ extension UIColor { } +extension UIView { + + /// Make view rounded (dashboard item) + func cardView(of radius: CGFloat, with shadow: UIColor? = nil) { + layer.cornerRadius = radius + if let shadow = shadow { + layer.shadowColor = shadow.cgColor + layer.shadowOffset = CGSize(width: 0.0, height: 0.0) + layer.shadowRadius = 12.0 + layer.shadowOpacity = 0.7 + } + } + + /// Add anchors to the view programmatically + func addAnchors(wAnchor: NSLayoutDimension? = nil, _ wMulti: CGFloat? = nil, + hAnchor: NSLayoutDimension? = nil,_ hMulti: CGFloat? = nil, + cXAnchor: NSLayoutXAxisAnchor? = nil, + cYAnchor: NSLayoutYAxisAnchor? = nil, + lAnchor: NSLayoutXAxisAnchor? = nil, leftConstant: CGFloat? = nil, + tAnchor: NSLayoutYAxisAnchor? = nil, topConstant: CGFloat? = nil, + rAnchor: NSLayoutXAxisAnchor? = nil, rightConstant: CGFloat? = nil, + bAnchor: NSLayoutYAxisAnchor? = nil, bottomConstant: CGFloat? = nil, + widthConstant: CGFloat? = nil, + heightConstant: CGFloat? = nil) { + + translatesAutoresizingMaskIntoConstraints = false + + + if let wAnchor = wAnchor { + widthAnchor.constraint(equalTo: wAnchor, multiplier: wMulti == nil ? 1.0 : wMulti!).isActive = true + } + + if let hAnchor = hAnchor { + heightAnchor.constraint(equalTo: hAnchor, multiplier: hMulti == nil ? 1.0 : hMulti!).isActive = true + } + + if let cXAnchor = cXAnchor { + centerXAnchor.constraint(equalTo: cXAnchor, constant: 0).isActive = true + } + + if let cYAnchor = cYAnchor { + centerYAnchor.constraint(equalTo: cYAnchor, constant: 0).isActive = true + } + + if let lAnchor = lAnchor { + leftAnchor.constraint(equalTo: lAnchor, constant: leftConstant == nil ? 0 : leftConstant!).isActive = true + + } + + if let tAnchor = tAnchor { + topAnchor.constraint(equalTo: tAnchor, constant: topConstant == nil ? 0 : topConstant!).isActive = true + + } + + if let rAnchor = rAnchor { + rightAnchor.constraint(equalTo: rAnchor, constant: rightConstant == nil ? 0 : rightConstant!).isActive = true + } + + if let bAnchor = bAnchor { + bottomAnchor.constraint(equalTo: bAnchor, constant: bottomConstant == nil ? 0 : bottomConstant!).isActive = true + } + + if let widthConstant = widthConstant { + widthAnchor.constraint(equalToConstant: widthConstant).isActive = true + } + + if let heightConstant = heightConstant { + widthAnchor.constraint(equalToConstant: heightConstant).isActive = true + } + } + +} + // - MARK: HomeTabViewController extensionss extension HomeTabViewController { @@ -65,7 +141,6 @@ extension HomeTabViewController { func initView() { view.backgroundColor = .systemBackground tabBar.tintColor = .primaryColor - tabBar.backgroundColor = .accentColor } } diff --git a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift new file mode 100644 index 0000000..b43dc55 --- /dev/null +++ b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift @@ -0,0 +1,53 @@ +// +// CardGridViewCell.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 31/7/22. +// + +import UIKit + +class CardGridViewCell: UICollectionViewCell { + + // MARK: - View Initialization + + lazy var cardName: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 16, weight: .heavy) + label.textAlignment = .center + label.textColor = .systemBlue + + return label + }() + + lazy var cardImage: UIImageView = { + let imageView = UIImageView() + return imageView + }() + + lazy var favoriteButton: UIButton = { + let button = UIButton() + button.setImage(UIImage(systemName: "heart"), for: .normal) + button.tintColor = .red + return button + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + addSubview(cardName) + cardName.addAnchors(wAnchor: widthAnchor, 0.85, cXAnchor: centerXAnchor, tAnchor: topAnchor, topConstant: 8) + addSubview(cardImage) + cardImage.addAnchors(lAnchor: leftAnchor, leftConstant: 4, tAnchor: cardName.bottomAnchor, rAnchor: rightAnchor, rightConstant: -4, bAnchor: bottomAnchor, bottomConstant: -8) + addSubview(favoriteButton) + favoriteButton.addAnchors(rAnchor: rightAnchor, rightConstant: -4, bAnchor: bottomAnchor, bottomConstant: -4) + + layer.borderWidth = 0.75 + layer.borderColor = UIColor.accentColor.cgColor + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 1176d3e..244dbf6 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -2,16 +2,41 @@ // CardsCollectionViewController.swift // Hearthstone // -// Created by Epsilon User on 29/7/22. +// Created by Stavros Tsikinas on 29/7/22. // import UIKit -class CardsCollectionViewController: UICollectionViewController { +class CardsCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { override func viewDidLoad() { super.viewDidLoad() - + + collectionView.register(CardGridViewCell.self, forCellWithReuseIdentifier: "CardCell") + } + + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + 1 + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + return CGSize(width: 150, height: 250) + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { + return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) } + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CardCell", for: indexPath) as? CardGridViewCell else { + return UICollectionViewCell() + } + if let imageUrl = URL( + string: "https://wow.zamimg.com/images/hearthstone/cards/enus/original/FP1_014.png") { + cell.cardImage.load(from: imageUrl, mode: .scaleAspectFit) + } + + return cell + } + } From 9365b40d68d7a756510035692990e0fa6a8f5c7d Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 3 Aug 2022 15:53:11 +0300 Subject: [PATCH 14/53] attach vm to grid cell --- .../Hearthstone/Helpers/Extensions.swift | 24 +++++++++++++++++++ Hearthstone/Hearthstone/Models/Card.swift | 23 ------------------ .../ViewModels/CardViewModel.swift | 22 ++++++----------- .../Views/Cells/CardGridViewCell.swift | 6 +++++ .../CardsCollectionViewController.swift | 15 ++++++++---- .../CardsTests/Helpers/CardsHelper.swift | 10 ++++++++ .../CardsTests/TestCardViewModel.swift | 4 ++-- 7 files changed, 59 insertions(+), 45 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 2c5f01a..59c547d 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -166,3 +166,27 @@ extension HomeTabViewController { } } + +extension CardsCollectionViewController { + + func select(_ card: Card) { + + } + +} + +extension CardViewModel { + + // In case new entries have "corrupt" data + static var placeholderTitle: String { + "No Name" + } +} + +extension CardGridViewCell { + + func configure() { + cardName.text = cardViewModel.title + } + +} diff --git a/Hearthstone/Hearthstone/Models/Card.swift b/Hearthstone/Hearthstone/Models/Card.swift index 948b23f..3034125 100644 --- a/Hearthstone/Hearthstone/Models/Card.swift +++ b/Hearthstone/Hearthstone/Models/Card.swift @@ -30,29 +30,6 @@ struct Card { var locale: String? var mechanics: [String]? - // Instantiation of a Card object for testing and internal purposes - init(cardId: String? = nil, name: String? = nil, cardSet: String? = nil, type: String? = nil, rarity: String? = nil, cost: Int? = nil, attack: Int? = nil, health: Int? = nil, text: String? = nil, flavor: String? = nil, artist: String? = nil, collectible: Bool? = nil, elite: Bool? = nil, playerClass: String? = nil, multiClassGroup: String? = nil, classes: [String]? = nil, img: String? = nil, imgGold: String? = nil, locale: String? = nil, mechanics: [String]? = nil) { - self.cardId = cardId - self.name = name - self.cardSet = cardSet - self.type = type - self.rarity = rarity - self.cost = cost - self.attack = attack - self.health = health - self.text = text - self.flavor = flavor - self.artist = artist - self.collectible = collectible - self.elite = elite - self.playerClass = playerClass - self.multiClassGroup = multiClassGroup - self.classes = classes - self.img = img - self.imgGold = imgGold - self.locale = locale - self.mechanics = mechanics - } // JSON Serialization returns a Dictionary of card category arrays init(from dictionary: [String: Any]) { diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index 17df040..4f3de18 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -11,22 +11,14 @@ struct CardViewModel { let title: String let image: String? + let isFavorite: Bool = false + let select: () -> Void -} - -extension CardViewModel { - - // In case new entries have "corrupt" data - static var placeholderTitle: String { - "No Name" - } -} - -extension CardViewModel { - - init(card: Card) { - title = card.name ?? CardViewModel.placeholderTitle - image = card.img + init(card: Card, select: @escaping () -> Void) { + self.title = card.name ?? CardViewModel.placeholderTitle + self.image = card.img + // TODO: isFavorite should be initialized based on the Query in DB (Favorites table) + self.select = select } } diff --git a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift index b43dc55..5e40202 100644 --- a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift +++ b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift @@ -32,6 +32,12 @@ class CardGridViewCell: UICollectionViewCell { return button }() + var cardViewModel: CardViewModel! { + didSet { + cardName.text = cardViewModel.title + } + } + override init(frame: CGRect) { super.init(frame: frame) diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 244dbf6..3d44c6c 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -9,14 +9,17 @@ import UIKit class CardsCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { + var cards = [CardViewModel]() + override func viewDidLoad() { super.viewDidLoad() collectionView.register(CardGridViewCell.self, forCellWithReuseIdentifier: "CardCell") + } override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - 1 + cards.count } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { @@ -31,12 +34,14 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CardCell", for: indexPath) as? CardGridViewCell else { return UICollectionViewCell() } - if let imageUrl = URL( - string: "https://wow.zamimg.com/images/hearthstone/cards/enus/original/FP1_014.png") { - cell.cardImage.load(from: imageUrl, mode: .scaleAspectFit) - } + cell.cardViewModel = cards[indexPath.row] return cell } + override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let card = cards[indexPath.row] + card.select() + } + } diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift index 42cfc29..8338396 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift @@ -8,7 +8,17 @@ import Foundation @testable import Hearthstone +/// +/// Initializers for dummy cards. +/// +func testCard(name: String, img: String) -> Card { + Card(from: ["name": name, "img": img]) +} +func testCard() -> Card { + Card(from: [:]) +} + /// /// Test helper method of retrieving the json url. /// diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift index 66bd259..d655aa2 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift @@ -16,7 +16,7 @@ class TestCardViewModel: XCTestCase { } func testCardViewModelInitialization() { - let cardVM = CardViewModel(card: Card(name: "a Card", img: "https://www.cardlink.card/card.png")) + let cardVM = CardViewModel(card: testCard(name: "a Card", img: "https://www.cardlink.card/card.png"), select: {}) XCTAssertNotNil(cardVM.title, "No title found on cardVM") XCTAssertNotNil(cardVM.image, "No image path found on cardVM") @@ -24,7 +24,7 @@ class TestCardViewModel: XCTestCase { func testCardViewModelTitlePlaceholder() { - let cardVM = CardViewModel(card: Card()) + let cardVM = CardViewModel(card: testCard(), select: {}) XCTAssertEqual(cardVM.title, CardViewModel.placeholderTitle, "Placeholder title should've been provided on an empty Card") From b2661215f25dc05f4c9cf089ba759849f5fea119 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 3 Aug 2022 22:36:37 +0300 Subject: [PATCH 15/53] decided to use extension of UIImageView instead of service! --- .../Hearthstone/Helpers/Extensions.swift | 32 ++++++++++++++----- Hearthstone/Hearthstone/Models/Card.swift | 5 +-- .../ViewModels/CardViewModel.swift | 2 +- .../Views/Cells/CardGridViewCell.swift | 1 + 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 59c547d..a17900b 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -12,10 +12,6 @@ import UIKit // - MARK: UIKit Extensions extension UIImageView { - // Create a placeholder image, since some cards don't have "working" img paths. - // Also, seems cooler ;) - static var placeholderImageUrl = URL(string: "https://via.placeholder.com/500x500.png?text=No+Image+Found")! - func load(from url: URL, mode: UIView.ContentMode) { URLSession.shared.dataTask(with: url) { [weak self] data, response, error in @@ -25,7 +21,7 @@ extension UIImageView { let data = data, error == nil, let image = UIImage(data: data) else { - self?.addPlaceholderImage(with: mode) + self?.addPlaceholderImage(from: url, with: mode) return } DispatchQueue.main.async() { @@ -35,9 +31,9 @@ extension UIImageView { }.resume() } - private func addPlaceholderImage(with mode: UIView.ContentMode) { + private func addPlaceholderImage(from url: URL, with mode: UIView.ContentMode) { - if let imgData = try? Data(contentsOf: UIImageView.placeholderImageUrl) { + if let imgData = try? Data(contentsOf: url) { if let img = UIImage(data: imgData) { DispatchQueue.main.async { [weak self] in self?.image = img @@ -135,7 +131,16 @@ extension UIView { } -// - MARK: HomeTabViewController extensionss +// - MARK: Foundation extensions + +extension String { + + func convertToURL() -> URL? { + URL(string: self) + } +} + +// - MARK: Custom extensionss extension HomeTabViewController { func initView() { @@ -183,6 +188,17 @@ extension CardViewModel { } } +extension CardViewModel { + + func getUrl() -> URL { + guard let url = self.image.convertToURL() else { + return URL(string: "https://via.placeholder.com/500x500.png?text=No+Image+Found")! + } + return url + } + +} + extension CardGridViewCell { func configure() { diff --git a/Hearthstone/Hearthstone/Models/Card.swift b/Hearthstone/Hearthstone/Models/Card.swift index 3034125..5151e27 100644 --- a/Hearthstone/Hearthstone/Models/Card.swift +++ b/Hearthstone/Hearthstone/Models/Card.swift @@ -25,7 +25,7 @@ struct Card { var playerClass: String? var multiClassGroup: String? var classes: [String]? - var img: String? + var img: String var imgGold: String? var locale: String? var mechanics: [String]? @@ -49,7 +49,8 @@ struct Card { self.playerClass = dictionary["playerClass"] as? String self.multiClassGroup = dictionary["multiClassGroup"] as? String self.classes = dictionary["classes"] as? [String] - self.img = dictionary["img"] as? String + // Set default value to obtain at least the placeholder image + self.img = dictionary["img"] as? String ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" self.imgGold = dictionary["imgGold"] as? String self.locale = dictionary["locale"] as? String self.mechanics = dictionary["mechanics"] as? [String] diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index 4f3de18..5c8e25d 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -10,7 +10,7 @@ import Foundation struct CardViewModel { let title: String - let image: String? + let image: String let isFavorite: Bool = false let select: () -> Void diff --git a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift index 5e40202..831cc98 100644 --- a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift +++ b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift @@ -35,6 +35,7 @@ class CardGridViewCell: UICollectionViewCell { var cardViewModel: CardViewModel! { didSet { cardName.text = cardViewModel.title + cardImage.load(from: cardViewModel.getUrl(), mode: .scaleAspectFit) } } From 0e91dca26d22fa003c0397700efd3539627bd385 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 3 Aug 2022 22:55:42 +0300 Subject: [PATCH 16/53] unit test with placeholder image url --- Hearthstone/Hearthstone/Helpers/Extensions.swift | 4 ++++ .../Hearthstone/Views/Cells/CardGridViewCell.swift | 3 +-- .../CardsTests/Helpers/CardsHelper.swift | 10 +++------- .../CardsTests/TestCardViewModel.swift | 8 ++++++++ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index a17900b..c4f35c8 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -12,6 +12,7 @@ import UIKit // - MARK: UIKit Extensions extension UIImageView { + // TODO: Write Unit Tests func load(from url: URL, mode: UIView.ContentMode) { URLSession.shared.dataTask(with: url) { [weak self] data, response, error in @@ -152,6 +153,7 @@ extension HomeTabViewController { extension HomeTabViewController { + // TODO: Write UI Tests func createTabNavigation(for root: UIViewController, with title: String? = "Title", and icon: String? = nil) -> UIViewController { let navigation = UINavigationController(rootViewController: root) if let title = title { @@ -201,8 +203,10 @@ extension CardViewModel { extension CardGridViewCell { + // TODO: Write UI Test func configure() { cardName.text = cardViewModel.title + cardImage.load(from: cardViewModel.getUrl(), mode: .scaleAspectFit) } } diff --git a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift index 831cc98..cdde55f 100644 --- a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift +++ b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift @@ -34,8 +34,7 @@ class CardGridViewCell: UICollectionViewCell { var cardViewModel: CardViewModel! { didSet { - cardName.text = cardViewModel.title - cardImage.load(from: cardViewModel.getUrl(), mode: .scaleAspectFit) + configure() } } diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift index 8338396..ddf73df 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift @@ -9,14 +9,10 @@ import Foundation @testable import Hearthstone /// -/// Initializers for dummy cards. +/// Initializer for dummy cards. /// -func testCard(name: String, img: String) -> Card { - Card(from: ["name": name, "img": img]) -} - -func testCard() -> Card { - Card(from: [:]) +func testCard(name: String? = nil, img: String? = nil) -> Card { + Card(from: ["name": name as Any, "img": img as Any]) } /// diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift index d655aa2..a520a4f 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift @@ -29,5 +29,13 @@ class TestCardViewModel: XCTestCase { XCTAssertEqual(cardVM.title, CardViewModel.placeholderTitle, "Placeholder title should've been provided on an empty Card") } + + func testCardViewModelImageUrlPlaceholder() { + let cardVM = CardViewModel(card: testCard(name: "a Card"), select: {}) + + XCTAssertEqual(cardVM.getUrl(), + URL(string: "https://via.placeholder.com/500x500.png?text=No+Image+Found")!, + "Placeholder Image should have a valid URL") + } } From 9466434786e7a860ca912abbd6abba324e36038b Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Sun, 7 Aug 2022 22:35:44 +0300 Subject: [PATCH 17/53] setup cardDataService --- .../Hearthstone.xcodeproj/project.pbxproj | 12 +++ .../Hearthstone/Helpers/Extensions.swift | 74 ++++++++++++++----- Hearthstone/Hearthstone/Models/Card.swift | 57 +++++++------- .../Services/CardsDataService.swift | 71 ++++++++++++++++++ .../ViewModels/CardViewModel.swift | 6 +- 5 files changed, 167 insertions(+), 53 deletions(-) create mode 100644 Hearthstone/Hearthstone/Services/CardsDataService.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 9fc7a2d..8e1abb0 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */; }; 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3063DB77289273C100715E98 /* CardsHelper.swift */; }; 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; + 30A0F276289C5AEA00617094 /* CardsDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A0F275289C5AEA00617094 /* CardsDataService.swift */; }; 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56428929D1B00849D1F /* CardViewModel.swift */; }; 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */; }; @@ -59,6 +60,7 @@ 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3063DB77289273C100715E98 /* CardsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsHelper.swift; sourceTree = ""; }; 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; + 30A0F275289C5AEA00617094 /* CardsDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsDataService.swift; sourceTree = ""; }; 30A8D56428929D1B00849D1F /* CardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModel.swift; sourceTree = ""; }; 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardViewModel.swift; sourceTree = ""; }; @@ -142,6 +144,7 @@ 305C6FEC288EED28001D4559 /* Hearthstone */ = { isa = PBXGroup; children = ( + 30A0F274289C5A0700617094 /* Services */, 305C6FED288EED28001D4559 /* AppDelegate.swift */, 30818455288FCCBF00838205 /* Assets */, 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */, @@ -206,6 +209,14 @@ path = ViewModels; sourceTree = ""; }; + 30A0F274289C5A0700617094 /* Services */ = { + isa = PBXGroup; + children = ( + 30A0F275289C5AEA00617094 /* CardsDataService.swift */, + ); + path = Services; + sourceTree = ""; + }; 30B596162896DF1C00253379 /* Cells */ = { isa = PBXGroup; children = ( @@ -365,6 +376,7 @@ buildActionMask = 2147483647; files = ( 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */, + 30A0F276289C5AEA00617094 /* CardsDataService.swift in Sources */, 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */, 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */, diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index c4f35c8..25cb88f 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -141,7 +141,60 @@ extension String { } } -// - MARK: Custom extensionss +// - MARK: Custom extensions + +// - MARK: - Models Extensions + +extension CardsResponse { + // Ensure that decoding is successful for keys with whitespaces/special characters + enum CodingKeys: String, CodingKey { + case Basic = "Basic" + case Classic = "Classic" + case Promo = "Promo" + case HallofFame = "Hall of Fame" + case Naxxramas = "Naxxramas" + case GoblinsvsGnomes = "Goblins vs Gnomes" + case BlackrockMountain = "Blackrock Mountain" + case TheGrandTournament = "The Grand Tournament" + case TheLeagueofExplorers = "The League of Explorers" + case WhispersoftheOldGods = "Whispers of the Old Gods" + case OneNightinKarazhan = "One Night in Karazhan" + case MeanStreetsofGadgetzan = "Mean Streets of Gadgetzan" + case JourneytoUnGoro = "Journey to Un'Goro" + case TavernBrawl = "Tavern Brawl" + case HeroSkins = "Hero Skins" + case Missions = "Missions" + case Credits = "Credits" + case System = "System" + case Debug = "Debug" + } + + func getAllCards() -> [Card] { + Basic + Classic + Promo + HallofFame + Naxxramas + GoblinsvsGnomes + BlackrockMountain + TheGrandTournament + TheLeagueofExplorers + WhispersoftheOldGods + OneNightinKarazhan + MeanStreetsofGadgetzan + JourneytoUnGoro + TavernBrawl + HeroSkins + Missions + Credits + System + Debug + } +} + +extension CardViewModel { + + // In case new entries have "corrupt" data + static var placeholderTitle: String { + "No Name" + } +} + +extension CardViewModel { + + func getUrl() -> URL { + guard let url = self.image.convertToURL() else { + return URL(string: "https://via.placeholder.com/500x500.png?text=No+Image+Found")! + } + return url + } + +} + +// - MARK: - Views Extensions + extension HomeTabViewController { func initView() { @@ -182,25 +235,6 @@ extension CardsCollectionViewController { } -extension CardViewModel { - - // In case new entries have "corrupt" data - static var placeholderTitle: String { - "No Name" - } -} - -extension CardViewModel { - - func getUrl() -> URL { - guard let url = self.image.convertToURL() else { - return URL(string: "https://via.placeholder.com/500x500.png?text=No+Image+Found")! - } - return url - } - -} - extension CardGridViewCell { // TODO: Write UI Test diff --git a/Hearthstone/Hearthstone/Models/Card.swift b/Hearthstone/Hearthstone/Models/Card.swift index 5151e27..a5d243c 100644 --- a/Hearthstone/Hearthstone/Models/Card.swift +++ b/Hearthstone/Hearthstone/Models/Card.swift @@ -7,7 +7,30 @@ import Foundation -struct Card { +// For the purpose of the DEMO we make the assumption that we know the Card Categories beforehand (if API requests, the setup would be different) +struct CardsResponse: Codable { + var Basic: [Card] = Array() + var Classic: [Card] = Array() + var Promo: [Card] = Array() + var HallofFame: [Card] = Array() + var Naxxramas: [Card] = Array() + var GoblinsvsGnomes: [Card] = Array() + var BlackrockMountain: [Card] = Array() + var TheGrandTournament: [Card] = Array() + var TheLeagueofExplorers: [Card] = Array() + var WhispersoftheOldGods: [Card] = Array() + var OneNightinKarazhan: [Card] = Array() + var MeanStreetsofGadgetzan: [Card] = Array() + var JourneytoUnGoro: [Card] = Array() + var TavernBrawl: [Card] = Array() + var HeroSkins: [Card] = Array() + var Missions: [Card] = Array() + var Credits: [Card] = Array() + var System: [Card] = Array() + var Debug: [Card] = Array() +} + +struct Card: Codable { var cardId: String? var name: String? @@ -24,36 +47,10 @@ struct Card { var elite: Bool? var playerClass: String? var multiClassGroup: String? - var classes: [String]? - var img: String + var classes: [String]? = Array() + var img: String? var imgGold: String? var locale: String? - var mechanics: [String]? - - - // JSON Serialization returns a Dictionary of card category arrays - init(from dictionary: [String: Any]) { - self.cardId = dictionary["cardId"] as? String - self.name = dictionary["name"] as? String - self.cardSet = dictionary["cardSet"] as? String - self.type = dictionary["type"] as? String - self.rarity = dictionary["rarity"] as? String - self.cost = dictionary["cost"] as? Int - self.attack = dictionary["attack"] as? Int - self.health = dictionary["health"] as? Int - self.text = dictionary["text"] as? String - self.flavor = dictionary["flavor"] as? String - self.artist = dictionary["artist"] as? String - self.collectible = dictionary["collectible"] as? Bool - self.elite = dictionary["elite"] as? Bool - self.playerClass = dictionary["playerClass"] as? String - self.multiClassGroup = dictionary["multiClassGroup"] as? String - self.classes = dictionary["classes"] as? [String] - // Set default value to obtain at least the placeholder image - self.img = dictionary["img"] as? String ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" - self.imgGold = dictionary["imgGold"] as? String - self.locale = dictionary["locale"] as? String - self.mechanics = dictionary["mechanics"] as? [String] - } + var mechanics: [[String: String]]? = Array() } diff --git a/Hearthstone/Hearthstone/Services/CardsDataService.swift b/Hearthstone/Hearthstone/Services/CardsDataService.swift new file mode 100644 index 0000000..9dac6c3 --- /dev/null +++ b/Hearthstone/Hearthstone/Services/CardsDataService.swift @@ -0,0 +1,71 @@ +// +// CardsDataService.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 4/8/22. +// + +import Foundation + +protocol LocalDownloadProtocol { + + func getUrl(from name: String?, typed: String?) -> URL? + func getJSONString(from url: URL) throws -> String? + +} + +protocol JSONConverterProtocol { + + func convert(from json: String, completion: @escaping([Card]) -> Void) + +} + +protocol ResultHadler { + func handleParsed(_ cards: [Card]) -> [CardViewModel] +} + +struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHadler { + + let extensionType = "json" + + func convert(from json: String, completion: @escaping ([Card]) -> Void) { + do { + if let fileUrl = getUrl(from: json, typed: extensionType), + let jsonString = try getJSONString(from: fileUrl), + let jsonData = jsonString.data(using: .utf8) { + let decoder = JSONDecoder() + let cardsData = try decoder.decode(CardsResponse.self, from: jsonData) + + completion(cardsData.getAllCards()) + } + } catch { + print(error) + completion([]) + } + completion([]) + } + + func handleParsed(_ cards: [Card]) -> [CardViewModel] { + var viewModels = [CardViewModel]() + for card in cards { + viewModels.append(CardViewModel(card: card, select: {})) + } + return viewModels + } + + + internal func getUrl(from name: String?, typed: String?) -> URL? { + Bundle.main.url(forResource: name, withExtension: typed) + } + + internal func getJSONString(from url: URL) throws -> String? { + do { + return try String(contentsOf: url, encoding: .utf8) + } catch { + return nil + } + } + + + +} diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index 5c8e25d..734dca4 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -11,14 +11,14 @@ struct CardViewModel { let title: String let image: String - let isFavorite: Bool = false + let isFavorite: Bool let select: () -> Void init(card: Card, select: @escaping () -> Void) { self.title = card.name ?? CardViewModel.placeholderTitle - self.image = card.img + self.image = card.img ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" // TODO: isFavorite should be initialized based on the Query in DB (Favorites table) + isFavorite = false self.select = select } - } From 912e73e741935260a5f447bc39bb93daa7dce357 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 8 Aug 2022 16:06:19 +0300 Subject: [PATCH 18/53] inject service to views --- Hearthstone/Hearthstone/Helpers/Extensions.swift | 7 +++++++ .../Hearthstone/Services/CardsDataService.swift | 10 +++++++++- .../CardsCollectionViewController.swift | 2 +- .../ViewControllers/HomeTabViewController.swift | 12 +++++++++--- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 25cb88f..34f2e8a 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -193,6 +193,13 @@ extension CardViewModel { } +extension CardsDataService { + enum ServiceType { + case AllCards + case Favorites + } +} + // - MARK: - Views Extensions extension HomeTabViewController { diff --git a/Hearthstone/Hearthstone/Services/CardsDataService.swift b/Hearthstone/Hearthstone/Services/CardsDataService.swift index 9dac6c3..14f3ec4 100644 --- a/Hearthstone/Hearthstone/Services/CardsDataService.swift +++ b/Hearthstone/Hearthstone/Services/CardsDataService.swift @@ -26,6 +26,8 @@ protocol ResultHadler { struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHadler { + let type: ServiceType + let extensionType = "json" func convert(from json: String, completion: @escaping ([Card]) -> Void) { @@ -48,7 +50,13 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad func handleParsed(_ cards: [Card]) -> [CardViewModel] { var viewModels = [CardViewModel]() for card in cards { - viewModels.append(CardViewModel(card: card, select: {})) + switch type { + case .AllCards: + viewModels.append(CardViewModel(card: card, select: {})) + break + default: + break + } } return viewModels } diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 3d44c6c..745a1a2 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -10,12 +10,12 @@ import UIKit class CardsCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { var cards = [CardViewModel]() + var service: CardsDataService? override func viewDidLoad() { super.viewDidLoad() collectionView.register(CardGridViewCell.self, forCellWithReuseIdentifier: "CardCell") - } override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift index 404e0e4..7ca6e27 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift @@ -8,14 +8,20 @@ import UIKit class HomeTabViewController: UITabBarController { - + override func viewDidLoad() { super.viewDidLoad() initView() + + let allVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) + allVC.service = CardsDataService(type: .AllCards) + let favVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) + favVC.service = CardsDataService(type: .Favorites) + viewControllers = [ - createTabNavigation(for: CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()), with: "Cards", and: "lanyardcard.fill"), - createTabNavigation(for: CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()), with: "Favorites", and: "star.fill") + createTabNavigation(for: allVC, with: "Cards", and: "lanyardcard.fill"), + createTabNavigation(for: favVC, with: "Favorites", and: "star.fill") ] } } From 159f853b2f5b5640e4853dcafee9dc06c7bdbff7 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 8 Aug 2022 16:34:14 +0300 Subject: [PATCH 19/53] write unit tests for cards data service --- .../Hearthstone.xcodeproj/project.pbxproj | 4 ++ .../CardsTests/Helpers/CardsHelper.swift | 13 +++++- .../CardsTests/TestAllCardService.swift | 43 +++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 8e1abb0..2a54c89 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56428929D1B00849D1F /* CardViewModel.swift */; }; 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */; }; + 30A8DD3A28A142B800AF6A01 /* TestAllCardService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8DD3928A142B800AF6A01 /* TestAllCardService.swift */; }; 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B596172896DF3F00253379 /* CardGridViewCell.swift */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B88F80289319C5005D326E /* HomeTabViewController.swift */; }; @@ -64,6 +65,7 @@ 30A8D56428929D1B00849D1F /* CardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModel.swift; sourceTree = ""; }; 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardViewModel.swift; sourceTree = ""; }; + 30A8DD3928A142B800AF6A01 /* TestAllCardService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestAllCardService.swift; sourceTree = ""; }; 30B596172896DF3F00253379 /* CardGridViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardGridViewCell.swift; sourceTree = ""; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 30B88F80289319C5005D326E /* HomeTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTabViewController.swift; sourceTree = ""; }; @@ -100,6 +102,7 @@ 30070E4228916E450062F0E6 /* TestCardsFile.swift */, 30070E4128916E010062F0E6 /* Helpers */, 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */, + 30A8DD3928A142B800AF6A01 /* TestAllCardService.swift */, ); path = CardsTests; sourceTree = ""; @@ -395,6 +398,7 @@ 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */, 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */, 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */, + 30A8DD3A28A142B800AF6A01 /* TestAllCardService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift index ddf73df..26028ce 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift @@ -9,10 +9,19 @@ import Foundation @testable import Hearthstone /// -/// Initializer for dummy cards. +/// Initializers for dummy cards. /// func testCard(name: String? = nil, img: String? = nil) -> Card { - Card(from: ["name": name as Any, "img": img as Any]) + Card(cardId: nil, name: name, cardSet: nil, type: nil, rarity: nil, cost: nil, attack: nil, health: nil, text: nil, flavor: nil, artist: nil, collectible: nil, elite: nil, playerClass: nil, multiClassGroup: nil, classes: nil, img: img, imgGold: nil, locale: nil, mechanics: nil) +} + +func testCardArray() -> [Card] { + var cards = [Card]() + for i in 0...5 { + cards.append(testCard(name: "Card #\(i)", img: "a://whatever.image")) + } + + return cards } /// diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift new file mode 100644 index 0000000..5791c03 --- /dev/null +++ b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift @@ -0,0 +1,43 @@ +// +// TestAllCardService.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 8/8/22. +// + +import XCTest +@testable import Hearthstone + +class TestAllCardService: XCTestCase { + + var sut: CardsDataService! + + override func setUpWithError() throws { + try super.setUpWithError() + sut = CardsDataService(type: .AllCards) + } + + override func tearDownWithError() throws { + sut = nil + + try super.tearDownWithError() + } + + func testServiceIsCorrectType() { + + XCTAssertTrue(sut.type == CardsDataService.ServiceType.AllCards, "Service should be of type: \(CardsDataService.ServiceType.AllCards)") + + } + + func testServiceReturnsAllCards() { + let testArray = testCardArray() + + let cardVMs = sut.handleParsed(testArray) + + XCTAssertNotEqual(cardVMs.count, 0, "Service should return value > 0") + + XCTAssertEqual(cardVMs.count, testArray.count, "Service should return as many VMs as the input") + + } + +} From 86ca2d405d939df872b11acceeca95278d1cc361 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 8 Aug 2022 16:58:49 +0300 Subject: [PATCH 20/53] fill all cards view --- .../Hearthstone/Services/CardsDataService.swift | 1 - .../CardsCollectionViewController.swift | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Hearthstone/Hearthstone/Services/CardsDataService.swift b/Hearthstone/Hearthstone/Services/CardsDataService.swift index 14f3ec4..5d3fcab 100644 --- a/Hearthstone/Hearthstone/Services/CardsDataService.swift +++ b/Hearthstone/Hearthstone/Services/CardsDataService.swift @@ -44,7 +44,6 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad print(error) completion([]) } - completion([]) } func handleParsed(_ cards: [Card]) -> [CardViewModel] { diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 745a1a2..8ee03e9 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -16,6 +16,7 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie super.viewDidLoad() collectionView.register(CardGridViewCell.self, forCellWithReuseIdentifier: "CardCell") + loadData() } override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { @@ -34,6 +35,9 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CardCell", for: indexPath) as? CardGridViewCell else { return UICollectionViewCell() } + if cards.isEmpty { + return cell + } cell.cardViewModel = cards[indexPath.row] return cell @@ -44,4 +48,16 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie card.select() } + func loadData() { + + DispatchQueue.global().async { [weak self] in + self?.service?.convert(from: "cards") { items in + self?.cards = self?.service?.handleParsed(items) ?? [] + DispatchQueue.main.async { + self?.collectionView.reloadData() + } + } + } + } + } From dcee3d8ad9ff2ab7f610e1283093f8da862ebaed Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 9 Aug 2022 12:44:14 +0300 Subject: [PATCH 21/53] Allow http requests (images hosted) --- Hearthstone/Hearthstone/Info.plist | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Hearthstone/Hearthstone/Info.plist b/Hearthstone/Hearthstone/Info.plist index 0eb786d..bc240fd 100644 --- a/Hearthstone/Hearthstone/Info.plist +++ b/Hearthstone/Hearthstone/Info.plist @@ -2,6 +2,11 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + UIApplicationSceneManifest UIApplicationSupportsMultipleScenes From 77a352e31448161b804b0dfe64c06e07c0eefea5 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 10 Aug 2022 23:05:19 +0300 Subject: [PATCH 22/53] setup watermark view for empty collections --- .../Hearthstone.xcodeproj/project.pbxproj | 12 +++++ .../Views/Misc/WatermarkView.swift | 50 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 2a54c89..07033ab 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 305C6FFD288EED2B001D4559 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 305C6FFB288EED2B001D4559 /* LaunchScreen.storyboard */; }; 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3063DB77289273C100715E98 /* CardsHelper.swift */; }; 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; + 309EFDD328A43C1400D3F753 /* WatermarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309EFDD228A43C1400D3F753 /* WatermarkView.swift */; }; 30A0F276289C5AEA00617094 /* CardsDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A0F275289C5AEA00617094 /* CardsDataService.swift */; }; 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56428929D1B00849D1F /* CardViewModel.swift */; }; 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; @@ -61,6 +62,7 @@ 305C7003288EED2C001D4559 /* HearthstoneTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3063DB77289273C100715E98 /* CardsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsHelper.swift; sourceTree = ""; }; 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; + 309EFDD228A43C1400D3F753 /* WatermarkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatermarkView.swift; sourceTree = ""; }; 30A0F275289C5AEA00617094 /* CardsDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsDataService.swift; sourceTree = ""; }; 30A8D56428929D1B00849D1F /* CardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModel.swift; sourceTree = ""; }; 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; @@ -182,6 +184,7 @@ 30818459288FCE1600838205 /* Views */ = { isa = PBXGroup; children = ( + 309EFDD128A43BF900D3F753 /* Misc */, 30B596162896DF1C00253379 /* Cells */, 30B88F8428931DC4005D326E /* ViewControllers */, ); @@ -212,6 +215,14 @@ path = ViewModels; sourceTree = ""; }; + 309EFDD128A43BF900D3F753 /* Misc */ = { + isa = PBXGroup; + children = ( + 309EFDD228A43C1400D3F753 /* WatermarkView.swift */, + ); + path = Misc; + sourceTree = ""; + }; 30A0F274289C5A0700617094 /* Services */ = { isa = PBXGroup; children = ( @@ -384,6 +395,7 @@ 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */, 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */, 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, + 309EFDD328A43C1400D3F753 /* WatermarkView.swift in Sources */, 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */, 30B71181288FE1BA00935D29 /* Card.swift in Sources */, 3006060828939EFC00EF0BE4 /* CardsCollectionViewController.swift in Sources */, diff --git a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift new file mode 100644 index 0000000..c1073af --- /dev/null +++ b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift @@ -0,0 +1,50 @@ +// +// WatermarkView.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 10/8/22. +// + +import Foundation +import UIKit + +class WatermarkView: UIView { + + // MARK: - Subivew Initializers + lazy var title: UILabel = { + let label = UILabel() + label.font = UIFont(name: "Helvetica", size: 16) + label.textColor = UIColor(named: "Placeholder Color") + label.textAlignment = .center + label.sizeToFit() + label.numberOfLines = 0 + + return label + }() + + lazy var imageview: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .center + + return imageView + }() + + + init(frame: CGRect, with text: String, image: UIImage) { + super.init(frame: frame) + + imageview.image = image + title.text = text + + addSubview(imageview) + imageview.addAnchors(cXAnchor: centerXAnchor, cYAnchor: centerYAnchor) + addSubview(title) + title.addAnchors(wAnchor: widthAnchor, 0.8, cXAnchor: centerXAnchor, tAnchor: imageview.bottomAnchor, topConstant: 8) + + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + +} From ebebe4813e6f17fd9a95694d618a7bd18d7230bb Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 10 Aug 2022 23:19:56 +0300 Subject: [PATCH 23/53] add watermark view to view controller --- .../AppIcon.appiconset/Contents.json | 5 ++++ .../oops.imageset/Contents.json | 23 ++++++++++++++++++ .../oops.imageset/PVPDR_SW_Passive_08.png | Bin 0 -> 60347 bytes .../oops.imageset/PVPDR_SW_Passive_08@2x.png | Bin 0 -> 203897 bytes .../oops.imageset/PVPDR_SW_Passive_08@3x.png | Bin 0 -> 364901 bytes .../CardsCollectionViewController.swift | 6 +++++ 6 files changed, 34 insertions(+) create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/Contents.json create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/PVPDR_SW_Passive_08.png create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/PVPDR_SW_Passive_08@2x.png create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/PVPDR_SW_Passive_08@3x.png diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json index 5a3257a..9221b9b 100644 --- a/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -70,6 +70,11 @@ "scale" : "2x", "size" : "40x40" }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, { "idiom" : "ipad", "scale" : "2x", diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/Contents.json new file mode 100644 index 0000000..026b188 --- /dev/null +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "PVPDR_SW_Passive_08.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "PVPDR_SW_Passive_08@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "PVPDR_SW_Passive_08@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/PVPDR_SW_Passive_08.png b/Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/PVPDR_SW_Passive_08.png new file mode 100644 index 0000000000000000000000000000000000000000..36f1e2d6fdd546240c485380286ebead350bc93b GIT binary patch literal 60347 zcmce8RaYEL6XpPeySsaE$>8omgS)%CySoM$+yVr5cL?t8?(PI<-|u4gC+tN@cRyEs zy1VK;Ri~qr6r_+52oL}O0J4mKLG%s@*x0F|5=Ft&E-S>ztxg_sQ>4${0}(l4V?f0 z2m@rqMN~Z@F1jpYi%;FQz3ivzoU6~uug0-L~|D$^6Ht&7he@^Uq!heoVy1 zcmMD6WBF_8+|BLjbM4C|0Oo2N$@6Nv>goEy;2!Cn`+G?dHKsXzO<4bTm&bB-x3HPq z?~TWiTs(Yxijyr>>n>UAP1uz>i*`pQPaU04(uOB09jlW<-9Oi#F@%x>uWhEjqN(qP zslkz8x6)Ud&*9U)wlC%xC#k!uk`6rAj!uH0bqffCeo|+tq`!e}8zdDSK1+{pljmoe zz1mAB&5X@mHhf&n?@NPcV?DciZ~bj7U{XsMA_#;qQBpzIy{PM!Hx#X+TI((EMc*Wm zdr8TO!&{x{%S$)!xcH{ENZpx@u4*?zvj+9mwaf5FYK*RKqn?)A*Wx%X`)*$<8+C6F z)$5mBQp?0QhtJW>Akv6wTDw(3;=GS8C04;-myW7Vn=7Tf7gz<8iI1bGiT2J< znHCoA{U-?&vUFyT7Jc`Qc4QCM6Sq=jr|G_oDEoqBdCnyS50ABCQbz+8gU!53`c2Zw z4{#7H6ZqPCd?i9k3gs)tzGB`+qdvEp<)r>3vBE|m-RnirY2h&MwKB{?F*9JVwklcUI2N zX}>-!9NtBjHs5Lmwve_b&4ikvEBSM*Ywgln!^uH6NL)v9P6p~I{%mldCk&hlTDo96?x4T!UlULi_5BO9j^~N*ExlN(!oE7Hv+vk{8ZO*S94{H;!qs2BT)Mj9$vpX}`TBCnZ<;m#By*v` zJ?nbg@bLJtb|j*U@r;u6j5%7+X5sS*BzOON85hf^q|{MwufAFDewBvp&}D!7f~v)t zQQs^Z1Y-SZx2~I0?svDUxI!!V^0UL=Z}jywJoaRy{E%@bd0g2-@kz4geJ5aD*Xo_G zW&QlBJ<(M!fUy0AQs-8x+imOB!1v9dqjYO|FTr!zV&Jm2pTpO*+}7CjRSG_h^)NKOYWWz| z!qPLC-Y0g`*=8%rH+j5JJO0;o*8IJ`g~{VwKFgcV&S_deM{B)F-Dy$qE{XOMvFFC6 zIjcgu>afA`HSjT*%>^3gRv_joNPOazl*i3Dzx$)cQ8xo;Qg&MRHJ8Wzb51ck?|#x} zyJKtp!25CQajWv|y60uBqFAZ zn^lCw%$O{lbIx9WUXKWCL>E=GxqZw?-X?gkgz8`K z1w=&;A2)&Wemb;xGMx=2!F=cke_ah;@)3l_{A+hp#K9J^Z04K#pvHW4o_p&bJ*Xm3Q+-Pjz3 zA^(lAnYWt1u#4}KFO$bifU%`bZwPzrJRECMC%?$!<#&D7;cB+`McAdH+#BI+cH*w52w90ab0$oZS=`GzrZ7FU{sI^@oJqQcusIY>mgBSe z&3fL)^Xg9fwsI56xtMa*hI*nA*Y?y0n+UX@n!`SrboAP79Q;4Fb>?)8*xQH^H|LN# z_;66YiJ5K&+V-qcCGOZ?)?YH2%*Nsae~aqhrx2z(T5D%rHdm!B>jER$Xo4YRDJ%6tHzLrux%TvPJ+8~3VGwZVYnD2M~;rYyct|&nyphm}q{!oHk zT4+m>_kGr0(5_yAaB?bKRQT=nZ2}iT6Sk_otInPrX4{yu=J@<+WcR1VJt*l;eSC0Q zi&9XhTC#1a*0$O>&U{=F786I|?`410cb#pf7K(yImRhy1mg|GG02_x!(v9D;iC4$P zRu^#!Q(yY7M`f$_cfu_>+m0>nxY8`uMdX1&-q7a-W$h$1iwQ5nP>tti_jSUT>f@jm zME8r8Y+@4gdM$dpK8zUEstz;?U#j3&cjR|W@}wSKevoAcpH{_1wI)y`d352&>#VNc z*7ljV7MKKazCnB4thk-iXc?oR7MZGlDp)4w*NY!SoX$aa_$i?*E&2u7QB9cD1vdfb z4r->*PD@lDIF4rE$ZP_tS4&3!7+F-Rj|yRF4kigE8DzVYxVUc5u($^29y57VFU@_z z2pYcvPi6W~`4Cv1+P2xhC=Y)_9$MpMP~}s%XLavJy?qIB8X`s{n}7h7Z0{8$QX8Wa z%0FM;cut&MREJ&i6E?;v-Bxb6z!tD9pli!{RVmjySNCe9)wx#n!`9#ug67g|>85M5 z?eN)8G&68aoNwj4t2OB?=Zom?VFldnGIkaYn|^MEyxiI1GE|u|-hz9!y1)*L)eV5P z47r219@mgJw+|&9ns8Ksar>)w+4Wp|SU&W4d>#oP+k{0y#*A>+k9baQOnoTvnsnPY z`+;y;)YbXC&sM+dL0R`p<-daOf1R?j;tPl;jG+tU1ZZL-i3}PnDAmgz8wOUM=)Hx2`q6M*2oKYA8EV|k`KzE%|v zGxm1xKP8)vN&doR&S*2WLR7gE%P$yqdM9jAk+uz0Jt37%bP$r(#l0fs?*?1?8VK7* z<)%#bmN2Pifd)781bN50omU@IJHuA7>S~8ek|9818|qvPY4n^(5~x_E(#6Bs-j@J% z@?enON;#MXZ)j|%q9qZs8&)7*)8THE`W1B^&iV+><`vv3 z7#Oy_eWnB|u>=EJXJTuUtkoK=p+sy=9#&o%>)*vu%|WrvNbINNp)oqQixMZg@mf&u zPK~ke^+9+9a||N0G0&tO7iZ8+q2^9N{5~WX#dHQke@JAK8FVtg_)d0c?AMI*O%|yc zB6^9P)+(Lr!=ALPTZ)Uj(?rfjmvy#`9CfJ6K}j;oB}vvZ+i%byd8%$?4W$r-S}RlH zhYYS3IJt6sK2WaY45a$*qsUOCXfvJmYh7FI=6ba@T->>N5fE(*?P>vsMq3mYN-;hZ z3Mqq)V+w8iEh7SycWmTx0O!5c-Dbn_;ZJytxZ0$~NT%p*=)BORqvty4w}r|=aLF%(1_%SbJ7V_aFR+fRt zG=G7^sKKDkP0})8K~gtfujT^W>o|& zi?KT^e`1>A6`sr&t_tVxK60WJ0{I1kwJ(tPkLcBAp9KSM^K3HM#nRhNaD1{P1M)iSa z1ni39@+)zoaLocgcDsVz%0+cA)77|tO!@z0S&Lz9t#@W>Je3E!mZprCFX1}`MnjIG z;(22h`y4nZT+$C2xqUa@2ZqsDf$sOghu2+KaAl?E4P#G*n~YUjU(Z&2&q*xW!$O9K zlP*tP*PW*6ESrr35yzJW5eaB*ikRdWM6N~ZRcaR#Wev^ut9dQg@1s3URCpGd63HyM z{j>jWyBbrFD5Hnj4lA4Xmtk&Z_uwSZAdq&Y>f$YV@1Fll(xgj+93o4;rIV%Qud=pb zRFiyO9;I>iaB>+4D3@c%jpAIVN-nf}V&&9I2B-7G6$0mCXi|@sj(YK3hp-aRYk`4r zk%b>{9eHe?v!N&tVLM~};$9Bv%O0@1#B>i%+B_*UCm`)0?Idw)IQ>Avs&2iq`Kqs92#`;nke8r#bI+m@ zEsI9hb=19ud3~HEV4L}K$1aP{cP5^Q&y@Dr`HiwyOz%Dd*3Q&+uJGC6cTzSJ;)Wzy z@TVvYQGp?P@NaRGXI()eFP2QDZbQsVrIAZb?8ssnfT|QBTy7c2TD;}CIJBH8v@mMA z_>TdYWGc!n(RDX8T35#s+e#+m7Kij(3SIU{n4`5*TMXqd@-|jMP9o6)IDbV<%D3B)f zVqblB1!5*x9@P7zdhlqto%P?^yLb1S+yC}?s9|mj9B^qrO)QO32CQoHo74vK*aK%U z@u;530e9hjl;i3;uR)8RiNfH`>mkxH?5f)C6L5~P{c_s%Ms3vRKqpINK8Z_X+=Ny~ zn%P~<)6pQG`{R&6ItIHTu2PqWfOEUGWfCWN4RKRxFTS69J~UG ziSHWQul1$JKJ7eSSVLTY zUYg{evc+#z0fDhv{APV{`zA#rs3@EjDB7$udG)Iq@VOPnUZA11rD|;SIfU9-dyvCA zpO-A{K90qdBk0D*#Wo)DMkkmjmisD{Ferfm?7|p03_p^oO0Mb%i^Vd+%WZxy7*!IS z_U0tB?$b=r=5k*!n$T2gVWGRj`Af2Oz1R*>p5N%y!koz;=^mPCBqr)+-&BfLs>OS5Q zq5r4N<{Od^}U99(2@~V5khM}4DVE&IDMzp)w%3Wr-G|CJ51I)@X1!bEfTly~+h~r%Dt8OG0%*PV}|> zPe}z_A7(4G^2e8!s&ZLCXVIkKy6$~pls|s;(LREtGqMZ`_qlrgoqLh#(KvF%!?t&l z@6#}AOdZ|>?^c^`Fq10%0Wn}M-muZ&o+uVPF}_gBpX~T-_wKi)tx^p*jqC(d6dy~D zrIqN?y9h{7#ol%lVK6ttwpKo?LqjE1;vj2BR;$%r5r))$b**6GV69l=`gY4TGMd?< zSd61i2Qu@lEVcEuKgnBvrzyc1LhRxopvw|&!-jfVs&FLie*6vnk95iV6gB5J=oaA2 zmargoaE|x5Hr(@Ki~0;04m~Iq5kh8%r1P_?rm(CZj^!uIH4FO4e<63b4rnRzu$lj( zn;4H#8mca%siOA>*4d%@k}WcFXRY(7uK*`MjR%s5!tdnga-&9@WFO!N5d>wB14?q) z*>3s~`Vi7|T~|s&&P3Xw43DIjAFn<%2Mzo1bXZu3@n6#P243VjT+Ow=cw* z9)snNIWR$j+z#*UKYm|D?++%3O1|{i7ByyfR2Ys~6N*DT^J9_$Mwoc3I znS>lcN%KbC$q5Ieu`WhjPt#b*C3jg3%n=$!iF&V$%{TT(cXvkQhq|tA+YZ@d;uR~y zvwV3XA=&t=Uz=kO>zm(M@||G|pltZqZ4Q-3n7f;;I@ECJj~Z4_c?ffe>gR44{g+Fc z9CF0)D1k`S6y}ghGBNfh`jaGIBlMwT7W4NZ z;LAT|OEbN;y#V!oD6^V4p|YC3Rn{Q6wOc!ATd9L_iCbj&&~`W7P?|o3HKra}FBxvT zx;{3<(jpwW(u@SSEGiTnd{MHIA3+#@f4$%nHmnW|+nt@j$HXesTFDesu*xzpxI0*l zE^#$8X0asZqxmB}44OYhpt&cL+{wP}k#FE~S_xg@9JRv%)nM3_P4z{g7({j{$8hn* z=_d&27iqLPewfLn8rIEH7XLhP^@#Z=WwNE%=c~xQSy8;0uJAkl-Q4F&dO^+MVUNQ? zH|i%#O!z_gZNiA@A_w#O^HSDxHcxQkcf@$#1xP51#4a=6>5e4;yLE~vB9y^Me=y}!E(5Haw?}*V&Z4$t!LE!@eq@U(yuc@fGA}G@nuWUEah_-EhA4bLm*F05gG`@(cD&Vw4QaYK+pn2 zIYZ~9u1scWqjHk_xCnyU84OWCQ>Xm%Z71F09s!FXo{vmW7(cHyPEE{dzaj+sD-^LL zR0U3Qz9mH~m-}^MI=ySszBk2@R(arPfDuZ7clLIS%cIiwja^jgM}1!?(Hp-f*=fxf zMfVXxCgpTLgP&wBNFeg*?>5AcW%_6vZuLIl?q9S-)8!gXZ}+Wu!PnLPK`v`&8ejIg%aHC*B7dv-GRj{6y zOVR}*esWo3st1|D0mG6IesjunJnK=poxyaHttFVSVGD{HoXH)TKggIj&F8-!PbVZk zmLw914QGlbzagcqf$q~4d9#n&obd1lkhUY;W z)xpln7hW8_6Tfrb&$6%Qe@^KNyYu-Vc_X0?0bjD3v-|BI*!A3-Q?o;ab2%X(DrluLG;=kaa0FvNu`797)9X9y-SMw+nR*WCEu~_>rAA;%k03@R8|XP1gYmySy6L{ zq;5ynpm=g>UtTQ6;5Rio)=j9uD(Q{5QxZH`KEiV8os=DXzE-k3YKv*4wI%bZwCR)& z3ZG<1SvmAm4|47IIfr*HkjF{rW~)C*z?3a!eH5+>2@zgjD6MTiDL-h@sc4*ELa#!nAx&WgmP?2Z_ht3po?W zPRN8fRx6v|jND&qv&b*#i#(4ieNAiA+|e*;E)}$+O+E96ymkiT;+u6vAMY+-{wCk= z*7mR`#Y*~g!!u=Z^T{foV^k!Px8cPke*-Rqzv9G>K_shB=L~TAI7~aR%TQ0?4{(SF zh=KLB^BH`i%N1BlWT#jIQ6edvGT6B9GkOpyH%qa`a=k&tP0+A=s>SDgkl*z@>0t}& zvS=m(B$^JDebPjNJKBNZ6NFf8Z8bqA%m1~n(?^6*Qswd*TGit;a2Ml8)gJz*mhI#hSK`0X&p|ET=x7f_gjfQ@m0||25f3%{`Lk$}tGOhMcd5pfn_R6n% zlK39aF_#4VC8+iXL4<-oA$+~x2fBa1q`>2;)`D3V!$eUoqgai%65`2y2eb7$8unUM zp+g(T!%vO{PF+d;xe|$k;bkUd^xQk)%s*)jSaXEoa(*G3aa?^CCHPh@+9g+>wC#&W z{XxaSNon;&&c2HEf|X?3{@oT_WVt{Ocrl`d{FgX;8>saZIpQ{e(jg?kp3w8%(yU&X zm|~pVzxA)pzX{WsOHoObA(vyIwQJk(!am*jmY25P|x%s$M69 zc12EB$&<$rX=UgL4wdvn{d3$F<1FRb+JhQgcAQqTN@&#v87V($;ZMZ5t#5 z+2YBMtkczO+4oY)$ofM>BL)lq5Yt|wwpVn;{@h4`_h5PTZb^uJ7>H6E`I9U;I<>i) z{nl>Wu3F35G}zE$N#Ey?CesyDI9C~wwG&<2L*jPOcaEgiQrFOb9x!QQYS!&!wm9Yg z-U{8qyjI*&&GurdFoR&$nhTK(foYLjn~HdRaioK5)b4XbDC>SWmf4m{0f|l5pMlk) z{NjY_uV1X$V4c(h@p+6gWaq=&2eY(h7K{_G5&VyljXBD6xc^{ z6+XZ~v02`Aik8FZCzc+<9I?Y~3{mAE6ejC18M`hT>dfOV3B9c`=vVixnlQ83BC0=_ zz-QR-pXHAr5t+BmB)wUY|Ep~fp4HYB-6^WzQ zpTE((ICI zg1nChyj$1&3Ee~j-I0q@#oS+L9$)x=%b75{(?T;9Lx(eg)*thQtbTaSiPQbqcGuIDXLp$C2^=PPP$wLq~%{OTdmh8D`^1&GHYe z^CO(f#`mm=moX*Y^;dU|Q|!UQvoFy#BZw)^JBS0+LxjD0$9*C)~lx zO{Z;?Pg!3Nd8=12bU-+9{-K8apNP+yqh&^f!JT|tq)kylB7rx+#7P=Un8v2vf#$j< z!}EjLvr73DKZ<0vK}r89oB|Y&zqZ?5q=lRArnIV&extr z3L`65C67>LRN!U*VHG1y#8fXFN709W&JKlD(#xy^fzq!VQ;i$ZhHb&`CfCNQ`V+46~M!%1M3UZ=ei=g@0d2e?TOvh=5%T9z=tH<5t+a3ciGJZphI^^cW| zz&*T;)Hjgl{keOv?W`#~43%3hT(j+T9t>m_UZV}4X{<1!0&!N|>@C~d)%dYp*oM1F zsO^+^VlrA}r)_q|s8PjX!K52Mc)76awZA1O!yQol0pxcBl1`*Z2l$pxD@-Mb;XybK zx5Ts>{tLmq5;mkSYQw$8zIe^4lvh;w;y`SUakFevM=Pw{+-f!T@JZyWm4sYyd9Jjp zoz&xWX%&J9@ynWI+|8r`hgOOTW6A`(7^l9+nm9U+WUk78GWC!s!zX6VWyPn|U`r}P zr+5VxhdO~g1EBKKz1{RZzLbSfbxmkK3Wf{)c8~dHT2=Z=I+9l#8K*q`_S@BPw;QL1 zyj;v2GCa~Z|7(vajPrrpjaPF|o7k>e6VA8oxcR=nl__sB#=&T9e%qPa?0}IWiqYqa z11Q}zg2S-fzeyTqayy{%de*wTGD*8r@@Bhi8lGys7*Xn3ysBKqo5%q9pRH{C5qPP{ zld!Reu>H5%q`a|oy-8g`MV6uKnUn1g-r1Q=0eq-}aDL?tw~QTKjBT1_kv-#4LDVK! ztoHBKBctznmpx^}P8ewEH*8+UHte zKc_?}Os~CD(%OOpB$Y~b+K?-6sgD*uG1 zkVVDh1inZ@=oBEJ!}NzcpEw2j7t@Vf8qA&({m04*9|l%Lq|)QMd|@1Yo5gf^SKMPv z`sC9?T^nxvZh$<;92_DeE!E{Z*NU`T0H5~f4l-5X0pPA?Cq0&YAwz10O-*re^2`{# zDo#dzz^vl^Lr;l+MrqJ_Vz+8DX~ar2}t!xZU%Z@x zuW)tWsu^a9=(NF(BYbysG>5xDtEP?3M$1$cJiJWR(}gGp_bSj%P4HZamr6(-Zkllt zRQ`^lZ#?Ct13XjqzT8}p6C!6f!yJgDK-(gf8{)OWHNDz-{UbOC#U}hq z`qXY2jYxxpy--Kf$V`q)LLOs^1-J@agnYhl`1btUQCUU}8B#VqIi+ii@>b#BmX65; zb-l1N)8a>dP|vD4l-lU(Pe`fOgU*j@s>pzk!T&A=3{=ptWOCH;?5CbXU~W2Geq=K{ zEI$Z^y98pX8O%~N@B!-AXa*3m^Ga1si#f8x+FI=rOT*06l96TSdWQtCBIYgLa|nfOvGtS6W|Z!PxHiz9Iw# zQx=F6_J}FrrsR&_5#@_VFeD7A1}~p6@1LWgo?fOuGjnqJOj>HXqiUftY1KA?(g~9K z!`qA$04PfSw=x;s9JagZpP*}Af4imdmy4f(C%o8D4iob%x3_Sa+Y_mc1u^l0AVxC1G>$W#nT!!iEO$ole_+mzD93RM`T(uN^53e!B? z>?GF>nMPfjH-U~W*Y(@c_gsxYrb1J4j85DP!(kGB_YD&76SmUwTkJ?gK4Gzkxki0Y z3=n^aXmafJb@0 zx90(2Sw0|vDp_G1p(C41r^1S1SfD*0;%^BWYJ`<5C`fC_rDf4x7Rxs}^x6oP@A!Y9 zIQ4t#Z3&BYaEP<&rAl)}Lqu|g=gk8{mv#~Pvvb3{2F)W((P^%`JQCRfR} zFLN6+ZaD(qnXH#OW;OtKKSP*)XlI&s-=TpkB;-H@DwR(dW#riPgS}Qck0$l&{58Rx zTD_Pl^pWfmW;NcyQ#chbJ;vy6R&_!%k0$7HrlGP*P&8qiusSiKzI0|l3F4C@K_V+7 z*I-Ij3$fs3_thqc9zT@-cu5i-K|4jk$H=btIh(YK{V!K(nI*C2)%g8v6*QVis}M-G z;PQJ9=3wr@7e>-4uRa_Z8hOY?y4L3bp=Wk#{1i~`859JWinHOw=koT4pN@fM1IygbPMRZ! z!W3jjXs-l(ZFq7TIq64f&lf3E_;{cxu6Q$t3XFdL<#5r=h(q@z)=72f_%@fn7w zuZ@i=Sv$OHx#cGuw|R24X9#8yoY0j_3(`X)vRrBjDan`nz~jatM;0)CBJZ21ITWaG;f4+=lBt2=tK4?^ zT&woDnii?5vv6*Yl<;{u9lE`#0QdgjFzu@xRH`_kyCc#V!}cKjgOESK0;ylp^?{89 z-Q&4`c?sr+rxpho?(?N}t?F16{Oa0Gj<8Ps0%A?IS4Iv zxI3R_O7j9^lNud*#1jze`AI0|K}@T6mhI-qLtccXIluPDeoXt%s=3~+eS0JZLO;`f z4dBiKR51#>%wfp|TE~xQDCc1?FR|bjs`Z-s3!Gve|4ct6Xvb(jg*+$DI#C#_cd2Sd z=)*QY_oH4|1ngHLn=YnKnKaO%uDxh5&z0Ht;#6;w|G*&vs*i4|Y^vi4o@^{YOt8+v z!2?JI4G^)HA-y!isebCO)!Eqa+z%aHOgzi*Jrro2>vxD4x^4QlGAk0lTdkK@4?urZ z%l~V!v-obP!R$vWjkwfdR|ue^8~3t(tQPDr+qWG8!G%5NF|iBJ29e=|V8m3JI+)`W z1ee*I*jCQrM_5idwa6J`=?1K=D3>c>ir z3cdL7ef#g+pZFhCfUyvcC9<*U7zjeG^|M8p<8)bpaukb4o;z^uy|i880Uw5GI^*dV zhu1w;q}~s7ag8V#5G+Y$WU@uB_~J+`KfQhn*>Vi07-n0o!zeh_&FFKfGHb;8Jn_Z4 zdte*-I*;jhK7~*29LJ&1UKS-}*AwF6lE*GwdeZ=Bm&DvpTv)@qhm;eC&Z{*)uAnP6 zvpKe1*Iq?2L0@%Ve2;Z0Xi4Z4nm>qs}jqx!^&t8CayKP)TMtetk9Lzn=@bqut1FGXuNi6qE zRq!1az#%GykqYand4?=NS1BX>w2lfzb1o-o(2)fnW~zwh?*+)`jtm&%dENL}2lkiq z`d(ndMlG$o-sVR#aP}^+zW6^UBT)&PZb+!Th4*1tH6?fWl6+f^FCO`eCzrK+wQv~+ zO&>#kuiy*Lhpluw{zf3`&&ud>_wPZpvFxct;A0__`cIwKCd`CIDoQ*_vlM9nWUS+W z{(D1<;fb*9{_!BOuq9Z!;|5;?w*?)A)F$CASn;9&jt>3W!e}&3MVHGJkmgPLF3&DZ zh(;@EC~F4z@?fs1UBy^fP0$R8b>IHQe?U%;Sjl3-qmu)9gItWx=V7GMXGdMEMgE*Z znlX+=uZ_41Dwa7Vf$boIQqmZtqOx?}5}Bxj%@gcMg_y76HS|i&%*SE!p`e1sfV&== zBOaq$&<_8_BvRo`MobvP%es8N%y9$k1j+07C{?s?gvFPtj(t@0;5sHXm;u6|d1u6f zg>KnKl}ET3>X&hc{|mQ+C|3`64=%Bq2g~G;D`YQ#GLIQH_J`z8OU2quRW$(Qhaf1X;)j-tck77>03rOTfMkSn`d) z>KQD&M+v@5uI!&{z(Y2lQb9zu$dG|AzhTztlV{d2Wr4thh6pt(Zh;jU=`(+DNV@=LmJ1_ zUO@+}6=fe9$#N~tdMk|{*zCvH+f||$|LY~_YIe_DLL9PQvQTU!z=V= z|I2Y%t&G~E*21Ved)E9)_T7l2_%cZab^X*UQ#Mpt=@ZLz&NN7X6o%>_Jw8Ci%EW3C zAtUy%4F9Z56+dnTnovG`laq^Y(B)7BTbM2IKzt7mCQ2#pC9H!F1klcpmiNyGj4Vzy z`R~1e*VyCfapN=OhH}$GLrdsnZ0 z9*DyIYLD}~&VBw{`WIxw9~?hs$G^$cr3pIQ0~RCOVk6Y`SI7f^F)^ZovP#{!izyuc zZ$VJMQ*3E$7&P=v*j!9yqMO^hEm{1JSuUTv45`Szkwykaw%LvSlAxOE*IzDfX34~Y z|ASHC;~tt<*9`xhkU|R+*=hARa7ow8V)o32FYN-gHi*Fez;Hz}LOdU&6lUUXY#mJ| zpOs}1h^`idZLm#^A83Fti?o)aD5PjLO0Mdhj-;}bCR1PznjLY}j-X*XZI%CLzg1Vv zz}3q_UP9(6P)jcHX!ovV8s8jEzlFkA20Z?i?HN)-KNBw4exL_ID8B~-jW)qKXn!77 z7(=DwaZKBIG^`cq@#P3q5i}?0`|Ici<)3eG*Q`y3&Hg71^b1p^rwV0PP z%=tZtgMW#XnKB!{oE9P^D6#*;B)$aMF%2yqODjjhU*QsETciG;Ez#V~!Ksz3Vxo4@ zM$vzr0G1|EfC4+{vs%IhuVF~Ldl8We$Zp&bj|x-csO;Ax3PK1bn)%~`d1+kcQ|5#9 z#Y18#IN}|}>1dWJ5;3N^I0^~66X`hbid5PcgzUcKeBq`0lEv zcW4@?4q7;2ZF;qsK#?#C));yD!U)l!Frfsiw%VQkKZc@J ztlQf|gYf~BBA-gK_D!~=U}9?0R*6_9B?th{qtJYO)6!b$-%!2S&*PRHb;v~;r_oL{ zht3CxXl^jSI^#53iluBiBDD9T@iBs6Fr%gcg0o3MZ5!>IK5x)2by|Cr4X*Py+NW{% zORevAzzQohqA#3Jwb-*CW0M@YUMhxvI{gA zU6n#>5lY2@6+6a|UbiQ#K08u#(&Yb<08RPmQ(!%&q^h#yX?M)X=Zmvcqy@plnEa2Q zSzESD6dPXFF0VP9_Q{3K@Qs)66Rp^@dqh#dbQiSh-|Oy9Y6u->nbNjwML)=&Y#(!U zejAtZU;t1->$@&yUE1ucaGrRJ{2VTUmFn1Jxs2)hF|6fBR#5e$qiy8ARvR!&HK^{& zb+fKbSCpjpL2qCm0*?32AEK5P!9%eH#WRv}!eN%$wNYajM17%~?7Sd*o2){s*~|1- zj2F<^NI38YIxxg*L*K#(=*r=x4~dBTuhq{C^V??pqsi5}srQ{JEvSJt6A-1wjV+ol z`1%|ukE&KR-C}BIutYFgv;-aS@DTlMuwXghv(foL;5%`y4s@M%_^<8r&*48@t3=@e z#=x5(`b;3z%pcaPp9Q^g{WMY0FYCC3`B4y}qg@Mf48rz;Ni=`@BkU7(>?udeH8hCh z&K#(+&mypjj`V_0!xDo7_MRt+fxIn}nP@116bHQU!AN#64x1Zw9@P#v?PSnqZk&8z zCRQK1z_bAaw-j9#_9F;(e*f0=Wf>Xfn(wxlcRzBxl=g%7zWwCJDV611GrzC{u_*;n zu+3mZE8ZMZYSucHBQMyAnNgf|G1p6x%Kaw#*8wG_G9>Nq3#}-2n;KRVb046Ut(2z{d77Zh;*)^@OVRx3h0~dxn zBObxr44TIGkFanM%FoLd$5{;n{U9{iI{aXk6nba-cxjiTlS*PicC&L?)^xffA*Ve! zM=SyKDSk8jIVBqw->69MJ}dl93AE(6`vq`M$PgjM7jbeOGtN&rk}+foI4>ha-=z9z z7~5=uq$cG+$|4o>uM-Hw0i191xT+bIlN&H5A#|~AHHm3VVqpwW z>ZN}QT{-N9FmQ;06W8}z=1t};BgKjefNqX(J>}fOBEPR<8^DR6@60b^K5pSuvoUp0 zub9e1bt#OrR-R9{OPPs8ds+d;C^HbvuB<8>!IqhK5ke~uuRMjLQy(c(l)XD z{0DCchohFBnRN$c!K@U^+HaKux$AD~3*%y!wyxQjgsvQCN>5-ZZAR8OI!ya!=NNkd zq&d7=M9xf9Z$th_tj)2;#Vhc%lJ)ZhgFHbZ0eV47@J8(j`jOFT50c_76CqB==@%p@%8Ud z?E|b9e5sIFHQZ{NOUORtMMrhvuABAEESu+et*nfbV-DffJr1A`y|<>hty7da8UsSK zJDyOL4PJ^aE%o;WA$@*XsrSgC?~;3RQXL+FO@HZ}$Nx)9auEB+1|6bXK*L-I2M7+SAQX%|+TyQbrQ~Rdh0|*zUtWh0ZNX3eo zw1gP|{9TP^!oA^f-KScLzBIEyRorIsba6~V*{kUcSyDF&@lNI$&G?F`I1R-=uvFrr z6Rdkr7M$Y7+gk8n4Q`I#4+y0d9L`DOMl@BNwXk}5&UN_|=i`2CH&v%P^`4Tjwwvb@ zKLD?+-t7jzTUyE&`-p{f7qkn}h{a8+&Ew}dLX(>5dA`rCTVZs)c^Yz01@q%thj=X-Md0k)23!EGoE?qT1CbwPwhnJyiY?oy$5em zKEB$$N-AL>!`^-d!v6tLK(4>!Sla-~-AogJy#^nXoG>%O*ZUUK2d*(09KIA>Jz$7P z0$+=v67ZopwI_t-(cT(Etlj7%d!zO*0&`nLhvn>!UHCp-BUVQ+qg~5Dei(ueIWi*3 zR?j~4%o)4z_BFfs_9Fh0+m4*1|WbGXjORN=uumE``eh; zwk=>D)qb$oe%0Ri-FIy1mG9cYpZU7acIa6 zADE>fz%l~HtfOL3`Unsff!u#vtnVF~G4##hico;2Md$ZDd@z>H!D;21H1QXM0N;IM zW0qN2Ca?gO-s1T=K1NIFqPJ&{fQOCD;jS>KaD58&Oll#V>bu!Qh{Vzg(IrHX)F6cD zI8l2|JcBhh%nG^t8;iESLIDLwZ_7R4G;dKPChIafxx_gKpX z1`E9dz@ESG6?^N#OO|@A|aNR}Ck0M+JaS;6wqPhh@C?@9Tos8D{ z>azJ4iQb94L8YucKr@6CY$5PQcRyzm5z)6PTGOs=#jSxBDr4w>$~e~Iy= zOUJ7K(rS5}Qs^jtnch+^7rNbA-JPqH{sb}?lq+Xia17r6^}q!)z=XzR$F*b8a`I7} z=1kZuWo}wLr5;;!Dm7HCz@X-3WIaepVsqXZHyyLfKF#)iWdo1y0qq~rFDTfj9L%PzwCxH0!)w%Yh!* zU4%vsbi?S-?aeoe>8BlH9O8=~QgoZ>P~{h8Fv&U*xVqhWa1Ck*JPM0RL@J298$dhN zDrXL%fD~FlDl(r6q@=bLwya1gFcq`GhqCvr37~ij(6!uRBR zAMQhrOpd?3MmrUpdb<85S%4Cmr0rW99NW@oYq_%R+}*azZ{9@_6H?!#tw)uH{2tYk)3l%hL%u^*X#}E%k7f~mnigEx1hEm zh|-j5mn{{+X?4y9^~zD!rFrH1u5i`np1;5M3;l_fXKj?e)n_YZsV^N{sAjgx*-wm) z0>c$35X=%rfowya<8`YUq>2>D-C`?6;t`7;KQVE(0?iB}V_iBRFe$P*#zPAhu ziHD!3YB0qSaj$&+2Q&FX=_WD;Y0CrPL1i|Fq+pG5TpMTu0URtv^-Xxc<(gy+1{MP^nED`~~^!JTD^)wM79c;{AlWiutiur>R>FnbFx*`_s|jnS|C(3rAx`>i{9tK)C#`Q zW;BY+{IMbajVs^4*+xiZdPyoGxO+Y?B|6MKFJj`=9Lx>< zt|5{zu#eX4y{m^$t4)Dya_#x2q9?8sh@OS2H#G>W3cNU^s2%B5^9eY}ANYFkg2@mS zmAc4C2y##(Chb7YiGl{?NiZ)D&P3ry*6}OV)k0_AvA^0q34No=>UEI_B)nfj8{ppVCU^TelsUB)8SH zH{Q7G0OK;VI$=ZSLyB>~!|`__sYHMt-g^C(!{mu!0R++b(Z1>uqNv!zrjzy(+o;Z% z)S*L*FL)+3L`ysg$Bwk44upb*g$q>Ua}?>Tbj0UZCk>@+K{XIEhkcHaH4tRUmiPw{ zXq@O;aFe_vwE*uh;o^l#a7Ddyr3!nMf34#Sc{L`U z;0j5A?Z(eBO;^5SfGjz2U(IiVTIJ=(746%Dx@C|qKd4!>5N1i!M8_TL)zjWKuU;YcU4>jim zO?R)Y+Tzu9JBq11^(f5+V0<^}uP0NduNc{raoYDa0mNZUX!tgKyXoxKcAyWaW zBaeL&(43am-T!DWUARZ*4T2)f)7^9TC}U7WPLUf?aOTb~Q8MOyla3VxUXx^4256j+ z7#*^!=a;RIvWh5L6VeSJGnPjcU?~xvOv{2Zz%RkRq+6)s|&Y*Eb!0 zs$6<*2h>0?5_3@{KOKMzP{A#6v>Ae>7S(DO=*Jc4DVK;qt6zH$%(acr8ln^>$a|FE zmHn8Q`-T*zzS zLb>eF88ALzmmPMw#c4YolyV30K31nRGaqKtdvdkU4XLI&SYo^vVW_=&Q<5FZW0g>1&SF zdD(~iQHBX5T3wgTrNaY)`0F`@U6lcjmPXL!dt$_$44eyr65Wsvk%Oo`X*16<3qJ&N!uI5#2pW{?WI;@9!VDU`j64;X!pKvJg5v$XJ8CaQ^C#{1{^TN>8sR66Hw5xdm z`^x^%QU*69OaejKA4JuGyaFEHgOFB`Lb+EOv>U78z<2M77(Z4Q4`*W$DEe?6s-$)0 zKHSgi!3!p%)x_#qbR`i?WgfJvl}DC=&{mV56ecp98A#YWmsxliEIPpI&V}177FZ(G zFj3|dEk)oSHsBfFzI@x_uy7uF>aeZfT1IQ2fzW(9A>wOa`igz!s~nzsYTic99%fU} z-yPxWA_*67+@)!2hPK$Nw)zG&>TH-I+`<-%r5=&bK08YTeYl@hk1ek>?9r!>+F$+E zMOyzA7?-qe$1a_F+cCEaUSjk>_hHV(F`b^Hy-kEOglv%D=c}uIXYNq`gjn&+>;LJp;W-QMd#0G0D?otyCDO8lH}JE<&x# zX@vLcAy4>d=aU9Md!hLNIIksXBd z1<;}~v?d0bvQy=C5m`*CI`syauo@;zfkYja%-H;><8Lm)OT2aYnjL$5)`q5&EEYH+ zb`!ben3O)7IzDAL@2=U!7hi#_!DKUmYzKSog_{=p0h%bsW&nID;>VWZCDws@e*ITy zpap~H5C88QPEJ1&*tF06%F}4y!}ij5uGnSTV(a|wZ+zu@z&JoK1UxQ$G@WMF$9X^F zGf7*%y<=M|WJhEzcy>L%mQE?rCi!fgGNw#diyV2EAVsfGe{&kuJAwx%2^Ks75@V~X z`y9Be+(eyvCN8T^2Ufdp@gUW%rcKi;U$8~H8Q?FachCar6c>TOE1$jxHd!Onr1Ibn zfn^EJ+JnNEp$s}g%a_6aQK?1;DNv7lC(7X-vPv3@M(+e#dI+u-L=c@6Ec8PFy^t=LnKzaY8@Uwh{pNkbBFCOzq`c3Ggbikcb3=eU;plx(cbu#zw}`{ zeTw!kydJf};?riEH03B&gHbS5MXDJNtG{*~-X)KRiR!)B3Feo~A4AP+mJ z1x%!^C?BtbaJ$LixOt8MCvNBv)*gj;bbLZQgD~HdxDiP@-c35#W(UMzlmIN*mx3Bd z4G)$?2TUpRrBfzUrHLcK1|TScPoQS$e$28?+)dMpyIkCGYIri4obA%8MrWj}34_8Q z37aT;D*xc8&iI9&>Km0F>*TdAziR;zsX4A!ftZ9?JMcbT4_;$xS7G{e_&aA#@xYi5 z9vsW`pHvBpBj$@>q%y<`aR${NXK`U2GbJ}&tBdgBZ~0X@*q?^Fw&LW4;~aZ;=#c}q zyu7jpe~|4+;!joZNp;%9GoSc0LDiS=J89><$XSf?b(zR*PGM-^ZwY#lPpMWcPd-Oo z4JSC;r# zeVa{{r^yvvLeN$%sAh|I?l3nX4I)F&Oyb_uAqQ^|AZKXsI%boTR0FK9aNrkMFlMciw$L zlcoqV5TG|XGf@Ma@K5@oU+C<;!e zruWhgSV5;HjRY>v8H>~7d&f0jzQe)v2$af@m0s0m;pJeHsw)TFW~p>IJvNkQ!A$e4 zIzZ|@CJ^eA-~@0U&|M7t0NOO7lZqis>z?9UYLj48sUJd<$(Q7FdUV?WYllTtr$yr` z$pXqYD8`$h5KRK3d)nCZ5vv3+NT9HVRt^CV9U4v2jv82MiOde^(=@##MP`;3avqb<2?8C7 zZWiR6NH6}d&XE*Toz=znq=XqkbjTfOO}R22;Hbe=8d#@6DwdiiHcJ2~NZiyWBoCcb zRt68fbNMQjqEuD#wY0WnHMHXVnNyT8Zz4z#F;KN3n%^FtJ;+A9$BAiEJY$dK!iG~L z?zj<*PuQmezSFiw1#@zt^yOTPF-WI3^=Wr@8?Tpm%Is^iN|lPg=|M1sBj4}q!3!oM z7J%%S1FaZ-q?1?G&-u5sh)Q3bNU-PU0H!(zB&F@-6H|8M2QL#);J=Zs>najNm`i8| zt02TPBbK3xFS`gy?WODHp;KE}Pz)KD9!y{tnIk%&0JdlC7yjYLnc#wb?TzcC^&n}0 zz5Tz`y$6(~=T)Y=E9ab3S9NvnR;$&mY)Q5yS(1el4l>3>Gh7Vgg&AgGfO{_k7cgKC zW5$4qgKbPO2AmDpmL*CMnCJOUiwk!x)?I_Ed#yQAbyb}@=Rg1d zfBW0<-S4&)){UT9m5I)FhCCekgj~X`=b$NU(9$O*Ntt-j?QmRxLAV|*w+afV8g%&@ z@U%sekSIltLEW23oj36_8q;H_m-xMa3Qsn{g1O3h22$mKjuPE7H$9WS*U{EnPW^j~ zfmV)6k?hKISfL_R#DLX2eBN1n%tN={0#N~E2y|Rp<*KI{O)y9$X#3u=;iLnX2%5&x zq!XCz4OounA#NGNcb>u}5HhH8K+myx;aI|y*VZv#3D-%q{wkZ+6cCrk{Z^;4Hmp&S zMb=DL$Y|Z~h1^Hog(Rq4|7Jd}gJ7bSXeU^|8nSu*Hk##uaWo2)a?tXYg1bnH2zlYP z1SKSU1sIry$wn~tzp68t!;>#xVwwcZyAY)oVSeWMJr6%HAGCKCK3#Q3T~zI@Cv8&; zc`GA9ZX1f>mh5=X%|A>6KH@L`_-~+1!VDpNX*`HaiI!Wi6<4Q@8_l|~*a$dfPA7mB zYerd|IY79&8&wUA9zpG0x;&C7`dXNbTLf@;nDHvvu(!#KX3K)!_YF1(R~G~0_>O$e0R8x!F!lGcs4lCCf&PB9_bfyT z)lpeNi!mS*TY0m{S}c?AT%j7}HH&JiI_e+#6oa`5gsF3GX?qiGK8=&XYrhA5(!tQNfAxJ%gH*#QzyGq zd&dN=4qI_M$}zV?(8Va%zFxdy4uW66=5sh{Ic>NL%#PHZGcwmf6xqK(z&B4`RxZ$` z9DHegUImNeWbl+^C#Zqzlg~n;)zm^}g1(?0nBAm%>75vi$*z-ZSW;2A9a)U+GZm)> z^ZdQ{Qs4+;Uc4gq zl#LF1>f9$>1U9BsDO*J_WUw{eKCZc7da~|fzr3_pOoQe@jpcVigzQU9 zDT~G{hDWG%uM0e#CQnzGdRj)hCZp%{c)a?-2je77YFEy8F}(C#nj_x4k0?B!WI62# zRg6%Eb%0(OIwt2B)`?KUw;D&MyBN^|r0m9$xMlwxv3z`nG(oErQuzCb&^nT+uoP|iMpG7UDdQ-ytZH3K3 zYl)@IO@aafhkUKqEBa`I;KI2-w#l}T){*;sdYFKQO)0x_<~;}_yTAdWSwy}Y5U-B) zUIDa`6}#YAD%e7`=U_$jou=)C{N&Uytu~~PX2={Eq{t4kCU$_$@8@LU2M+c1uqV*& zWE;w@0-+Jymh)_G+mPK*rl>YJ|0OaE0H_{2XdM=?h`$#RX*=y<1))g1pQLFFwybc;zg|dQc8!wIBJB|kTk2^r zBhO39NqnQ=5n~U1Pfh4DnwukYV-%Pb7(bTc?D;d`K-Z(`j?UO~&kd9zD`NaI%xg@| zn1KXhV{it|&V*t&ysm_Pt~^NuXcI%@v7c&~s(nMjL-W~pzbN$%UlpXGECY*eSVvim z5iDiu}c_dhqhB&#dVtG)sM;2 zH{s&4(MHH63&XAlO++OokDKng6^9?b%fWNN<=_Kv z+Dh|P7SZ&0WD&IwfOcPG3PpVxlXt5dX_06^U<=~t=qZNZ_MtuT;b8PFc;o&kI*nFE z!xaJGC6&)~13 z;Sl~F=w7CwvngP@?|2vdOK8jzT2Pz^w7`4E(Y~5<-@k^RTmiPTwXqpt6bFkIM8Nc4 zbv5PysuWsQ8;pLS&FEfn;(xD1a+-LSl|T7+%pVJ}fLSd^bD>)3UStF_5$x7OZBctmRrHNr zjJ77AY@|}=2QJ`WQ9UVdhffEhRH{YRmxsH0nJxj&5OY-o|9Ue)k-a|IxeTeQ+X~54 z34H6rae0{Z3EC}dOHtImxic>R?U}gz61+(qXMw7bS}vE|WDS0z?F^UU{E^2-Khg%W zVthKIcKt^EWn_S$jZ5L0#9A(5^4(aeu1&zR2$-S@GfG^Qa)nl#a(L-f_IRS=z=C^jy!W!EiMR~af4uVvmQw%HtS&jpW_(vthZ-Z-b{b= zcS-y}wIjPyAObtiZop|N@vcU%mJx;Q&%i1%Mk_=vbSRA-%(AHi)&*i``#tSw44BmN z8lb1Hh<+e(Le#dj?Z+>K#0vkk7cji`LaLnEh@gIWDWn66Ymi-HE&= zy;A_jM~Iwy>d(#7WM;W?20Z0h!o)^t6S2a`N2%p6(M^Z}ES`UrpcjwhpCOTpy)pe9;co9n2ldLPYt za0+K_K#h_m!rS!1xF(SVx@{FwC6`iF8NyGRCij*FCuKgRz%2(_qo9G@-|7%IiT5oO zMDJgYi@;?h0WHCgEhH@@u|Z0tBdH2y5gSI_ zq-Hpu0H_ky-9j=6)oqpZkHde7K!}u@7k$nVi_v_-(8@9MM$f}Uz0N7O;;x^aU*Y}GDE3JV(u`iUtGul27Vrl@vr-L3s>ayoe^DMqPA1YCCyt|0v}( zQaA&rV!fh{KxCZv5(E{($XnEjIh{_^#q#AE&)<`2rG+Qx%GgO-C61wGowqIeyDau> zgRLUYu~0;?J+n-uK)Clel2+--xEyFsU1I~aLTFTGNqDDbGPH&h%*;)S;j|&m7T^Z5 z2$mSlQI=AUwBJ!5v4VCFb7C9VPysE-GUgl-e)`YbwzQ=>dv71GwHZ1@=~i4NYPTc{ zNQ!^f33v#G5Xub#CjrPs4f%2JyWSYxJ?CQOC}ms(bOLQZ17pbsVCkN*^Gx|2jav@g z64{gZySO6)M9vNLuu(t`bN_3pGTE_z?)+KGo6LpeJc}UuQkZ=hr6*sPY=MDI%C2x9 zs^~Z!pP&t!!2>0@TtfDI-DWUDL0=&G}d&W ztr*yp&y+L9s4P=^>>fK8y#wda&Io7MS@U!QUknK8*#RNq8OW6#xFvdzUxIuqGue!~4x{w?V)+H4`I(8h=axg! z4m@s(BEh;oG`{EMzJ7dQW^O8YoO@?`2kw!i6S@<)_-qc_LHxT9pYxv*HgDe$K^(*i zwX`}fpoQ5j{&mwH*HSQDIj^N@x@6@*s}&A5;3R%ceHBa&)M2^ZEG&v2RH8S3lpS8j zEbJWoF*9tnjWuaU%kr>F$*h^kyRNDM?KDEmZf&$Q?IF^J8;Jxn0cMnxx8MVoM^ip1 z@`5^oiChQ?&LSZ27G+b81M$6MOG8Zd48|?+6Jdj2h`($N+|r}8g_c;eC1EASgM3B-_4h1% z>#2(fFOj^Ab!GGqz2m2UFz&hkb|yv))0V;bYRFXQ>0KWM4OERL-Fb6eoIg4clQgw) zOYn{1)Wb|R_VFMBQsyef}zz?dPUjgrkfM9S#3d+&EE?E zKA13HW8TjyEe>l4#Ufd<)xzbd@1SR#9%x44(soOFWpN_5(EMMN-@@?EUHE<9PS;XoSfqrH5#!?@~;IBq}HvB41h_24&Orvs6PEc?{pAtRQ7H zeM#vu%a`+sWWXo@Ra1;M6R@#@uqv;)1Vj9U(9+8UproQ1b4bE}>MU?Iz#Tad|93w( zmbgH(5r$X4>E76T$9A~aDK|3tEk7Twq`vMr_R?tpBe(#xk(l6LfTFtjZm6seRw0!U zI}Y3s7l88J_sGLAR}IIDUwJ0R@X1@Lykw)ba&Ui&xVD*mUd(uw)SQPv0sluB8C=S_ zd2h{`YNfJQh@_Dz8H5Yj+~c@NMP3_$+Zvi)tzwHWMkB42!k5qS>^^Y4W(hup`lUjN zf84~!wG_;Bn&jc~s*CbB%1OKQ0_BqJO;V_e3N%jIfn4;}3re{+o^xDE3Fh!>;EEOm zgJshbCQScqXlan7YF}6o3?>qYZ(~yQ0 zC;xPgvDHHEhPvqLWHS{)^_YjSNZ#d*HIQ+Dl$%CZ3EzSZMHYY^rRFFDBDbTpgUwl; z5Lb(`ez37+ND<$l0Gl;PP76+^er5q~jXCJWs|5g@3y$>4Dqda8@9^6-7tH3R;*Hwk zVz54x&A4ItMG6?H7cMHF#kXOf`;;;IT$^w(QQp$7nEcJdvHPFIY&r$(h{PEzC0`Ug`^zS!`}-Wn478=cHr`$s*Y5 zx`uyQLXhL)O*)pud>)DYycLqrtsD~VneRl^WsI$>Gaw=A7m6)dfJvQ10 zK^7eDBa_U093X`TfT9-7+(_#!lQ&99m#q*CEit#}_~oN90GnMt_b!I$ghWaT@P!92 z_Qw(}CWTaP=GjCAMB(f9Oz~efxlJQzllBQIh0CNrND4Jt;pp7PH8qmsw2gX+4NVM) zFcYLDIYTJbkYrKBdHSS{ze~JU zVA83~0Yc44qoySD6Pr^vj+`6gRVdx9qJbm;D60aTfsZ*(vVCgiF`{lX0FmX!_yFTd zPQj^uKf*`_0yf_|@|>eHr(!e*Qw^*uaL~KQuf(OXualn~j>2`P&(1N5q!=xM05TP9 z?V;+hBK2k=B^Z+Yk zipYoOtDkIM*7@pNTUz6mox7Op4xj^nIBO0e#wTBbwPS_kdJbCK>$gx~i?v5l&`qS9 zB1<|Hjq3Ru_hcY)>7zE~pKC6do~4zMc}$<9Pf9R1IqM{;xmY)ECc4cS0)e#S%=xy= z2l78n70bi)Rl-j+!vu;2Sb(Py&h@;fqhsg(m|7nOOSn5)@GBP>nR0gOOpFyVbEg~L zO#G+WIe63So1m-46s~TKiLP$UFmN>TKMQCvQA5CcVRf6sf5d~u4Um3&if+p(gluZX zAO-*}YGMA$NQ{DJax|Xc4QcyIIZu60-j-O7YuG@<1vHG|8xy@})1HyFNUoBod<^QD zl`)X&D^yEJC0%3$Oc0ryqqO5N8v(RdZt{H=f3awm5@=06L$0XCP**Q3r%l7ecLST_ z6x4~FLos>Z9E7SF7~lwzJZd|x9Oe2?lk-j53?bxrN|mNph@tme@UqQ;rEE@lJ*W7* zY$g>KlFeU*)==;^vX+D~RkYNO+HfBntAP8#okhwQAqx;0KZW`CUY_PE|`oZ%3DrB+hF7{R)s*o3JjGWklOMH`F^U~1R(gUU8g9u zfv$PscpU5fM%?`R2V=3LBuhL;^w}=TqcpRz=o6%< z77)Gxgm)fwIY3$}3vK5_i)jGRW6YL}W)l14C;Ly21y#(LW2AFkM{P{gDm)9vQ$B4I zeatuNKR!r=zY1#!efj*i%srK&IteECPnSbKb9ihlo_O{!>yaO=HH?{Q>AhVS$uR5&q-lOI>JkaEu_0957V~ z7F0_ht~Bw>BM2Bgf-49K@R6(N^}cn_)_CBa+o;xnbriwQDwr!=NARt|=OEyk&qZ>L zGc%HM&BvAT;TWW}I5<5SV~}T!!Rp%ss%R0-KAJTjqdhZB`(=&~!Y@gJX4k3}N;D5Nm1aw32Lu zY{_1)Lc5ud>mrz5h$pV*v7sx?!EvXhD@pn!Sqd{|F5Y@qUW@{Soh10t!SBDq{2GFi zV$vwZ&BZac$WSQqh0_S3+qts7KDsZSi|&7Tk$QA1CC9PYURWLnU-Nnp+Z6;aba77vk8*nN)b6z05C{1 znw5m1h(O7QP&c7rM!fU50TXm5DilKa@;GWf$wu1B+K}s2!fq7CwQhTd? z(`XX_B2E-8q@5(6Oa{PFZ zFQ&a>I>y0EPFUN<-5_+%lvXXT;$IqEq9PC`|FzGmkl|S~@%N8CN?90|Jn*bG%ZXGk z#_wLFhA&boX-v&E|E+Ny4iIamKfRYBU5QA6RGP2(-v;)^TDqZ9;3IC)_K6J^K+GQ@ zEZ4#pFECYPk~*6kQbT!heVWDIfFc^~;Q)EcDeA{n4U{aiVKzf!jT6Dv60B^g?~HBP zH2u@;UwzNR(b_~l)B3RE@<KXnGxe6q5Hp1reI`68uar(3H$7$#cKV6G}QO4nP1% z8eeU06=>NqRi6bub75*Qxi5{BFiQ$6(=kLa&5mIzL}?`*WGE(|TTF7k3Z}c=+d2~lV49+btrf1JO2zb%rVHQ$rk>0L zzHR|oj4a$492H8iq)qwyP9N7?V+#0RX0=$hMC+%IB{D}~tq&K~UFb!cv>gG;zpbT> z3J-(oA=Vm#7G`{yBsWRpHYV@3Y=AAKS*>k*ZEV}tO7!bMDA|PZ$Iw29pE*mn;24SL z@#IH2dRoAUnqq?+Xs}X%|2CF0$O3yF0+2z2*H@y^i9``L!LJ3>z)^+(ZqvR&LuGE2 ze3NdXLf+Sp;C}7d^8_^Oao2&iXr>X4_>B>HWAWTc5KL(GSKrti=Rv?9JwF_`>}`!b z9ZXj9poCqeXvdy`$$0KuZ_>JLjEQN%uPr4-HchVA&dJn&j}PYv6)u4Ux4Fa(aKGV8pdI&R+48n@lB6)S<(gRyuRit*!TyWS&xi#Y}V2K<#AZvSleDy_s)Xml1~?vSvn;V;=4Y=2HN6(NB zg3FOzTuZOcJU*4lVmtpjTAE4SY^0RVwk@^X^lD5aTtNgxR$}r&vtPR0AKjSwIZW3W zc|cosO(?swHL-RPCas1qs0mfm=ChFb1Yq`k%j&BSCRo|mYLZMUTV@lbt>2r900=@3 z8s6KEa!K!<BmmTk=~qm@C|RlG%m$AzW!BGUd!>0yPM(w8&5$L zNU=oJyg&|^A5*ZQPhl&H5w~Cz(c|71bCGjK_o9?|g_>{<6I;i<-nW~+duFjW@^dl$ zQe)&(&jF_H=^c;L=LQina>lqnZ72oT!|^VIBO^%|r5zjxS8Ca_3fNnF3uRsKs;jtE zg#<#qlZzX(D{EN;6H6=Im%BQ-O}%_!f3C(&{P4f}xR!$X%CYnIH?$uuX)WAK{SIP^ z)$Do@)ps2{7%!i?KtM5^>c3O?dyP~|ZrD*Bx7^emdv~?QuAK~4;%14_eEHm^`0C$3 z10lclWc)qa9+dndf(A9M=B*HCJzvft{!=4snu`@sgD)Q_Jq5zD8ne?8d};p_Oq#-2 zcmcfyJTXIV&+3QfSktS{VIPR^KQAbzGe9A%Q) z@w1SX;VJ>KBy~qNfOsGuAy?Sj+gi}-&2a$$NG`PGPF3rjp5K^XSw}Dz5zOvQ5zK38 z%9C5dsx8wR`aHhY-sY;(_0gHNZ0FF}o=`_G^bq~dwNxtJdS7eo+g=W-X*KK_JMsUj z$(WXguY0MhCyJrK z+13K34It>3E{w$ce)6|s-`>6PN5B8k_|rf6<9H*&{lb%9iXD_QfA&vahHw>s6|jc7 z`apYOy#J9ytATXuq1)PHD-{u|6jM~3UOIOrl^Abe7GyR4(O-V;3_V0y3tv!C}XMa3y-8Gj`+a|0%ULi^IeuR0w zumP8(A>RGH-xGiLna{=RAABJG;KNOzcuvH-I8V!e0*zfY{pduqf@YWKRGy*^0=aK} z^Kobo-xa^}dmn|2>wNs)@BUt#zt~N8=7IR*Pks_xs5T^hgFpA1zy53SfloZmz#b4pLu&7_dC;e ztJz<{3cP&2KLwg~kSR>?x@Sm>J^JKXS}RIpH^aMHp__T|{sZyOx8EI4Jn>>Y`ot+n zx;oIFl7_+GiGZ)O7TOb|gv?j^WmEpS)`GdZy{PIf`S6u&Z75ys9-76%77!GGfSK-# zeXV)y)be=Zxf3|#BRJ`6Xg4BUdS&JyJg9QSGj(!rMhV1PnlNWjntU%qYaYKe82|Y4 zbUgC??~B*I=AIO(KJm>b?xkpdO(7=&6^qRNF zpMU5-(Q+{pTekum!{>d^kNi8v;El#_eeeVE!Qc2myzs(d%7|n5Q@cqW72($sz7g1z zgVz4~VR(>s-Wa=g@5J5M&2bnS0Dbn|_dXa;K6?b=%eW3n$>KZcv#CLmON7jf0XRl{ z?N5I3^YJrW@LS*Zj=1aYyW_uq+4?b{zGy;sSCnfg86W@sAxDLPbk^dup^8N3R5B&OX zP&S>2lia5fwBEtAF^l4ZpFSQnowvqlUr*fJG>7JGVS~@dq$wt>iowxgu$_7T@Ko&D zy*2K>`=)4ms3T6CACDn=s}#l@5c}(pd?h;X6d0PX$Xqu+e8-Q?JJP>$Dn!IN<;6uC z$tPmB76Zq3fN1XO7=g!HeDUiq#kXECvSm^QW=YCxYs1bRFQ?bJw17Z_1+`}En7$Iy zCAF|_Od(W%e`F;7{L^26bf7st@M|C7{U!0!KlPLGhkyDP@h4w77cUN$#vgp_Q}No@ z-W#9(>rch+f8ukIUDh5QZH;l@#v9`6kA5}Y_T6tuLi1Dae;-V{3{^dPB!2D}{;&9v z_q+#q-TwHUzdI6t^7$7b^)kgoVxF%T&W**vL$^@fnTgju@VYp5?4@*!M;>{Eh#KFI z?0}KG{Xmu*Rhx23>fcrp;a(<+{q(aF@s+PWN?%P!yq>Dn+u!!xyl<9F!&Xu-lpoR1 zU6(J%7ryYNID7VN@=?F%o!=dA$8YubuI_H!fZg$~cfNztD&3oWUJuXtA?6qbULSek zxj1%dB92UKiK&WL#s7F>I)3Tn&oNK0CO-Sw&&DtO(r?5+9`46I%7W*!h)qcF(+r5Z zx-6QQ8bUP4-9>#j6Pqb5ZoS*3Dq-hJlB&%fdp^|YFNi~93%QP?n z1V-3pfEkLAPKo*rN~)_1`FUCE0-xYgr z0Chl$zdVG1{bF>&8~J1J{qgvfU;gFTgNFNspa0o-;v3&c3*Xe#oHXMA@VAQc%IG6+ z_$Pn-NAZDQ{gt@!z=3$=o!=YZI7#hz%bVlFpFNL>EQ}M~GqkE!#E<^S5655q)nCQ; zzWe*3!Tx$O-8UUP6nDPrE;0=D=~}mRY(o%SEtvu977KYxK>90}m@u6KQJT)cQO4ua1# zc-pgPZ~DBh?ylrI?8R@D=J3qv)A8f)`>FWdkN$ofy6Hgt_V0fzE{$hJ6Ci6JS9-3b z3`Ko4b$Q^ewO~hEnUh{sN#h#es|phR4fL%S}Unx08yYK2KJ66*tT|z{{2TEROlxaP zQ+)8(e>EO@;HjYhjUJpr&Z8hc@;kp1SGq67>+jwfW5Yf1-XDDrX)EBn1DE5^{`8~q zcYpooz~hFwmaKU9Bcy}4-kbM#faED6^H3b$bN5)h>#YyQ9j|_fIh8lyPfy3s{q%cd zYt0gr*|kXn@7}#TK91>r367%Q{_uZ|!2!lSvw5~{-_C2Q0+O{j zd*%#xW+S$Cc5*JWB-=^QV~KP#YU}FQaKB6?h_aMU;vc_*_LYvt{^UlOESaFq5j! zY%J=r5MVXu#;KmQxMMruU10wdNbn(Pr9hL)y)y~VPf-CZ5eRT0!YKT$3@2UYH){}9 zTim6WyDlfq@|L%}Io|)HpJXoN5|ePh72os7TVsF<&zHXZ<@mXu`?>fv%>3s+|G8w| z{@@S(5U>Ju=YfH^>EKQA)BoW=#)p3E!||z4{9f!~QpG#p_C^2@RZwYPiXVAHXB@vc z5qI2qSKNQ7Dt7PMg{I4k4`Gf^ojo15KU`0~ac`Wt&j0`t{AWG`3~(-9bMNa??RyD<+p}vs zzVDtmdgMip!Eo1$7vhip@DJj>KmHR574_vWd;v1os`%!U--?STo{e97=fh}X$PKVY zi$vR89(Yxh0PigV$T11Vbso2%iN1IU=c13ks0Bz9?9yB(1Cl6gfFy3R!n~$Y`9JL) zt}&UK0wU=F<~_!@2eG1e5O#I?6{!&V5cpB_n#za)3@~S5J+_x=g0$W! zAm%Fk`u1wZ5dtIZ8U-#$=A(iXTperIJ+hXx>}E^mW^3So5=MSd8?W9_(E9$4n;Jf{ zb8Go(PwzzTCF-@6MAT(C_z{ZwR?2RSpZocrj{^tx$GNlTpyN9pzx}~qj{owWgZM{f@t0pZ9GB@6 zcgW`>5ABcF9O{T4`IWE6LvQ^-j;>9*;g=^;zBn)&$4HQ`KwT|UTTR=I@xa4xPW0Aa{>-1nae9XS_H%z9pZ)w7q7v}* z_i<0ux&}|HfHUNS9~xPTK6sr*={p}FZ`z8_f2cJ(K67j_x~72s;q&ilB_B&p_e%t> z)rI*RlZ)$FLvt%D-Ip$Ra#6i}al?|=#kc?U$8`|Q=J&VV*!YoM+p1Qt^pE8(GqA9a z$zpP>-`chjckV8Y(|y*0v$$Z)1wKwS{XRv-)Ue4J`ej+Mkg}q5&*m@_5CQMJ5H0n$ zUp*dQeDV^r#i4sf16LI+#J_*nEpd>#^a{e5_#CM-7m~2AXzEBe{wv=+7GL|;%b3rG zI7mJD;EkR1>BxBwDhQ!kpxo#@Z*i7$2!{aXMUYPZZIvpBf;c@jk#d81^kL5fO%vQE zzxgs6btRQD#XeGfVog#9B|jtvUURr`XzFa|a1D8oG^{f^a214c0d36y3ET%Z($}B47>_-F ziE0&Tse5Dt0j*KB@Ei#Ig-}or)d=)r{p+6U;h{yvl3uO zQ$=?C+4Hvb<`EZU$E_4Y`cX0`35x0}%Qi-4m$QbaDM@aUU|ts=llw%OkC7!V1|>u= zWJw4n3}{HwZmDOy^N=ABkvGw#!IC}>@lvXAIL5A+zM6c34#(mp?S!^6D*U0h-w|(l z@TQcfTW7a#w+_umEa^8vh9DHa7@;$HzJNx^B8T|Ey|=}IUCopqW&Rk6XPB8UyG$@pQ5yW17 zT-B7q+tkEZ242c$1aC?aLHa=_T$l&deJQUhp{|`F6Dt9rT!T3;MZgT`WVb7+YC+#} z0NQ#9A2HK#hEiV51%OgpRLiL?#=G0M$2-1Ti$RH!WPL|#eSGe*m!feeLD;r!RMhA! zfLUXKz-=BTv$W~4PNgV@C5jf~+~ZpK5#-sNC1qBD8PDe&2S#Rb%jPiiY%bPHjjKi2 ztjBc_%nW!!t|HrNt|xFJ6zK`Mfb>><#Kn8JqA;z@0kf~R09b)Q*Z6P|iDnH5d3z4U1SxBL5Z3XT*7|v#7g%Oh>l^P?5(QUcIn4Fe zRFm_CU#O(2Ioh|hk@znM<4NHGw7(QGOVrTMownvEmee<);kYLX3g8xx<-7G;bF-z>o@SGa`y@kAcp>G6 z$*__Ctcfz1F+6R@xXjZdW!LAyLkD8(9`Kbkm@U(uJ3clJ+nZeiQ|U9N*`WHWS=`q} zKpBEXycd$6IXKI0*h3C>1F6hM8?QrYS3xi&XvPLQ*HBcLT^pPAxDFcAT?UE=L7Tv# zwk_5gw@KYfE_@n39sg#(xa`3Vq)o~Z&IQ^BmRShL=ap1(!|S)Eg(*aXPJt93N1A(1 zp9JLFgBhQWVVbHY@s-9w*o={rn<2%d7EC0h+^r;V2(~P`34zWz=_*{6H?$n0m3~)? zbI!cZF)*@is1-F=`ikrP(cf*t@}aqpFlmFD*9y5!;2V+3f8n{dvK`%oJrjQq0azFwa7K>9y zj<|$-S5A-nb5A`RXHOib4qn4O=8ImVVqAx80NJ)rR{*s`%5Yr}P?W$j)7Zo%pc4R` zn6g_Y6~{{`fOt}}lVss?HBeVS1=h3%E$*pigB9H@m3dtRQ+sF%s0;AJ4W0FI^S-7u z#rD*RE*2mYzS}ja>0ZK|F0e3~>@olsrJ$-sqW1%{8XO*B=;#RLxc)eOc`ybT6go|6 zL+%{bJf)iy6t$qybb-Reak+=wGzAR-To$=4(-(^@u2blkc*!JW3MIa&J3zCoMl?b0 z>TaMqA>dB;i_1n>Gv!4S^!l;ZrftbBfG^(El-hThbCX8Vdc30m$2ed&oJUz;B`MA0 zCN0peJcZvm5Dnyti>rvNNuoEyn<;x+9g~1X{AVG|I_S3TPLT#%qGw)Qs-TY+NN9iT z&F%5r@hkKn%|;I?uH7wlakh6X`TfQCp4khS@&($XHvz-$-M{7!7g5fldv56j-nIvP z~nUo?BR()V5NsI4L&k_KsGgN#|Jl6x+RDWuV7=sMJ!J;nyAR|?# zVLl^>M<_A|xzMx{a-wEa2o*p}b7|@r!j#1gH^TQz0p?{%xH4d1KAYDYc;qqT&Pf$& z`a%}WIXiYd@=@uS&QMe{dLD{nItm{wm39t7kwp-q*eW#&PWlJISrN$0`!tavhRoAy zo()($h9GA%39Iy`TjEPIkka8bl_JQ^g_0Fu^XjwH8Nl;2@p&BBK$1B{n*xnY0AjNY zx-C;i*#w%)xSwKKgO*?u>1PWDql$j{azHBOWJGEaw3d#RC`3@zjcZhSYzJ|G!>Nl9 z=nk%c)bEUSCMbXXo2S8eE=E1A)zi30E8NeDHL@w5?Zz|>0@ z&R~kxz(kUqW#Jczc&m!J4MfW;2tn`Qbez6OYXk`EUU+%tiH_6as+EjbF*#V3sNkl{ zCc*tkxJz3iG{>4?1us8oV7m^5n%j1$LfJ2G&4nm#J?pj@+MljHZoE-9u!152TTgE)< zVyrB2eiRD?rsNQOIA2|&gN-cOfQgU|cGRK)0?M&=nja`78IQ2O+v`h3gdrSHIWlZvMkwhjdm;O6?gE`A_?;qlGmdX z3_i81kaU*q7A0g0D#+OxXqf0nmeJ7QGWlVR&(iw(Fdt76i`V6oYt^ODhx9LqxZQ*N z?>{Q571CIaRW61cjLS*pU1ZfF+H`{NV-t+O=6N-$sUkIZKG@4NK96h7;{${RI(yTp z6y+Rb`Kr0s)Z60(yDxu7L-Lw+j+p`(-dhQkPAz0*PT%kz+PRq;1i7cK!xd-}&t8FF zlY7-rT@?Gaf;oj_%9a#MkM#nD$p%QIb@|LiY7TUI`aGjp)<{R$W;o}kMQpk>9VOQIBL0bty z4g*TLDS5!O8hBj~zjJs@B450=h+JPT3n#)_4TpkFG|VOB{Ty$%MqY1@+@yY*O;u8D z7r{L@-&0dE65P#@=*kXj|zGi|HqyA;1yLI|ejvf$Gxe^cp=i z^x;#=bnJ9RIYABmPBrw(+o?D^3&RJ;b1d`%Sq~|0N=*fEoy&q>@DnX7c2<&ugvI#m zfD<@yV>l(F>QWl=>N#d9Lt!=ZBr_P^x*V4nTX<>oa=dD14K5bBQ7l0sHl2Y6&_19?D%p{Rf(a{PQuy1?Wzv~(JoXG#YDSH&wG z_Y`%0lkW0V$}gGO5okgd(>`)DmI{mRLZ+*bAO+28-;siDG+TnI7nA9Ra+9jjQ^g5k zGBPja!z{sCE={>!HjQn!Ly*Y!l5_1F8Xyov0B}pn=}j-Ettc@>zdmvu8Osj~C%7)aMN!4wGpIKh_uVu300t(p zK?zCWRf3RlsuH7P4E=e3@kfW+i%PUD3<1eP6pZIfv zdgo!@m7P~$gC$A(f>3S<7}|!fJhY&TpR^|aB>EHgfRpyT(SZ7Rhy^B&5+8(Ba%DxZD&Z9+QW!xjA@(uPrw`uv z0g&les6L`JIlmmsgIFGjWzlk_Y)m;aWi=s-79+E8sH6028DiyHV4>;x@yumXGFpIjs6{Kv`o-NhU3D>Y7$DiL@{M7 z0260h8tS2MW_BcGRu1Q!1iRUL=@LY*4hqeVPMLfaAinOrcRTIA<4oAaWx!v(qX4%B=}H!)9qArI)>eed6ZBKftpp|GuION)-}~7 z_ojklltNLsjnb>L(?=k2Fn}DUwtbrEaaRVQ{KjYWxdw8U&EQE5g7V4r+JI;9HBL&Y zf^<_e_3wK4G}Ydw-H@zwzr6bi8O6#~m*qqo0$2vQf}N zw`Q}%Qn%=OJkmzuAN?`3i_|N51>Tj=@F{(>LvHrehJdwtj*k{J*XEphmo7pnYDv zvKr@!8hun!32FgA+}2E5gWhH-t`~rqojG?AIz70AFi8!VXeZSgq!i?kphp{3)-=T4 z{o6C}&ytfwl%GzQWwkS+lGVqYLv z2pp?vvfFeG&+s3AKnmq+uYd$LrGb_)ryzk=De)1H;j0?K(?rL{DkOcCIyhPEN^0V^ z4g23JBwf>d*61`KT{PV!L!K_I4v<@g_Y;4&0qanXpw_af>LDtqXD&}M3GQY#<-uL` zDM%SXqh9QtjFS*<4FKCi*8>h|j1IKi5Ts?}kRnWy(l`fXtz;%ES`pBSs~XgR$TXJY zU+Pc_GLgs@k}JV2Zh$SoWoYzKB6V&V*R2?5zVmI<9@kGWUAOd~Q91z(j`yqY*o7?_ zLmPnDW|3vC&|kUOzYtHIorx|$sjO#09mzu}UecbL0uVX9Fs4m|pefCRXNbV09PMJ_ zTk_Q^ob+bK@YT_`VkGUTyaABkmF)V1d+KQEm>~y8vpzzxi109{EYhVp1&DZtsSui5=Qge(d}BP<&usNM*wt26pSF6^Jvsn zG%4;2ot@RyaA^`0jl(V{+3bapOnI}x`v~w!6uUuL5or5*jwzp16J3*aWK#x)#~9Nh z#LvtJi-TL@Hvt@}gu6+id3^-a^XJRFnEA#jKm+&Rdjr*nk~CRCbd5dZXZq)f(5Ist zFsc@>9RI3{`7|xnHM9>@!BYu+-atQTk}(!0YF_%Yy0`i+&TuC1pfqlJJ7Uk>z+Ils}duH=iR#6Oi3OQ4NKRrtkJl^W1I zoU>R=b*-aU^kX&cQ9~~Yr3Fs*En8Y>D62!umSBG2V+W)>$)@X}B6O|~H)V$GNNppVWFGwG1avy% zX@V}UEAGoiN-O1(4JgElEwOo9+MD8yuR9pO`-#WWOiO)ZgSKoE`j%T=U_^D3#PYhB za&;anoOFulbbXoCxc{!*sYYH}*AicS{N?!Sw|hv77#(tBXw_|?@1>=wJ_+PJJU$}` z^ZNQEWi?DRjZ-4qn^=I>mMT&xEEbNxA2Ugx`T5h`DQ%;P%*E^sp;;HuRKqOFA`{~C z(S)T`oI06cQHmf-fs!xKmz(QNUL>tFNrK-5yQM>cLvE~fG?!7CRTvwx3fMhq{*Wde zjggNKI}A04&9{!=80dKAZb+l-G%^}t9wBO!15S+P>xGb54fTnz(yTkPO_Lapk(;!Fmry6@EH{)=VM1leWHb_ zud7De(wSPsXlYFIYYw&(>CeRzM+W13AJm&IZPD1$oN%6UWDc@EI$}p#eadX8R7{OAcZzEu>`^c^PiE9MfmQ4JXiOH)h<1rZwmkOMH{F9K%8$SL z++hR~4$J-tsxFu@00XsX$gQo-_@504nl>~9Z8LtPWKvb-nW0JB+8Z%RRoo2B6Xs|L z^!5TdxMW(mO`1j3-O;nd(DKa#BBt}Nra2n%!79mTmLL#vh%cb67BOklnAJ3Ah(%E7 z+&mJnCUGRN5yPqA=Ar4xv-3Gz4?8FyAJ^pbBClBi08xr*_qtFc1VNcxsz`Hd=F4cE z1+L#4Aw-UNos<)TjnkS(`pMpO(@oZ_&0-`I*{sKP5=rF5g>`HX7Mej5F}?PdQ%Nj6h{3iT>`1NtvU&|O+!WzLPuAt^(^J-Q>By- z@6oKAvn;|ll)+bFl;hW>^EdVse_KG4 zt`a?~wI>*HZCi;o_Cf@wt+@=2B4!#Pz|-SH09$&aXOND_#W9dR;8(E}`^sSImFnEu68j)HxM6!6XBTl`Pfaw^I0k;>`@VjbjK)mdfwrw8m9@l1T46J!urG~X;d(szP0*GeX7ii^kM=Jg3VrJNY1&iy zk;OdfK1(Z%!~v~7Or(m|aEx6UIkD|+O^nXlLVj){F81^jvCvYvdgcE|~u365&; zt!#7X?ivPXxR9cD{mWI7(t~J4yZ5q5G}qQNruNzv+9sUbVBd_u2z?=MqIKpaNYfLm zo1hLN)lzeZ z@X!F-6YDexYU{CMxI|EBR}hfeN^+^Imw;^^S49^DOaN}nc7}AFMT_rjuH87^HhU8@)TCqcHdU|wzrUR$6hyZYceCcKQG0$}k#d9y8k8POwTMq7w zPF$)o5L9LO{Ciu<;&~>>9lK1wkhx>lu$zL&GA@gIzW|?jm8=2|isoX|9@jxIS#xe2 z_ZXq$Msr~s2+UTne^}6X>bbM=5c$mJrremMjJSVyJJpbBn1PRT!T6*&*(I2yi`3RH z)0(8H|cR*1oM@1 zWtmxcQzRy+SvYRCB&wG{q#wNPj@Z$j7srmApfWMW&X#AqFh-d8_0$P!>2UqrdiUMY zMhZ#r?<|2&4^+>#(+dBx52&I7UkQ-w$jC7HIf4*I`B}lyAG6a^)9pg#VqW#*axkL- z&QKrE8RSWDS!Ux)O=J>E0wk0x0`kgLT>Z{kSj$&3#V*={q0lEm;;p_unRqH$BA>F@ zP~rpcRk1N!Adfj7VF!}q5#%UBNeufSv1Tb~>!APJ`~t*^_4ZOx#}peP?7*>NsQ z1egY8OWfOaG&rnL0JEn_modQ&hLQUpc!+y970iQr3UM$6?apI{TBzdaYB~3Mg|<EJ18`uF%8&4|GBAr()m22^qKklN;`7)8UI3866puMJ zQ#3!)t0_S=1vxA~C?H(p#{Nk8?p3n22Xd=-= zR?YOO)w*iuBCgkaC;@{!MGUz|Xh|?~U6Yej(c0D=yLRj%M@&wV(&XhU1Iedupv*}; z2~^I!Y&Q3LF~0WgGt5~kj;%DG9X&aM=7%PGVuS$Esuai~E@_haLo>@OS*1(a>jM*0 zAE8Tr+RNt4Q~ozSu8YP@JDk%q8B(log*MOt4|7; z-5amI>mdH(YFwnprv#v@KBM$83S>3ao>d|eTQ!!b@VMe$Pzk0w3nmSqBlK=(AZHHw z^gbnh=q>Y+1Wv1+5w6S-0Tn>`Nnr&>z9A`B`7|RpbN}K;XL^g=I0-6_gE#cF);I? z6%zkR3nb@8c@Y|!8gK_gz~vmTlFLDh0bX3Z+)Y{mAPs@i{jYl{riOdtRtAicL0q|>oavtWU3bXCht}0ML$Jxbe%n^V6>+Yc6hxyqAC{|e}8QZ5YqzD|- zoU|=ME22Du$Fwa%lWfn6RU4`?ns7cd5&gTs2v*WwyzZYrQb!{T&bo8+ITy4L%gnJ9 zNHr08I!cQCb5(j2Jk~~&oc^Y)@UteA>q~h_KZ6aSMoiikH&dTd6PV0JT1WoIca^Em zp+f2JzLl4!ANj`f+&2%x^FFC|^w&aANFt%khzb{U#2%g|ZwLa!i4+{UDH_Oadf3F< zPS8^V7{fsD-1$q~&$@U6{G8q0eespY9tYkw5WCyJ$D(-`NX>2FziSyhH>q~g2ILz3 zkGsH{dV-lt;-^h{Tyw$nW?I*kNvxQgkx5!(K3SctM;*f?lz^O)XbPQiB}ME-vD%cuNfdY{XJ;PPJNpJUhygfRPI2(#{iE`#5b!0J!> zy7YGsnLZ%>&F4L)&nUP)d@B9ylP)}uB=ji_rXZueI7WI8o58*AyV8JGqWDw<-~cjk zXpJ^tZF9gtJrmIEgtP;4iNC2Rdb)d=QZX2HP!<00_rE(n_oXk!+*BX_XHi^1DG15S z;84kG%%h$CTs|+|OU@%%h_tgjhs}9hbHUW$7E^2tXgflGlBpX2L&D3rg zHWtpN$Mb%qP0Jb@2Uw0>WFzEoKH^Nh7L)cK`xVcGAHUjt>B+mvMnxhW?RwCXo(3S zQ2S;oL*#AJiM?X?eX|d5BtAP*xgWLhKY$-39+Gz~5%y;VMv52SR9rA8AcjV$&YiK`_%T zW9J1e5zL{%oO5kFxJ>*NZ;}uDVe&|XFTyLSnM=aVpEONVd1U+Ti~S(fJ9B>t{kco;JP8BK-sd8X!1i(W zd>6-$*wNWR3xl<5Xc2kBAW7o?Wwg%<8YD&5Xxwubu5fL636!#efTi<8!wVYzCx6Wk z;+UDwRW{JFe5S8Q%n%H;S9(F__w=*x@!_R-fl0k`N4N)GRf^UT#zJ$poVy#Ft4uHU zx;GF!-)p(nu1kf__oQUMuR^19)#;o}R2jM^Yk=kz-ykN{8A7%f*Mrkso%Br8qVU@9 z{IPjQ`d7~dQ_dpPfpauRHjm@2X?N|7Y`sZpohehe?c@SpU68~N&fnc}nn~9!^YABbFwbSDV`tWq&CkMdOrp-DZP5^~H~=YU zKwu{FNK^RIi3{)H4$EWmmAY~B6ClnKe1a*PXIy)gj*MM1dObtU9q zh;pAM${!&&>df{MiUHo!t2ZulyT8MKUB7Gp;G`8aBVKp5RT?ETmGHQsYO5)H9mg+A znwq1@!TjaWGHO0@7M{l}61+K@%GB4*4d#X`K*?mfpxjWGNE!2Q$^4=vURikku(Xc8 zCcPHHCef}hrEipOtgm44lu+fvhd!~?F8Y(U+jg`z$AP`u<10@*%W$S6apd?Zz|7@L z&S;8fj+~4GySEX|=EmWd&%`Y^>`KjLm%7a?%tb4}lH+GDC6hWrVE4xR?*iSkBO#rX zv*astjp-+ZcpdAI?i1-dXQ#_VNHx2eo^VFx0q-)msaY|3Yl_F4yS|PV;(5(aq9XKt zN*BUy)NFat8;Ek_wwf4E(y7wO1Qcn}xn;^+`q?|^#_$-vhksZ+j*z~y20rPt+;e-^ z*%TbVlz`zJxxUef$#}zkcco+0(55g9xYml3nnysy6uy_5%W-&JM7yHMN5zefO<=zD zO(8rWn{fWp6$oZ`rO!#{!sn#AJ=bMNUW(k)d3ibt7Eimu)6be~u0P!;{MfYH_zO2d zcfr8NJ?17;m`r==qb5)byG>1MkT?&3B{x;Y!~$sY@tgUK4A#!| zQ#?)It)Wot`?pm_g{@b=Sr2vCHGjC1>~3rYQ(2_#zDSl=kCfVS3%MX=o`XF%K6&x)mW|wyv&|cuuD4pWQ2e)V1OW zES{Qx#dh)dQaFXsX|^{I9s?ZPcGFyM7F0jaw%!JMV1DtZek5+cX?HyS^b43VCOn`q zYUnfCx2rS0{P;6TD0X&ki7!3=bXdz5L0$&YY9D5OH}F1>wP%~N9N}h9pUmPK4JD0b zc7iKIu+wJIzeuO(-EqVD4(=zypegqLB-E1iQSMU`W`6X&8DT-=BWMOs-oF*@O(xZ( z;8PJxz4UOvCkP-le9le(7O~@;6j1In(ctk@mr@%t<}76yv}8M5N~4eUS~L5=IUB%k z*5f*8%p^A&{z8latt9jO;DRy#kBy&@gWS?XZwdU%A8$>o9%5S$g&J{nX8PTo=Lg9&sDfPV`17nMmzoeRgW`H@6rxcjkzJV{+$2qvT23)D`RmPm#SA6^ zOj?3hyBORw7dY(*4&hNUPw{@&p05?kc=}bTcFsblz{yojiAyJ&t;J1yw#A|S_=K1? zU-#CBUW0!Kn3!|%^zJygFR||mI==Jf8}OGi5xZw8Il{gjTRGlF{O~*9pwR#yNdD5_mC%i_?ak(lo2sc$@}D0ngwf6O%dGSN7|V__&4AFhCAbA&k?3=aNfmOHO}pH zFRXDCLWo>Bl*i;IY|w8CiOQ3Y#P-viNy56!ofbGeHbMV0;EsgQ z=H?|iMA-7Vu~v9kT2>1`4@w!MS%pXkKSk6mwyzO&#K)wYq$x&R`GqaPqNP>fbs5|v z%Z+5@;2!7@n6^qJRcw}ZafURbSxu5X*D14W2<-;0fy7aoPS0J?vIGV8&nPTHzX|~= zn>(BVI3aM??n=`%o`-J15{qn)kmqcGB73h9?jpx=BJmpMp|(sHk-k}}A|*xZhB#F> zw;M5OP(CXUZSHk0Axs&Naz;qix&pG56RMO5xbBZWDM#S^jP6rqi0_(hErRQl$9}dil)}T{aTW2I3gE$BA!9)USuFEljj#V*GPzrO{!8P>N{Np#Cil<&UiqFQ7(=!)9 zCc#AnFrl}9fB=Ig|8tiUkX4^gXIug-HJF-2@61Gc0hJFqf6iR&24XkG!h?#Z=A6Yj zTK5*pwYV@Br_NsjfS#Z7lBQJ(t(Kq#Pn_+FPyhX6Y4Ha}MhFUKdF@3^^bk1SdbFK$ z&#?e}PAc2sJ}AuPoWFkI0_R+cCGc3n)hH~^jIk%ho5=lO(J~lADVf!j`P}e%xP;CF>ZruzPtsKOxvxGM zufBDEJp9^M#pBN$NjIw&e{KL~xhe9A2lnkI=XfRsEw>!lll-M#7VOmduGouN{rb0_ zCzz>;+Yj!I7s*YwLbKfnDZ^zcLng-Fjm@`P|W{ z<~jYZN1r;JzE>c0$Io0u(5K_j4Ljq=u~V4D<+%OO-h?I}p{@A%nM)~xzYUXr?DR!6 z>Kg3IJNUVmUi3+jJtb69rs6ivXMTQ~^SG4GvksyK8Qr`GYV2=(`^7kV{9N415Uk#z zu{d^$xss%&1Ph-a9kp-gHUhJwTw5h*txnE+C{epO!L1b(x;|zjGa^UG6l?>nuB&5l zAdl;rB|n)eL<%w#j4~=W(i2q7xg`i58aKJ7ERvf)ai3HQEg-KXHv?^ z2)U9RqReWNY01*zO|GQR{M_Z<)WSM60^SqTCXnH+5577c{nlXwfZ5YLD$p!7XrByF zWG$Y5=}hdQd+@~BE3s!sJ5ea`I#@Wy5VjXjo{!Gfrg-AnBQR1xtiTlBqy>q#EBRTj zpITB!7q9ds^M9_pKjZ&ln&0;DYvXUe_&A-5j4i=G6;-cQICrUsz+^qn^V*gsa-3`! z(?~C$x)6h$xBkpm$(R1nJKjL#DVBBZ?Pd?LNK!88&AKOZkSat^TPI1 zH8xbUF;Av@Juo~F*kgNfvO?kA1YSjT`W{KC6$xgl{!_7Pnw1kH{0N$^~Bi4W9BrgYj#<=7!u z11f$BF3nP0hnvxKw$qlP#jD_7D&#$Kn721KrZU|YBJU=yV;Gl0(|W_MZAplo2%*rr zp>Eo{GxaAqFtmz|Veq8ev9-N9rJ~vqei=PXO?7T*PAMpx$z&jAs3bh}V`KwbndV!^ zsOTAdyhU1V8`Jx5A%&&C*L9^IApnDdZ70rmlg6sSlw;Nr z@I*#yP-iT|I+=Qs%s|?mVX9OU^b4gR3wd$#uTzC{?F>pSp(>O~n{1LiU30dU?*+C)^$fPlli1SB&-sxUC5&K(?uwu>@zQ(NTywi7SGcN zR;^}VPFLR$+&@=h2Pq=a@}K?3Zzh3oAvBx1CC*`g_9*Qjm|%krr?a)9{fane&9fWE zMVpvnjxCxiJ`|K3q(6IBIW`_a0}!Yhq)n9lh?S55G(|q})hr^oTdcKR)pcF3?Qeb|Wk(Xid$z z+R@0}%`FLp1&vIW!F(|HjCjB#zByL28LvD{6WM;ETbYFNl|O9K_v>KFxppqvAf|xu zT>pgY;bs7M;D%Y8&F0DFyIKbp>G_ zM2jvE-QIC%4-9DKn0#0_@IiN?ZOTB-^bd_Ef3pJ(vqIFp8{e{jWE7L#o;F1f!dHdA zXo>LP{$0uG7hqgPJHcBXcohPcjqnx4>+xd;Xd&LUqa&eea!GaRPwuA#Sw?GY1?S{f za|0Ym9M7Sowt=*uo#tsGo1wdNEBVf6jvgmDzZY%VnHIJjtD#Ah(yxy9xX@%RQvh}5 z!iCrYnbigIqi)VLV3qetOzVBB$A{cb1D@5TZIJp)D%;2Fwso|5GYJBR;1w-J+ZVG* zoB5s}TOidMgJnZX@HWnEnXG|r6se$)gwU)30S}8*1%QU7LtvFQ)+T*(@jN`CC4cxA zn$71o>2b{k)7^vuOwr~HP%&gFJ>hQDZFa^Fw?)N>eCl%&?Bq(_NAEKP2zdx@V*?$P zM1XB*BFPSncuQzbGeuH?FSvkNv>{6~=};*lUL>QE@2RP7<7)wpXIn;nT@@NlDixxA z=0N_>_RcIeuIoI&cZNd_cX5+QNtCFSk}X?uY|Bn;C$-%ME|LOW(iG@R3-q}K`qYQM z7JVzww-zXh7RW<@q77O!X&X2R5<6CG*|OzLvP|t1X^P^$b7shye&2s*Y}s+##v)ZG z<&lPS=Pu`-^Pm6x`}xnY!9xs0He@{4BI!kOO}QqOqx<(jF$lT+ws`V6AqnuC;Y^?R#T!sI9WiNg7=rl%=mJd46apfmMqj8yj>=HQ z001iiNklj#k8mVNxK(R<&`mx==<`T+@xgTY16@+$MbA@vvwiH*Rvi@wJTfnBN?aysXLMUdvm!Ts!4e$bvl*+}||-0dWlW0(P0 zc5K#=-oBn-*_ve5pk`Vp8k@TjV{V44QeV97GwxDY4Uy${HxpMY#|&)RoKK2E)-N)O zw|=yKVt9D$Lb@wMU(_NtkFkmN+=sQa`-sja${!Bxu=l z({MSm(Gdv~?*ZKDz{VYS_UA*C_|B^O*-y)Im&l=GmfHx+vg>rgSqV&H#<{6d3PcDh z_ooJO5EV1V_~aDZ9^c@+O9yb>0cWYD_bKR`XkVq^jdSm!(OzV2w5$HuT@Aq9gl!vd zcxz%R0KbBZbA?ra`tC<>-QwNrA^%C)6d`W7m>;BA07;ZhH9NJUFucbEnI@0BD-T^9 zH_o$CtSOeUP7u_g-Op6kCgryuBCFdizX$tw+rcU9rSp8IF&l~CvU!&_xM{1&8cx4{ zj@&_)0+BBhC?fgM*P;7w%B3zx1Yuf07K!6VjtYkE55 zMvdiKLhPH9Sk9uCjOk1tT~@*7v#csj%|pOnWM^WF#^5{?5@Nylc%LS|GX8i2j2%3Q zJtwFa2SPfW-h}0r25vyP3lvkYgQ=mJeRLp?$702BXZZ#m6?_x0MKwDS4aB9xq5Vmj z)PP~3iy+Ae2$qF9b+din8UWJR{pN+M#7GV$uU6ho4#IX-reeASxCRjV`!BqVQGYoo zgH+X|s+v(`wcq~!^O%E{NY-UCRuZ%_Am4rN3Q43UlR=dosLAliIFvM(sBjEpz&Dez z@~aed3B~2o^$~24R}i<#A%psk(`V0;`fng&GgV}kNa^y>@q3aX;xq3%v^Tjn{2pRS zK6wq>;~(Lg)SUI*=T9?<3doatNC5FV%FzviZ^z=jnx}ebqoH(KG=BKftI1=J9LKMX z%>o$y`jaP^26_J5-}?#h%qI5^?u+&xM$9lni8B7x;hWfHpQcYxbO{~f zAsUuINY`bB*(hXvu?xFNDg}VBpdyn&aYM7+Tp1%g%%dBwRASRw*Q+%%tLICrm+*&? z5k8QU0si!5L$Lc3U(Xv{xwpt5b>q&`i~&6OAd}H!CUPK?Y}}a03c;v)X&h|jKv_o< z>`<541ZnroTdASf+1-MIr@=dyu7$#+ zta;|G3(1p@J(PUyH=ZH@B%l1p4_^!u)lTfa`Kt2RziS7ku+9i5F}Kh?hxbJ&-T9&G zhyi)p%w`F^*NOD_!}o`*EQ{7hE}}yQf@>+4+fV!FKPRdjgv0cl?Pt6i@I<)=NySIs zzP@y}Y$+2CN;>eFznz2#Q>l3M*+xuTsBEcR*1>ko_2Es>SAg)&Oq3-!GhO!`ZbKu9 z0yF?3WW$uGw<-(a_?<$Qlzk{Oe*ecW1%Lxtpa`qi%xaic~BMFIob=XnuCx29V33un#+do}{!(Nyk~4Tjs4R=f5^8BmMD5wz(k z?3rUwdaVi$;uwhIKssVlV%cmHO3f4^!zdcG%Abj@+zO^2B$qlV3Y;Ih9PU;l-Xey9w}*p+1=iJYyP z@;H*3Dk??NFJx8;hwfBk1X$dHZorm_)H^=CNB~%|Zf0?HZMwMh9UiqXqIXu(QNOb~ z{>P`)dK;m7+Ww5KROwJaH;_VPRGe0B#MBAEKv_qQuBCv}0M9O7Kt{N(k=%cQ{FjYQ zeaVAR!{Ol(SmZuTCwPsx&tL+L*t1G+lmQ$qH}E^j=OA}I69a-54)bjsDA(8VJ1jjM8BJs@oADh z{3le>Nq8TuSutXURDdFz_R&29yFjY-WFKt2t+@?WzCU@E$+}G1z$YJl0Q>4YWG$Hs ztHBcdmK=~VK_m)|nBO8U0ZK_23Vp09KfvCN6=L=uEYVpj5CltBqMdo(@r8c zTBib-eell&5$Z;`e+loBeSGH0N26`_OCP)J5gHrUu+4`Uq1OJDrysM1;2ct_{d;yn z0hPPU$?yNxGb#Py*ooRt@-gjtBB2A?n9qkK*#g$rIe`QV1v= z!52CyW)Wo!Zf?kV`878ZsAk-0eLD^{s)dppkeH-#6Ww*5=hjOhZr{8?$ixEj>J7b$` zwFC=T;C_sHl%&vR!H`vosLHAy>*H2jvA@1oL@qK(MAiTZ=Z(%cqTDwle1sfrA}x_P zbx2czE~hRKju>HooG);n(d^2h#WmUquq6fs zmSE6`fP)j+kiI6`>$Whvy4$i>$?0Co=N{@L1Oe^mj&m1DayPeR)@PPhD;aPmvjhfe z&}Gg62mzD6-rs(-rJ3tea5^Xk2}jOIkVL^-N?}O9Q9UA(vsNL#(J(g7H4qSDo^d<}#lB`LCFgP8ismNa>HIu}0%^-~nL)XGzew=W#Y5dnJ7d@omdw}Ss zQ?I@i6W|_}OlWs>Tb4Q4)un5rX*d~d{@}o#Si1V`nbUzZ$B`vpeC>3&HBS&M@ybi@ z1XA(Z@ppBoTjL{m1cIBV)OA6zWl{O3GaMe_Ud1O{mnU5O|b2QUa{ttEP6JPClL znC(RM2&^d95m$Hy;BbKrotE)Kvs))6k0D%nR1MQH$U%8r`<(^wk(Y>T&%N>n$V(n2 zD9A|iVM8kWNG0NiWU;NYwfPU=;2;NkwVEzaVMx@W)Si4F6m=RJh;sf69n8YBJcFEE(~_wB{Xusb>P_IbQ7^H4NEtM8mirhKWw zq6pyHA|T28G^uf@RD&4OfWp=WyTzguS@1MkMaUu9gbfEwsiUFWw240A^bF4BYSj4! z7Mp?CO~f(yKF6)21=lD^Z})C*3$vSuzL8}!5!1RWz0GY;vHe_sH_0za517?R9hxz+ z$y!z6(PX5ZEr84*IbeojH9(Ofr8CFw&**&`-A!L29F$Q_p5-r*r3iae&NH2KBa}sI zDFP^0Huzpyb5C|8cP4e~Q(tSdglVCjJ}{!rHY z+~b&XMnNJG;2-|!JK?%Jg3Zu1Moo})EdhPodvR5!2@DRgX_Kt7k8P*- z?NQLB{JE6xtnk}G+S+M!SX{| zNV_mY@NF|#-iy6bz-rG^g9Yl`z^stnoi#0S-%qJc>7U6ELwk)o!5%Jy2eY!%6 zLH&%nVQ7dW&4$sO`M{viR_Z>0VO|+ex1KCk6N;-K^;hfOGlIx1l$|_FEao~%45mvo zH0q0dP84^E*u7&%vWjToE)x~ltxgEpw-ZW=bO?j|D*HX^T^awRE0)sZpUMX4n%%(y(gv!)Yj+pSFkT2W+=`3 zfcU9u_3{p$^WtrLrW8}Htz7O=X=7)DHBCInp_Ykw` zD}1M)4Ae-&x*=@#MFe-N5(BM`YBFc2awL@o(rRDyBeE!R*q$cXuFIl*uSlzzObQE7 zK_vP~T`D@-VnrvK5_JHMh&?DQ5~$5Nz!Aj2cL@VgQz9`wd5fQA;JlFZuwz|49k8C5 z!+dX4*>uG0zKs`#{S7M{uXkyM8oSEixpyxI?X+zt9^4;dScwH{ z!gwRgrX!|sFf*^rneM@!Wm^CXPfVl{1lns1*dxdH;M49+CfVZHAX_O;i8be%j$}Iq zI&>j-xgVrd)&!(3B?#)oSc;q)p$*S6uvmZc9tOFWEu||^&2^Lnp=Y#s69#LOBNVvT zZI^Wdt)XECTjZQbDtn8>USOr35FE?CB*jF&#UH6%;0k>-?|b}{t;Hk|A*)vz#GqIV ztoM}h+?X`LI?L629C+nBtq&2|<9Tv42|xR0olff5Rt0#9lHABNGmW6;A*m|0d#~^C zy44v$q=v!-6s(c|lK0pWCuKxrLD+?^l#HLnR9Fi0FxQ`B3B z!WR+jG#+V@GjM{KC~yk6i*;+)jTSP`6(5)=}uH$OOVYPTdS}ED!GjIbQ}H8 z)`;w&CK87@RqYRt-*FLwn_LioaCx~S?zNN3 zIG)FKj0uRfDH51?Miz=Ylk<9el;c811X)EWAQh}l7h?e<_Vp2#QeZwZK)4RAMTN@x z4O$S|nyiGUY|T8F5jMv_a0{}khU7HYrpiMNF9jH{k53$1fgexC!R_CkN=Gam^09^5V9tJWh$i=-do0iVavs6aj+O(_#Rj+^o%$Q;{*G3pv(Jx7-cHcPq<_ zxEopS0%Fp6I^_I!y|n9MTuzXIH5A#6OTe!bGI&l{20$lQpmfTQ4vL8k!qy4PtFUlN z;0SYBFwzjnTgQq?QqK^Ht~?k)5GpVX_B`xdN-$0K3d~4&Ko=%BTdJHX2i>VW3sg zfs8jpRWr=C*JE@jHc2| z1oLMMBB>+&jL3NGo<%5tD+HvH8G^Of_&Cp10(niy>b}znv8%HIvzh6!O?eHBY@bcs zz_R&>34t^U2nK|_*BJJ~cSdIjz+gjrmQA?I!t~FBM>-=&p~B{+WQUaFA*majsM#fE*A}Ne#9W(~#8f#>g#}I2^%7*hXE{i$Q*g zh;=Czdjf~pz&r@!v<7mG$*Zn5WNGlCRDr>d^n_v!Z4gOnCGbW@z+_UB_We?vHTGL~ zyp-e8kxLt>gTTg$cWS`i<43mYd!qH;8Xe+1b$hSxcRf8C)-j)4vz>c+O$FT^_Z|!w~2)T42>9|b+_X3>u-mettMlW6G;aMWqwO{94o_S zRxtdA%ZmXB(+*KGMzIK;ql0@n7xNsXfhCi+MDs}tNM)W#msbp5AEqM;^=h0TEZ&a}% ze>R_DMl(}6&cg$JcyE@-H*}p9gZRRGI-rgij2j3|b1WE*7@##~=Zz6oKw{N)*9T=% zlLI(-A*xrYQUl(dMU1_&o>??{XTPQvjpUj^oXH_iN;VnISI>~~7vQ_)pY}e($Z~v} z?ogzX<)z5sx|lTkuAyMMG?m~ae%_@X0VhjMJua}WDi%JQqLYKme@R^xdD6H|+^RSm zX7EzgAuzV$)oFyaip)z;x@IVwRtUL-+sR11gH_UNYc^EPZ|k%jDQ-&7h)PEx)H0#A zFN%R>Zk8B&-ChKycrr#P zBs?1$zd@(;I{g#L%HTskSu`}Gt;+6|O_+#HE!091R9jMEVl|8T3X&jB4e_O9X??Xf zaxaf70=PRxj?DuUnT@z|5_e-G&NoQqsRJxtV}+w|UWeKhFvodJ4ZwaIhh7{Ikfb85I_Nb8JTW&xs>c4=t~~jxebAv=7BkC+cA5Aoa{tHv0fmNUBC#? zpiB(3-WwNJ$$AC2)Uqyrl(EHx#QXH1DF0b_Wwki)){zddDYb)GK!qLkh;sKL?_q2{ zDCw*D{m}~_+~Sdsct`w+0}$95!3jBmSw8~1yobWP;WDBC4=OVFegy-XLWw^fM7jM} zuypRNBTGnZb|uB9Zg4&-%|c0|P;r>)6soCD)RgRn2qLl}%TLXc^XSwN`x?C$+PtPa zC%h)Th(3Y?8SZBe{6%sGxWljT-l%d{5K|v=PkTc$3blCo+<5YPzj}}?YRv$Q4TJ$m z&e;b`z`&UtK6Wr-7#AmQCChZa0_AhxL&zF46lTi(+ToPX>bXDl`Kp)*TmvyEq4PkD~s^#0pyvz>{{{GO*Sii<0b=x z?*rl5j>?V^kdhOu{Z=+wME>d|I97l8I!M*k1AB%FiiBpnFsoXbppO;IPmYk`aeD5W zSRTAwCRzqyb(0Vv29sHCN*TR4z9yFN0yW)_Qd|dA^H2anDkVNJXy&b)B#3tf8Fx49 zxa&|P%t0jnhY%{{8F1^A`iUqp_|zAT;%~?VafNeId9hLA2sYYYb0kU5r25LmZt!FS z^oUuRP6m}YWd;>5#TO%r#G;_Iyg?J1Q^n;ZvhwkX*<_MzA7&cv-@6x6m^q%T*CyCX zCKQNQWYy&G7}4}-*t;>9cj8sE4O$gi;cgP~49e#3{`MD%Z=fd{(dk>{-fT5xqt+DU zUy!?Z8-xV~(@?)lc6$TLrXwc#EgMKdSebSgE!LE`6GC-rXfhe-B2vh0R2ZaLSiy^L zUrnaCM{k75oQ%FP#fkaJn^{w1FhT_YJ3wNbgPg(DD6&cs&7&#hyL5d#=*gb`UNXb6 z97E*s8R-l6Nkue^$lf>%v{7yfM3DS2cp{%`&divQML;+|VXI|-WJ&W?yY zV`t9~?!C9GO!Q3F#H`oY1;OBi4m89iezR0947j0Cif}yWS`$quvTt3HhJmRgNUf9+ zt=u9gB6A$y0=$jTF{ua(;21k;Nwsj0%Ar04Y^h7CW086XCd4m?T8uS_L@I}klNW0) ziOIm#^r>h}t)h6+ifxZN|HK2N4706~dd3?fZoHu$c zg^+#LSRPxia7P3IBdSP+wJ;R8E`=2)sms#3sDOG@lw#8^?iB`#Jk4+zfub4C-%5-s zU7~+?8>}3WYG`yddFViQa%68uvYmDMV-pL>KYs6`nfNN#XXZ26`RwZ0@W`R5WM!1c zd^B3m_s?B6lVaMa%=Oi|Q~8z7%kwLx1BZIIl}B&RX18H#xG_iCyv|&5ptp@h{MaiQ z#8p`C5)@LPFES%>kdtYc^naZ@B5qN+OJp;cAVRr-vqd=!c!S^~CG3u0%0TI51%6E~ zczjr!V(f$itFc&$q<`9m*2DT@(VEy#J<>&G*$j$+Mr3!L5Ls2jTvtOQLe7neqbLBo z)eRcRRxcvaA}hI#g4WTtP^4%XLJ20Qrl3$uP@QJnpANnoIYoQ9H|7n<7YD>XW(<50 z*{L^DfYbg}L>es*uBMDIK%R?^gM1ma~M5pYGjEgf$pKxG+GYkI~2>|!#4 z7+}89o!w1XOMoG-TfuxpkCVaPuB3l^OC&^CTwY9Gzj_Nha3Sfa%cB=%>&QuU7Noq% ztwEId{?uhN5mT7hz(QNG?#?vic^&JTE-%&{iw052cJ;5OAQ?GX~ zMt+9f&Rb9t)Jn6fsr|Ax#~ly}OlSpuQ(W08!WGeWV~{y7{@D(rZ*+AkDkQjAgSv9j zfAK;qa0XP1qDm7lXvfe$H#>=g03{G{h515pqEWg35l`Z`@`XUCBA)f@_tzmIyEncS zR^r1S6dPA7K1cBmMa>9|;r_zfVloa(pFs==LqGECgZsOZolrzqoZ1rUW;5ovJ-ym{ zD+Fqr^PXiYH(6MSJPcu}pd40OO4%D!?{vIlyt?BGXv8NKp^=$bnEcD0ne9)XADeDF z+SOKGE|#-9$l!2fSDU$Sk`sr>kIs6U9i5G_-{d%~eulg_O{B&yvdPi)k+BH3GD(y{ zz8cOWnSB5aATwr2V}T?oA^`c@#-!H3K$hx-Fm^NMBA~aryI7c>syD~_X|+wUgFE7H zU}5zanCUskJKhR zTSKIpkv{N~Keo(zQk<7@M}wl8+8^KMr;3|FErgdrD;mg+>^Ix<{vFLAB+EE(VY-wf z{O;@*FIU*sp-837TbFeAX0Z1@mzSH%1qdv**W2!MBaoisTbQ$TrJGTXT-R3fcB! z8#_i^nI=)dT(Xx0rMvd@k>-RI%(}wB$R<1`(gAIkj3rbD1t$U^P$WPWclee4Gb~{N zkh;}mtaNgJ3=C(n2_6OcG-p!*!|_ z?ZiP8vCb4dYj^t&k87Xw&^ci6h>}Ih84ytzEhnK%D!g69b;YO)Og@c>1<3!5!y@5z>mY3(D_8qE4li$xy8R;E-k;p3nlT@H>dCaG=GK0-6&3gwTHV7 zek<48_&aqiB}@|aYs5KbCKpz;a%7I~N*7)k?0RKvj)0GrWLHl!*~^xb8!kvLzsqRTCeau4Of@vRP`0|otyeuW8ykL(*}G!fN-u*#~UN$}Wsp5t&S zNnAoTf{Q7!dJ$+txis^b)5kL^O%A#)yY!B@Es)Zq>Qme(262M-`;0$*r(bdC&tTc_ z|KbEsLv?*lBn#w39+Wx;rPb47UGx;fhX_#ZOBe#u`_W;dclJ})rs)L1~P@XY){rWWAYCY*C@S`!G#W7V%#uo~uS@hV|h2p8} z@7;KYMiU(pue==`ocj3-ufHqB_xP!Muw~#+GadDR*4S6qqkV9OC?Cul>rJ?H3^=to z_^A=y@GTK1_5C8BMz%9|SaY$JOIF2<7|vQx1W61CdZnfveyg{LKzg6xIIvU@OHG?w z)$k1j_86q36_8sgp@@T?mC4roXw;)}WD})kwkjU-VtR*X(h?7N=$*Rie8|34kNwTD zO|CUNBINn~p@Q7{p@Ku<{U^#Oa@6Tk5j|t!k`$?El(MuNK!;XaVqoMS*-2 z8!FsI2xTsbNv!_ko?v+CF=Cx66k*z-Avi`Wo_ISgc>~ScrJ_kG83XaVbF4#-<4N!SP4C z;JvlyKJJ?5Zoe*V!H2PynJ5+J&)~$HXk(MGd{g_ESF-E1QUAGMg$=gh-dyij7<{4u zZbzsOw?|qnB}<3m_BI7defZ|;uMeJ~7a>32{@hPLV(nF)@WDk-R-0u8ln<4U{ETbd zk3F<xIIZsnYVhoHwhR#Rl9yKymUH@sD6p?)+qk{v!75|5uwOGMh4nBFO)B zu?=?av(Of4#qBd+z~4#vINEb3^?eqeb)0JC{FkwRp9L6iwP6baTM*cSz!n6yAg~32 zEeLEuU<(3U5ZHpi76i5+umyoF2y8)M3j$jZ*n+?o1hycs1%WLH{1QRnzX6cfncT^z ReDeSR002ovPDHLkV1iv*c3J=c literal 0 HcmV?d00001 diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/PVPDR_SW_Passive_08@2x.png b/Hearthstone/Hearthstone/Assets/Assets.xcassets/oops.imageset/PVPDR_SW_Passive_08@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f3b57ea79acbb19728e7a7a0bf8d862dee511e GIT binary patch literal 203897 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

    &6i0KgeXj^vuc4|hJ%4h0` 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�Gqs6R$WYt1~?ixj3#pZd~WC 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

    |4^Up)Ou<&jY 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 AE5=N+td|X5;G|!m={b*pB!J36D+|LmQyc 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 iU>s!*XgC Date: Wed, 10 Aug 2022 23:21:54 +0300 Subject: [PATCH 24/53] Add UITests TODO for watermark --- Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift index c1073af..3f1c5a0 100644 --- a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift @@ -8,6 +8,8 @@ import Foundation import UIKit + +// TODO: Write UITests for it class WatermarkView: UIView { // MARK: - Subivew Initializers From a5d304db45f457d00fb302193cdaaa4c35d0f1f5 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 10 Aug 2022 23:52:33 +0300 Subject: [PATCH 25/53] add bar button to view --- Hearthstone/Hearthstone/Helpers/Extensions.swift | 13 +++++++++++++ .../CardsCollectionViewController.swift | 10 ++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 34f2e8a..ae02fbc 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -10,6 +10,19 @@ import UIKit // - MARK: UIKit Extensions + +extension UIViewController { + + func addButtons(right: [UIBarButtonItem]? = nil, left: [UIBarButtonItem]? = nil) { + if let right = right { + navigationItem.setRightBarButtonItems(right, animated: true) + } + if let left = left { + navigationItem.setLeftBarButtonItems(left, animated: true) + } + } +} + extension UIImageView { // TODO: Write Unit Tests diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 73dcccf..102988e 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -16,7 +16,8 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie super.viewDidLoad() collectionView.register(CardGridViewCell.self, forCellWithReuseIdentifier: "CardCell") - loadData() + setupBar() + refreshData() } override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { @@ -48,7 +49,12 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie card.select() } - func loadData() { + private func setupBar() { + let hsiaoFavButton = UIBarButtonItem(image: UIImage(systemName: "list.star"), style: .plain, target: self, action: nil) + addButtons(right: [hsiaoFavButton]) + } + + private func refreshData() { DispatchQueue.global().async { [weak self] in self?.service?.convert(from: "cards") { items in From dd60f7614d78418a203aafcc78d79e10904775ad Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 11 Aug 2022 22:05:20 +0300 Subject: [PATCH 26/53] add logic to button and write unit tests for service function --- .../Hearthstone/Helpers/Extensions.swift | 9 ++++ .../Services/CardsDataService.swift | 29 +++++++++---- .../ViewModels/CardViewModel.swift | 2 + .../CardsCollectionViewController.swift | 42 +++++++++++++++---- .../CardsTests/Helpers/CardsHelper.swift | 11 +++-- .../CardsTests/TestAllCardService.swift | 20 +++++++-- 6 files changed, 89 insertions(+), 24 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index ae02fbc..bdd9ca2 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -206,6 +206,15 @@ extension CardViewModel { } +extension CardViewModel { + + func isFeatured(_ card: Card) -> Bool { + + return card.rarity == "Legendary" && ((card.mechanics?.contains(["name": "Deathrattle"])) != nil) + } + +} + extension CardsDataService { enum ServiceType { case AllCards diff --git a/Hearthstone/Hearthstone/Services/CardsDataService.swift b/Hearthstone/Hearthstone/Services/CardsDataService.swift index 5d3fcab..3ee4d8f 100644 --- a/Hearthstone/Hearthstone/Services/CardsDataService.swift +++ b/Hearthstone/Hearthstone/Services/CardsDataService.swift @@ -7,28 +7,33 @@ import Foundation + +// MARK: - Service Protocols protocol LocalDownloadProtocol { - func getUrl(from name: String?, typed: String?) -> URL? func getJSONString(from url: URL) throws -> String? - } protocol JSONConverterProtocol { - func convert(from json: String, completion: @escaping([Card]) -> Void) - } -protocol ResultHadler { +protocol ResultHadlerProtocol { func handleParsed(_ cards: [Card]) -> [CardViewModel] + func featuresFilter(is activated: Bool, for cards: [CardViewModel]) -> [CardViewModel] } -struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHadler { + +struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHadlerProtocol { + + + // MARK: - Variables - let type: ServiceType + // Public + public let type: ServiceType - let extensionType = "json" + // Private + private let extensionType = "json" func convert(from json: String, completion: @escaping ([Card]) -> Void) { do { @@ -60,6 +65,14 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad return viewModels } + func featuresFilter(is activated: Bool, for cards: [CardViewModel]) -> [CardViewModel] { + if activated { + return cards.filter(\.isHsiaoFav) + } else { + return cards.filter { !$0.isHsiaoFav } + } + } + internal func getUrl(from name: String?, typed: String?) -> URL? { Bundle.main.url(forResource: name, withExtension: typed) diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index 734dca4..07159a1 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -12,6 +12,7 @@ struct CardViewModel { let title: String let image: String let isFavorite: Bool + var isHsiaoFav: Bool = false let select: () -> Void init(card: Card, select: @escaping () -> Void) { @@ -20,5 +21,6 @@ struct CardViewModel { // TODO: isFavorite should be initialized based on the Query in DB (Favorites table) isFavorite = false self.select = select + isHsiaoFav = isFeatured(card) } } diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 102988e..2627e17 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -9,8 +9,15 @@ import UIKit class CardsCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { - var cards = [CardViewModel]() - var service: CardsDataService? + // MARK: - Variables + + // Public + public var service: CardsDataService? + + // Private + private var filteredCards = [CardViewModel]() + private var isFeatured: Bool = false + private var hsiaoFavButton = UIBarButtonItem() override func viewDidLoad() { super.viewDidLoad() @@ -20,8 +27,10 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie refreshData() } + + // MARK: - CollectionView Functions override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - cards.count + filteredCards.count } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { @@ -36,31 +45,34 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CardCell", for: indexPath) as? CardGridViewCell else { return UICollectionViewCell() } - if cards.isEmpty { + if filteredCards.isEmpty { return cell } - cell.cardViewModel = cards[indexPath.row] + cell.cardViewModel = filteredCards[indexPath.row] return cell } override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - let card = cards[indexPath.row] + let card = filteredCards[indexPath.row] card.select() } + // MARK: - Setup Functions private func setupBar() { - let hsiaoFavButton = UIBarButtonItem(image: UIImage(systemName: "list.star"), style: .plain, target: self, action: nil) + hsiaoFavButton = UIBarButtonItem(image: UIImage(systemName: "star.fill"), style: .plain, target: self, action: #selector(filterFeatured)) addButtons(right: [hsiaoFavButton]) } + + // MARK: - Update Functions private func refreshData() { DispatchQueue.global().async { [weak self] in self?.service?.convert(from: "cards") { items in - self?.cards = self?.service?.handleParsed(items) ?? [] + self?.filteredCards = self?.service?.handleParsed(items) ?? [] DispatchQueue.main.async { - if self?.cards.count == 0 { + if self?.filteredCards.count == 0 { if let viewBounds = self?.view.bounds, let watermarkImage = UIImage(named: "oops") { self?.collectionView.backgroundView = WatermarkView(frame: viewBounds, with: "Oops no cards found!", image: watermarkImage) @@ -72,4 +84,16 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie } } + // MARK: - Obj-C Functions + @objc func filterFeatured() { + isFeatured = !isFeatured + hsiaoFavButton.image = UIImage(systemName: isFeatured ? "star.slash.fill" : "star.fill") + if isFeatured { + filteredCards = service?.featuresFilter(is: isFeatured, for: filteredCards) ?? [] + collectionView.reloadData() + } else { + refreshData() + } + } + } diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift index 26028ce..688004c 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift @@ -11,14 +11,19 @@ import Foundation /// /// Initializers for dummy cards. /// -func testCard(name: String? = nil, img: String? = nil) -> Card { - Card(cardId: nil, name: name, cardSet: nil, type: nil, rarity: nil, cost: nil, attack: nil, health: nil, text: nil, flavor: nil, artist: nil, collectible: nil, elite: nil, playerClass: nil, multiClassGroup: nil, classes: nil, img: img, imgGold: nil, locale: nil, mechanics: nil) +func testCard(name: String? = nil, img: String? = nil, rarity: String? = nil, mechanics: [[String: String]]? = nil) -> Card { + Card(cardId: nil, name: name, cardSet: nil, type: nil, rarity: rarity, cost: nil, attack: nil, health: nil, text: nil, flavor: nil, artist: nil, collectible: nil, elite: nil, playerClass: nil, multiClassGroup: nil, classes: nil, img: img, imgGold: nil, locale: nil, mechanics: mechanics) } func testCardArray() -> [Card] { var cards = [Card]() for i in 0...5 { - cards.append(testCard(name: "Card #\(i)", img: "a://whatever.image")) + + cards.append(testCard(name: "Card #\(i)", + img: "a://whatever.image", + rarity: i % 2 == 0 ? "Legendary" : "Basic", + mechanics: i % 2 == 0 ? [["name": "Deathrattle"]] : nil + )) } return cards diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift index 5791c03..582d497 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift @@ -11,15 +11,17 @@ import XCTest class TestAllCardService: XCTestCase { var sut: CardsDataService! + var elements: [Card]? override func setUpWithError() throws { try super.setUpWithError() sut = CardsDataService(type: .AllCards) + elements = testCardArray() } override func tearDownWithError() throws { sut = nil - + elements = nil try super.tearDownWithError() } @@ -30,13 +32,23 @@ class TestAllCardService: XCTestCase { } func testServiceReturnsAllCards() { - let testArray = testCardArray() - let cardVMs = sut.handleParsed(testArray) + let cardVMs = sut.handleParsed(elements ?? []) XCTAssertNotEqual(cardVMs.count, 0, "Service should return value > 0") - XCTAssertEqual(cardVMs.count, testArray.count, "Service should return as many VMs as the input") + XCTAssertEqual(cardVMs.count, elements?.count ?? 0, "Service should return as many VMs as the input") + + } + + func testServiceReturnsFeaturedOnly() { + + let cardVMs = sut.handleParsed(elements ?? []) + let featured = sut.featuresFilter(is: true, for: cardVMs) + + XCTAssertNotEqual(featured.count, 0, "Dummy data have provided 3 cards with Hsiao Favorite elements") + + XCTAssertEqual(featured.count, 3, "Dummy data have provided 3 cards with Hsiao Favorite elements") } From 286c5bcf48d05601ecbbcde2a07e65854cfae72f Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Sat, 13 Aug 2022 23:00:36 +0300 Subject: [PATCH 27/53] setup DB and attach service to views --- .../Hearthstone.xcodeproj/project.pbxproj | 20 ++++++++ Hearthstone/Hearthstone/AppDelegate.swift | 15 ++++++ .../FavoriteDB/Favorite+CoreDataClass.swift | 15 ++++++ .../Favorite+CoreDataProperties.swift | 25 +++++++++ .../Hearthstone.xcdatamodel/contents | 9 +++- .../Hearthstone/Helpers/Extensions.swift | 12 +++++ Hearthstone/Hearthstone/SceneDelegate.swift | 5 +- .../Services/FavoritesService.swift | 51 +++++++++++++++++++ .../CardsCollectionViewController.swift | 9 ++-- .../HomeTabViewController.swift | 8 ++- 10 files changed, 157 insertions(+), 12 deletions(-) create mode 100644 Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift create mode 100644 Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift create mode 100644 Hearthstone/Hearthstone/Services/FavoritesService.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 07033ab..c0d29f6 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -11,6 +11,9 @@ 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFile.swift */; }; 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */; }; 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */; }; + 30436AEE28A6DDA800BC0BFC /* FavoritesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AED28A6DDA800BC0BFC /* FavoritesService.swift */; }; + 30436AFA28A6E61400BC0BFC /* Favorite+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AF828A6E61400BC0BFC /* Favorite+CoreDataClass.swift */; }; + 30436AFB28A6E61400BC0BFC /* Favorite+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AF928A6E61400BC0BFC /* Favorite+CoreDataProperties.swift */; }; 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FED288EED28001D4559 /* AppDelegate.swift */; }; 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FEF288EED28001D4559 /* SceneDelegate.swift */; }; 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */; }; @@ -52,6 +55,9 @@ 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; + 30436AED28A6DDA800BC0BFC /* FavoritesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoritesService.swift; sourceTree = ""; }; + 30436AF828A6E61400BC0BFC /* Favorite+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Favorite+CoreDataClass.swift"; sourceTree = ""; }; + 30436AF928A6E61400BC0BFC /* Favorite+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Favorite+CoreDataProperties.swift"; sourceTree = ""; }; 305C6FEA288EED28001D4559 /* Hearthstone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Hearthstone.app; sourceTree = BUILT_PRODUCTS_DIR; }; 305C6FED288EED28001D4559 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 305C6FEF288EED28001D4559 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -126,6 +132,15 @@ path = HearthstoneUITests; sourceTree = ""; }; + 30436AF328A6E35600BC0BFC /* FavoriteDB */ = { + isa = PBXGroup; + children = ( + 30436AF828A6E61400BC0BFC /* Favorite+CoreDataClass.swift */, + 30436AF928A6E61400BC0BFC /* Favorite+CoreDataProperties.swift */, + ); + path = FavoriteDB; + sourceTree = ""; + }; 305C6FE1288EED28001D4559 = { isa = PBXGroup; children = ( @@ -149,6 +164,7 @@ 305C6FEC288EED28001D4559 /* Hearthstone */ = { isa = PBXGroup; children = ( + 30436AF328A6E35600BC0BFC /* FavoriteDB */, 30A0F274289C5A0700617094 /* Services */, 305C6FED288EED28001D4559 /* AppDelegate.swift */, 30818455288FCCBF00838205 /* Assets */, @@ -227,6 +243,7 @@ isa = PBXGroup; children = ( 30A0F275289C5AEA00617094 /* CardsDataService.swift */, + 30436AED28A6DDA800BC0BFC /* FavoritesService.swift */, ); path = Services; sourceTree = ""; @@ -390,7 +407,9 @@ buildActionMask = 2147483647; files = ( 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */, + 30436AFB28A6E61400BC0BFC /* Favorite+CoreDataProperties.swift in Sources */, 30A0F276289C5AEA00617094 /* CardsDataService.swift in Sources */, + 30436AFA28A6E61400BC0BFC /* Favorite+CoreDataClass.swift in Sources */, 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */, 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */, @@ -398,6 +417,7 @@ 309EFDD328A43C1400D3F753 /* WatermarkView.swift in Sources */, 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */, 30B71181288FE1BA00935D29 /* Card.swift in Sources */, + 30436AEE28A6DDA800BC0BFC /* FavoritesService.swift in Sources */, 3006060828939EFC00EF0BE4 /* CardsCollectionViewController.swift in Sources */, 30A8D5692892A67600849D1F /* Extensions.swift in Sources */, ); diff --git a/Hearthstone/Hearthstone/AppDelegate.swift b/Hearthstone/Hearthstone/AppDelegate.swift index bcb5df2..a5ef17c 100644 --- a/Hearthstone/Hearthstone/AppDelegate.swift +++ b/Hearthstone/Hearthstone/AppDelegate.swift @@ -15,6 +15,21 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Override point for customization after application launch. return true } + + // MARK: - Core Data Stuff + + lazy var persistentContainer: NSPersistentContainer = { + let container = NSPersistentContainer(name: "Hearthstone") + container.loadPersistentStores { description, error in + + if let error = error { + debugPrint("Unresolved error: \(error)") + } + + } + return container + + }() } diff --git a/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift new file mode 100644 index 0000000..e6c32b8 --- /dev/null +++ b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift @@ -0,0 +1,15 @@ +// +// Favorite+CoreDataClass.swift +// Hearthstone +// +// Created by Epsilon User on 12/8/22. +// +// + +import Foundation +import CoreData + + +public class Favorite: NSManagedObject { + +} diff --git a/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift new file mode 100644 index 0000000..42f5294 --- /dev/null +++ b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift @@ -0,0 +1,25 @@ +// +// Favorite+CoreDataProperties.swift +// Hearthstone +// +// Created by Epsilon User on 12/8/22. +// +// + +import Foundation +import CoreData + + +extension Favorite { + + @nonobjc public class func fetchRequest() -> NSFetchRequest { + return NSFetchRequest(entityName: "Favorite") + } + + @NSManaged public var cardID: String? + +} + +extension Favorite : Identifiable { + +} diff --git a/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents index 50d2514..4f9e37f 100644 --- a/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents +++ b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents @@ -1,4 +1,9 @@ - - + + + + + + + \ No newline at end of file diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index bdd9ca2..eaffe7c 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -256,6 +256,18 @@ extension HomeTabViewController { } +extension HomeTabViewController { + + func attachFavoritesService() -> FavoritesService { + guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { + fatalError("Unable to retrieve app delegate") + } + + return FavoritesService(with: appDelegate.persistentContainer) + } + +} + extension CardsCollectionViewController { func select(_ card: Card) { diff --git a/Hearthstone/Hearthstone/SceneDelegate.swift b/Hearthstone/Hearthstone/SceneDelegate.swift index 94c2b6c..4ece2e7 100644 --- a/Hearthstone/Hearthstone/SceneDelegate.swift +++ b/Hearthstone/Hearthstone/SceneDelegate.swift @@ -25,9 +25,6 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window?.windowScene = windowScene } - -// func sceneDidEnterBackground(_ scene: UIScene) { -// -// } + } diff --git a/Hearthstone/Hearthstone/Services/FavoritesService.swift b/Hearthstone/Hearthstone/Services/FavoritesService.swift new file mode 100644 index 0000000..0256145 --- /dev/null +++ b/Hearthstone/Hearthstone/Services/FavoritesService.swift @@ -0,0 +1,51 @@ +// +// FavoritesService.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 12/8/22. +// + +import Foundation +import CoreData + + +protocol StoreCardProtocol { + func save(_ card: Card) + func update(_ card: Card) + func delete(cardID: String)} + +struct FavoritesService: StoreCardProtocol { + + private let container: NSPersistentContainer + private let context: NSManagedObjectContext + + + init(with persistentContainer: NSPersistentContainer) { + container = persistentContainer + context = container.newBackgroundContext() + context.automaticallyMergesChangesFromParent = true + } + + func save(_ card: Card) { + context.perform { + let newFav = Favorite(context: context) + newFav.cardID = card.cardId + do { + try container.viewContext.save() + } catch { + debugPrint("Unable to store card with ID: \(card.cardId ?? "")") + } + } + + + } + + func update(_ card: Card) { + + } + + func delete(cardID: String) { + + } + +} diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 2627e17..ccb099a 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -12,7 +12,8 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie // MARK: - Variables // Public - public var service: CardsDataService? + public var dataService: CardsDataService? + public var databseService: FavoritesService? // Private private var filteredCards = [CardViewModel]() @@ -69,8 +70,8 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie private func refreshData() { DispatchQueue.global().async { [weak self] in - self?.service?.convert(from: "cards") { items in - self?.filteredCards = self?.service?.handleParsed(items) ?? [] + self?.dataService?.convert(from: "cards") { items in + self?.filteredCards = self?.dataService?.handleParsed(items) ?? [] DispatchQueue.main.async { if self?.filteredCards.count == 0 { if let viewBounds = self?.view.bounds, @@ -89,7 +90,7 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie isFeatured = !isFeatured hsiaoFavButton.image = UIImage(systemName: isFeatured ? "star.slash.fill" : "star.fill") if isFeatured { - filteredCards = service?.featuresFilter(is: isFeatured, for: filteredCards) ?? [] + filteredCards = dataService?.featuresFilter(is: isFeatured, for: filteredCards) ?? [] collectionView.reloadData() } else { refreshData() diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift index 7ca6e27..9caddfe 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift @@ -14,10 +14,14 @@ class HomeTabViewController: UITabBarController { initView() + let favoritesService = attachFavoritesService() + let allVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) - allVC.service = CardsDataService(type: .AllCards) + allVC.dataService = CardsDataService(type: .AllCards) + allVC.databseService = favoritesService let favVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) - favVC.service = CardsDataService(type: .Favorites) + favVC.dataService = CardsDataService(type: .Favorites) + favVC.databseService = favoritesService viewControllers = [ createTabNavigation(for: allVC, with: "Cards", and: "lanyardcard.fill"), From f8ae82df202e2042d6d41f7bc407fc12edf13b12 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 22 Aug 2022 12:31:03 +0300 Subject: [PATCH 28/53] make transition to detail view --- .../Hearthstone.xcodeproj/project.pbxproj | 8 +++++++ .../Hearthstone/Helpers/Extensions.swift | 5 ++-- .../Services/CardsDataService.swift | 8 ++++--- .../Views/Cells/CardGridViewCell.swift | 1 + .../Hearthstone/Views/Misc/CardView.swift | 24 +++++++++++++++++++ .../Views/Misc/WatermarkView.swift | 1 + .../ViewControllers/CardViewController.swift | 20 ++++++++++++++++ .../CardsCollectionViewController.swift | 2 +- 8 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 Hearthstone/Hearthstone/Views/Misc/CardView.swift create mode 100644 Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 07033ab..03bb8bb 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -20,10 +20,12 @@ 30818457288FCCCC00838205 /* cards.json in Resources */ = {isa = PBXBuildFile; fileRef = 30818456288FCCCB00838205 /* cards.json */; }; 309EFDD328A43C1400D3F753 /* WatermarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309EFDD228A43C1400D3F753 /* WatermarkView.swift */; }; 30A0F276289C5AEA00617094 /* CardsDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A0F275289C5AEA00617094 /* CardsDataService.swift */; }; + 30A128B028B3774500B66C80 /* CardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A128AF28B3774500B66C80 /* CardView.swift */; }; 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56428929D1B00849D1F /* CardViewModel.swift */; }; 30A8D5692892A67600849D1F /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D5682892A67600849D1F /* Extensions.swift */; }; 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */; }; 30A8DD3A28A142B800AF6A01 /* TestAllCardService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A8DD3928A142B800AF6A01 /* TestAllCardService.swift */; }; + 30AE80A728B35A18006E0C53 /* CardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30AE80A628B35A18006E0C53 /* CardViewController.swift */; }; 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B596172896DF3F00253379 /* CardGridViewCell.swift */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B88F80289319C5005D326E /* HomeTabViewController.swift */; }; @@ -64,10 +66,12 @@ 30818456288FCCCB00838205 /* cards.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = cards.json; path = Hearthstone/Assets/cards.json; sourceTree = SOURCE_ROOT; }; 309EFDD228A43C1400D3F753 /* WatermarkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatermarkView.swift; sourceTree = ""; }; 30A0F275289C5AEA00617094 /* CardsDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsDataService.swift; sourceTree = ""; }; + 30A128AF28B3774500B66C80 /* CardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardView.swift; sourceTree = ""; }; 30A8D56428929D1B00849D1F /* CardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModel.swift; sourceTree = ""; }; 30A8D5682892A67600849D1F /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardViewModel.swift; sourceTree = ""; }; 30A8DD3928A142B800AF6A01 /* TestAllCardService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestAllCardService.swift; sourceTree = ""; }; + 30AE80A628B35A18006E0C53 /* CardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewController.swift; sourceTree = ""; }; 30B596172896DF3F00253379 /* CardGridViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardGridViewCell.swift; sourceTree = ""; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 30B88F80289319C5005D326E /* HomeTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTabViewController.swift; sourceTree = ""; }; @@ -219,6 +223,7 @@ isa = PBXGroup; children = ( 309EFDD228A43C1400D3F753 /* WatermarkView.swift */, + 30A128AF28B3774500B66C80 /* CardView.swift */, ); path = Misc; sourceTree = ""; @@ -244,6 +249,7 @@ children = ( 30B88F80289319C5005D326E /* HomeTabViewController.swift */, 3006060728939EFC00EF0BE4 /* CardsCollectionViewController.swift */, + 30AE80A628B35A18006E0C53 /* CardViewController.swift */, ); path = ViewControllers; sourceTree = ""; @@ -396,7 +402,9 @@ 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */, 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, 309EFDD328A43C1400D3F753 /* WatermarkView.swift in Sources */, + 30A128B028B3774500B66C80 /* CardView.swift in Sources */, 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */, + 30AE80A728B35A18006E0C53 /* CardViewController.swift in Sources */, 30B71181288FE1BA00935D29 /* Card.swift in Sources */, 3006060828939EFC00EF0BE4 /* CardsCollectionViewController.swift in Sources */, 30A8D5692892A67600849D1F /* Extensions.swift in Sources */, diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index bdd9ca2..09ebd14 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -259,9 +259,10 @@ extension HomeTabViewController { extension CardsCollectionViewController { func select(_ card: Card) { - + let destVC = CardViewController() + destVC.card = card + show(destVC, sender: self) } - } extension CardGridViewCell { diff --git a/Hearthstone/Hearthstone/Services/CardsDataService.swift b/Hearthstone/Hearthstone/Services/CardsDataService.swift index 3ee4d8f..5344894 100644 --- a/Hearthstone/Hearthstone/Services/CardsDataService.swift +++ b/Hearthstone/Hearthstone/Services/CardsDataService.swift @@ -19,7 +19,7 @@ protocol JSONConverterProtocol { } protocol ResultHadlerProtocol { - func handleParsed(_ cards: [Card]) -> [CardViewModel] + func handleParsed(_ cards: [Card], from view: CardsCollectionViewController?) -> [CardViewModel] func featuresFilter(is activated: Bool, for cards: [CardViewModel]) -> [CardViewModel] } @@ -51,12 +51,14 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad } } - func handleParsed(_ cards: [Card]) -> [CardViewModel] { + func handleParsed(_ cards: [Card], from view: CardsCollectionViewController?) -> [CardViewModel] { var viewModels = [CardViewModel]() for card in cards { switch type { case .AllCards: - viewModels.append(CardViewModel(card: card, select: {})) + viewModels.append(CardViewModel(card: card, select: { + view?.select(card) + })) break default: break diff --git a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift index cdde55f..48a0246 100644 --- a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift +++ b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift @@ -38,6 +38,7 @@ class CardGridViewCell: UICollectionViewCell { } } + // MARK: - Initializers override init(frame: CGRect) { super.init(frame: frame) diff --git a/Hearthstone/Hearthstone/Views/Misc/CardView.swift b/Hearthstone/Hearthstone/Views/Misc/CardView.swift new file mode 100644 index 0000000..f8596a9 --- /dev/null +++ b/Hearthstone/Hearthstone/Views/Misc/CardView.swift @@ -0,0 +1,24 @@ +// +// CardView.swift +// Hearthstone +// +// Created by Epsilon User on 22/8/22. +// + +import UIKit + +class CardView: UIView { + + // MARK: - Subivew Initializers + + + // MARK: - Initializers + init(frame: CGRect, for card: Card) { + super.init(frame: frame) + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift index 3f1c5a0..92823c9 100644 --- a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift @@ -32,6 +32,7 @@ class WatermarkView: UIView { }() + // MARK: - Initializers init(frame: CGRect, with text: String, image: UIImage) { super.init(frame: frame) diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift new file mode 100644 index 0000000..1093c7d --- /dev/null +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -0,0 +1,20 @@ +// +// CardViewController.swift +// Hearthstone +// +// Created by Epsilon User on 22/8/22. +// + +import UIKit + +class CardViewController: UIViewController { + + var card: Card? + + override func viewDidLoad() { + super.viewDidLoad() + + title = card?.name + } + +} diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 2627e17..356540e 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -70,7 +70,7 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie DispatchQueue.global().async { [weak self] in self?.service?.convert(from: "cards") { items in - self?.filteredCards = self?.service?.handleParsed(items) ?? [] + self?.filteredCards = self?.service?.handleParsed(items, from: self) ?? [] DispatchQueue.main.async { if self?.filteredCards.count == 0 { if let viewBounds = self?.view.bounds, From e0a8249ad875cbf6ee60f681437103f35204f3c9 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 23 Aug 2022 10:14:25 +0300 Subject: [PATCH 29/53] setup initial detail view for cards --- .../Hearthstone/Helpers/Extensions.swift | 42 +++++++++++++++++++ .../ViewModels/CardViewModel.swift | 5 +++ .../Hearthstone/Views/Misc/CardView.swift | 40 +++++++++++++++++- .../ViewControllers/CardViewController.swift | 7 +++- .../CardsTests/TestAllCardService.swift | 4 +- 5 files changed, 94 insertions(+), 4 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 09ebd14..7116e1b 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -23,6 +23,20 @@ extension UIViewController { } } +extension UIButton.Configuration { + public static func typed(with text: String) -> UIButton.Configuration { + var config = UIButton.Configuration.filled() + config.contentInsets = NSDirectionalEdgeInsets(top: 5, leading: 5, bottom: 5, trailing: 5) + config.title = text + var background = UIButton.Configuration.plain().background + background.cornerRadius = 15 + background.backgroundColor = .typeColor + config.background = background + + return config + } +} + extension UIImageView { // TODO: Write Unit Tests @@ -69,6 +83,10 @@ extension UIColor { UIColor(red: 0.28, green: 0.21, blue: 0.11, alpha: 1.0) } + static var typeColor: UIColor { + UIColor(red: 0.48, green: 0.39, blue: 0.29, alpha: 1.0) + } + } extension UIView { @@ -215,6 +233,19 @@ extension CardViewModel { } +extension CardViewModel { + + init(card: Card) { + self.title = card.name ?? CardViewModel.placeholderTitle + self.image = card.img ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" + // TODO: isFavorite should be initialized based on the Query in DB (Favorites table) + self.isFavorite = false + self.select = {} + self.description = (card.flavor?.isEmpty ?? true) ? "No Information to show" : card.flavor + self.type = card.type + } +} + extension CardsDataService { enum ServiceType { case AllCards @@ -274,3 +305,14 @@ extension CardGridViewCell { } } + +extension CardView { + + func configure() { + cardImage.load(from: cardViewModel.getUrl(), mode: .scaleAspectFit) + cardName.text = cardViewModel.title + cardText.text = cardViewModel.description + cardType.configuration = .typed(with: cardViewModel.type ?? "") + } + +} diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index 07159a1..c16ae67 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -6,6 +6,7 @@ // import Foundation +import UIKit struct CardViewModel { @@ -13,7 +14,11 @@ struct CardViewModel { let image: String let isFavorite: Bool var isHsiaoFav: Bool = false + // MARK: - Collection View variables let select: () -> Void + // MARK: - Detail View variables + var description: String? + var type: String? init(card: Card, select: @escaping () -> Void) { self.title = card.name ?? CardViewModel.placeholderTitle diff --git a/Hearthstone/Hearthstone/Views/Misc/CardView.swift b/Hearthstone/Hearthstone/Views/Misc/CardView.swift index f8596a9..aa410e7 100644 --- a/Hearthstone/Hearthstone/Views/Misc/CardView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/CardView.swift @@ -10,12 +10,50 @@ import UIKit class CardView: UIView { // MARK: - Subivew Initializers + lazy var cardImage: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFit + return imageView + }() + lazy var cardName: UILabel = { + let label = UILabel() + label.font = UIFont(name: "MarkerFelt-Wide", size: 24.0) + label.textAlignment = .left + return label + }() + + lazy var cardText: UILabel = { + let label = UILabel() + label.font = UIFont(name: "MarkerFelt-Thin", size: 16.0) + label.numberOfLines = 0 + return label + }() + + lazy var cardType: UIButton = { + let button = UIButton() + return button + }() + + var cardViewModel: CardViewModel! { + didSet { + configure() + } + } // MARK: - Initializers - init(frame: CGRect, for card: Card) { + init(frame: CGRect, for card: Card?) { super.init(frame: frame) + addSubview(cardImage) + cardImage.addAnchors(wAnchor: widthAnchor, 0.7, cXAnchor: centerXAnchor, tAnchor: topAnchor, topConstant: 32) + addSubview(cardType) + cardType.addAnchors(lAnchor: leftAnchor, leftConstant: 12, tAnchor: cardImage.bottomAnchor, topConstant: 12) + addSubview(cardName) + cardName.addAnchors(lAnchor: leftAnchor, leftConstant: 12, tAnchor: cardType.bottomAnchor, topConstant: 4, rAnchor: rightAnchor, rightConstant: -12) + addSubview(cardText) + cardText.addAnchors(lAnchor: cardName.leftAnchor, leftConstant: 4, tAnchor: cardName.bottomAnchor, topConstant: 4, rAnchor: cardName.rightAnchor) + } required init?(coder: NSCoder) { diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift index 1093c7d..33b4328 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -14,7 +14,12 @@ class CardViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - title = card?.name + let cardView = CardView(frame: view.bounds, for: card) + guard let card = card else { + return + } + cardView.cardViewModel = CardViewModel(card: card) + view.addSubview(cardView) } } diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift index 582d497..42666cb 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift @@ -33,7 +33,7 @@ class TestAllCardService: XCTestCase { func testServiceReturnsAllCards() { - let cardVMs = sut.handleParsed(elements ?? []) + let cardVMs = sut.handleParsed(elements ?? [], from: nil) XCTAssertNotEqual(cardVMs.count, 0, "Service should return value > 0") @@ -43,7 +43,7 @@ class TestAllCardService: XCTestCase { func testServiceReturnsFeaturedOnly() { - let cardVMs = sut.handleParsed(elements ?? []) + let cardVMs = sut.handleParsed(elements ?? [], from: nil) let featured = sut.featuresFilter(is: true, for: cardVMs) XCTAssertNotEqual(featured.count, 0, "Dummy data have provided 3 cards with Hsiao Favorite elements") From e99d22b18aff39c61030bd2e0acbe3ea864f85d6 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 23 Aug 2022 10:43:27 +0300 Subject: [PATCH 30/53] write unit tests and add favourite button to detail view --- .../Hearthstone.xcodeproj/project.pbxproj | 4 ++ .../Hearthstone/Views/Misc/CardView.swift | 2 +- .../ViewControllers/CardViewController.swift | 15 +++++++- .../CardsTests/TestDetailCardViewModel.swift | 38 +++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 Hearthstone/HearthstoneTests/CardsTests/TestDetailCardViewModel.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 03bb8bb..e8b4b05 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFile.swift */; }; 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */; }; 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */; }; + 303E314228B4B5EA00A44FC8 /* TestDetailCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */; }; 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FED288EED28001D4559 /* AppDelegate.swift */; }; 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FEF288EED28001D4559 /* SceneDelegate.swift */; }; 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */; }; @@ -54,6 +55,7 @@ 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; + 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestDetailCardViewModel.swift; sourceTree = ""; }; 305C6FEA288EED28001D4559 /* Hearthstone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Hearthstone.app; sourceTree = BUILT_PRODUCTS_DIR; }; 305C6FED288EED28001D4559 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 305C6FEF288EED28001D4559 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -109,6 +111,7 @@ 30070E4128916E010062F0E6 /* Helpers */, 30A8D56A2892AA2000849D1F /* TestCardViewModel.swift */, 30A8DD3928A142B800AF6A01 /* TestAllCardService.swift */, + 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */, ); path = CardsTests; sourceTree = ""; @@ -417,6 +420,7 @@ files = ( 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */, 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */, + 303E314228B4B5EA00A44FC8 /* TestDetailCardViewModel.swift in Sources */, 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */, 30A8DD3A28A142B800AF6A01 /* TestAllCardService.swift in Sources */, ); diff --git a/Hearthstone/Hearthstone/Views/Misc/CardView.swift b/Hearthstone/Hearthstone/Views/Misc/CardView.swift index aa410e7..648dd61 100644 --- a/Hearthstone/Hearthstone/Views/Misc/CardView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/CardView.swift @@ -2,7 +2,7 @@ // CardView.swift // Hearthstone // -// Created by Epsilon User on 22/8/22. +// Created by Stavros Tsikinas on 22/8/22. // import UIKit diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift index 33b4328..0ec7f4f 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -9,11 +9,19 @@ import UIKit class CardViewController: UIViewController { - var card: Card? + // MARK: - Variables + + // Public + public var card: Card? + // Private + private var isFavorite: Bool = false + private var favoriteButton = UIBarButtonItem() override func viewDidLoad() { super.viewDidLoad() + setupBar() + let cardView = CardView(frame: view.bounds, for: card) guard let card = card else { return @@ -22,4 +30,9 @@ class CardViewController: UIViewController { view.addSubview(cardView) } + private func setupBar() { + favoriteButton = UIBarButtonItem(image: UIImage(systemName: "heart"), style: .plain, target: self, action: nil) + favoriteButton.tintColor = .red + addButtons(right: [favoriteButton]) + } } diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestDetailCardViewModel.swift b/Hearthstone/HearthstoneTests/CardsTests/TestDetailCardViewModel.swift new file mode 100644 index 0000000..9e55f87 --- /dev/null +++ b/Hearthstone/HearthstoneTests/CardsTests/TestDetailCardViewModel.swift @@ -0,0 +1,38 @@ +// +// TestDetailCardViewModel.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 23/8/22. +// + +import XCTest +@testable import Hearthstone + +class TestDetailCardViewModel: XCTestCase { + + override func setUpWithError() throws { + try super.setUpWithError() + } + + override func tearDownWithError() throws { + try super.tearDownWithError() + } + + func testDetailCardViewModelType() { + var card = Card() + card.type = "Hero" + + let vm = CardViewModel(card: card) + + XCTAssertTrue(vm.type != nil, "Card type has been defined and is: 'Hero'") + + } + + func testDetailCardViewModelDescription() { + let card = Card() + let vm = CardViewModel(card: card) + + XCTAssert(vm.description == "No Information to show", "Description should've been: 'No Information to show'") + } + +} From 2bf8da21b9d6dfcc769d4ed3bfd392bde53c3610 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 23 Aug 2022 11:38:17 +0300 Subject: [PATCH 31/53] add card view model to view controller --- .../Hearthstone/Helpers/Extensions.swift | 8 ++++++ .../ViewControllers/CardViewController.swift | 25 +++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 7116e1b..899489a 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -23,6 +23,14 @@ extension UIViewController { } } +extension UIBarButtonItem { + + public static func set(for expression: Bool, toggledName: String, nonToggledName: String) -> UIImage? { + UIImage(systemName: expression ? toggledName : nonToggledName) + } + +} + extension UIButton.Configuration { public static func typed(with text: String) -> UIButton.Configuration { var config = UIButton.Configuration.filled() diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift index 0ec7f4f..a4358bd 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -14,25 +14,40 @@ class CardViewController: UIViewController { // Public public var card: Card? // Private - private var isFavorite: Bool = false + private var cardViewModel: CardViewModel! + private var isFavorite: Bool = true private var favoriteButton = UIBarButtonItem() override func viewDidLoad() { super.viewDidLoad() - - setupBar() let cardView = CardView(frame: view.bounds, for: card) guard let card = card else { return } - cardView.cardViewModel = CardViewModel(card: card) + + cardViewModel = CardViewModel(card: card) + isFavorite = cardViewModel.isFavorite + + cardView.cardViewModel = cardViewModel view.addSubview(cardView) + + setupBar() } + // MARK: - Setup Functions private func setupBar() { - favoriteButton = UIBarButtonItem(image: UIImage(systemName: "heart"), style: .plain, target: self, action: nil) + favoriteButton = UIBarButtonItem(image: UIBarButtonItem.set(for: isFavorite, toggledName: "heart.fill", nonToggledName: "heart"), style: .plain, target: self, action: #selector(addToFavorites)) favoriteButton.tintColor = .red addButtons(right: [favoriteButton]) } + + // MARK: - Update Functions + + + // MARK: - Obj-C Functions + @objc func addToFavorites() { + isFavorite = !isFavorite + favoriteButton.image = UIBarButtonItem.set(for: isFavorite, toggledName: "heart.fill", nonToggledName: "heart") + } } From f066165f0fd777f7c5bf61141dba05ad1e52a2fe Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 23 Aug 2022 13:48:38 +0300 Subject: [PATCH 32/53] polish cardview --- .../SeparatorColor.colorset/Contents.json | 38 +++++++++++++++++++ .../Hearthstone/Helpers/Extensions.swift | 10 ++++- .../Hearthstone/Views/Misc/CardView.swift | 5 ++- 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 Hearthstone/Hearthstone/Assets/Assets.xcassets/SeparatorColor.colorset/Contents.json diff --git a/Hearthstone/Hearthstone/Assets/Assets.xcassets/SeparatorColor.colorset/Contents.json b/Hearthstone/Hearthstone/Assets/Assets.xcassets/SeparatorColor.colorset/Contents.json new file mode 100644 index 0000000..b60e27f --- /dev/null +++ b/Hearthstone/Hearthstone/Assets/Assets.xcassets/SeparatorColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.161", + "green" : "0.113", + "red" : "0.131" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.251", + "green" : "0.251", + "red" : "0.251" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 899489a..caf58b0 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -99,6 +99,14 @@ extension UIColor { extension UIView { + func addSeparator() -> UIView { + let separatorView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) + separatorView.backgroundColor = UIColor(named: "SeparatorColor") + addSubview(separatorView) + + return separatorView + } + /// Make view rounded (dashboard item) func cardView(of radius: CGFloat, with shadow: UIColor? = nil) { layer.cornerRadius = radius @@ -164,7 +172,7 @@ extension UIView { } if let heightConstant = heightConstant { - widthAnchor.constraint(equalToConstant: heightConstant).isActive = true + heightAnchor.constraint(equalToConstant: heightConstant).isActive = true } } diff --git a/Hearthstone/Hearthstone/Views/Misc/CardView.swift b/Hearthstone/Hearthstone/Views/Misc/CardView.swift index 648dd61..2a0dc96 100644 --- a/Hearthstone/Hearthstone/Views/Misc/CardView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/CardView.swift @@ -47,8 +47,11 @@ class CardView: UIView { addSubview(cardImage) cardImage.addAnchors(wAnchor: widthAnchor, 0.7, cXAnchor: centerXAnchor, tAnchor: topAnchor, topConstant: 32) + + let separatorView = addSeparator() + separatorView.addAnchors(wAnchor: widthAnchor, 0.95, cXAnchor: centerXAnchor, tAnchor: cardImage.bottomAnchor, topConstant: 8, heightConstant: 1.0) addSubview(cardType) - cardType.addAnchors(lAnchor: leftAnchor, leftConstant: 12, tAnchor: cardImage.bottomAnchor, topConstant: 12) + cardType.addAnchors(lAnchor: leftAnchor, leftConstant: 12, tAnchor: separatorView.bottomAnchor, topConstant: 16) addSubview(cardName) cardName.addAnchors(lAnchor: leftAnchor, leftConstant: 12, tAnchor: cardType.bottomAnchor, topConstant: 4, rAnchor: rightAnchor, rightConstant: -12) addSubview(cardText) From 707f33ebeb13ba6d849e1ae2d528ab3be00dc21d Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 23 Aug 2022 13:55:37 +0300 Subject: [PATCH 33/53] manually resolve conflict with handleParsed function --- .../Views/ViewControllers/CardsCollectionViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index ccb099a..2d85a96 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -71,7 +71,7 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie DispatchQueue.global().async { [weak self] in self?.dataService?.convert(from: "cards") { items in - self?.filteredCards = self?.dataService?.handleParsed(items) ?? [] + self?.filteredCards = self?.dataService?.handleParsed(items, from: self) ?? [] DispatchQueue.main.async { if self?.filteredCards.count == 0 { if let viewBounds = self?.view.bounds, From 7aa9debfdb8dba9bef49502439d821a17afc8cea Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Tue, 23 Aug 2022 16:16:55 +0300 Subject: [PATCH 34/53] Persist isfavorite for detail view --- Hearthstone/Hearthstone/AppDelegate.swift | 1 + .../Hearthstone.xcdatamodel/contents | 2 +- .../Hearthstone/Helpers/Extensions.swift | 7 ++ .../Services/FavoritesService.swift | 77 +++++++++++++++---- .../ViewControllers/CardViewController.swift | 36 +++++++-- 5 files changed, 102 insertions(+), 21 deletions(-) diff --git a/Hearthstone/Hearthstone/AppDelegate.swift b/Hearthstone/Hearthstone/AppDelegate.swift index a5ef17c..f9b7fcb 100644 --- a/Hearthstone/Hearthstone/AppDelegate.swift +++ b/Hearthstone/Hearthstone/AppDelegate.swift @@ -27,6 +27,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } } + container.viewContext.automaticallyMergesChangesFromParent = true return container }() diff --git a/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents index 4f9e37f..bff48c5 100644 --- a/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents +++ b/Hearthstone/Hearthstone/Hearthstone.xcdatamodeld/Hearthstone.xcdatamodel/contents @@ -4,6 +4,6 @@ - + \ No newline at end of file diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 79c61a9..6243435 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -13,6 +13,12 @@ import UIKit extension UIViewController { + func showInfoAlert(with message: String) { + let alert = UIAlertController(title: "Info", message: message, preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "OK", style: .default)) + present(alert, animated: true) + } + func addButtons(right: [UIBarButtonItem]? = nil, left: [UIBarButtonItem]? = nil) { if let right = right { navigationItem.setRightBarButtonItems(right, animated: true) @@ -320,6 +326,7 @@ extension CardsCollectionViewController { func select(_ card: Card) { let destVC = CardViewController() destVC.card = card + destVC.favoriteService = databseService show(destVC, sender: self) } } diff --git a/Hearthstone/Hearthstone/Services/FavoritesService.swift b/Hearthstone/Hearthstone/Services/FavoritesService.swift index 0256145..e52f12e 100644 --- a/Hearthstone/Hearthstone/Services/FavoritesService.swift +++ b/Hearthstone/Hearthstone/Services/FavoritesService.swift @@ -10,42 +10,91 @@ import CoreData protocol StoreCardProtocol { - func save(_ card: Card) + func save(_ cardID: String, completion: @escaping(Bool) -> Void) func update(_ card: Card) - func delete(cardID: String)} + func delete(cardID: String, completion: @escaping(Bool) -> Void) +} + +protocol ReadCardProtocol { + func exists(with id: String, completion: @escaping(Bool) -> Void) +} -struct FavoritesService: StoreCardProtocol { +struct FavoritesService: StoreCardProtocol, ReadCardProtocol { private let container: NSPersistentContainer private let context: NSManagedObjectContext init(with persistentContainer: NSPersistentContainer) { + // Create context that performs on the background, in order to avoid UI lags container = persistentContainer context = container.newBackgroundContext() - context.automaticallyMergesChangesFromParent = true } - func save(_ card: Card) { + func save(_ cardID: String, completion: @escaping(Bool) -> Void) { context.perform { - let newFav = Favorite(context: context) - newFav.cardID = card.cardId - do { - try container.viewContext.save() - } catch { - debugPrint("Unable to store card with ID: \(card.cardId ?? "")") + exists(with: cardID) { inDB in + if !inDB { + let newFav = Favorite(context: context) + newFav.cardID = cardID + do { + try context.save() + completion(true) + } catch { + debugPrint("Unable to store card with ID: \(cardID)") + completion(false) + } + } else { + debugPrint("\(cardID) already exists in DB") + completion(false) + } } } - - } func update(_ card: Card) { } - func delete(cardID: String) { + func delete(cardID: String, completion: @escaping(Bool) -> Void) { + context.perform { + exists(with: cardID) { inDB in + if inDB { + // Use different approach from save, since we are not have an existing NSManagedObject (Favorite) + let fetchRequest = NSFetchRequest(entityName: "Favorite") + fetchRequest.predicate = NSPredicate(format: "cardID = %@", cardID) + let request = NSBatchDeleteRequest(fetchRequest: fetchRequest) + + do { + try context.execute(request) + try context.save() + completion(true) + } catch { + debugPrint("Unable to delete card with ID: \(cardID)") + completion(false) + } + } else { + debugPrint("\(cardID) doesn't exists in DB") + completion(false) + } + } + } + } + + func exists(with id: String, completion: @escaping(Bool) -> Void) { + context.perform { + let request = Favorite.fetchRequest() + request.predicate = NSPredicate(format: "cardID = %@", id) + do { + let count = try context.count(for: request) + completion(count > 0) + } catch { + debugPrint("Unable to read if exists card: \(id)") + completion(false) + } + } } + } diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift index a4358bd..0714078 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -13,6 +13,7 @@ class CardViewController: UIViewController { // Public public var card: Card? + public var favoriteService: FavoritesService? // Private private var cardViewModel: CardViewModel! private var isFavorite: Bool = true @@ -37,17 +38,40 @@ class CardViewController: UIViewController { // MARK: - Setup Functions private func setupBar() { - favoriteButton = UIBarButtonItem(image: UIBarButtonItem.set(for: isFavorite, toggledName: "heart.fill", nonToggledName: "heart"), style: .plain, target: self, action: #selector(addToFavorites)) - favoriteButton.tintColor = .red - addButtons(right: [favoriteButton]) + favoriteService?.exists(with: card?.cardId ?? "") { [weak self] exists in + self?.isFavorite = exists + DispatchQueue.main.async { + self?.favoriteButton = UIBarButtonItem(image: UIBarButtonItem.set(for: self?.isFavorite ?? false, toggledName: "heart.fill", nonToggledName: "heart"), style: .plain, target: self, action: #selector(self?.toggleFavorite)) + self?.favoriteButton.tintColor = .red + self?.addButtons(right: [self?.favoriteButton ?? UIBarButtonItem()]) + } + } } // MARK: - Update Functions + private func updateFavorite(from success: Bool) { + isFavorite = success + favoriteButton.image = UIBarButtonItem.set(for: isFavorite, toggledName: "heart.fill", nonToggledName: "heart") + } // MARK: - Obj-C Functions - @objc func addToFavorites() { - isFavorite = !isFavorite - favoriteButton.image = UIBarButtonItem.set(for: isFavorite, toggledName: "heart.fill", nonToggledName: "heart") + @objc func toggleFavorite() { + if !isFavorite { + favoriteService?.save(card?.cardId ?? "") { [weak self] success in + DispatchQueue.main.async { + self?.showInfoAlert(with: success ? "Card added to Favorites" : "Unable to add card to Favorites") + self?.updateFavorite(from: success) + } + } + } else { + favoriteService?.delete(cardID: card?.cardId ?? "") { [weak self] success in + DispatchQueue.main.async { + self?.showInfoAlert(with: success ? "Card deleted from Favorites" : "Unable to delete card to Favorites") + self?.updateFavorite(from: !success) + } + + } + } } } From 26c3593f274fafb15074a293aefc1ebc99c69937 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 24 Aug 2022 11:20:20 +0300 Subject: [PATCH 35/53] setup TestFavoritesService and write unit tests for saving favorites --- .../Hearthstone.xcodeproj/project.pbxproj | 28 ++++++++- .../Services/FavoritesService.swift | 31 ++++----- .../Helpers/TestCoreDataService.swift | 35 +++++++++++ .../FavoritesTests/TestFavoritesCRUD.swift | 63 +++++++++++++++++++ 4 files changed, 141 insertions(+), 16 deletions(-) create mode 100644 Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift create mode 100644 Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index b16a5f9..38a541a 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -11,10 +11,12 @@ 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFile.swift */; }; 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */; }; 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */; }; + 302FF91728B5FE7A00C9D114 /* TestFavoritesCRUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302FF91628B5FE7A00C9D114 /* TestFavoritesCRUD.swift */; }; + 302FF91A28B6023C00C9D114 /* TestCoreDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302FF91928B6023C00C9D114 /* TestCoreDataService.swift */; }; + 303E314228B4B5EA00A44FC8 /* TestDetailCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */; }; 30436AEE28A6DDA800BC0BFC /* FavoritesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AED28A6DDA800BC0BFC /* FavoritesService.swift */; }; 30436AFA28A6E61400BC0BFC /* Favorite+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AF828A6E61400BC0BFC /* Favorite+CoreDataClass.swift */; }; 30436AFB28A6E61400BC0BFC /* Favorite+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AF928A6E61400BC0BFC /* Favorite+CoreDataProperties.swift */; }; - 303E314228B4B5EA00A44FC8 /* TestDetailCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */; }; 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FED288EED28001D4559 /* AppDelegate.swift */; }; 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FEF288EED28001D4559 /* SceneDelegate.swift */; }; 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */; }; @@ -58,10 +60,12 @@ 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; + 302FF91628B5FE7A00C9D114 /* TestFavoritesCRUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestFavoritesCRUD.swift; sourceTree = ""; }; + 302FF91928B6023C00C9D114 /* TestCoreDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCoreDataService.swift; sourceTree = ""; }; + 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestDetailCardViewModel.swift; sourceTree = ""; }; 30436AED28A6DDA800BC0BFC /* FavoritesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoritesService.swift; sourceTree = ""; }; 30436AF828A6E61400BC0BFC /* Favorite+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Favorite+CoreDataClass.swift"; sourceTree = ""; }; 30436AF928A6E61400BC0BFC /* Favorite+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Favorite+CoreDataProperties.swift"; sourceTree = ""; }; - 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestDetailCardViewModel.swift; sourceTree = ""; }; 305C6FEA288EED28001D4559 /* Hearthstone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Hearthstone.app; sourceTree = BUILT_PRODUCTS_DIR; }; 305C6FED288EED28001D4559 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 305C6FEF288EED28001D4559 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -139,6 +143,23 @@ path = HearthstoneUITests; sourceTree = ""; }; + 302FF91528B5FE2F00C9D114 /* FavoritesTests */ = { + isa = PBXGroup; + children = ( + 302FF91828B6020400C9D114 /* Helpers */, + 302FF91628B5FE7A00C9D114 /* TestFavoritesCRUD.swift */, + ); + path = FavoritesTests; + sourceTree = ""; + }; + 302FF91828B6020400C9D114 /* Helpers */ = { + isa = PBXGroup; + children = ( + 302FF91928B6023C00C9D114 /* TestCoreDataService.swift */, + ); + path = Helpers; + sourceTree = ""; + }; 30436AF328A6E35600BC0BFC /* FavoriteDB */ = { isa = PBXGroup; children = ( @@ -190,6 +211,7 @@ 305C7006288EED2C001D4559 /* HearthstoneTests */ = { isa = PBXGroup; children = ( + 302FF91528B5FE2F00C9D114 /* FavoritesTests */, 30070E4028916DF50062F0E6 /* CardsTests */, ); path = HearthstoneTests; @@ -439,8 +461,10 @@ buildActionMask = 2147483647; files = ( 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */, + 302FF91A28B6023C00C9D114 /* TestCoreDataService.swift in Sources */, 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */, 303E314228B4B5EA00A44FC8 /* TestDetailCardViewModel.swift in Sources */, + 302FF91728B5FE7A00C9D114 /* TestFavoritesCRUD.swift in Sources */, 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */, 30A8DD3A28A142B800AF6A01 /* TestAllCardService.swift in Sources */, ); diff --git a/Hearthstone/Hearthstone/Services/FavoritesService.swift b/Hearthstone/Hearthstone/Services/FavoritesService.swift index e52f12e..155aa0f 100644 --- a/Hearthstone/Hearthstone/Services/FavoritesService.swift +++ b/Hearthstone/Hearthstone/Services/FavoritesService.swift @@ -19,26 +19,26 @@ protocol ReadCardProtocol { func exists(with id: String, completion: @escaping(Bool) -> Void) } -struct FavoritesService: StoreCardProtocol, ReadCardProtocol { +class FavoritesService: StoreCardProtocol, ReadCardProtocol { private let container: NSPersistentContainer - private let context: NSManagedObjectContext + let context: NSManagedObjectContext init(with persistentContainer: NSPersistentContainer) { - // Create context that performs on the background, in order to avoid UI lags container = persistentContainer + // Create context that performs on the background, in order to avoid UI lags context = container.newBackgroundContext() } func save(_ cardID: String, completion: @escaping(Bool) -> Void) { - context.perform { - exists(with: cardID) { inDB in + context.perform { [weak self] in + self?.exists(with: cardID) { inDB in if !inDB { - let newFav = Favorite(context: context) + let newFav = Favorite(context: self!.context) newFav.cardID = cardID do { - try context.save() + try self?.context.save() completion(true) } catch { debugPrint("Unable to store card with ID: \(cardID)") @@ -57,8 +57,8 @@ struct FavoritesService: StoreCardProtocol, ReadCardProtocol { } func delete(cardID: String, completion: @escaping(Bool) -> Void) { - context.perform { - exists(with: cardID) { inDB in + context.perform { [weak self] in + self?.exists(with: cardID) { inDB in if inDB { // Use different approach from save, since we are not have an existing NSManagedObject (Favorite) let fetchRequest = NSFetchRequest(entityName: "Favorite") @@ -66,8 +66,8 @@ struct FavoritesService: StoreCardProtocol, ReadCardProtocol { let request = NSBatchDeleteRequest(fetchRequest: fetchRequest) do { - try context.execute(request) - try context.save() + try self?.context.execute(request) + try self?.context.save() completion(true) } catch { debugPrint("Unable to delete card with ID: \(cardID)") @@ -82,12 +82,15 @@ struct FavoritesService: StoreCardProtocol, ReadCardProtocol { } func exists(with id: String, completion: @escaping(Bool) -> Void) { - context.perform { + context.perform { [weak self] in let request = Favorite.fetchRequest() request.predicate = NSPredicate(format: "cardID = %@", id) do { - let count = try context.count(for: request) - completion(count > 0) + if let count = try self?.context.count(for: request) { + completion(count > 0) + } else { + completion(true) + } } catch { debugPrint("Unable to read if exists card: \(id)") completion(false) diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift b/Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift new file mode 100644 index 0000000..b853c78 --- /dev/null +++ b/Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift @@ -0,0 +1,35 @@ +// +// TestCoreDataService.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 24/8/22. +// + + +import CoreData +@testable import Hearthstone + +class TestCoreDataService: FavoritesService { + + init() { + let inMemoryDescription = NSPersistentStoreDescription() + // Create inMemoryStoreType for testing purposes, to avoid "messing" with real DB + inMemoryDescription.type = NSInMemoryStoreType + + let container = NSPersistentContainer(name: "Hearthstone") + + container.persistentStoreDescriptions = [inMemoryDescription] + + container.loadPersistentStores { _, error in + if let error = error { + debugPrint("Couldn't load stores with error: \(error.localizedDescription)") + } + } + + super.init(with: container) + + } + + + +} diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift new file mode 100644 index 0000000..62dcd04 --- /dev/null +++ b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift @@ -0,0 +1,63 @@ +// +// TestFavoritesCRUD.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 24/8/22. +// + +import XCTest +@testable import Hearthstone + +class TestFavoritesCRUD: XCTestCase { + + var sut: TestCoreDataService! + + override func setUpWithError() throws { + try super.setUpWithError() + sut = TestCoreDataService() + } + + override func tearDownWithError() throws { + try super.tearDownWithError() + sut = nil + } + + func testNewSaveToFavorites() { + + let cardID = "ANewCard_01" + + expectation(forNotification: .NSManagedObjectContextDidSave, object: sut.context) + + sut.context.perform { [weak self] in + self?.sut.save(cardID) { saved in + XCTAssertTrue(saved) + } + } + + waitForExpectations(timeout: 2.0) { error in + XCTAssertNil(error, "Save unsuccessful") + } + + } + + func testUnableToSaveDuplicate() { + let cardID = "AnExistingCard_02" + + expectation(forNotification: .NSManagedObjectContextDidSave, object: sut.context) + + sut.context.perform { [weak self] in + self?.sut.save(cardID) { saved in + XCTAssertTrue(saved) + self?.sut.save(cardID) { savedAgain in + XCTAssertFalse(savedAgain) + } + } + + } + + waitForExpectations(timeout: 5.0) { error in + XCTAssertNil(error, "Save and Exists unsuccessful") + } + } + +} From 68aea22a913b803504a3ee84a96a26c6254e3053 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 24 Aug 2022 11:39:20 +0300 Subject: [PATCH 36/53] unit test existing functionality --- .../FavoritesTests/TestFavoritesCRUD.swift | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift index 62dcd04..6b93eec 100644 --- a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift +++ b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift @@ -60,4 +60,24 @@ class TestFavoritesCRUD: XCTestCase { } } + func testFavoriteExists() { + let cardID = "AnExistingCard_03" + + expectation(forNotification: .NSManagedObjectContextDidSave, object: sut.context) + + sut.context.perform { [weak self] in + self?.sut.save(cardID) { saved in + XCTAssertTrue(saved) + self?.sut.exists(with: cardID) { exists in + XCTAssertTrue(exists) + } + } + + } + + waitForExpectations(timeout: 5.0) { error in + XCTAssertNil(error, "Exists unsuccessful") + } + } + } From 335d6f1b784fda429043fc7d31f2bb6cb698889f Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 24 Aug 2022 12:25:04 +0300 Subject: [PATCH 37/53] code unit test for deletion and improve delete function from DBService --- .../Services/FavoritesService.swift | 30 +++++++++---------- .../FavoritesTests/TestFavoritesCRUD.swift | 20 +++++++++++++ 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/Hearthstone/Hearthstone/Services/FavoritesService.swift b/Hearthstone/Hearthstone/Services/FavoritesService.swift index 155aa0f..92e01ae 100644 --- a/Hearthstone/Hearthstone/Services/FavoritesService.swift +++ b/Hearthstone/Hearthstone/Services/FavoritesService.swift @@ -58,25 +58,25 @@ class FavoritesService: StoreCardProtocol, ReadCardProtocol { func delete(cardID: String, completion: @escaping(Bool) -> Void) { context.perform { [weak self] in - self?.exists(with: cardID) { inDB in - if inDB { - // Use different approach from save, since we are not have an existing NSManagedObject (Favorite) - let fetchRequest = NSFetchRequest(entityName: "Favorite") - fetchRequest.predicate = NSPredicate(format: "cardID = %@", cardID) - let request = NSBatchDeleteRequest(fetchRequest: fetchRequest) - - do { - try self?.context.execute(request) - try self?.context.save() - completion(true) - } catch { - debugPrint("Unable to delete card with ID: \(cardID)") - completion(false) + // Use different approach from save, since we are not have an existing NSManagedObject (Favorite) + let fetchRequest = NSFetchRequest(entityName: "Favorite") + fetchRequest.predicate = NSPredicate(format: "cardID = %@", cardID) + fetchRequest.fetchLimit = 1 + + do { + if let favorites = try self?.context.fetch(fetchRequest) { + for favorite in favorites { + self?.context.delete(favorite as? NSManagedObject ?? NSManagedObject()) } + try self?.context.save() + completion(true) } else { - debugPrint("\(cardID) doesn't exists in DB") completion(false) } + + } catch { + debugPrint("Unable to delete card with ID: \(cardID)") + completion(false) } } } diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift index 6b93eec..b3f9d31 100644 --- a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift +++ b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift @@ -80,4 +80,24 @@ class TestFavoritesCRUD: XCTestCase { } } + func testFavoriteDelete() { + let cardID = "CardToDelete_04" + + expectation(forNotification: .NSManagedObjectContextDidSave, object: sut.context) + + sut.context.perform { [weak self] in + self?.sut.save(cardID) { saved in + XCTAssertTrue(saved) + self?.sut.delete(cardID: cardID) { success in + XCTAssertTrue(success) + } + } + + } + + waitForExpectations(timeout: 5.0) { error in + XCTAssertNil(error, "Delete unsuccessful") + } + } + } From 89595e83dad8ba8857b20c671833b06e0cbcb950 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 24 Aug 2022 12:37:24 +0300 Subject: [PATCH 38/53] remove unnecessary functionality in DBService --- .../Hearthstone/Services/FavoritesService.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Hearthstone/Hearthstone/Services/FavoritesService.swift b/Hearthstone/Hearthstone/Services/FavoritesService.swift index 92e01ae..88907be 100644 --- a/Hearthstone/Hearthstone/Services/FavoritesService.swift +++ b/Hearthstone/Hearthstone/Services/FavoritesService.swift @@ -11,12 +11,12 @@ import CoreData protocol StoreCardProtocol { func save(_ cardID: String, completion: @escaping(Bool) -> Void) - func update(_ card: Card) func delete(cardID: String, completion: @escaping(Bool) -> Void) } protocol ReadCardProtocol { func exists(with id: String, completion: @escaping(Bool) -> Void) + func getFavorites(completion: @escaping([Card]) -> Void) } class FavoritesService: StoreCardProtocol, ReadCardProtocol { @@ -52,10 +52,6 @@ class FavoritesService: StoreCardProtocol, ReadCardProtocol { } } - func update(_ card: Card) { - - } - func delete(cardID: String, completion: @escaping(Bool) -> Void) { context.perform { [weak self] in // Use different approach from save, since we are not have an existing NSManagedObject (Favorite) @@ -96,8 +92,12 @@ class FavoritesService: StoreCardProtocol, ReadCardProtocol { completion(false) } } + } + + func getFavorites(completion: @escaping([Card]) -> Void) { } + } From fbf6fffeec6612fce6fd3eb4032c48acf65678b4 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 24 Aug 2022 13:12:56 +0300 Subject: [PATCH 39/53] code get favourites and write unit test --- .../Hearthstone/Helpers/Extensions.swift | 2 +- .../Services/FavoritesService.swift | 23 +++++++++++++--- .../CardsCollectionViewController.swift | 2 +- .../HomeTabViewController.swift | 4 +-- .../FavoritesTests/TestFavoritesCRUD.swift | 26 +++++++++++++++++++ 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 6243435..bb917ac 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -326,7 +326,7 @@ extension CardsCollectionViewController { func select(_ card: Card) { let destVC = CardViewController() destVC.card = card - destVC.favoriteService = databseService + destVC.favoriteService = databaseService show(destVC, sender: self) } } diff --git a/Hearthstone/Hearthstone/Services/FavoritesService.swift b/Hearthstone/Hearthstone/Services/FavoritesService.swift index 88907be..7b8e61e 100644 --- a/Hearthstone/Hearthstone/Services/FavoritesService.swift +++ b/Hearthstone/Hearthstone/Services/FavoritesService.swift @@ -16,7 +16,7 @@ protocol StoreCardProtocol { protocol ReadCardProtocol { func exists(with id: String, completion: @escaping(Bool) -> Void) - func getFavorites(completion: @escaping([Card]) -> Void) + func getFavorites(completion: @escaping([String]) -> Void) } class FavoritesService: StoreCardProtocol, ReadCardProtocol { @@ -94,8 +94,25 @@ class FavoritesService: StoreCardProtocol, ReadCardProtocol { } } - func getFavorites(completion: @escaping([Card]) -> Void) { - + func getFavorites(completion: @escaping([String]) -> Void) { + context.perform { [weak self] in + let request = Favorite.fetchRequest() + do { + if let favorites = try self?.context.fetch(request) { + var cards = [String]() + for favorite in favorites { + cards.append(favorite.cardID ?? "") + } + completion(cards) + } else { + completion([]) + } + } catch { + debugPrint("Unable to fetch Favorites") + completion([]) + } + + } } diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 2d85a96..bac78d7 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -13,7 +13,7 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie // Public public var dataService: CardsDataService? - public var databseService: FavoritesService? + public var databaseService: FavoritesService? // Private private var filteredCards = [CardViewModel]() diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift index 9caddfe..d15221b 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift @@ -18,10 +18,10 @@ class HomeTabViewController: UITabBarController { let allVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) allVC.dataService = CardsDataService(type: .AllCards) - allVC.databseService = favoritesService + allVC.databaseService = favoritesService let favVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) favVC.dataService = CardsDataService(type: .Favorites) - favVC.databseService = favoritesService + favVC.databaseService = favoritesService viewControllers = [ createTabNavigation(for: allVC, with: "Cards", and: "lanyardcard.fill"), diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift index b3f9d31..b54b7b2 100644 --- a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift +++ b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift @@ -21,6 +21,11 @@ class TestFavoritesCRUD: XCTestCase { try super.tearDownWithError() sut = nil } + + override func tearDown() { + super.tearDown() + sut = nil + } func testNewSaveToFavorites() { @@ -100,4 +105,25 @@ class TestFavoritesCRUD: XCTestCase { } } + func testFetchFavorite() { + let cardID1 = "CardToFetch_01" + + let expectation = expectation(description: "Test getFavorites") + + sut.context.perform { [weak self] in + self?.sut.save(cardID1) { saved in + XCTAssertTrue(saved) + self?.sut.getFavorites { favorites in + XCTAssertFalse(favorites.isEmpty) + XCTAssertEqual(favorites.first, cardID1) + expectation.fulfill() + } + } + } + + waitForExpectations(timeout: 10.0) { error in + XCTAssertNil(error, "Get Favorites unsuccessful") + } + } + } From 260fbf490aaedc36bef4203fc65a3931575286bd Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Wed, 24 Aug 2022 13:43:10 +0300 Subject: [PATCH 40/53] write unit test for getting multiple rows --- .../Helpers/TestCoreDataService.swift | 23 ++++++++++++++++++- .../FavoritesTests/TestFavoritesCRUD.swift | 12 +++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift b/Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift index b853c78..2be34e1 100644 --- a/Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift +++ b/Hearthstone/HearthstoneTests/FavoritesTests/Helpers/TestCoreDataService.swift @@ -30,6 +30,27 @@ class TestCoreDataService: FavoritesService { } - + /// Helper function to add multiple cards to favorites, not necessary to project though + func addCards(of count: Int, completion: @escaping(Bool) -> Void) { + var cardsArray = [String]() + for i in 0.. Date: Wed, 24 Aug 2022 17:41:41 +0300 Subject: [PATCH 41/53] enhance handleParsed to allow db queries and add db service to dataService (with Unit tests) --- .../Hearthstone/Helpers/Extensions.swift | 18 +++++++++-- .../Services/CardsDataService.swift | 28 ++++++++++------ .../ViewModels/CardViewModel.swift | 7 ++-- .../CardsCollectionViewController.swift | 15 ++++----- .../HomeTabViewController.swift | 6 ++-- .../CardsTests/TestAllCardService.swift | 32 +++++++++++++++---- 6 files changed, 71 insertions(+), 35 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index bb917ac..28d9abd 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -37,6 +37,12 @@ extension UIBarButtonItem { } +extension UIButton { + public static func set(for expression: Bool, toggledName: String, nonToggledName: String) -> UIImage? { + UIImage(systemName: expression ? toggledName : nonToggledName) + } +} + extension UIButton.Configuration { public static func typed(with text: String) -> UIButton.Configuration { var config = UIButton.Configuration.filled() @@ -53,7 +59,7 @@ extension UIButton.Configuration { extension UIImageView { - // TODO: Write Unit Tests + // TODO: Write UI Tests func load(from url: URL, mode: UIView.ContentMode) { URLSession.shared.dataTask(with: url) { [weak self] data, response, error in @@ -258,9 +264,9 @@ extension CardViewModel { extension CardViewModel { init(card: Card) { + self.cardID = card.cardId ?? "" self.title = card.name ?? CardViewModel.placeholderTitle self.image = card.img ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" - // TODO: isFavorite should be initialized based on the Query in DB (Favorites table) self.isFavorite = false self.select = {} self.description = (card.flavor?.isEmpty ?? true) ? "No Information to show" : card.flavor @@ -326,9 +332,15 @@ extension CardsCollectionViewController { func select(_ card: Card) { let destVC = CardViewController() destVC.card = card - destVC.favoriteService = databaseService + destVC.favoriteService = dataService?.favoritesService show(destVC, sender: self) } + + func showWatermark() { + if let watermarkImage = UIImage(named: "oops") { + collectionView.backgroundView = WatermarkView(frame: view.bounds, with: "Oops no cards found!", image: watermarkImage) + } + } } extension CardGridViewCell { diff --git a/Hearthstone/Hearthstone/Services/CardsDataService.swift b/Hearthstone/Hearthstone/Services/CardsDataService.swift index 5344894..a42a429 100644 --- a/Hearthstone/Hearthstone/Services/CardsDataService.swift +++ b/Hearthstone/Hearthstone/Services/CardsDataService.swift @@ -19,7 +19,7 @@ protocol JSONConverterProtocol { } protocol ResultHadlerProtocol { - func handleParsed(_ cards: [Card], from view: CardsCollectionViewController?) -> [CardViewModel] + func handleParsed(_ cards: [Card], from view: CardsCollectionViewController?, completion: @escaping ([CardViewModel]) -> Void) func featuresFilter(is activated: Bool, for cards: [CardViewModel]) -> [CardViewModel] } @@ -31,6 +31,7 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad // Public public let type: ServiceType + public var favoritesService: FavoritesService? // Private private let extensionType = "json" @@ -51,20 +52,29 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad } } - func handleParsed(_ cards: [Card], from view: CardsCollectionViewController?) -> [CardViewModel] { + func handleParsed(_ cards: [Card], from view: CardsCollectionViewController? = nil, completion: @escaping ([CardViewModel]) -> Void) { var viewModels = [CardViewModel]() - for card in cards { - switch type { - case .AllCards: + switch type { + case .AllCards: + for card in cards { viewModels.append(CardViewModel(card: card, select: { view?.select(card) })) - break - default: - break + } + completion(viewModels) + break + case .Favorites: + favoritesService?.getFavorites { favIDs in + for favID in favIDs { + if let card = cards.first(where: { $0.cardId == favID }) { + viewModels.append(CardViewModel(card: card, select: { + view?.select(card) + })) + } + } + completion(viewModels) } } - return viewModels } func featuresFilter(is activated: Bool, for cards: [CardViewModel]) -> [CardViewModel] { diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index c16ae67..94757e3 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -10,9 +10,10 @@ import UIKit struct CardViewModel { + let cardID: String let title: String let image: String - let isFavorite: Bool + var isFavorite: Bool = false var isHsiaoFav: Bool = false // MARK: - Collection View variables let select: () -> Void @@ -21,10 +22,10 @@ struct CardViewModel { var type: String? init(card: Card, select: @escaping () -> Void) { + self.cardID = card.cardId ?? "" self.title = card.name ?? CardViewModel.placeholderTitle self.image = card.img ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" - // TODO: isFavorite should be initialized based on the Query in DB (Favorites table) - isFavorite = false + self.isFavorite = false self.select = select isHsiaoFav = isFeatured(card) } diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index bac78d7..2ef71f9 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -13,7 +13,6 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie // Public public var dataService: CardsDataService? - public var databaseService: FavoritesService? // Private private var filteredCards = [CardViewModel]() @@ -28,7 +27,6 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie refreshData() } - // MARK: - CollectionView Functions override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { filteredCards.count @@ -71,15 +69,14 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie DispatchQueue.global().async { [weak self] in self?.dataService?.convert(from: "cards") { items in - self?.filteredCards = self?.dataService?.handleParsed(items, from: self) ?? [] - DispatchQueue.main.async { - if self?.filteredCards.count == 0 { - if let viewBounds = self?.view.bounds, - let watermarkImage = UIImage(named: "oops") { - self?.collectionView.backgroundView = WatermarkView(frame: viewBounds, with: "Oops no cards found!", image: watermarkImage) + self?.dataService?.handleParsed(items, from: self) { itemsVM in + self?.filteredCards = itemsVM + DispatchQueue.main.async { + if self?.filteredCards.count == 0 { + self?.showWatermark() } + self?.collectionView.reloadData() } - self?.collectionView.reloadData() } } } diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift index d15221b..177bf9a 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/HomeTabViewController.swift @@ -17,11 +17,9 @@ class HomeTabViewController: UITabBarController { let favoritesService = attachFavoritesService() let allVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) - allVC.dataService = CardsDataService(type: .AllCards) - allVC.databaseService = favoritesService + allVC.dataService = CardsDataService(type: .AllCards, favoritesService: favoritesService) let favVC = CardsCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) - favVC.dataService = CardsDataService(type: .Favorites) - favVC.databaseService = favoritesService + favVC.dataService = CardsDataService(type: .Favorites, favoritesService: favoritesService) viewControllers = [ createTabNavigation(for: allVC, with: "Cards", and: "lanyardcard.fill"), diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift index 42666cb..bb8bf3b 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift @@ -33,22 +33,40 @@ class TestAllCardService: XCTestCase { func testServiceReturnsAllCards() { - let cardVMs = sut.handleParsed(elements ?? [], from: nil) + let expectation = expectation(description: "testServiceReturnsAllCards") - XCTAssertNotEqual(cardVMs.count, 0, "Service should return value > 0") + sut.handleParsed(elements ?? []) { [weak self] cardVMs in + XCTAssertNotEqual(cardVMs.count, 0, "Service should return value > 0") + XCTAssertEqual(cardVMs.count, self?.elements?.count ?? 0, "Service should return as many VMs as the input") + expectation.fulfill() + } - XCTAssertEqual(cardVMs.count, elements?.count ?? 0, "Service should return as many VMs as the input") + waitForExpectations(timeout: 2.0) { error in + XCTAssertNil(error, "testServiceReturnsAllCards unsuccessful") + } } func testServiceReturnsFeaturedOnly() { - let cardVMs = sut.handleParsed(elements ?? [], from: nil) - let featured = sut.featuresFilter(is: true, for: cardVMs) + let expectation = expectation(description: "testServiceReturnsFeaturedOnly") + + sut.handleParsed(elements ?? []) { [weak self] cardVMs in + + if let featured = self?.sut.featuresFilter(is: true, for: cardVMs) { + XCTAssertNotEqual(featured.count, 0, "Dummy data have provided 3 cards with Hsiao Favorite elements") + XCTAssertEqual(featured.count, 3, "Dummy data have provided 3 cards with Hsiao Favorite elements") + } else { + XCTFail() + } + expectation.fulfill() + } + + waitForExpectations(timeout: 2.0) { error in + XCTAssertNil(error, "testServiceReturnsFeaturedOnly unsuccessful") + } - XCTAssertNotEqual(featured.count, 0, "Dummy data have provided 3 cards with Hsiao Favorite elements") - XCTAssertEqual(featured.count, 3, "Dummy data have provided 3 cards with Hsiao Favorite elements") } From 405773f44762e5eef82d002acd414d8a1978016e Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Thu, 25 Aug 2022 14:56:53 +0300 Subject: [PATCH 42/53] improve detail view to cleanup --- .../FavoriteDB/Favorite+CoreDataClass.swift | 2 +- .../Favorite+CoreDataProperties.swift | 2 +- .../Hearthstone/Helpers/Extensions.swift | 39 ++++++++++++++++++ .../ViewControllers/CardViewController.swift | 40 +++---------------- .../CardsTests/TestAllCardService.swift | 2 - .../CardsTests/TestCardViewModel.swift | 2 +- 6 files changed, 48 insertions(+), 39 deletions(-) diff --git a/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift index e6c32b8..b0ce848 100644 --- a/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift +++ b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataClass.swift @@ -2,7 +2,7 @@ // Favorite+CoreDataClass.swift // Hearthstone // -// Created by Epsilon User on 12/8/22. +// Created by Stavros Tsikinas on 12/8/22. // // diff --git a/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift index 42f5294..7d490cf 100644 --- a/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift +++ b/Hearthstone/Hearthstone/FavoriteDB/Favorite+CoreDataProperties.swift @@ -2,7 +2,7 @@ // Favorite+CoreDataProperties.swift // Hearthstone // -// Created by Epsilon User on 12/8/22. +// Created by Stavros Tsikinas on 12/8/22. // // diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 28d9abd..77174cd 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -343,6 +343,45 @@ extension CardsCollectionViewController { } } +extension CardViewController { + + func initDetailViewModel(_ card: Card) { + + let cardView = CardView(frame: view.bounds, for: card) + + let cardViewModel = CardViewModel(card: card) + isFavorite = cardViewModel.isFavorite + + cardView.cardViewModel = cardViewModel + view.addSubview(cardView) + } + + func update(for favorite: Bool) { + if !favorite { + favoriteService?.save(card?.cardId ?? "") { [weak self] success in + DispatchQueue.main.async { + self?.showInfoAlert(with: success ? "Card added to Favorites" : "Unable to add card to Favorites") + self?.updateFavorite(from: success) + } + } + } else { + favoriteService?.delete(cardID: card?.cardId ?? "") { [weak self] success in + DispatchQueue.main.async { + self?.showInfoAlert(with: success ? "Card deleted from Favorites" : "Unable to delete card to Favorites") + self?.updateFavorite(from: !success) + } + + } + } + } + + private func updateFavorite(from success: Bool) { + isFavorite = success + favoriteButton.image = UIBarButtonItem.set(for: isFavorite, toggledName: "heart.fill", nonToggledName: "heart") + } + +} + extension CardGridViewCell { // TODO: Write UI Test diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift index 0714078..5bdd97d 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -2,7 +2,7 @@ // CardViewController.swift // Hearthstone // -// Created by Epsilon User on 22/8/22. +// Created by Stavros Tsikinas on 22/8/22. // import UIKit @@ -14,26 +14,20 @@ class CardViewController: UIViewController { // Public public var card: Card? public var favoriteService: FavoritesService? + public var isFavorite: Bool = true + public var favoriteButton = UIBarButtonItem() // Private private var cardViewModel: CardViewModel! - private var isFavorite: Bool = true - private var favoriteButton = UIBarButtonItem() - + override func viewDidLoad() { super.viewDidLoad() - let cardView = CardView(frame: view.bounds, for: card) guard let card = card else { return } - cardViewModel = CardViewModel(card: card) - isFavorite = cardViewModel.isFavorite - - cardView.cardViewModel = cardViewModel - view.addSubview(cardView) - setupBar() + initDetailViewModel(card) } // MARK: - Setup Functions @@ -48,30 +42,8 @@ class CardViewController: UIViewController { } } - // MARK: - Update Functions - private func updateFavorite(from success: Bool) { - isFavorite = success - favoriteButton.image = UIBarButtonItem.set(for: isFavorite, toggledName: "heart.fill", nonToggledName: "heart") - } - - // MARK: - Obj-C Functions @objc func toggleFavorite() { - if !isFavorite { - favoriteService?.save(card?.cardId ?? "") { [weak self] success in - DispatchQueue.main.async { - self?.showInfoAlert(with: success ? "Card added to Favorites" : "Unable to add card to Favorites") - self?.updateFavorite(from: success) - } - } - } else { - favoriteService?.delete(cardID: card?.cardId ?? "") { [weak self] success in - DispatchQueue.main.async { - self?.showInfoAlert(with: success ? "Card deleted from Favorites" : "Unable to delete card to Favorites") - self?.updateFavorite(from: !success) - } - - } - } + update(for: isFavorite) } } diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift index bb8bf3b..710a2d6 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift @@ -66,8 +66,6 @@ class TestAllCardService: XCTestCase { XCTAssertNil(error, "testServiceReturnsFeaturedOnly unsuccessful") } - - } } diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift index a520a4f..5cc6e1a 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestCardViewModel.swift @@ -2,7 +2,7 @@ // TestCardViewModel.swift // HearthstoneTests // -// Created by Epsilon User on 28/7/22. +// Created by Stavros Tsikinas on 28/7/22. // import XCTest From 522284c285b67e80e9a446d4660556a77e1b44d5 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Fri, 26 Aug 2022 16:33:23 +0300 Subject: [PATCH 43/53] add protocol to init/update fav button in collection view cards --- .../Hearthstone/Helpers/Extensions.swift | 50 ++++++++++++++++--- .../Services/CardsDataService.swift | 22 ++++---- .../ViewModels/CardViewModel.swift | 11 +++- .../ViewControllers/CardViewController.swift | 2 +- .../CardsCollectionViewController.swift | 29 +++++++++-- .../CardsTests/TestAllCardService.swift | 2 +- .../FavoritesTests/TestFavoritesCRUD.swift | 5 -- 7 files changed, 90 insertions(+), 31 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 77174cd..ef8cb2d 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -258,22 +258,33 @@ extension CardViewModel { return card.rarity == "Legendary" && ((card.mechanics?.contains(["name": "Deathrattle"])) != nil) } - } extension CardViewModel { - init(card: Card) { - self.cardID = card.cardId ?? "" - self.title = card.name ?? CardViewModel.placeholderTitle - self.image = card.img ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" - self.isFavorite = false - self.select = {} + convenience init(card: Card) { + self.init(card: card, select: {}) self.description = (card.flavor?.isEmpty ?? true) ? "No Information to show" : card.flavor self.type = card.type } } +extension CardViewModel { + func initFavorite(completion: @escaping() -> Void) { + delegate?.initFavorite(for: self) { [weak self] exists in + self?.isFavorite = exists + completion() + } + } +} + +extension CardViewModel { + func updateFavorite() { + isFavorite = !isFavorite + delegate?.updateFavorite(for: self) + } +} + extension CardsDataService { enum ServiceType { case AllCards @@ -283,6 +294,8 @@ extension CardsDataService { // - MARK: - Views Extensions + +// MARK: - HomeTabViewController extension HomeTabViewController { func initView() { @@ -327,6 +340,7 @@ extension HomeTabViewController { } +// MARK: - CardsCollectionViewController extension CardsCollectionViewController { func select(_ card: Card) { @@ -343,6 +357,7 @@ extension CardsCollectionViewController { } } +// MARK: - CardViewController extension CardViewController { func initDetailViewModel(_ card: Card) { @@ -350,7 +365,6 @@ extension CardViewController { let cardView = CardView(frame: view.bounds, for: card) let cardViewModel = CardViewModel(card: card) - isFavorite = cardViewModel.isFavorite cardView.cardViewModel = cardViewModel view.addSubview(cardView) @@ -388,10 +402,30 @@ extension CardGridViewCell { func configure() { cardName.text = cardViewModel.title cardImage.load(from: cardViewModel.getUrl(), mode: .scaleAspectFit) + cardViewModel.initFavorite { [weak self] in + DispatchQueue.main.async { + self?.configureFavoriteButton() + } + } + favoriteButton.addTarget(self, action: #selector(updateFavorite), for: .touchUpInside) } } +extension CardGridViewCell { + + func configureFavoriteButton() { + favoriteButton.setImage(UIButton.set(for: cardViewModel.isFavorite, toggledName: "heart.fill", nonToggledName: "heart"), for: .normal) + } +} + +extension CardGridViewCell { + @objc func updateFavorite() { + cardViewModel.updateFavorite() + configureFavoriteButton() + } +} + extension CardView { func configure() { diff --git a/Hearthstone/Hearthstone/Services/CardsDataService.swift b/Hearthstone/Hearthstone/Services/CardsDataService.swift index a42a429..ee77c0c 100644 --- a/Hearthstone/Hearthstone/Services/CardsDataService.swift +++ b/Hearthstone/Hearthstone/Services/CardsDataService.swift @@ -20,7 +20,7 @@ protocol JSONConverterProtocol { protocol ResultHadlerProtocol { func handleParsed(_ cards: [Card], from view: CardsCollectionViewController?, completion: @escaping ([CardViewModel]) -> Void) - func featuresFilter(is activated: Bool, for cards: [CardViewModel]) -> [CardViewModel] + func featuresFilter(for cards: [CardViewModel]) -> [CardViewModel] } @@ -57,9 +57,11 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad switch type { case .AllCards: for card in cards { - viewModels.append(CardViewModel(card: card, select: { + let cardVM = CardViewModel(card: card, select: { view?.select(card) - })) + }) + cardVM.delegate = view + viewModels.append(cardVM) } completion(viewModels) break @@ -67,9 +69,11 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad favoritesService?.getFavorites { favIDs in for favID in favIDs { if let card = cards.first(where: { $0.cardId == favID }) { - viewModels.append(CardViewModel(card: card, select: { + let cardVM = CardViewModel(card: card, select: { view?.select(card) - })) + }) + cardVM.delegate = view + viewModels.append(cardVM) } } completion(viewModels) @@ -77,12 +81,8 @@ struct CardsDataService: LocalDownloadProtocol, JSONConverterProtocol, ResultHad } } - func featuresFilter(is activated: Bool, for cards: [CardViewModel]) -> [CardViewModel] { - if activated { - return cards.filter(\.isHsiaoFav) - } else { - return cards.filter { !$0.isHsiaoFav } - } + func featuresFilter(for cards: [CardViewModel]) -> [CardViewModel] { + return cards.filter(\.isHsiaoFav) } diff --git a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift index 94757e3..8da2e79 100644 --- a/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift +++ b/Hearthstone/Hearthstone/ViewModels/CardViewModel.swift @@ -8,7 +8,15 @@ import Foundation import UIKit -struct CardViewModel { +// Write Unit/UI tests for protocol +protocol UpdateFavoritesProtocol { + func initFavorite(for card: CardViewModel, completion: @escaping(Bool) -> Void) + func updateFavorite(for card: CardViewModel) +} + +class CardViewModel { + + var delegate: UpdateFavoritesProtocol? let cardID: String let title: String @@ -25,7 +33,6 @@ struct CardViewModel { self.cardID = card.cardId ?? "" self.title = card.name ?? CardViewModel.placeholderTitle self.image = card.img ?? "https://via.placeholder.com/500x500.png?text=No+Image+Found" - self.isFavorite = false self.select = select isHsiaoFav = isFeatured(card) } diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift index 5bdd97d..5c0318e 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -26,8 +26,8 @@ class CardViewController: UIViewController { return } - setupBar() initDetailViewModel(card) + setupBar() } // MARK: - Setup Functions diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 2ef71f9..43035db 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -7,7 +7,7 @@ import UIKit -class CardsCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { +class CardsCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout, UpdateFavoritesProtocol { // MARK: - Variables @@ -63,7 +63,6 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie addButtons(right: [hsiaoFavButton]) } - // MARK: - Update Functions private func refreshData() { @@ -82,12 +81,36 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie } } + // MARK: - UpdateFavoritesProtocol functions + + func initFavorite(for card: CardViewModel, completion: @escaping(Bool) -> Void) { + dataService?.favoritesService?.exists(with: card.cardID) { isFavorite in + completion(isFavorite) + } + } + + func updateFavorite(for card: CardViewModel) { + if card.isFavorite { + dataService?.favoritesService?.save(card.cardID) { [weak self] _ in + DispatchQueue.main.async { + self?.collectionView.reloadData() + } + } + } else { + dataService?.favoritesService?.delete(cardID: card.cardID) { [weak self] _ in + DispatchQueue.main.async { + self?.collectionView.reloadData() + } + } + } + } + // MARK: - Obj-C Functions @objc func filterFeatured() { isFeatured = !isFeatured hsiaoFavButton.image = UIImage(systemName: isFeatured ? "star.slash.fill" : "star.fill") if isFeatured { - filteredCards = dataService?.featuresFilter(is: isFeatured, for: filteredCards) ?? [] + filteredCards = dataService?.featuresFilter(for: filteredCards) ?? [] collectionView.reloadData() } else { refreshData() diff --git a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift index 710a2d6..f511419 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/TestAllCardService.swift @@ -53,7 +53,7 @@ class TestAllCardService: XCTestCase { sut.handleParsed(elements ?? []) { [weak self] cardVMs in - if let featured = self?.sut.featuresFilter(is: true, for: cardVMs) { + if let featured = self?.sut.featuresFilter(for: cardVMs) { XCTAssertNotEqual(featured.count, 0, "Dummy data have provided 3 cards with Hsiao Favorite elements") XCTAssertEqual(featured.count, 3, "Dummy data have provided 3 cards with Hsiao Favorite elements") } else { diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift index eda1e2e..2484bb4 100644 --- a/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift +++ b/Hearthstone/HearthstoneTests/FavoritesTests/TestFavoritesCRUD.swift @@ -21,11 +21,6 @@ class TestFavoritesCRUD: XCTestCase { try super.tearDownWithError() sut = nil } - - override func tearDown() { - super.tearDown() - sut = nil - } func testNewSaveToFavorites() { From 5dcb58272c49f08402076bf4c72ab3a050acd34c Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Fri, 26 Aug 2022 23:41:47 +0300 Subject: [PATCH 44/53] write unit tests for UpdateFavoriteProtocol --- .../Hearthstone.xcodeproj/project.pbxproj | 32 ++++++++++ .../Helpers/CardViewModelHelper.swift | 18 ++++++ .../CardsTests/Helpers/CardsHelper.swift | 2 +- .../Helpers/MockUpdateFavoritesProtocol.swift | 58 +++++++++++++++++ .../TestInitFavoritesProtocol.swift | 64 +++++++++++++++++++ .../TestUpdateFavoritesProtocol.swift | 61 ++++++++++++++++++ 6 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 Hearthstone/HearthstoneTests/CardsTests/Helpers/CardViewModelHelper.swift create mode 100644 Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/Helpers/MockUpdateFavoritesProtocol.swift create mode 100644 Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestInitFavoritesProtocol.swift create mode 100644 Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestUpdateFavoritesProtocol.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 38a541a..c562b49 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -35,6 +35,10 @@ 30B596182896DF3F00253379 /* CardGridViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B596172896DF3F00253379 /* CardGridViewCell.swift */; }; 30B71181288FE1BA00935D29 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B71180288FE1BA00935D29 /* Card.swift */; }; 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B88F80289319C5005D326E /* HomeTabViewController.swift */; }; + 30D7659E28B9558600D11818 /* TestInitFavoritesProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D7659D28B9558600D11818 /* TestInitFavoritesProtocol.swift */; }; + 30D765A028B9562D00D11818 /* MockUpdateFavoritesProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D7659F28B9562D00D11818 /* MockUpdateFavoritesProtocol.swift */; }; + 30D765A328B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D765A228B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift */; }; + 30D765A528B965A200D11818 /* CardViewModelHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D765A428B965A200D11818 /* CardViewModelHelper.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -87,6 +91,10 @@ 30B596172896DF3F00253379 /* CardGridViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardGridViewCell.swift; sourceTree = ""; }; 30B71180288FE1BA00935D29 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 30B88F80289319C5005D326E /* HomeTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTabViewController.swift; sourceTree = ""; }; + 30D7659D28B9558600D11818 /* TestInitFavoritesProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestInitFavoritesProtocol.swift; sourceTree = ""; }; + 30D7659F28B9562D00D11818 /* MockUpdateFavoritesProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUpdateFavoritesProtocol.swift; sourceTree = ""; }; + 30D765A228B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestUpdateFavoritesProtocol.swift; sourceTree = ""; }; + 30D765A428B965A200D11818 /* CardViewModelHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModelHelper.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -130,6 +138,7 @@ isa = PBXGroup; children = ( 3063DB77289273C100715E98 /* CardsHelper.swift */, + 30D765A428B965A200D11818 /* CardViewModelHelper.swift */, ); path = Helpers; sourceTree = ""; @@ -146,6 +155,7 @@ 302FF91528B5FE2F00C9D114 /* FavoritesTests */ = { isa = PBXGroup; children = ( + 30D7659C28B9555600D11818 /* CardViewModel+Favorites */, 302FF91828B6020400C9D114 /* Helpers */, 302FF91628B5FE7A00C9D114 /* TestFavoritesCRUD.swift */, ); @@ -296,6 +306,24 @@ path = ViewControllers; sourceTree = ""; }; + 30D7659C28B9555600D11818 /* CardViewModel+Favorites */ = { + isa = PBXGroup; + children = ( + 30D765A128B9563A00D11818 /* Helpers */, + 30D7659D28B9558600D11818 /* TestInitFavoritesProtocol.swift */, + 30D765A228B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift */, + ); + path = "CardViewModel+Favorites"; + sourceTree = ""; + }; + 30D765A128B9563A00D11818 /* Helpers */ = { + isa = PBXGroup; + children = ( + 30D7659F28B9562D00D11818 /* MockUpdateFavoritesProtocol.swift */, + ); + path = Helpers; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -460,10 +488,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 30D765A028B9562D00D11818 /* MockUpdateFavoritesProtocol.swift in Sources */, 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */, + 30D765A328B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift in Sources */, + 30D765A528B965A200D11818 /* CardViewModelHelper.swift in Sources */, 302FF91A28B6023C00C9D114 /* TestCoreDataService.swift in Sources */, 3063DB78289273C100715E98 /* CardsHelper.swift in Sources */, 303E314228B4B5EA00A44FC8 /* TestDetailCardViewModel.swift in Sources */, + 30D7659E28B9558600D11818 /* TestInitFavoritesProtocol.swift in Sources */, 302FF91728B5FE7A00C9D114 /* TestFavoritesCRUD.swift in Sources */, 30A8D56B2892AA2000849D1F /* TestCardViewModel.swift in Sources */, 30A8DD3A28A142B800AF6A01 /* TestAllCardService.swift in Sources */, diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardViewModelHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardViewModelHelper.swift new file mode 100644 index 0000000..e4a0f71 --- /dev/null +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardViewModelHelper.swift @@ -0,0 +1,18 @@ +// +// CardViewModelHelper.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 26/8/22. +// + +@testable import Hearthstone + +func testCardViewModel() -> CardViewModel { + CardViewModel(card: testCard(cardID: "TestCardID", name: "A test card")) +} + +func testCardViewModel(favorite: Bool) -> CardViewModel { + let cardVM = testCardViewModel() + cardVM.isFavorite = favorite + return cardVM +} diff --git a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift index 688004c..a0f9908 100644 --- a/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift +++ b/Hearthstone/HearthstoneTests/CardsTests/Helpers/CardsHelper.swift @@ -11,7 +11,7 @@ import Foundation /// /// Initializers for dummy cards. /// -func testCard(name: String? = nil, img: String? = nil, rarity: String? = nil, mechanics: [[String: String]]? = nil) -> Card { +func testCard(cardID: String? = nil, name: String? = nil, img: String? = nil, rarity: String? = nil, mechanics: [[String: String]]? = nil) -> Card { Card(cardId: nil, name: name, cardSet: nil, type: nil, rarity: rarity, cost: nil, attack: nil, health: nil, text: nil, flavor: nil, artist: nil, collectible: nil, elite: nil, playerClass: nil, multiClassGroup: nil, classes: nil, img: img, imgGold: nil, locale: nil, mechanics: mechanics) } diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/Helpers/MockUpdateFavoritesProtocol.swift b/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/Helpers/MockUpdateFavoritesProtocol.swift new file mode 100644 index 0000000..57a39e5 --- /dev/null +++ b/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/Helpers/MockUpdateFavoritesProtocol.swift @@ -0,0 +1,58 @@ +// +// MockUpdateFavoritesProtocol.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 26/8/22. +// + +import XCTest +@testable import Hearthstone + +class MockUpdateFavoritesProtocol: UpdateFavoritesProtocol { + + var isFavorite: Bool? + + private let dbService: TestCoreDataService! + private let testCase: XCTestCase + // For the updating tests + private var expectation: XCTestExpectation? + + init(for testCase: XCTestCase, with dbService: TestCoreDataService) { + self.testCase = testCase + self.dbService = dbService + } + + // MAR: - Helpers + func expectDidBecomeFavorite() { + expectation = testCase.expectation(description: "expectDidBecomeFavorite") + } + + // MARK: - UpdateFavoritesProtocol functions + func initFavorite(for card: CardViewModel, completion: @escaping (Bool) -> Void) { + dbService.exists(with: card.cardID) { isFavorite in + completion(isFavorite) + } + } + + func updateFavorite(for card: CardViewModel) { + if card.isFavorite { + dbService.save(card.cardID) { [weak self] saved in + if self?.expectation != nil { + self?.isFavorite = saved + self?.expectation?.fulfill() + self?.expectation = nil + } + } + } else { + dbService.delete(cardID: card.cardID) { [weak self] deleted in + if self?.expectation != nil { + self?.isFavorite = !deleted + self?.expectation?.fulfill() + self?.expectation = nil + } + } + } + } + + +} diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestInitFavoritesProtocol.swift b/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestInitFavoritesProtocol.swift new file mode 100644 index 0000000..1b65466 --- /dev/null +++ b/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestInitFavoritesProtocol.swift @@ -0,0 +1,64 @@ +// +// TestInitFavoritesProtocol.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 26/8/22. +// + +import XCTest +@testable import Hearthstone + +class TestInitFavoritesProtocol: XCTestCase { + + var testCoreData: TestCoreDataService! + + override func setUpWithError() throws { + try super.setUpWithError() + testCoreData = TestCoreDataService() + } + + override func tearDownWithError() throws { + try super.tearDownWithError() + testCoreData = nil + } + + func testCardViewModelInitIsFavorite() { + + let mockUpdater = MockUpdateFavoritesProtocol(for: self, with: testCoreData) + + let cardVM = testCardViewModel() + cardVM.delegate = mockUpdater + + let expectation = expectation(description: "testCardViewModelInitIsFavorite") + + testCoreData.save(cardVM.cardID) { saved in + XCTAssertTrue(saved) + cardVM.initFavorite { + XCTAssertTrue(cardVM.isFavorite) + expectation.fulfill() + } + } + + waitForExpectations(timeout: 3.0) { error in + XCTAssertNil(error, "testCardViewModelInitIsFavorite unsuccessful") + } + } + + func testCardViewModelInitIsntFavorite() { + let mockUpdater = MockUpdateFavoritesProtocol(for: self, with: testCoreData) + + let cardVM = testCardViewModel() + cardVM.delegate = mockUpdater + + let expectation = expectation(description: "testCardViewModelInitIsntFavorite") + cardVM.initFavorite { + XCTAssertFalse(cardVM.isFavorite) + expectation.fulfill() + } + + waitForExpectations(timeout: 3.0) { error in + XCTAssertNil(error, "testCardViewModelInitIsntFavorite unsuccessful") + } + } + +} diff --git a/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestUpdateFavoritesProtocol.swift b/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestUpdateFavoritesProtocol.swift new file mode 100644 index 0000000..8f29bbb --- /dev/null +++ b/Hearthstone/HearthstoneTests/FavoritesTests/CardViewModel+Favorites/TestUpdateFavoritesProtocol.swift @@ -0,0 +1,61 @@ +// +// TestUpdateFavoritesProtocol.swift +// HearthstoneTests +// +// Created by Stavros Tsikinas on 26/8/22. +// + +import XCTest +@testable import Hearthstone + +class TestUpdateFavoritesProtocol: XCTestCase { + + var testCoreData: TestCoreDataService! + + override func setUpWithError() throws { + try super.setUpWithError() + testCoreData = TestCoreDataService() + } + + override func tearDownWithError() throws { + try super.tearDownWithError() + testCoreData = nil + } + + func testViewModelBecameFavorite() throws { + let mockUpdater = MockUpdateFavoritesProtocol(for: self, with: testCoreData) + + let cardVM = testCardViewModel() + cardVM.delegate = mockUpdater + + mockUpdater.expectDidBecomeFavorite() + cardVM.updateFavorite() + + waitForExpectations(timeout: 3.0) { error in + XCTAssertNil(error, "testViewModelBecameFavorite unsuccessful") + } + + let didBecomeFavorite = try XCTUnwrap(mockUpdater.isFavorite, "Unable to unwrap isFavorite from MockUpdateFavoritesProtocol") + XCTAssertTrue(didBecomeFavorite, "CardViewModel's isFavorite param should've been true.") + + } + + func testViewModelDeletedFromFavorites() throws { + let mockUpdater = MockUpdateFavoritesProtocol(for: self, with: testCoreData) + + let cardVM = testCardViewModel(favorite: true) + cardVM.delegate = mockUpdater + + mockUpdater.expectDidBecomeFavorite() + cardVM.updateFavorite() + + waitForExpectations(timeout: 3.0) { error in + XCTAssertNil(error, "testViewModelDeletedFromFavorites unsuccessful") + } + + let isFavorite = try XCTUnwrap(mockUpdater.isFavorite, "Unable to unwrap isFavorite from MockUpdateFavoritesProtocol") + XCTAssertFalse(isFavorite, "CardViewModel's isFavorite param should've been false.") + + } + +} From f776effa992ea8bb253f4ed26c7bc7e1f106a761 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Sat, 27 Aug 2022 15:06:59 +0300 Subject: [PATCH 45/53] update data on tab changed --- .../Hearthstone/Helpers/Extensions.swift | 18 +++++++++++++----- .../CardsCollectionViewController.swift | 7 ++++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index ef8cb2d..f400da1 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -11,6 +11,19 @@ import UIKit // - MARK: UIKit Extensions +extension UICollectionView { + + func hidePlaceholderView() { + backgroundView = nil + } + + func showWatermark(_ image: UIImage? = nil, with text: String = "") { + if let watermarkImage = UIImage(named: "oops") { + backgroundView = WatermarkView(frame: bounds, with: "Oops no cards found!", image: watermarkImage) + } + } +} + extension UIViewController { func showInfoAlert(with message: String) { @@ -350,11 +363,6 @@ extension CardsCollectionViewController { show(destVC, sender: self) } - func showWatermark() { - if let watermarkImage = UIImage(named: "oops") { - collectionView.backgroundView = WatermarkView(frame: view.bounds, with: "Oops no cards found!", image: watermarkImage) - } - } } // MARK: - CardViewController diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 43035db..7ab3e9f 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -24,6 +24,9 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie collectionView.register(CardGridViewCell.self, forCellWithReuseIdentifier: "CardCell") setupBar() + } + + override func viewDidAppear(_ animated: Bool) { refreshData() } @@ -72,7 +75,9 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie self?.filteredCards = itemsVM DispatchQueue.main.async { if self?.filteredCards.count == 0 { - self?.showWatermark() + self?.collectionView.showWatermark(UIImage(named: "oops"), with: "Oops no cards found!") + } else { + self?.collectionView.hidePlaceholderView() } self?.collectionView.reloadData() } From 7978a04a4879651d500004da1b8849d68c675893 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Sun, 28 Aug 2022 20:52:32 +0300 Subject: [PATCH 46/53] add loading spinner on refresh data --- .../Hearthstone/Helpers/Extensions.swift | 23 +++++++++++++++++++ .../CardsCollectionViewController.swift | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index f400da1..8b7e15f 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -24,6 +24,29 @@ extension UICollectionView { } } +extension UICollectionView { + private var loading: UIActivityIndicatorView { + get { + let indicator = UIActivityIndicatorView(style: .medium) + indicator.color = .primaryColor + return indicator + } + } + + func addSpinner() { + backgroundView = loading + loading.startAnimating() + } + + func hideSpinner() { + if loading.isAnimating { + loading.stopAnimating() + backgroundView = nil + } + } + +} + extension UIViewController { func showInfoAlert(with message: String) { diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 7ab3e9f..05b81b6 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -68,12 +68,13 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie // MARK: - Update Functions private func refreshData() { - + collectionView.addSpinner() DispatchQueue.global().async { [weak self] in self?.dataService?.convert(from: "cards") { items in self?.dataService?.handleParsed(items, from: self) { itemsVM in self?.filteredCards = itemsVM DispatchQueue.main.async { + self?.collectionView.hideSpinner() if self?.filteredCards.count == 0 { self?.collectionView.showWatermark(UIImage(named: "oops"), with: "Oops no cards found!") } else { From 8dd4d1bc5289e40a70a4b4ab60043897b251f928 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 29 Aug 2022 10:27:02 +0300 Subject: [PATCH 47/53] create LoadingImage to cache images and improve experience --- .../Hearthstone.xcodeproj/project.pbxproj | 4 ++ .../Hearthstone/Helpers/Extensions.swift | 36 +++++--------- .../Views/Cells/CardGridViewCell.swift | 4 +- .../Hearthstone/Views/Misc/CardView.swift | 4 +- .../Hearthstone/Views/Misc/LoadingImage.swift | 47 +++++++++++++++++++ 5 files changed, 66 insertions(+), 29 deletions(-) create mode 100644 Hearthstone/Hearthstone/Views/Misc/LoadingImage.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index c562b49..c4b866d 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 30436AEE28A6DDA800BC0BFC /* FavoritesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AED28A6DDA800BC0BFC /* FavoritesService.swift */; }; 30436AFA28A6E61400BC0BFC /* Favorite+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AF828A6E61400BC0BFC /* Favorite+CoreDataClass.swift */; }; 30436AFB28A6E61400BC0BFC /* Favorite+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30436AF928A6E61400BC0BFC /* Favorite+CoreDataProperties.swift */; }; + 3058D74B28BC970900771FF6 /* LoadingImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3058D74A28BC970900771FF6 /* LoadingImage.swift */; }; 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FED288EED28001D4559 /* AppDelegate.swift */; }; 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FEF288EED28001D4559 /* SceneDelegate.swift */; }; 305C6FF8288EED28001D4559 /* Hearthstone.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 305C6FF6288EED28001D4559 /* Hearthstone.xcdatamodeld */; }; @@ -70,6 +71,7 @@ 30436AED28A6DDA800BC0BFC /* FavoritesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoritesService.swift; sourceTree = ""; }; 30436AF828A6E61400BC0BFC /* Favorite+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Favorite+CoreDataClass.swift"; sourceTree = ""; }; 30436AF928A6E61400BC0BFC /* Favorite+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Favorite+CoreDataProperties.swift"; sourceTree = ""; }; + 3058D74A28BC970900771FF6 /* LoadingImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingImage.swift; sourceTree = ""; }; 305C6FEA288EED28001D4559 /* Hearthstone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Hearthstone.app; sourceTree = BUILT_PRODUCTS_DIR; }; 305C6FED288EED28001D4559 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 305C6FEF288EED28001D4559 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -275,6 +277,7 @@ children = ( 309EFDD228A43C1400D3F753 /* WatermarkView.swift */, 30A128AF28B3774500B66C80 /* CardView.swift */, + 3058D74A28BC970900771FF6 /* LoadingImage.swift */, ); path = Misc; sourceTree = ""; @@ -472,6 +475,7 @@ 305C6FEE288EED28001D4559 /* AppDelegate.swift in Sources */, 30A8D56528929D1B00849D1F /* CardViewModel.swift in Sources */, 30B88F81289319C5005D326E /* HomeTabViewController.swift in Sources */, + 3058D74B28BC970900771FF6 /* LoadingImage.swift in Sources */, 305C6FF0288EED28001D4559 /* SceneDelegate.swift in Sources */, 309EFDD328A43C1400D3F753 /* WatermarkView.swift in Sources */, 30A128B028B3774500B66C80 /* CardView.swift in Sources */, diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index 8b7e15f..b70cac8 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -8,6 +8,11 @@ import Foundation import UIKit +// - MARK: - Constants +let imageCache = NSCache() + + +// - MARK: - Hepers // - MARK: UIKit Extensions @@ -17,6 +22,7 @@ extension UICollectionView { backgroundView = nil } + // TODO: Write UI Tests func showWatermark(_ image: UIImage? = nil, with text: String = "") { if let watermarkImage = UIImage(named: "oops") { backgroundView = WatermarkView(frame: bounds, with: "Oops no cards found!", image: watermarkImage) @@ -33,11 +39,13 @@ extension UICollectionView { } } + // TODO: Write UI Tests func addSpinner() { backgroundView = loading loading.startAnimating() } + // TODO: Write UI Tests func hideSpinner() { if loading.isAnimating { loading.stopAnimating() @@ -94,28 +102,7 @@ extension UIButton.Configuration { } extension UIImageView { - - // TODO: Write UI Tests - func load(from url: URL, mode: UIView.ContentMode) { - - URLSession.shared.dataTask(with: url) { [weak self] data, response, error in - guard - let httpURLResponse = response as? HTTPURLResponse, - httpURLResponse.statusCode == 200, - let data = data, error == nil, - let image = UIImage(data: data) - else { - self?.addPlaceholderImage(from: url, with: mode) - return - } - DispatchQueue.main.async() { - self?.image = image - self?.contentMode = mode - } - }.resume() - } - - private func addPlaceholderImage(from url: URL, with mode: UIView.ContentMode) { + func addPlaceholderImage(from url: URL, with mode: UIView.ContentMode) { if let imgData = try? Data(contentsOf: url) { if let img = UIImage(data: imgData) { @@ -126,7 +113,6 @@ extension UIImageView { } } } - } extension UIColor { @@ -432,7 +418,7 @@ extension CardGridViewCell { // TODO: Write UI Test func configure() { cardName.text = cardViewModel.title - cardImage.load(from: cardViewModel.getUrl(), mode: .scaleAspectFit) + cardImage.load(from: cardViewModel.getUrl(), with: .scaleAspectFit) cardViewModel.initFavorite { [weak self] in DispatchQueue.main.async { self?.configureFavoriteButton() @@ -460,7 +446,7 @@ extension CardGridViewCell { extension CardView { func configure() { - cardImage.load(from: cardViewModel.getUrl(), mode: .scaleAspectFit) + cardImage.load(from: cardViewModel.getUrl(), with: .scaleAspectFit) cardName.text = cardViewModel.title cardText.text = cardViewModel.description cardType.configuration = .typed(with: cardViewModel.type ?? "") diff --git a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift index 48a0246..42d4778 100644 --- a/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift +++ b/Hearthstone/Hearthstone/Views/Cells/CardGridViewCell.swift @@ -20,8 +20,8 @@ class CardGridViewCell: UICollectionViewCell { return label }() - lazy var cardImage: UIImageView = { - let imageView = UIImageView() + lazy var cardImage: LoadingImage = { + let imageView = LoadingImage() return imageView }() diff --git a/Hearthstone/Hearthstone/Views/Misc/CardView.swift b/Hearthstone/Hearthstone/Views/Misc/CardView.swift index 2a0dc96..91b8cfd 100644 --- a/Hearthstone/Hearthstone/Views/Misc/CardView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/CardView.swift @@ -10,8 +10,8 @@ import UIKit class CardView: UIView { // MARK: - Subivew Initializers - lazy var cardImage: UIImageView = { - let imageView = UIImageView() + lazy var cardImage: LoadingImage = { + let imageView = LoadingImage() imageView.contentMode = .scaleAspectFit return imageView }() diff --git a/Hearthstone/Hearthstone/Views/Misc/LoadingImage.swift b/Hearthstone/Hearthstone/Views/Misc/LoadingImage.swift new file mode 100644 index 0000000..0ff4306 --- /dev/null +++ b/Hearthstone/Hearthstone/Views/Misc/LoadingImage.swift @@ -0,0 +1,47 @@ +// +// LoadingImage.swift +// Hearthstone +// +// Created by Stavros Tsikinas on 29/8/22. +// + +import UIKit + +// Add UI Tests +class LoadingImage: UIImageView { + + let activityIndicator = UIActivityIndicatorView() + + func load(from url: URL, with mode: UIView.ContentMode) { + + activityIndicator.color = .primaryColor + addSubview(activityIndicator) + activityIndicator.addAnchors(cXAnchor: centerXAnchor, cYAnchor: centerYAnchor) + activityIndicator.startAnimating() + + if let cachedImage = imageCache.object(forKey: url as AnyObject) as? UIImage { + image = cachedImage + activityIndicator.stopAnimating() + return + } + + URLSession.shared.dataTask(with: url) { [weak self] data, response, error in + guard + let httpURLResponse = response as? HTTPURLResponse, + httpURLResponse.statusCode == 200, + let data = data, error == nil, + let image = UIImage(data: data) else { + self?.addPlaceholderImage(from: url, with: mode) + return + } + DispatchQueue.main.async() { + self?.image = image + self?.contentMode = mode + imageCache.setObject(image, forKey: url as AnyObject) + self?.activityIndicator.stopAnimating() + } + }.resume() + + } + +} From 5364508c6bd2204c0298c4dce5872dcfb8bb2701 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 29 Aug 2022 13:51:12 +0300 Subject: [PATCH 48/53] write ui tests from add/delete from detail view --- .../Hearthstone.xcodeproj/project.pbxproj | 46 ++++++++-- .../Hearthstone/Helpers/Extensions.swift | 5 -- .../Views/Misc/WatermarkView.swift | 1 - .../ViewControllers/CardViewController.swift | 1 + .../HearthstoneUITests.swift | 41 --------- .../HearthstoneUITestsLaunchTests.swift | 32 ------- .../Helpers/NavigationExtensions.swift | 18 ++++ .../TestNavigationToCard.swift | 86 +++++++++++++++++++ 8 files changed, 143 insertions(+), 87 deletions(-) delete mode 100644 Hearthstone/HearthstoneUITests/HearthstoneUITests.swift delete mode 100644 Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift create mode 100644 Hearthstone/HearthstoneUITests/NavigationTests/Helpers/NavigationExtensions.swift create mode 100644 Hearthstone/HearthstoneUITests/NavigationTests/TestNavigationToCard.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index c4b866d..1ac0418 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -9,8 +9,6 @@ /* Begin PBXBuildFile section */ 3006060828939EFC00EF0BE4 /* CardsCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3006060728939EFC00EF0BE4 /* CardsCollectionViewController.swift */; }; 30070E4328916E450062F0E6 /* TestCardsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4228916E450062F0E6 /* TestCardsFile.swift */; }; - 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */; }; - 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */; }; 302FF91728B5FE7A00C9D114 /* TestFavoritesCRUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302FF91628B5FE7A00C9D114 /* TestFavoritesCRUD.swift */; }; 302FF91A28B6023C00C9D114 /* TestCoreDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302FF91928B6023C00C9D114 /* TestCoreDataService.swift */; }; 303E314228B4B5EA00A44FC8 /* TestDetailCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */; }; @@ -40,6 +38,8 @@ 30D765A028B9562D00D11818 /* MockUpdateFavoritesProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D7659F28B9562D00D11818 /* MockUpdateFavoritesProtocol.swift */; }; 30D765A328B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D765A228B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift */; }; 30D765A528B965A200D11818 /* CardViewModelHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D765A428B965A200D11818 /* CardViewModelHelper.swift */; }; + 30ECBEB628BCA6F300A2805C /* TestNavigationToCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */; }; + 30ECBEB928BCAA2900A2805C /* NavigationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEB828BCAA2900A2805C /* NavigationExtensions.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -63,8 +63,6 @@ 3006060728939EFC00EF0BE4 /* CardsCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsCollectionViewController.swift; sourceTree = ""; }; 30070E4228916E450062F0E6 /* TestCardsFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardsFile.swift; sourceTree = ""; }; 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITests.swift; sourceTree = ""; }; - 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HearthstoneUITestsLaunchTests.swift; sourceTree = ""; }; 302FF91628B5FE7A00C9D114 /* TestFavoritesCRUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestFavoritesCRUD.swift; sourceTree = ""; }; 302FF91928B6023C00C9D114 /* TestCoreDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCoreDataService.swift; sourceTree = ""; }; 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestDetailCardViewModel.swift; sourceTree = ""; }; @@ -97,6 +95,8 @@ 30D7659F28B9562D00D11818 /* MockUpdateFavoritesProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUpdateFavoritesProtocol.swift; sourceTree = ""; }; 30D765A228B95A0E00D11818 /* TestUpdateFavoritesProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestUpdateFavoritesProtocol.swift; sourceTree = ""; }; 30D765A428B965A200D11818 /* CardViewModelHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModelHelper.swift; sourceTree = ""; }; + 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestNavigationToCard.swift; sourceTree = ""; }; + 30ECBEB828BCAA2900A2805C /* NavigationExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationExtensions.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -148,8 +148,7 @@ 30070E49289180A70062F0E6 /* HearthstoneUITests */ = { isa = PBXGroup; children = ( - 30070E4A289180A70062F0E6 /* HearthstoneUITests.swift */, - 30070E4C289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift */, + 30ECBEB428BCA6C900A2805C /* NavigationTests */, ); path = HearthstoneUITests; sourceTree = ""; @@ -327,6 +326,23 @@ path = Helpers; sourceTree = ""; }; + 30ECBEB428BCA6C900A2805C /* NavigationTests */ = { + isa = PBXGroup; + children = ( + 30ECBEB728BCAA1800A2805C /* Helpers */, + 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */, + ); + path = NavigationTests; + sourceTree = ""; + }; + 30ECBEB728BCAA1800A2805C /* Helpers */ = { + isa = PBXGroup; + children = ( + 30ECBEB828BCAA2900A2805C /* NavigationExtensions.swift */, + ); + path = Helpers; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -395,6 +411,7 @@ TargetAttributes = { 30070E47289180A70062F0E6 = { CreatedOnToolsVersion = 13.4.1; + LastSwiftMigration = 1340; TestTargetID = 305C6FE9288EED28001D4559; }; 305C6FE9288EED28001D4559 = { @@ -459,8 +476,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 30070E4D289180A70062F0E6 /* HearthstoneUITestsLaunchTests.swift in Sources */, - 30070E4B289180A70062F0E6 /* HearthstoneUITests.swift in Sources */, + 30ECBEB628BCA6F300A2805C /* TestNavigationToCard.swift in Sources */, + 30ECBEB928BCAA2900A2805C /* NavigationExtensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -536,14 +553,21 @@ 30070E51289180A70062F0E6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 7BS7VD55S5; GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Hearthstone; @@ -553,10 +577,16 @@ 30070E52289180A70062F0E6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 7BS7VD55S5; GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.tsikinas.HearthstoneUITests; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Hearthstone/Hearthstone/Helpers/Extensions.swift b/Hearthstone/Hearthstone/Helpers/Extensions.swift index b70cac8..02aa1d1 100644 --- a/Hearthstone/Hearthstone/Helpers/Extensions.swift +++ b/Hearthstone/Hearthstone/Helpers/Extensions.swift @@ -22,7 +22,6 @@ extension UICollectionView { backgroundView = nil } - // TODO: Write UI Tests func showWatermark(_ image: UIImage? = nil, with text: String = "") { if let watermarkImage = UIImage(named: "oops") { backgroundView = WatermarkView(frame: bounds, with: "Oops no cards found!", image: watermarkImage) @@ -39,13 +38,11 @@ extension UICollectionView { } } - // TODO: Write UI Tests func addSpinner() { backgroundView = loading loading.startAnimating() } - // TODO: Write UI Tests func hideSpinner() { if loading.isAnimating { loading.stopAnimating() @@ -329,7 +326,6 @@ extension HomeTabViewController { extension HomeTabViewController { - // TODO: Write UI Tests func createTabNavigation(for root: UIViewController, with title: String? = "Title", and icon: String? = nil) -> UIViewController { let navigation = UINavigationController(rootViewController: root) if let title = title { @@ -415,7 +411,6 @@ extension CardViewController { extension CardGridViewCell { - // TODO: Write UI Test func configure() { cardName.text = cardViewModel.title cardImage.load(from: cardViewModel.getUrl(), with: .scaleAspectFit) diff --git a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift index 92823c9..3e18443 100644 --- a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift @@ -9,7 +9,6 @@ import Foundation import UIKit -// TODO: Write UITests for it class WatermarkView: UIView { // MARK: - Subivew Initializers diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift index 5c0318e..b951baa 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardViewController.swift @@ -37,6 +37,7 @@ class CardViewController: UIViewController { DispatchQueue.main.async { self?.favoriteButton = UIBarButtonItem(image: UIBarButtonItem.set(for: self?.isFavorite ?? false, toggledName: "heart.fill", nonToggledName: "heart"), style: .plain, target: self, action: #selector(self?.toggleFavorite)) self?.favoriteButton.tintColor = .red + self?.favoriteButton.accessibilityIdentifier = "addToFavorites" self?.addButtons(right: [self?.favoriteButton ?? UIBarButtonItem()]) } } diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift deleted file mode 100644 index 037ec7d..0000000 --- a/Hearthstone/HearthstoneUITests/HearthstoneUITests.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// HearthstoneUITests.swift -// HearthstoneUITests -// -// Created by Stavros Tsikinas on 27/7/22. -// - -import XCTest - -class HearthstoneUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } - } -} diff --git a/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift b/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift deleted file mode 100644 index 3f8f70c..0000000 --- a/Hearthstone/HearthstoneUITests/HearthstoneUITestsLaunchTests.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// HearthstoneUITestsLaunchTests.swift -// HearthstoneUITests -// -// Created by Stavros Tsikinas on 27/7/22. -// - -import XCTest - -class HearthstoneUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} diff --git a/Hearthstone/HearthstoneUITests/NavigationTests/Helpers/NavigationExtensions.swift b/Hearthstone/HearthstoneUITests/NavigationTests/Helpers/NavigationExtensions.swift new file mode 100644 index 0000000..daab69c --- /dev/null +++ b/Hearthstone/HearthstoneUITests/NavigationTests/Helpers/NavigationExtensions.swift @@ -0,0 +1,18 @@ +// +// NavigationExtensions.swift +// HearthstoneUITests +// +// Created by Stavros Tsikinas on 29/8/22. +// + +import Foundation +import UIKit + + +extension UICollectionViewController { + + func selectCard(at indexPath: IndexPath) { + collectionView(collectionView, didSelectItemAt: indexPath) + } + +} diff --git a/Hearthstone/HearthstoneUITests/NavigationTests/TestNavigationToCard.swift b/Hearthstone/HearthstoneUITests/NavigationTests/TestNavigationToCard.swift new file mode 100644 index 0000000..1dd7771 --- /dev/null +++ b/Hearthstone/HearthstoneUITests/NavigationTests/TestNavigationToCard.swift @@ -0,0 +1,86 @@ +// +// TestNavigationToCard.swift +// HearthstoneUITests +// +// Created by Stavros Tsikinas on 29/8/22. +// + +import XCTest + +class TestNavigationToCard: XCTestCase { + + let app = XCUIApplication() + + override func setUpWithError() throws { + try super.setUpWithError() + app.launch() + continueAfterFailure = false + } + + override func tearDownWithError() throws { + try super.tearDownWithError() + } + + func testMoveToFirstCardView() { + + + /// Tap on first cell (titled: AFK) + let indexPath = IndexPath(row: 0, section: 0) + + //XCTAssertEqual(app.collectionViews.count, 1) + + XCTAssertTrue(app.staticTexts["Cards"].exists) + let collectionView = app.collectionViews.element.firstMatch + if collectionView.cells.count > 0 { + collectionView.cells.element(boundBy: indexPath.row).tap() + let title = NSPredicate(format: "label BEGINSWITH 'AFK'") + app.staticTexts.element(matching: title) + app.navigationBars.buttons["Cards"].tap() + } + } + + func testAddFavoriteButton() { + + let indexPath = IndexPath(row: 2, section: 0) + + XCTAssertTrue(app.staticTexts["Cards"].exists) + let collectionView = app.collectionViews.element.firstMatch + if collectionView.cells.count > 0 { + // Move to detail view + collectionView.cells.element(boundBy: indexPath.row).tap() + // Tap add to Favorites + app.navigationBars.buttons["addToFavorites"].tap() + + // Validate save successful + let alert = app.alerts.firstMatch + let alertExpectation = alert.waitForExistence(timeout: 10) + XCTAssertTrue(alertExpectation, "Added to Favorites alert should've been present") + let alertDescription = alert.staticTexts["Card added to Favorites"] + XCTAssertTrue(alertDescription.exists, "Added to Favorites should've been successful") + alert.buttons["OK"].tap() + } + } + + func testDeleteFavoriteButton() { + + let indexPath = IndexPath(row: 2, section: 0) + + XCTAssertTrue(app.staticTexts["Cards"].exists) + let collectionView = app.collectionViews.element.firstMatch + if collectionView.cells.count > 0 { + // Move to detail view + collectionView.cells.element(boundBy: indexPath.row).tap() + // Tap add to Favorites + app.navigationBars.buttons["addToFavorites"].tap() + + // Validate delete successful + let alert = app.alerts.firstMatch + let alertExpectation = alert.waitForExistence(timeout: 10) + XCTAssertTrue(alertExpectation, "Deleted from Favorites alert should've been present") + let alertDescription = alert.staticTexts["Card deleted from Favorites"] + XCTAssertTrue(alertDescription.exists, "Deleted from Favorites should've been successful") + alert.buttons["OK"].tap() + } + } + +} From ed860b71adae4cbb4c08da015267e5bc4cf3a9c2 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 29 Aug 2022 14:20:36 +0300 Subject: [PATCH 49/53] write UI test for navigation --- .../Hearthstone.xcodeproj/project.pbxproj | 12 ++++++ .../NavigationTests/TestTabNavigation.swift | 38 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 1ac0418..c696ba7 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -40,6 +40,7 @@ 30D765A528B965A200D11818 /* CardViewModelHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D765A428B965A200D11818 /* CardViewModelHelper.swift */; }; 30ECBEB628BCA6F300A2805C /* TestNavigationToCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */; }; 30ECBEB928BCAA2900A2805C /* NavigationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEB828BCAA2900A2805C /* NavigationExtensions.swift */; }; + 30ECBEBB28BCD4AC00A2805C /* TestTabNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEBA28BCD4AC00A2805C /* TestTabNavigation.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -97,6 +98,7 @@ 30D765A428B965A200D11818 /* CardViewModelHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardViewModelHelper.swift; sourceTree = ""; }; 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestNavigationToCard.swift; sourceTree = ""; }; 30ECBEB828BCAA2900A2805C /* NavigationExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationExtensions.swift; sourceTree = ""; }; + 30ECBEBA28BCD4AC00A2805C /* TestTabNavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestTabNavigation.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -148,6 +150,7 @@ 30070E49289180A70062F0E6 /* HearthstoneUITests */ = { isa = PBXGroup; children = ( + 30ECBEBC28BCD87000A2805C /* ViewsTests */, 30ECBEB428BCA6C900A2805C /* NavigationTests */, ); path = HearthstoneUITests; @@ -331,6 +334,7 @@ children = ( 30ECBEB728BCAA1800A2805C /* Helpers */, 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */, + 30ECBEBA28BCD4AC00A2805C /* TestTabNavigation.swift */, ); path = NavigationTests; sourceTree = ""; @@ -343,6 +347,13 @@ path = Helpers; sourceTree = ""; }; + 30ECBEBC28BCD87000A2805C /* ViewsTests */ = { + isa = PBXGroup; + children = ( + ); + path = ViewsTests; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -477,6 +488,7 @@ buildActionMask = 2147483647; files = ( 30ECBEB628BCA6F300A2805C /* TestNavigationToCard.swift in Sources */, + 30ECBEBB28BCD4AC00A2805C /* TestTabNavigation.swift in Sources */, 30ECBEB928BCAA2900A2805C /* NavigationExtensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift b/Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift new file mode 100644 index 0000000..56c082a --- /dev/null +++ b/Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift @@ -0,0 +1,38 @@ +// +// TestTabNavigation.swift +// HearthstoneUITests +// +// Created by Epsilon User on 29/8/22. +// + +import XCTest + +class TestTabNavigation: XCTestCase { + let app = XCUIApplication() + + override func setUpWithError() throws { + try super.setUpWithError() + + app.launch() + continueAfterFailure = false + } + + override func tearDownWithError() throws { + try super.tearDownWithError() + } + + func testInitialTabSelected() { + let tabBar = app.tabBars.firstMatch + if tabBar.exists { + XCTAssertTrue(app.staticTexts["Cards"].exists, "Cards tab should've been selected") + } + } + + func testChangeTabSelected() { + let tabBar = app.tabBars.firstMatch + if tabBar.exists { + tabBar.buttons["Favorites"].tap() + XCTAssertTrue(app.staticTexts["Favorites"].exists, "Favorites tab should've been selected") + } + } +} From 66289cfa5d5ae1dd6a7c71a6e0e9445850ab1a75 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 29 Aug 2022 14:58:18 +0300 Subject: [PATCH 50/53] write ui test for watermark view --- .../Hearthstone.xcodeproj/project.pbxproj | 4 +++ .../Views/Misc/WatermarkView.swift | 2 +- .../NavigationTests/TestTabNavigation.swift | 2 +- .../ViewsTests/TestWatermark.swift | 35 +++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 Hearthstone/HearthstoneUITests/ViewsTests/TestWatermark.swift diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index c696ba7..26fa854 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -41,6 +41,7 @@ 30ECBEB628BCA6F300A2805C /* TestNavigationToCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */; }; 30ECBEB928BCAA2900A2805C /* NavigationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEB828BCAA2900A2805C /* NavigationExtensions.swift */; }; 30ECBEBB28BCD4AC00A2805C /* TestTabNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEBA28BCD4AC00A2805C /* TestTabNavigation.swift */; }; + 30ECBEBE28BCD89200A2805C /* TestWatermark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECBEBD28BCD89200A2805C /* TestWatermark.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -99,6 +100,7 @@ 30ECBEB528BCA6F300A2805C /* TestNavigationToCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestNavigationToCard.swift; sourceTree = ""; }; 30ECBEB828BCAA2900A2805C /* NavigationExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationExtensions.swift; sourceTree = ""; }; 30ECBEBA28BCD4AC00A2805C /* TestTabNavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestTabNavigation.swift; sourceTree = ""; }; + 30ECBEBD28BCD89200A2805C /* TestWatermark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestWatermark.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -350,6 +352,7 @@ 30ECBEBC28BCD87000A2805C /* ViewsTests */ = { isa = PBXGroup; children = ( + 30ECBEBD28BCD89200A2805C /* TestWatermark.swift */, ); path = ViewsTests; sourceTree = ""; @@ -487,6 +490,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 30ECBEBE28BCD89200A2805C /* TestWatermark.swift in Sources */, 30ECBEB628BCA6F300A2805C /* TestNavigationToCard.swift in Sources */, 30ECBEBB28BCD4AC00A2805C /* TestTabNavigation.swift in Sources */, 30ECBEB928BCAA2900A2805C /* NavigationExtensions.swift in Sources */, diff --git a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift index 3e18443..20daa91 100644 --- a/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift +++ b/Hearthstone/Hearthstone/Views/Misc/WatermarkView.swift @@ -26,7 +26,7 @@ class WatermarkView: UIView { lazy var imageview: UIImageView = { let imageView = UIImageView() imageView.contentMode = .center - + imageView.accessibilityIdentifier = "oops" return imageView }() diff --git a/Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift b/Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift index 56c082a..9fde331 100644 --- a/Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift +++ b/Hearthstone/HearthstoneUITests/NavigationTests/TestTabNavigation.swift @@ -2,7 +2,7 @@ // TestTabNavigation.swift // HearthstoneUITests // -// Created by Epsilon User on 29/8/22. +// Created by Stavros Tsikinas on 29/8/22. // import XCTest diff --git a/Hearthstone/HearthstoneUITests/ViewsTests/TestWatermark.swift b/Hearthstone/HearthstoneUITests/ViewsTests/TestWatermark.swift new file mode 100644 index 0000000..ad5e583 --- /dev/null +++ b/Hearthstone/HearthstoneUITests/ViewsTests/TestWatermark.swift @@ -0,0 +1,35 @@ +// +// TestWatermark.swift +// HearthstoneUITests +// +// Created by Stavros Tsikinas on 29/8/22. +// + +import XCTest + +class TestWatermark: XCTestCase { + + let app = XCUIApplication() + + override func setUpWithError() throws { + try super.setUpWithError() + continueAfterFailure = false + app.launch() + } + + override func tearDownWithError() throws { + try super.tearDownWithError() + } + + func testWatermarkImageOnEmptyView() { + let tabBar = app.tabBars.firstMatch + if tabBar.exists { + tabBar.buttons["Favorites"].tap() + XCTAssertTrue(app.staticTexts["Favorites"].exists, "Favorites tab should've been selected") + let collectionView = app.collectionViews.element.firstMatch + if collectionView.cells.count == 0 { + XCTAssertTrue(collectionView.images["oops"].waitForExistence(timeout: 3.0)) + } + } + } +} From 7b15bcfd637a941c588225fb85277d4d00a6595c Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 29 Aug 2022 15:10:20 +0300 Subject: [PATCH 51/53] fix watermark on hsiaofavs and update ui on favourite button tap --- .../CardsCollectionViewController.swift | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift index 05b81b6..85a0318 100644 --- a/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift +++ b/Hearthstone/Hearthstone/Views/ViewControllers/CardsCollectionViewController.swift @@ -73,6 +73,11 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie self?.dataService?.convert(from: "cards") { items in self?.dataService?.handleParsed(items, from: self) { itemsVM in self?.filteredCards = itemsVM + if let isFeatured = self?.isFeatured { + if isFeatured { + self?.filteredCards = self?.dataService?.featuresFilter(for: self?.filteredCards ?? []) ?? [] + } + } DispatchQueue.main.async { self?.collectionView.hideSpinner() if self?.filteredCards.count == 0 { @@ -97,30 +102,18 @@ class CardsCollectionViewController: UICollectionViewController, UICollectionVie func updateFavorite(for card: CardViewModel) { if card.isFavorite { - dataService?.favoritesService?.save(card.cardID) { [weak self] _ in - DispatchQueue.main.async { - self?.collectionView.reloadData() - } - } + dataService?.favoritesService?.save(card.cardID) { _ in } } else { - dataService?.favoritesService?.delete(cardID: card.cardID) { [weak self] _ in - DispatchQueue.main.async { - self?.collectionView.reloadData() - } - } + dataService?.favoritesService?.delete(cardID: card.cardID) { _ in } } + refreshData() } // MARK: - Obj-C Functions @objc func filterFeatured() { isFeatured = !isFeatured hsiaoFavButton.image = UIImage(systemName: isFeatured ? "star.slash.fill" : "star.fill") - if isFeatured { - filteredCards = dataService?.featuresFilter(for: filteredCards) ?? [] - collectionView.reloadData() - } else { - refreshData() - } + refreshData() } } From bb8ee1a7958665a0d32cb310ca398b5811835fec Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 29 Aug 2022 15:17:50 +0300 Subject: [PATCH 52/53] add custom README --- Hearthstone/Hearthstone.xcodeproj/project.pbxproj | 2 ++ Hearthstone/README-TSIKINAS.md | 1 + 2 files changed, 3 insertions(+) create mode 100644 Hearthstone/README-TSIKINAS.md diff --git a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj index 26fa854..a804975 100644 --- a/Hearthstone/Hearthstone.xcodeproj/project.pbxproj +++ b/Hearthstone/Hearthstone.xcodeproj/project.pbxproj @@ -65,6 +65,7 @@ 3006060728939EFC00EF0BE4 /* CardsCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsCollectionViewController.swift; sourceTree = ""; }; 30070E4228916E450062F0E6 /* TestCardsFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCardsFile.swift; sourceTree = ""; }; 30070E48289180A70062F0E6 /* HearthstoneUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HearthstoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 30243DD128BCE5C300D1EC57 /* README-TSIKINAS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = "README-TSIKINAS.md"; sourceTree = ""; }; 302FF91628B5FE7A00C9D114 /* TestFavoritesCRUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestFavoritesCRUD.swift; sourceTree = ""; }; 302FF91928B6023C00C9D114 /* TestCoreDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCoreDataService.swift; sourceTree = ""; }; 303E314128B4B5EA00A44FC8 /* TestDetailCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestDetailCardViewModel.swift; sourceTree = ""; }; @@ -188,6 +189,7 @@ 305C6FE1288EED28001D4559 = { isa = PBXGroup; children = ( + 30243DD128BCE5C300D1EC57 /* README-TSIKINAS.md */, 305C6FEC288EED28001D4559 /* Hearthstone */, 305C7006288EED2C001D4559 /* HearthstoneTests */, 30070E49289180A70062F0E6 /* HearthstoneUITests */, diff --git a/Hearthstone/README-TSIKINAS.md b/Hearthstone/README-TSIKINAS.md new file mode 100644 index 0000000..9afd52a --- /dev/null +++ b/Hearthstone/README-TSIKINAS.md @@ -0,0 +1 @@ +# Hearthstone-Tsikinas From 62a135f7b6d6c07d4699af6e1f8c7441d579bc54 Mon Sep 17 00:00:00 2001 From: Stavros Tsikinas Date: Mon, 29 Aug 2022 15:42:49 +0300 Subject: [PATCH 53/53] add personal readme file --- Hearthstone/README-TSIKINAS.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Hearthstone/README-TSIKINAS.md b/Hearthstone/README-TSIKINAS.md index 9afd52a..d3c51a1 100644 --- a/Hearthstone/README-TSIKINAS.md +++ b/Hearthstone/README-TSIKINAS.md @@ -1 +1,29 @@ -# Hearthstone-Tsikinas +# Stavros Tsikinas (iOS Developer) +Hi! The source code provided is an attempt I did to build an app based on **Hearthstone Cards**. The following *Markdown* file is meant to explain the app. + +## App UI/UX +The application is based on the KLM Houses app to an extent. There is a collection view with cells showing: + + - Card Image + - Card Title + - Favorite Button + +There are 2 collection screens on the app: + 1. All Cards + 2. Favourite Cards + +In both collections, the user is able to tap the **magic** Hsiao Featured button, that filters the cards and shows only the Hsiao's favourite ones. + +The **Detail View** presents the selected card with the description and also the *type*. The user is able to add/remove the card to favourites, via a UIBarButtonItem. + +## Data +The data (cards) are retrieved from the *"cards.json"* file that was provided in the master branch. An assumption that all card categories are known, therefore the *"CardsResponse"* struct is constructed the way it is. + +## Persist Data +The cards data is persisted via the file explained in the previous section. In order to persist favourite cards, **CoreData** is used. The choice was based on the following: + - is a native framework + - is easier expandable to large DBs + - could be expanded to store large amount of data and/or images, compared to **UserDefaults** (scalability) + +## Version Control +Trunk-based development was followed, since the project consisted of 1 developer and the app was starting up.

    Km=O9nyf* znLcXmtQBq6rH@>z7a)+i4|Lu#ImyX%)amd9=85?t2@p<>4v@52=0aUQQu7qIG|&8o z4I|Iq^}@&y;aIOfn})D9x5yvj1+hMCY{Q7N{Gql(O@Rci(pj-Q0`oM`W^H|xG|J_b zOz0d0Ll{FEFN4c0r;Zt_>WIoi*6)d^pBC3{UZJoo!BB>gGt#HM|H)TgD*goH&i@OW zl6N0$!4vF7TdP`^5j9Vp@BC-~?6bwsy>f~39dIKIYx}?d@ta``_xr#9pT=C1dH&w_ z{+81NA4ZY%DG)mlD9;&;PzKY>Yw{BF7>oQUL z)_GvpIDQM+lddZrJLU{wHgNxjgIJ8Mi;OwZK93X!~i+`cF^n*r{+jptVn!R?M|hz1;>e$$xj z2+m*G>j1>yz*CCY!P5Qk$k=JSk~H2!T1GIIgRjQ`&A|=w3}P*jmC!r59oUH|Yk-vq zaFQTA=Uk)}sxH!y#``>g+gH~}oh+sykq?QS*%lIdNR$MOZ$^mQ_=)v&6XIP+o+5MW z0Mw`P&;8jt+t89HuRp=B_Ba3H?a1dF-}tx1zy8<%io75^s7KR8#b6KwS%29N!Od27F00WpW13^joi5(-ue(23dO^s^b`AEbWn3#q1J7n>9ix zTk)&EJW*V_a;^A_@4i#Kdv6URDYlQ{_Vnh}#p1>_9nTT7neq&$(we3W_wx43Bp*$>@T z?tY1}1LIjXf9HdvGmneV2$cO+gNSLL&;yL0Vb-z@Z+gj6-?2(f_){Zsij6Pr^JhFWMhCFo8>!9GW+ce` zlp)ZNvgv+#+lDG@#5ICpYX&t$O$;r^_&$PzpDIK>Trd9S`|pRE-kmH{5ac-+(s{L1*XP(OhfBYZ9?XX+fbciEUtv2dY&o2~bjCI&Xv<_)34{F7D#fY`b-^}8_tOq{V)M1tQgj!Rgh z9;mg8Ilg^q;W9qAKMS#A9TY6pDlo9WmO{&+Up3eUk`K|G?|C{-gUrn0DWmQAxC_VybX5mnc2?OP?DURAB}L~2*iYapj%2BdGI-OQy=_$%(CE_2Fi5Mmkoh3hqOnqHpzq;P~zUdHL-2%If%m zT9-kXCmmaa!~oay+&Glnry5AdI&Oo@pr^nCwxJH9S|32mQ3X?VswBG!c1y$#2{ZxB zXZ!e+@mB4h*t^f;_RS8AU6iu*L@5`z$}&rjBP z1`ah(#;)3feo&Pj#&Uen0a25AD30?KO2K9ettEZ!HHGbEwj$sK{ppU*3tGXCvsxk( z2bh1Z?MfJefHJ76l0%dsCV&%#Z69T!b|7+l_+np#;9}bq13i~luS*1tNzma~WAq!Y zO6F1wKV=EWGGvg5OXRAM5E^Najzlmcxb$2~^3J*vB;3_-zE)ay_NY$Q0mUSUPFI~* zmu8Be=im$*K;xi|b-Z-pRZSy7-K<{2f482&Cb3c#Kwp*mi!kkCae`gM zQNKm@AcSWUsjGMU8|?&wQ}x&bjw!~Ss`)C|hN?QdZCQSG!1e}>50au@a+Jc0BKueZ zn=ifW>z)+j@!y8)|9yFe1chUzDuZdvZ1mJgg*@!1vo^$_)GXw0QAgU_F<%AyV2WKO zS8iS_#_=1FLEiQ_K6H@uL-a%3`^E_V+IY5>H&BYeyPkA%IB)xXSPS_VplJ|g@C z{AAkl6HwJ3T@~db^WPp`o%WIVbP^+i7#?8V3#{q7k^|qd?|ZKrj%ew6Jb((ZcwAy5 z39RHD%y6H~Dc!&Zf*`J2JZd5wK#PRsleo&LATT44O)-h=V4H0*@Cc&vC0_%_TA)bx9zPcCVs~TKH zcb*M^Qdw4k=I|m~*B3j|PWM9^komd1TH5nUY-^s|qUXNsOSF6pm3DtBj1#wg^+WVy zWn8;GO$JF#(}xA!67TG76w9lR7%Sa^x_&*%&V?A)Wpd6-4=ky}_&N5k+_-|O9R`>7 z8(@pzrA2(a_Z>b|Er(3*%nXiMLS;ds^wAM(>ak1$fj>P;C3h_A@-`Szh>!jQGRQ1D zw)HM`3gcHLWX}C#4Db5;agg^z{n{53^n^RK262mK$&(U)3MqVy{qpaN2OvU z$&!LL6RN9SWA0Bs66pI;xX4*%;%Zq{zJxSSc%AYb!gy)9Efm#5H&)gp!LYC8Zptlo;@E+^XBZ5S0r_qv%D8zeRHzn*v_2LqbO}vX+iR3G zK$&6-5L~*dEcwTFA2JZFn{+y#~O9HRYzkU&-@lVlqOD><6a5ft#t>j z1L_WPrQUwq-r3^)UU9$~11o)9a^sHT%AM`gJl1dI3Vb74v@iAa~R6rYx<~dT2 z{`)mltAd31;SMONkHY#WqUwORa8xd>v8+=vIr>&3Kjw`0;iG`D?GlU3 zX9oK%N%t)MxVwRQ>(Y|a^8{`5nHLrV=eT?%8|9eL-e7<&kAhk+&k_*A(7&XCF8yeW z(%9RHIJwJ=&;R&~_Gco*vjJi}GA_YGqcAClT&p1d(nH(~%*8mujobW`<})K>Xrmy% zP!AqT3Z;D#jm%oPZ8cb|a2U%r+Red%8a7Kh`btMjk5YHfw%9M1xWoZT;OGvZA=A2` zP&U^Et=*5hT8@d{@d-gs>ZuV3PFDLoDO>kYW^lF3Rirc%m{g?{6Uh^7Or!+2t03z; ziMj@H!bl8A)!?ZxPO30+!}v|a)Pv-leL$$I`6lC0M?&>voxPhPMByA^kIm%26{puIwoQq9>T(3 z5O}o#AeVt5);cQ$-SENGz;&Cas=>xC>!{>?j8xLZAH3jEk!_wmkmU%8{5bZpazYmp zxlCAq+s#0rs=^;~mby$CFKFk~z9~@pO~?=HaO@qb1n+<-N-Y^w|J~id*EXtknx_ji zNAw*CR)V#*Z`~77>jvVEaHek`o2SfL6>RBBb{3a}C6{S`vtg6*P&aduIWH%Jc0j3k z_pmoF%U?ZMs1x{yxUp1g&F=U=Hz^7{Gt#f_J&*=Qn?$>k(0mPT4={I%Uozvm?S;ycHen%9jz`D;aA}$Em~6AV z!Q)nSgd{PRSf9YCXi%388Y6MXjf^bg-uW<&^BEZtZD(S9kVg+NH)FXf@CXDHoX}D8 z!%(`6<2Jg3rgMr@95MWJe!H{AHWq@3Am3nK2qQSo186VP*A+4=8sHJ|1Gvl)EXwk@ z)G?%ag^whxWfb+JEx{j$IT(ciy@2#psU;y>v85lHAn-+w$u@6!Lf$4{Pa;m$w zDe)cw@%4j7gNH4UZ3UD<_HkQz;+iy)_T2}MAYvdNwy3rCllMLI)XMh}t~Uoje#312 z3CM-1r03c4tGkqotL)Vilj{B3sQ%jAI`>m9!en zabnm6ZcF5Cw41Lp!zh||EwyUJZHyE?#r4)o z7Owg_?yFUP>?1EE0Qs!z{9OjE2dLw|%vL{?;T(51`0i0ROuXtgSp=BHJ77Lm*rb#K zr$)Ad=^d-H1rlPC9h$hsOB)cM=O$%xA@~qjXn#+u?5sR2Hj!%Gf|{kt%-}VS*dB-l z`Hkl;bJz|lZV3A*()s0UH-jm*3>hS}=~!d6P37DELB#8Q3??5kzW29RV!Pr#hYV#% zOA|enj!*E$k#-%zH#WNv9_;)u%5p=8Vb6&?;d;yxVjBXkm3uq<888oEG6s>1mH4xE zQTq|+nGlKpj=-Is9ESKDoTFZ1p zeaB!+h_joSgVT31>Q(4Gc5c$wm`IHN!I1L1A4ixlTHl(ML|PAVO5D95+LQL;)B=KT z-k~yQQig;8Q=t)WwQYm#Gl#S+X{6~Eh; z^wInz*u^nM_CYN{uR4opu!(kjTRDN_5Yc83(K?ZXrASqePa5X! zf=onAuRqjzhg-KG>igZeIgKCWDhkOxV}InoKrK9%IEPS9yBxB-P56h0E@Zqj41uYR z6Jz>U@^hUCl@#Nhqo99+_lN03{t!1dW%^Ur>ZL-S2iH@lGClhush}BJmA%e>mREg@ zsF(51yV#zo;@z*lV)*vJ?jdjWB$I)B8YdcD@gga5iU}z;Fg)0b`C!^h6EJ~XHJa34 zcy52^%M_j-2TLQeNgbTzkC6&0UUoLzdG}$l@^FK1G6`Sqh4zc;M4$VR047;)&3|co z$`s@x9oSXylgy-t6G(LWL6uyrYgY!l>O0q~Oi?4Eq&`oRP6<5Ji(HNC`tl(hc({5c zj%wYst;WF*aTfW22c4`ZC4uzJYB_QDFYAF!#hL4EHB^j)a{jCxM%^m2WEklrRQl9C z&N3#A*c%H%@85bgH0=JB!rwy`tP^LcbYOAp07fy# zPy;nsT$>>y28sklhfmoswS|UA-vzGM?z84ENYwWj&snSDJ6*1>a?Gm^fgS^gbYyo{ zY;EAhaC4h=;Jw)K;2e*6PFuLHKhEF8^c)AmV6+E858}=ez-b%rdPvsVeP|!jz&^kx zKN{l7;&@dXCxJgWm!Px1AMtq~g5HjFlJu;0#%6Y|$2||?7W-LTB|%qeml*eh^Fl31 zNbjT*nnB_)HAy6rNO*?^a4yG0icU18A#kV$bNKN%KqtsjWNi!y+!NqRI0dhWH)S3* zNG{m+d(2+`AnueY`kmH7^l~+bO*F*vPQgkV=%`091MLyI&Z^2RpEW%%T zunM!$Rcqg4ZF^(8{}3C>z(3Qr4c~l_RPx_{zc-vX;c>`4n7&BP4Hm@L`Uhg_4Wlqp zeUpfF+3qv|~?@GklMOc?`4U5)lf_XbLJ5!9Z zrYs?s33u+P;`bn#!Lw;x8FN%HyEfV|@50d;QaeP?bOM55PtJLD*0+Gn@n<^dIMamCNDelQs|PYKemn}B%a{0I~Gkcw}bZ=47wxm zf>rFtQXR&eQm)du!(HjS#TvS2_DZ}bP=|-%4n&tA0TSOZh~a5#@1)q;XDi8EZ)qLM z2SiX(uYv#}`^!?IH&0xo(-tx$oI(ddPu}6! zV#4NnCs+$dGiyj8F>_@EU@}Bl)rr<9k&)@WaX%66H{MTI-~F&4As0j}O4`yI9CHOo zjNMO5SBYo3z=Qqg`wU8|zRQqI9lQM|Y41KIq?Hk?d8cA@<3~DukG?zSRn9W5VWaW1 zKs_Rg%kHFO*%Tghn#_Jo-!A$kEj)53cZaFe9q1v|b z;sbuFS}l_4+A`!qmvM97`)Iht+}Z1v#)9`z)-s;S*gjr&4jC{V{&Tq4ywBVF8^z)T z;}|fN%k@^+y2J~9o_p@OkgoId)2{Zz4pMd^r75&|%P8+-c|J3@$lrW1F_SFg55VT5 zEDJckCRNAdT*uN5Af2mS^H1>lL4BtdP{Th@WD{=)xj(GG#9LhF(pRhD5*9?0hCJ}7 zQu2$rQ}(^%asWd@;RFNKuQEJq$bj?)eoNbcd~5YjH^{a3V_&xPqR?p;ZHk zeIM)8CX$hR(PIxh;UwS`DZoor)8flC=i>8)`*}vte}FDk%2w*ma8yd3dL?r0S9PHV zN@EaA!%FV`Uxi`zO*>cG2N;Z?o*x)W=0~E zC2}QoCxyh-J(?0{kzgIkTj^Z`+7Y&i4C61`b#f(gkB>ZI%ZjVasa%v0)>#*q6H`kN zED$$HHMX>wj#4}p=cf?(L!?c$6I*NpJ47YNf*X^*!D&~lf0tWDw9MV-Ecgcd^W6uU z*Z&7xcc&e+H8_B%3$f)4HM;QnL)?{e{XW+Wea)6%KlNHg6wYAVL?Vm}YrM_aQcQh)gpK?qYl6Yf!6{tS0S1kG0nqB8Fb6D>`Y;H0Kw~H$? z*t+0RO_hB%f^@u%p-oerUxib&7`gp@e~h30&2@}I_jh5+SA#M41h*Ls`m~Q3gNV<~ z;yKZARf6hnl;M~alv~pfG&mQSKjxhsQ-MLH1AQh;L1I9n2!ylWbZ0F%-X!RC*4mFT zHg%7AOSLAYo2S06!{1#6hte@S2vJkiEAomtC1V)L^!)hgBMqsZ*#Gb!x>V^Oep&wk zlrV-T10E@vb+D|`bKptH_fWIzS6JezBN*4+oJ<}GJi?&@dKVLJ&z<0Yak_Yac?-!H z!i@%wP-z~B+X?Sr4D`fvsLmOzqY&{Lgx#$g5!UX)7VF!) z7zPQ)95bn9`yQttWzhM_Na@Au@9#C3pb!m^*y|5UD_H_s-Y9d9#MKthzj6Cmi1ar9 z<_Rl4$!a~3o5qBhAQ{#grnG$md?=AnJb&1qN+J?DA8-c=vX zw#HZwB3*t6W`VYnsK;C~P?shL!{GX8byPrqduULKk|JfT!ec|Ezs_a;Ufla_-V*cd z>eS$ti5~RMU;*KwI36u?dS|>$IE<5CR|ZA-W(!Mrbl*hM&p=`nE>BwTG}qmq{o>+q z7<-wrD*ITYrwCy@24NFiV?MycWD|xNJwd#4-Fl9L#dW+?8=o!~=4TS&L`$br8Li$O z|IP=`RTyw-z-_2(CGCenT-f?2Q#CrkZWWny*F2s*`;u(DC7GTn|6H@+F znbPSgIH9&7cAFAB29=XhVm_u+jZas`Yz(Nu<3@3FX}oyh23uQL2)e(#*-a!Rg>(Q> zWv*f07w%>9OU7AsSeapM?I5AID}(W)s;K=7)jb~L&JJpLv21WIg7Py zk{~)0k9gi^WbXYY+r-v6q{8hWPLf@W)gIn^7%$SHfF;!}KtfwQ-zaJVB zPuWezVbvX4@m^-|$Sp=4fEZN*>C9#bNv;Yj>#hoQ+w2^(#vj?^ib9@GvPS_d&0lex+#!R)jkaOZ6g>e)!D%S zz*)q)yDBiia!?JXY)UI$#s^X}Z0AMyW@XRb@50KS6+14*2U+f7zDv-A+e;97me_=8 ztnJ5`*XBo7{CDYtHUDi0yleAkyTzU2{RlfXgA3f}F0n+1hdgkD_B4wa(s_+zQkmb5 zxhl95#c``I2bcF;#`B*C(a4MiK4Seo#wu|Khru(>FaEieluHMq56MG3A|rchUVRO* z-5M;u`pR^%%`vF2J!%)6Srv1^T{0f@;!(3kF|LP9wUN{hJY{cqoSg?X@aajhr+`4? z?}BLOwBNB^(0~w~*$6H`s#mBILLgk;n&V8YJkhkF7ph53BRty}jZ-M=tta>)AupZNeeka)!4arSp4lmAJcL?g{d>`wiqpI{YW`ge*m-Vx+1z!Fc(v8u$GBZZ3iJ z%Rtr%yc+fKRh5bBPscisvb@p(PA*F&NN;3729cs3gYIy6?33y(`W^rPKmbWZK~$}$ z+r-h*wXXp@idPIPyO6)IrVd-tpZ(eUHU+QgbKnhLR+>S98D4-gc#Bb0~_(vCxkZ2u`>0Ir}xT251P|IC%7U7Li!&rVlcFvam#L)7=*UFPI93ZR5c z*(H=SQL%vBJ7-MTzhT;mLgtJemL`>XrK+Yk0Q`yhq#JceV^%W8P- zlh*dy#WaWexOHu5wqC4kjuk6ANnnuK3ZaO(X+IxSxj&M0G?C?ng=Yl)N7A)Ou1M!{ ziNX{jwgg>u(cboE@%hi*EN(ydA|9+b!x^V2uYK|)Y-PR&Q*s! zWw57SQk(Y9YSW^*qs?`aQw232_Jv3}BjzCJ=kBRDZkM2Ii=e@w=}RQegOsn*P`6AO z@1=S^&ZL}|PBmY@i-46hLw!r$S_A9NOwh0@G%=Jbu$(V#XrF%ocxpe0UHcN37UsS+ zOPLtc(Sx6oSwKlJ(?ih5AlRK}QaHeA$r!5S3{Jyx#UQ;hZ+)5qdUDg&#GM~9ryXq+ z-x84~4}v?F-Hs|8vqmg4kkrYrirynBMzRsY@tXSflsc$_&U3}Swc8!fdF&WPYwc>? z%Va+A5{7tXh}E|f#ao&@_f4-KEXy zIHF1Z?Zp}6sOKlyf3F}SL3fN>SFf?V1g6L5VepFKg)=PBbdD98G3I1*5cN6R_)cQX zr|_xm#8D-l$_3%7=5G>B#O)VeD3)&CDjq&s<8-*!i*NqbdvpkABY?+hL7cm-rJ8=1 zWruleik3L7(c@!R@l#F4vi&m^5wfY?dSqYYdKXz4REzRh zLn@g)-GgRrx=frl5Yj!OdR=PGoL5w5=E-f>~Q!&3FOg1h7Q_n`U_;KdA1lM_QIgs8RFQo=O!bS3YvwCJ5fAQs`{V+X& zRN41;+Qm%_-p7%e$9Fl?oqArL8^gGbb#aypG{94f(89mN0iNf|nGhLTr&&&xo1UFO zdLM(ZPcmM+4s`4*kG+++CkIrvL~1KqB;Ji;&?h6LgdXh)($eWuXZgg+^53?|aBsO? zEN^T=kOzzF8;8a1m#!DT@C!d(+`4(Sc=hk!DZckU`{4)BA~;qn$iahOwjk6KY+qZ% z;m+bDry^p*lNl+~ufvGDw2ARg&MvP1)!OHazbfwayt^n5&j|WQ?a7#dU=UpyGLLqV zUJse{4(>6G)NU+J7GM6ETg5;9?JtIuyaPA<&U+7wKmYgNDb|;}Qm)x*gyS)(67WGx zN=4SDsoTvOf36#`6cjK_z5{UEijk*C7v?yClzwCcaIh0?f;BVus_SlXesL~{nbxN* zyrT&lJI&(JYLdziQIF{aV|}L;2+f(MkmL> z=X~@1hX%r1J?rgc1;s}`*}~dyB9D|$kl_^J2^lC^E9H)$UX&RM5G8*F|H+kk9IU{l&2?zZ@Q9U`cz4j7ph=KJ3i^lZ)VdQETXD`2%{x38$(LU zAhK1ukL_06pA)qV+WW;5%|z;gOqnohMM?<5r1qv%gWK=4Pu$B?NPo{?5caT{XF)p2U@@@m}Iw)jU{|V@{P?m5cu|h&{2J|h%pVlg;1w_ge;Ydo z(Vi|<=s(>P(XP+Km@=U!kYu~f%lyZ3ei=j8yP^FXK&@TFO>P=LWAoF+INReUP}c`g z&Qr$riB|ZPvKSwXiudz;l z?fRu+d~Ukf+{exH@;>ge(Hw|~7*~42ZBAnJ$GH@j2!D5Vw-{*fjl5*&)N<+!5R3v& z1YbIc0dZ7i_{6)5^z)3M{~*2T2rmD$XxF)cTBZt_KX?C918D+C zZ(Mh{V%L;(yjE-Ax~OGM(l=KTR|P@~L%)6$khycMQ%22m-G#%-_=y*+jpC3XZsW)A z(N^782$po=;jo9>24BRR#hyv~gbGEBp$aRuFp27}?}ZV-?@_8F*ap9;NA z6Ov{%j^o63jPg{{uZFSxqbc~&ATNjy0gO{Ssl_2X<*@2RQ(AXOr~wnKL)92h6@E&z z6NMWKYu~~g_~RRhdDu#H%Eq{J@&l&XSqh0ai4lsjmd{VR%+S1L77-++m_kd>WbSvH zr^V{_F$bM^BHICy?_hD`QmvR{P1>@%eJ*QzX4 z;`+@cj$Xc8eEHM2*)dxy-n;vt_+S3FKV_)^l>{d-HrRAuM)g zL)upQ1IhJ}>B~*+wc0LG$P4t-os}1;QXgkkv_73EElwraTUcl6_V9Oq`Gw+Fzw%SX z!Yqbxhppn>w;sjFI$$sM8ID&bnQViT?AdJBu;_HX9pb#EOb}uQcmbLN2I|8Vhb43sAhR?e4Zh5*Mj@3fLZ#@%wK)3dFt*$KF4v zW3cy08m8;OuL=S4oT0+0g#pIN_&O8V^yU2Dkibb$DO5%W5uX6pj^SV+t-&OPV+4g}&@;0jBy8MypR>~t$b*>2Zp=XZkE?AhvX-N=t zt4ti@dYYK;o}|h@L~2%&cJI2r79yKpWT(xdxMv)3Xe5{r&j!rGx+_L*uodp9J z6K3W_rN4ORJPB| zr!j;FHC!GvBg1HYq8&)Xevc!KBSp*O9CyxYWSH6#)Mu1VyOu%2zTx_{rI;fPRF`+& zc~lJGr~c~o%f;>IuNVLAfBief8{fZE{L!DjTI{gQxxCpZ=2#x^6i0Dk?spC0>hw)I zwz&69h@96&y*?x8AF*d+OB#qu>0=Kr^uPGp%f(Oq^ozw3DsBnrz4z{LNW-0CeRGci z3L=M-onvkcv!8YVJl=+~Z|#G?KuS(pPiEU@a$TB61txA~@|@y+QIAjJS-eC?37u3< z42ecaeN4J(j93IG#{r!5&e~zIvDJvJWUs+cY@$wo5*Vinrr-b0@4W6nIlnv4IlM?9 z6T$q^^uma!oX|eIT$?1&6e=OF9HTq=eUqgi31FV6UR_U?PMBVnW(nL)BPZMUw(Ztd_o6jBeBQq^ESOapn<> zj;@I%=t%>h^p|`;IDjQ~z7K|>Cxs_J*pJTZp1dK>PCZrbnLHoS5XT(yB1p7#W!z>S z3wc}VApNA;K9?Z~I_(wZv9AFQ=Y&|^h`Zh&%VSey2*$|nC(i-X;Ny8j-TmsuO`v)^ zF@fDtLp(kv@|{yp^U}6k*{RshY$a9w3zsKi*gb!p#d*qYJ(@_<&I|F7B{feqgI-UL zS;8Ys72-SN|L6$yJ8fnOT}pg++4Z~B7M=#FmTCl3_{lLfK$h|Z4}5ovQ+DBaO5+sj z{+FL;8{XLGi@W#Ni@$qwrFgiem&()!wvXUCzQ%BaxbIDlzMe8sBG$$Dc}CDbVn2q@ zVkByOrWL>Ob2p36eCCCi^zXj+0Dt5gcu?DbxHdv!o?xG3SnD#*j^KndWCYJg>d4K+N~v`4(Rz zxIcW$pS}8*lQJ&;9E!c}ypOm!e5j@g<29+&6L+2ooP^;#FnmG~5^Okm5Jx8H5=a{; zAu7|Akc&nt(DRVq_u-UE;B;$x)o3BbmpWFPSVl}$UMA>upOHwci{*`SdabCQJDHRX zq6)dKIudnbK9oiaZi%%)l=#9B4Uxs|R1zkEWWzy53j&rq;}GBaBEt-qX7CtDgGw75 zLqhZwac?Z3_9RW)pavI7>*9bzjgA@(32+LZe_1ig*`!xx`SW)_hJP2*b{+riWex#R zeC2)WH&$&a%bm3@1F2@fGDy&Ew;F4+Zf~lB-tBadO>(f4G#Q<6l`#{2Mg_Dd z7^Ob~sN@-C$;ezndZ=_(O7w=Y9Xw>H7i`N)MX6gA{Gz9{;nI1N-yD-&Ld`db`4D|5 z1Y_onnh-ifqLP?3q-(O4SyLk?K(69ye=F(RhDnmIlqW)@pEN%b)==12Z5{4S>DNp= zCt0R5oh~@O6G5-O&EH+oahwUAF;r2X)l#)+f$uN9&TAD*MglA05lcmx|ZY5}&!C!Jvb5*5&xDvBhq@j!$^JTiQ}b z``Z}JtryF07R4Mw)AOHxzWCa&eim!~;o`6V`rYE2fA(te{d=3m3AP!b#X=(z_A)X) z{8>-`O4FZ6v!~yAbCKW~LH~%o=|tV#*eR~OaJjg4V=)Nq*5+>U;QlHnB<+Ksieh0- zl_H2U2m%AshjR9K(Z{Nl2af6AadC?ie&iOo%4JuQs3QQ~VKrBq6IPJ~&=YUB*2}BGc za8-6%(?(b_tLB&EnwMc?vPT^9C!olBP}A%Ts_K*kEI26|-nc#Gu#OdQEkvL8wtz)u&OnTjehp#Y#=G$scJ1ana+EMlLTy>eYmcH zW}pfXI{K3i?GSXfE=kZGQ??<^%ec%j(lv~SNb`x{H+c=)jlZ9J5l>`&fgM9HUGKU& z-Q=8kEu-IgxR=!FXdoa1(YBWV9yT3Wn=yd_;Dp|k5Q(uM35maxd>@9A*;ASuGI7AZ znr0of3Xb0cRK%G*X4~>&c6Ngw;}p}5P~6rmb?zq&m%5b z0J?t;0v_58zCpP{a-^~`9-_E3KH!pp;MlSsUHoxZ*-747M&^!>Osoy7GaoJ0qwo2y za^K}R^9*Jt$2IU%Ac!30u`fRiSWe@tY$$!RocLg;xV*@GpxmE-Zk}HZ)cD=lDv2`* zD{YT~=j@*h<`;Fgamzn1GD&{ZZe(^wMmqJa@m#ZSvxe{Kb6e|M81n8H_uqZLxPJTj z;_~I0;-CD+&lJTszgN6=cg;x>{iEZUI{8nMzbV ztApP`&ID%c`L>PO=6Bv&F5bDS9`JF`6HLtwCJBO1@Yt`OE(8(~X?hR+E z`7hTa$M3(|CebcsQIx93)N&9|ggn8)Gg)PBTp5uuyFLF2gEaxel$=*G9BZ z@)qpZt-Wr4>|u!5Lfp;LqG7zxs`MN4lcWQp8J;XY_xxqPiIBB|#xA4oS==J*RJ$P@ z)(j579N1s{NYKw<5PcTWJ1%+{I5R6DwoTcwfN0l$84zqhw)rVtMQwF~ynY>GivaQ3=X9-pAH6!fsWG=2 zjpRrq7|3Ee((oq?NC`8JU-QtWFcu};P0k8GgxRu>15Rsb(psS<$;?#{P})|eK~NIT z%LMU)pBPU;m(w_hg2bm$xazdq#Yy6PO2;V2(ZhqB?LgmU2%8A<8De*V<3k_i(iq4O z9gzsR>iDz;EX9i6B&%S6ofBrlJhDD6txS*Fi)k)9&ol{?;M%dNgeL7f$4&QLMB>Nv zBai&z30M2kLr|8ta0U%``{u*@#iuUg`~_TgjWu}j!!X|3bO<9_Q_GddsSbIJ@1O8C zDtGH|x%8?zHIe*1m_`Qsa16t{VCbpH0lRb7RyKYxFy~Z2h-?d8ZRV&RlTNo4%95tBAe|P8#TQ0>4FI<0;`PK{K&= zXONg=Jm}3yf^L{xMvr=IL%6_&tmorHdEA2#%5)#Qn92E&7#Y@=N!#UveqwGcYvN%K zTBUywSUmqkg4JrrJ6?;>{5Pr^kG$fUce>#ffmjC5k)E97Ea`G>8!?LXSerFj5TyNh zrZ`SMo17S@ge`*IV+&1VKe7BuS`vyX=-|x0cy58y=|EDSzCKS|>jf^Al&B8;Ij^}wG5={gvUD-9Gt zt*BG!=LY5q2O%?c&J5=};ij;{mdV`5C&C-=Z^!%lNQk3oZ#B*wb zRwfxkCHXqccSyuERIQHV6&N-_NxObnLxa+cElrltZDkVDQBETi)Lb;%Nt+TxUuKJd zxmJ$pY)LKQkXcD2lMoDH(^E?jaZQldG7Y7&DDrX_iZ8N}p$xQRPv7g>Ye*=K7-R9A z&Zb0Ng2{s?kxlbA!Fk~dx_-~)ZGuz$^MDg~(5Uv7mk_)d&hUcQd>=2)`H`@nvQ6#P z_tO~;Z!I4bpS_Ne8f)J#T&-bI-=;jHXp*`rp};$K0h!5&xHJ=99{HfkJ?H71)nSgj z)eu?_ZBztW0(`nxtg=IgMv5)EYQYY{qt?aoU|gAqx=hw^9&Zty^mA*Z=Zp6H!I<-+ z)%J(1PYgDGl&C%4^WIv!*Z~3QI#D7iw>-YfiAn297(=L!kk+S0G4jCRgMm2;_Nq@X zfroMI01|JqM(Tv$VSPQTavhXTy4~hk@$GlEF&ychJSGCv<)+sRu?CBjSAFL>uZ-Y6)M*U!=0TV>byFoMZHh?tkd)%E1>Uc4yzA;d{*ehg9;ZVwxi~Uwit<+N z?PLr@K2e4z%omZL>(c%O!;mwsOt6r|`-pkBgegL(JfxPY;xVfNrk7$`E45`pf)PwV=!PuZzCAknhbS zxG`Q(y)nSiS~ z)3H+q-@6Sgd$rR*vgUaU%=wU1378p94JQ+^Gd9L%F;2`*T}>A($0&|t<`GgCCs>YP zP9x~DWW%}Ugsm}eWA8Rm)WFrr?-<+@-t5RX_yxWlA%w`ZH`R)mLs>sacGR;cPeQ;i zfCDW!V>uW#Zh80W!(`WUTq2#%J~tPVydxRbin65nVWQeP9Kui5@T*|4zF?S^|~@Y267j94Wk;v z+LvLuhh_WrE}o7+P^RlpmK#5S)0CM1AAi2VWb5ZH3Dh0)WyupksuIZwq@x+Q^eNWo zXV}X!uCzpX{4=vNq!$Oi(2#3qVtTf46VGvL5b%ADa}`{sbY5;y)+XUEO>xQ`b#=Wr zDj1ujr%axnc%os5bf@^Ts=q ZK?UPBzA1#{MH?6G&Y$%%1TQPWUcINedo%JA~y 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፬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