Skip to content

Commit

Permalink
Add ringtone name change event handling
Browse files Browse the repository at this point in the history
Issue #161
  • Loading branch information
eofster committed Jan 30, 2016
1 parent fc618f8 commit 5faa570
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 8 deletions.
4 changes: 4 additions & 0 deletions Telephone/InteractorFactoryImpl.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,8 @@ extension InteractorFactoryImpl: InteractorFactory {
func createUserDefaultsSoundIOSaveInteractorWithSoundIO(soundIO: SoundIO) -> Interactor {
return UserDefaultsSoundIOSaveInteractor(soundIO: soundIO, userDefaults: userDefaults)
}

func createUserDefaultsRingtoneSoundNameSaveInteractorWithName(name: String) -> Interactor {
return UserDefaultsRingtoneSoundNameSaveInteractor(soundName: name, userDefaults: userDefaults)
}
}
4 changes: 4 additions & 0 deletions Telephone/SoundPreferencesViewEventHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ extension SoundPreferencesViewEventHandler: SoundPreferencesViewObserver {
selectUserAgentAudioDevicesOrLogError()
}

func viewDidChangeRingtoneName(name: String) {
interactorFactory.createUserDefaultsRingtoneSoundNameSaveInteractorWithName(name).execute()
}

private func updateUserDefaultsWithSoundIO(soundIO: SoundIO) {
interactorFactory.createUserDefaultsSoundIOSaveInteractorWithSoundIO(soundIO).execute()
}
Expand Down
1 change: 1 addition & 0 deletions Telephone/SoundPreferencesViewObserver.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@
@objc protocol SoundPreferencesViewObserver {
func viewShouldReloadData(view: SoundPreferencesView)
func viewDidChangeSoundInput(soundInput: String, soundOutput: String, ringtoneOutput: String)
func viewDidChangeRingtoneName(name: String)
}
20 changes: 14 additions & 6 deletions TelephoneTests/InteractorFactoryImplTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ import XCTest

