From a834ba3142e7b489600c2c35c34acf068c24ecbf Mon Sep 17 00:00:00 2001 From: Damien Fraud Date: Wed, 24 Oct 2018 07:14:47 +0200 Subject: [PATCH 1/2] :gift: Add new Xcode templates. --- .DS_Store | Bin 0 -> 6148 bytes Xcode Templates/.DS_Store | Bin 0 -> 10244 bytes .../Business Logic.xctemplate/.DS_Store | Bin 0 -> 6148 bytes .../TemplateIcon.png | Bin 0 -> 4587 bytes .../TemplateIcon@2x.png | Bin 0 -> 7031 bytes .../TemplateInfo.plist | 39 ++++++++++++++++++ .../___FILEBASENAME___Interactor.swift | 29 +++++++++++++ .../___FILEBASENAME___InteractorInput.swift | 14 +++++++ .../___FILEBASENAME___InteractorOutput.swift | 14 +++++++ .../New Feature.xctemplate/.DS_Store | Bin 0 -> 6148 bytes .../New Feature.xctemplate/TemplateIcon.png | Bin 0 -> 4587 bytes .../TemplateIcon@2x.png | Bin 0 -> 7031 bytes .../New Feature.xctemplate/TemplateInfo.plist | 39 ++++++++++++++++++ .../___FILEBASENAME___.storyboard | 7 ++++ .../___FILEBASENAME___ViewController.swift | 38 +++++++++++++++++ .../User Interface.xctemplate/.DS_Store | Bin 0 -> 6148 bytes .../TemplateIcon.png | Bin 0 -> 4587 bytes .../TemplateIcon@2x.png | Bin 0 -> 7031 bytes .../TemplateInfo.plist | 39 ++++++++++++++++++ .../___FILEBASENAME___Presenter.swift | 39 ++++++++++++++++++ .../___FILEBASENAME___PresenterInput.swift | 15 +++++++ .../___FILEBASENAME___ViewInterface.swift | 14 +++++++ 22 files changed, 287 insertions(+) create mode 100644 .DS_Store create mode 100644 Xcode Templates/.DS_Store create mode 100644 Xcode Templates/Business Logic.xctemplate/.DS_Store create mode 100644 Xcode Templates/Business Logic.xctemplate/TemplateIcon.png create mode 100644 Xcode Templates/Business Logic.xctemplate/TemplateIcon@2x.png create mode 100644 Xcode Templates/Business Logic.xctemplate/TemplateInfo.plist create mode 100644 Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___Interactor.swift create mode 100644 Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorInput.swift create mode 100644 Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorOutput.swift create mode 100644 Xcode Templates/New Feature.xctemplate/.DS_Store create mode 100644 Xcode Templates/New Feature.xctemplate/TemplateIcon.png create mode 100644 Xcode Templates/New Feature.xctemplate/TemplateIcon@2x.png create mode 100644 Xcode Templates/New Feature.xctemplate/TemplateInfo.plist create mode 100644 Xcode Templates/New Feature.xctemplate/___FILEBASENAME___.storyboard create mode 100644 Xcode Templates/New Feature.xctemplate/___FILEBASENAME___ViewController.swift create mode 100644 Xcode Templates/User Interface.xctemplate/.DS_Store create mode 100644 Xcode Templates/User Interface.xctemplate/TemplateIcon.png create mode 100644 Xcode Templates/User Interface.xctemplate/TemplateIcon@2x.png create mode 100644 Xcode Templates/User Interface.xctemplate/TemplateInfo.plist create mode 100644 Xcode Templates/User Interface.xctemplate/___FILEBASENAME___Presenter.swift create mode 100644 Xcode Templates/User Interface.xctemplate/___FILEBASENAME___PresenterInput.swift create mode 100644 Xcode Templates/User Interface.xctemplate/___FILEBASENAME___ViewInterface.swift diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..048a39c454d9e54217fc8fb44ec9d5798f0fc61d GIT binary patch literal 6148 zcmeHKJ8r`;41H`f1nAI=9d(7=zzEzEq(i&4u!DAp;Q&c?-KfXuNxJt@WIsj>1YHWF zAOY!76e&{=up|PI)v;Xy3jlLAMNwr$)I2(M;m$Lnlr=U;xWfh=b|VW-(WJRw;~ouq zw9NcF|1F+ypk=>(Uap(I`?;et5nW%`?eWk6Z||=UW!q;X+FwTOUQV)_BEOMSFc1s` z1Hr)b7~q|)GQTp6J{SlFf`Kmv^n6Hcij`wFEJp{sQUVb58C`_B))E?%94p6c$Qg=Q zDA7X2OAN7a+LQZLj@i({AzpllfBCa`k@9t}pNc!AGK@YL2nL1>T-tD<_x~+_nb9JD z7!spkAQ<>(49Kir*DG$y@79y;>0O)H9@$jXFRMbKK6nIhpy$XfgM7=Aqlq=nJ255_n^&@|vMp>8k`LWrsqrV7L=I>yj|E^WOoB8{sgT^XgQ z7f$>D1Xun5e}V%ij-22p01_9DytdOZ)*_Jzp)uK${k(DfyiFcg&ukX}NV;C00x$qT z!^%A3-2(}zB-mmQ zNyqyJAC8y`uq{#2fk--#;FC$PLm}eRk!OhEKvEJ_s}xWQbSuF3?qiUKI_}!7U-s_| zD%ewk)9?seA9wausDTY8k7sY?l6B8_k=+kBv9F5vBV{T!yjsy_MP$D#)@;l3lgSUH zZ&&~BJ$p4RuEhu9_w%c)k@ro%?xjt4iC^VRf3+CI^NiUWu~}TOXrrJHUtx}KS`Kvu z*(y^Ua_^4ilvyLq>Q31cdGhjxrp2^aK|kDVPG6XrG^VF!T9Zce{Q2aharVr)Rx75B zPE1|OE?3tdH=negzQl*cLIN*>guLEpUtttMRI9WWNI{-;r1;d4A{O7bf8anuKbROy z3=IvB92y-RE9gT-v-Ggy@)x?oZ04rzI$f%`RykiYOO{hv^ywo%Z#||3eQ?XrTeSS( zXV?6C4aW@s>=5Z@T}mC1Z*FD9qyFNi`0hOqCnD?9YSvj{n12n0pR4&6bG!xWdWd&T z*EO9AO|Rd#%_6nuoHX-&RxRiW!7VW-=TgpFv@qt+Iez)8lyN+Dy%U_0fezy`z$L3r z<{h(2W3lm6F6h)?0xrTV!4 zEIm9XQkE{KiIAm--$cl=#dS6$nEKT&}6 zXY!dej_e$SY$frtb_44&R$lnHwnRa}MjXc@isN{^;K%Xedj~&iU){oi5Ow| f=RXGQsFTJ}+b6Y7-+t@#P!rf=g&vCES)2a=LY(it literal 0 HcmV?d00001 diff --git a/Xcode Templates/Business Logic.xctemplate/.DS_Store b/Xcode Templates/Business Logic.xctemplate/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..26b3990903167815cc3565443d23dbc82240ae5c GIT binary patch literal 6148 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 + + + + Kind + Xcode.IDEFoundation.TextSubstitutionFileTemplateKind + Description + Default business logic implementation + Summary + Creates minimum default files and implementation for business logic + SortOrder + 30 + AllowedTypes + + public.swift-source + + DefaultCompletionName + File + MainTemplateFile + ___FILEBASENAME___.swift + Options + + + Identifier + productName + Required + + Name + Filebase: + Description + The name base of the objects to create + Type + text + Default + FileBase + + + + diff --git a/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___Interactor.swift b/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___Interactor.swift new file mode 100644 index 0000000..41cfdd0 --- /dev/null +++ b/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___Interactor.swift @@ -0,0 +1,29 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation + +class ___FILEBASENAMEASIDENTIFIER___ +{ + // MARK: - Property + + var output: ___VARIABLE_productName:identifier___InteractorOutput? = nil + + // MARK: - Life cycle + + init() { + + } +} + +// MARK: - Presenter Input + +extension ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_productName:identifier___InteractorInput +{ + +} diff --git a/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorInput.swift b/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorInput.swift new file mode 100644 index 0000000..552929e --- /dev/null +++ b/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorInput.swift @@ -0,0 +1,14 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation + +protocol ___FILEBASENAMEASIDENTIFIER___ +{ + +} diff --git a/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorOutput.swift b/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorOutput.swift new file mode 100644 index 0000000..552929e --- /dev/null +++ b/Xcode Templates/Business Logic.xctemplate/___FILEBASENAME___InteractorOutput.swift @@ -0,0 +1,14 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation + +protocol ___FILEBASENAMEASIDENTIFIER___ +{ + +} diff --git a/Xcode Templates/New Feature.xctemplate/.DS_Store b/Xcode Templates/New Feature.xctemplate/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..26b3990903167815cc3565443d23dbc82240ae5c GIT binary patch literal 6148 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 + + + + Kind + Xcode.IDEFoundation.TextSubstitutionFileTemplateKind + Description + Default new feature implementation + Summary + Creates minimum default files and implementation for a new feature + SortOrder + 30 + AllowedTypes + + public.swift-source + + DefaultCompletionName + File + MainTemplateFile + ___FILEBASENAME___.swift + Options + + + Identifier + productName + Required + + Name + Filebase: + Description + The name base of the objects to create + Type + text + Default + FileBase + + + + diff --git a/Xcode Templates/New Feature.xctemplate/___FILEBASENAME___.storyboard b/Xcode Templates/New Feature.xctemplate/___FILEBASENAME___.storyboard new file mode 100644 index 0000000..fc1aacb --- /dev/null +++ b/Xcode Templates/New Feature.xctemplate/___FILEBASENAME___.storyboard @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Xcode Templates/New Feature.xctemplate/___FILEBASENAME___ViewController.swift b/Xcode Templates/New Feature.xctemplate/___FILEBASENAME___ViewController.swift new file mode 100644 index 0000000..5a113bf --- /dev/null +++ b/Xcode Templates/New Feature.xctemplate/___FILEBASENAME___ViewController.swift @@ -0,0 +1,38 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation +import UIKit + +class ___FILEBASENAMEASIDENTIFIER___: UIViewController +{ + // MARK: - Property + + var presenter: ___VARIABLE_productName:identifier___ViewInterface? = nil + + // MARK: - Life cycle + + override func viewDidLoad() + { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() + { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } +} + +// MARK: - View Interface + +extension ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_productName:identifier___ViewInterface +{ + +} diff --git a/Xcode Templates/User Interface.xctemplate/.DS_Store b/Xcode Templates/User Interface.xctemplate/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..26b3990903167815cc3565443d23dbc82240ae5c GIT binary patch literal 6148 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 + + + + Kind + Xcode.IDEFoundation.TextSubstitutionFileTemplateKind + Description + Default user interface implementation + Summary + Creates minimum default files and implementation for a user interface + SortOrder + 30 + AllowedTypes + + public.swift-source + + DefaultCompletionName + File + MainTemplateFile + ___FILEBASENAME___.swift + Options + + + Identifier + productName + Required + + Name + Filebase: + Description + The name base of the objects to create + Type + text + Default + FileBase + + + + diff --git a/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___Presenter.swift b/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___Presenter.swift new file mode 100644 index 0000000..0f60d36 --- /dev/null +++ b/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___Presenter.swift @@ -0,0 +1,39 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation + +class ___FILEBASENAMEASIDENTIFIER___ +{ + // MARK: - Property + + var interactor: ___VARIABLE_productName:identifier___InteractorInput? = nil + var view: ___VARIABLE_productName:identifier___ViewInterface? = nil + + // MARK: - Life cycle + + init(interactor: ___VARIABLE_productName:identifier___InteractorInput?) { + self.interactor = interactor + } +} + +// MARK: - Presenter Input + +extension ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_productName:identifier___PresenterInput +{ + func viewDidLoad() { + + } +} + +// MARK: - Interactor Output + +extension ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_productName:identifier___InteractorOutput +{ + +} diff --git a/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___PresenterInput.swift b/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___PresenterInput.swift new file mode 100644 index 0000000..bdd58f8 --- /dev/null +++ b/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___PresenterInput.swift @@ -0,0 +1,15 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation + +protocol ___FILEBASENAMEASIDENTIFIER___ +{ + /// Notifies that the view did load + func viewDidLoad() +} diff --git a/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___ViewInterface.swift b/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___ViewInterface.swift new file mode 100644 index 0000000..552929e --- /dev/null +++ b/Xcode Templates/User Interface.xctemplate/___FILEBASENAME___ViewInterface.swift @@ -0,0 +1,14 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation + +protocol ___FILEBASENAMEASIDENTIFIER___ +{ + +} From f0d75113f3260e91c5ae90f8629e25b547c96f53 Mon Sep 17 00:00:00 2001 From: Damien Fraud Date: Fri, 26 Oct 2018 07:08:27 +0200 Subject: [PATCH 2/2] :gift: Add integration tests template. --- Xcode Templates/.DS_Store | Bin 10244 -> 14340 bytes .../Integration Test.xctemplate/.DS_Store | Bin 0 -> 6148 bytes .../TemplateIcon.png | Bin 0 -> 4587 bytes .../TemplateIcon@2x.png | Bin 0 -> 7031 bytes .../TemplateInfo.plist | 39 +++++++++ .../___FILEBASENAME___InteractorMock.swift | 60 +++++++++++++ .../___FILEBASENAME___Tests.swift | 82 ++++++++++++++++++ .../New Feature.xctemplate/.DS_Store | Bin 6148 -> 6148 bytes 8 files changed, 181 insertions(+) create mode 100644 Xcode Templates/Integration Test.xctemplate/.DS_Store create mode 100644 Xcode Templates/Integration Test.xctemplate/TemplateIcon.png create mode 100644 Xcode Templates/Integration Test.xctemplate/TemplateIcon@2x.png create mode 100644 Xcode Templates/Integration Test.xctemplate/TemplateInfo.plist create mode 100644 Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___InteractorMock.swift create mode 100644 Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___Tests.swift diff --git a/Xcode Templates/.DS_Store b/Xcode Templates/.DS_Store index 7b46a476d0125b9819bdee6189ec1ea8713f91c1..038fb4d12f06d2e3e8043a9eb06d0c1c1d069011 100644 GIT binary patch delta 639 zcmZn(Xem%&U|?W$DortDU@!nOIe-{M3-ADmb_NCoo{0+TvdlmZBM>V9F_105z)-@F z%8<@b#E{5PGOaq%sr( zp#p=?WQup^P3p5G6IDfCOeuaacY2+0J#Q}GfXB<&J{ho`Guev699o59tQvb diff --git a/Xcode Templates/Integration Test.xctemplate/.DS_Store b/Xcode Templates/Integration Test.xctemplate/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 + + + + Kind + Xcode.IDEFoundation.TextSubstitutionFileTemplateKind + Description + Default new feature implementation + Summary + Creates minimum default files and implementation for a new feature + SortOrder + 30 + AllowedTypes + + public.swift-source + + DefaultCompletionName + File + MainTemplateFile + ___FILEBASENAME___.swift + Options + + + Identifier + productName + Required + + Name + Filebase: + Description + The name base of the objects to create + Type + text + Default + FileBase + + + + diff --git a/Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___InteractorMock.swift b/Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___InteractorMock.swift new file mode 100644 index 0000000..26f7e40 --- /dev/null +++ b/Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___InteractorMock.swift @@ -0,0 +1,60 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +import Foundation + +class ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_productName:identifier___InteractorInput +{ + // MARK: - Variables + + private var stateCase: StateCase + weak var output: ___VARIABLE_productName:identifier___InteractorOutput? + + // MARK: - init + + init(stateCase: StateCase) { + self.stateCase = stateCase + } + + // Here you can implement you interactor methods and set up output or other methods depending on your sate case : + // + // func getMethod() { + // switch stateCase { + // case .success : + // scenario_02_success() + // case default: + // scenario_01_error() + // } + // } + + // MARK: - SCENARIOS + + // Here you can implement you interactor mock methods to call for outputs you want to check for specific scenarios : + // + // private func scenario_01_error() { + // output?.showSuccess() + // } + // + // private func scenario_02_success() { + // output?.showError() + // } +} + +/// This code is here to manage state case for different scenarios +/// It should be moved to some other file +public enum StateCase +{ + case success + case error +} + +public class StateCaseManager +{ + public static let shared = StateCaseManager() + public var stateCase: StateCase = .success +} diff --git a/Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___Tests.swift b/Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___Tests.swift new file mode 100644 index 0000000..2c79ded --- /dev/null +++ b/Xcode Templates/Integration Test.xctemplate/___FILEBASENAME___Tests.swift @@ -0,0 +1,82 @@ +// +// ___FILENAME___ +// ___PROJECTNAME___ +// +// Created by ___FULLUSERNAME___ on ___DATE___. +//___COPYRIGHT___ +// + +// For our testing we made the choice to use [Quick](https://github.com/Quick/Quick) and [Nimble](https://github.com/Quick/Nimble). +// These tools allow us to work efficiently with the GIVEN / WHEN / THEN format. + + +import XCTest +import Quick +import Nimble + +final class ___FILEBASENAMEASIDENTIFIER___: QuickSpec, ExtendedTesting +{ + // First describe should give us a context about the functionalities to test + describe("As a user") + + /// A struct to give specific state and other static properties if needed to our scenarios + struct TestCase { + var stateCase: StateCase + } + + public var viewController: ___VARIABLE_productName:identifier___ViewController? + var storyboardName: String { return "Main" } + + /// instantiate all the necessary chain to run our tests + /// - parameter testCase: A struct containing the state for a specific scenario + private func setup(_ testCase: TestCase) { + self.setupViewController() + + let interactor = ___VARIABLE_productName:identifier___InteractorMock(stateCase: testCase.stateCase) + let presenter = ___VARIABLE_productName:identifier___Presenter(interactor: interactor) + interactor.output = presenter + presenter.view = self.viewController + self.viewController?.presenter = presenter + self.viewController?.presenter?.viewDidLoad() + } + + override func spec() { + // GIVEN should desribe our state, what we use as our `testCase` + describe("GIVEN") { + // WHEN should give us the interaction taking place. This would be what gives us informations about the actions to trigger + context("WHEN") { + beforeEach { + let testCase = TestCase(stateCase: .success) + self.setup(testCase) + } + // THEN gives us what to expect. + it("THEN") { + //expect(self.viewController?.titleLabel?.text).toEventually(equal("Hello world!")) + } + } + } +} + + +/// This extension is a helper to facilitate storyboard and view controllers manipulation. +/// It should be moved to a separate file + +public protocol ExtendedTesting: class { + + associatedtype T: UIViewController + + var viewController: T? { get set } + var storyboardName: String { get } + + func setupViewController() +} + +public extension ExtendedTesting { + public var storyboardName: String { return "Main" } + + public func setupViewController() { + viewController = UIViewController.fromStoryboard(named: storyboardName, withIdentifier: String(describing: T.self), ofClass: T.self) + viewController?.view.layoutSubviews() + } + +} diff --git a/Xcode Templates/New Feature.xctemplate/.DS_Store b/Xcode Templates/New Feature.xctemplate/.DS_Store index 26b3990903167815cc3565443d23dbc82240ae5c..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 100644 GIT binary patch delta 70 zcmZoMXfc=|#>AjHu~2NHo+1YW5HK<@2yC9nT*k6_0kakJW_AvK4xj>{$am(+{342+ UKzW7)kiy9(Jj$D6L{=~Z03nkO;Q#;t literal 6148 zcmeHK!AiqG5Pe&Fs0h-d$MqBX2O-3R;H`KPL`iBDtSQ>u^9BB%KjH`YW@o4=ja4s2 zWTwo%&FoAv`!-}c07BkW6JQKrL=_wya_A9R7u}M9S!6M!dpu!=7ycqHw!Gc&7a5SV zJ4TL%r}lvE`PG=yQa;Wn)3RPHJIU|#U(`iWHLDVMd%t>3QQ!Dizw%$+_vCZQ>}Po9 zdw0$~tkV1rw5$wsqI+T!}&ilvYj*uz(=nOamn+zQ2S>T*D9_