class InteractorFactoryImplTests: XCTestCase {
var repositoryDummy: SystemAudioDeviceRepository!
var userDefaultsDummy: UserDefaults!
var userDefaults: UserDefaults!
var sut: InteractorFactoryImpl!

override func setUp() {
super.setUp()
repositoryDummy = SystemAudioDeviceRepositoryStub()
userDefaultsDummy = UserDefaultsFake()
sut = InteractorFactoryImpl(systemAudioDeviceRepository: repositoryDummy, userDefaults: userDefaultsDummy)
userDefaults = UserDefaultsFake()
sut = InteractorFactoryImpl(systemAudioDeviceRepository: repositoryDummy, userDefaults: userDefaults)
}

func testCanCreateUserAgentSoundIOSelectionInteractor() {
Expand All @@ -39,7 +39,7 @@ class InteractorFactoryImplTests: XCTestCase {
XCTAssertNotNil(result)
XCTAssertTrue(result.systemAudioDeviceRepository === repositoryDummy)
XCTAssertTrue(result.userAgent === userAgentDummy)
XCTAssertTrue(result.userDefaults === userDefaultsDummy)
XCTAssertTrue(result.userDefaults === userDefaults)
}

func testCanCreateUserDefaultsSoundIOLoadInteractor() {
Expand All @@ -49,7 +49,7 @@ class InteractorFactoryImplTests: XCTestCase {

XCTAssertNotNil(result)
XCTAssertTrue(result.systemAudioDeviceRepository === repositoryDummy)
XCTAssertTrue(result.userDefaults === userDefaultsDummy)
XCTAssertTrue(result.userDefaults === userDefaults)
XCTAssertTrue(result.output === outputDummy)
}

Expand All @@ -60,6 +60,14 @@ class InteractorFactoryImplTests: XCTestCase {

XCTAssertNotNil(result)
XCTAssertEqual(result.soundIO, soundIO)
XCTAssertTrue(result.userDefaults === userDefaultsDummy)
XCTAssertTrue(result.userDefaults === userDefaults)
}

func testCanCreateUserDefaultsRingtoneSoundNameSaveInteractor() {
let result = sut.createUserDefaultsRingtoneSoundNameSaveInteractorWithName("sound-name") as! UserDefaultsRingtoneSoundNameSaveInteractor

XCTAssertNotNil(result)
XCTAssertEqual(result.soundName, "sound-name")
XCTAssertTrue(result.userDefaults === userDefaults)
}
}
10 changes: 10 additions & 0 deletions TelephoneTests/SoundPreferencesViewEventHandlerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,14 @@ class SoundPreferencesViewEventHandlerTests: XCTestCase {

XCTAssertTrue(interactorSpy.didCallExecute)
}

func testExecutesUserDefaultsRingtoneSoundNameSaveInteractorWithExpectedArgumentsOnRingtoneNameChange() {
let interactorSpy = InteractorSpy()
interactorFactorySpy.stubWithUserDefaultsRingtoneSoundNameSaveInteractor(interactorSpy)

sut.viewDidChangeRingtoneName("sound-name")

XCTAssertEqual(interactorFactorySpy.invokedRingtoneSoundName, "sound-name")
XCTAssertTrue(interactorSpy.didCallExecute)
}
}
1 change: 1 addition & 0 deletions UseCases/InteractorFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ public protocol InteractorFactory {
func createUserAgentSoundIOSelectionInteractorWithUserAgent(userAgent: UserAgent) -> ThrowingInteractor
func createUserDefaultsSoundIOLoadInteractorWithOutput(output: UserDefaultsSoundIOLoadInteractorOutput) -> ThrowingInteractor
func createUserDefaultsSoundIOSaveInteractorWithSoundIO(soundIO: SoundIO) -> Interactor
func createUserDefaultsRingtoneSoundNameSaveInteractorWithName(name: String) -> Interactor
}
4 changes: 2 additions & 2 deletions UseCases/UserDefaultsRingtoneSoundNameSaveInteractor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
//

public class UserDefaultsRingtoneSoundNameSaveInteractor {
let soundName: String
let userDefaults: UserDefaults
public let soundName: String
public let userDefaults: UserDefaults

public init(soundName: String, userDefaults: UserDefaults) {
self.soundName = soundName
Expand Down
11 changes: 11 additions & 0 deletions UseCasesTestDoubles/InteractorFactorySpy.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ public class InteractorFactorySpy {
public private(set) var userAgentSoundIOSelectionInteractor: ThrowingInteractor!
public private(set) var userDefaultsSoundIOLoadInteractor: ThrowingInteractor!
public private(set) var userDefaultsSoundIOSaveInteractor: Interactor!
public private(set) var userDefaultsRingtoneSoundNameSaveInteractor: Interactor!

public private(set) var invokedSoundIO = SoundIO(soundInput: "", soundOutput: "", ringtoneOutput: "")
public private(set) var invokedRingtoneSoundName = ""

public init() {}

Expand All @@ -37,6 +39,10 @@ public class InteractorFactorySpy {
public func stubWithUserDefaultsSoundIOSaveInteractor(interactor: Interactor) {
userDefaultsSoundIOSaveInteractor = interactor
}

public func stubWithUserDefaultsRingtoneSoundNameSaveInteractor(interactor: Interactor) {
userDefaultsRingtoneSoundNameSaveInteractor = interactor
}
}

extension InteractorFactorySpy: InteractorFactory {
Expand All @@ -52,4 +58,9 @@ extension InteractorFactorySpy: InteractorFactory {
invokedSoundIO = soundIO
return userDefaultsSoundIOSaveInteractor
}

public func createUserDefaultsRingtoneSoundNameSaveInteractorWithName(name: String) -> Interactor {
invokedRingtoneSoundName = name
return userDefaultsRingtoneSoundNameSaveInteractor
}
}

0 comments on commit 5faa570

Please sign in to comment.