From 3ba967e29511ddfec13ab675c88758c2206408cf Mon Sep 17 00:00:00 2001 From: Ash Furrow Date: Fri, 27 Dec 2013 16:23:07 -0500 Subject: [PATCH] Added FRPPhotoViewModel tests. --- FRP.xcodeproj/project.pbxproj | 4 ++ FRP/FRPPhotoViewModel.m | 18 +++++--- FRPTests/FRPPhotoViewModelTests.m | 71 +++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 FRPTests/FRPPhotoViewModelTests.m diff --git a/FRP.xcodeproj/project.pbxproj b/FRP.xcodeproj/project.pbxproj index c600fb6..2089daa 100644 --- a/FRP.xcodeproj/project.pbxproj +++ b/FRP.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 5E730B101815F78B003FCB43 /* FRPGalleryViewModelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E730B0F1815F78B003FCB43 /* FRPGalleryViewModelTests.m */; }; 5E730B141815FE97003FCB43 /* FRPFullSizePhotoViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E730B131815FE97003FCB43 /* FRPFullSizePhotoViewModel.m */; }; 5E93AD9A186C781000795C9E /* FRPFullSizePhotoViewModelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E93AD99186C781000795C9E /* FRPFullSizePhotoViewModelTests.m */; }; + 5E93AD9C186C80DE00795C9E /* FRPPhotoViewModelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E93AD9B186C80DE00795C9E /* FRPPhotoViewModelTests.m */; }; 5EAD1F5818173A3200C67860 /* FRPPhotoViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EAD1F5718173A3200C67860 /* FRPPhotoViewModel.m */; }; 5EAD1F5C18173F1500C67860 /* FRPLoginViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EAD1F5B18173F1500C67860 /* FRPLoginViewModel.m */; }; 5EAD1F601817418800C67860 /* FRPPhotoDetailViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EAD1F5F1817418800C67860 /* FRPPhotoDetailViewModel.m */; }; @@ -65,6 +66,7 @@ 5E730B121815FE97003FCB43 /* FRPFullSizePhotoViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FRPFullSizePhotoViewModel.h; sourceTree = ""; }; 5E730B131815FE97003FCB43 /* FRPFullSizePhotoViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FRPFullSizePhotoViewModel.m; sourceTree = ""; }; 5E93AD99186C781000795C9E /* FRPFullSizePhotoViewModelTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FRPFullSizePhotoViewModelTests.m; sourceTree = ""; }; + 5E93AD9B186C80DE00795C9E /* FRPPhotoViewModelTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FRPPhotoViewModelTests.m; sourceTree = ""; }; 5EAD1F5618173A3200C67860 /* FRPPhotoViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FRPPhotoViewModel.h; sourceTree = ""; }; 5EAD1F5718173A3200C67860 /* FRPPhotoViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FRPPhotoViewModel.m; sourceTree = ""; }; 5EAD1F5A18173F1500C67860 /* FRPLoginViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FRPLoginViewModel.h; sourceTree = ""; }; @@ -285,6 +287,7 @@ children = ( 5E730B0F1815F78B003FCB43 /* FRPGalleryViewModelTests.m */, 5E93AD99186C781000795C9E /* FRPFullSizePhotoViewModelTests.m */, + 5E93AD9B186C80DE00795C9E /* FRPPhotoViewModelTests.m */, 5EBE2B1A180B07D0007B6BF3 /* Supporting Files */, ); path = FRPTests; @@ -487,6 +490,7 @@ files = ( 5E93AD9A186C781000795C9E /* FRPFullSizePhotoViewModelTests.m in Sources */, 5E730B101815F78B003FCB43 /* FRPGalleryViewModelTests.m in Sources */, + 5E93AD9C186C80DE00795C9E /* FRPPhotoViewModelTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/FRP/FRPPhotoViewModel.m b/FRP/FRPPhotoViewModel.m index 02ed552..2efaddd 100644 --- a/FRP/FRPPhotoViewModel.m +++ b/FRP/FRPPhotoViewModel.m @@ -27,11 +27,7 @@ @weakify(self); [self.didBecomeActiveSignal subscribeNext:^(id x) { @strongify(self); - [[FRPPhotoImporter fetchPhotoDetails:self.model] subscribeError:^(NSError *error) { - NSLog(@"Could not fetch photo details: %@", error); - } completed:^{ - NSLog(@"Fetched photo details."); - }]; + [self downloadPhotoModelDetails]; }]; RAC(self, photoImage) = [RACObserve(self.model, fullsizedData) map:^id(id value) { @@ -41,8 +37,20 @@ return self; } +#pragma mark - Public Methods + -(NSString *)photoName { return self.model.photoName; } +#pragma mark - Private Methods + +-(void)downloadPhotoModelDetails { + [[FRPPhotoImporter fetchPhotoDetails:self.model] subscribeError:^(NSError *error) { + NSLog(@"Could not fetch photo details: %@", error); + } completed:^{ + NSLog(@"Fetched photo details."); + }]; +} + @end diff --git a/FRPTests/FRPPhotoViewModelTests.m b/FRPTests/FRPPhotoViewModelTests.m new file mode 100644 index 0000000..5dbd93e --- /dev/null +++ b/FRPTests/FRPPhotoViewModelTests.m @@ -0,0 +1,71 @@ +// +// FRPPhotoViewModelTests.m +// FRP +// +// Created by Ash Furrow on 12/26/2013. +// Copyright (c) 2013 Ash Furrow. All rights reserved. +// + +#import +#define EXP_SHORTHAND +#import +#import + +#import "FRPPhotoViewModel.h" +#import "FRPPhotoModel.h" + +@interface FRPPhotoViewModel () + +-(void)downloadPhotoModelDetails; + +@end + +SpecBegin(FRPPhotoViewModel) + +describe(@"FRPPhotoViewModel", ^{ + it (@"should return the photo's name property when photoName is invoked", ^{ + NSString *name = @"Ash"; + + id mockPhotoModel = [OCMockObject mockForClass:[FRPPhotoModel class]]; + [[[mockPhotoModel stub] andReturn:name] photoName]; + + FRPPhotoViewModel *viewModel = [[FRPPhotoViewModel alloc] initWithModel:nil]; + id mockViewModel = [OCMockObject partialMockForObject:viewModel]; + [[[mockViewModel stub] andReturn:mockPhotoModel] model]; + + id returnedName = [mockViewModel photoName]; + + expect(returnedName).to.equal(name); + }); + + it (@"should download photo model details when it becomes active", ^{ + FRPPhotoViewModel *viewModel = [[FRPPhotoViewModel alloc] initWithModel:nil]; + + id mockViewModel = [OCMockObject partialMockForObject:viewModel]; + [[mockViewModel expect] downloadPhotoModelDetails]; + + [mockViewModel setActive:YES]; + + [mockViewModel verify]; + }); + + pending (@"should correctly map image data to UIImage", ^{ + id mockPhotoModel = [OCMockObject mockForClass:[FRPPhotoViewModel class]]; + [[[mockPhotoModel expect] andReturn:nil] fullsizedData]; + }); + + it (@"should return the correct photo name", ^{ + NSString *name = @"Ash"; + + FRPPhotoModel *photoModel = [[FRPPhotoModel alloc] init]; + photoModel.photoName = name; + + FRPPhotoViewModel *viewModel = [[FRPPhotoViewModel alloc] initWithModel:photoModel]; + + NSString *returnedName = [viewModel photoName]; + + expect(name).to.equal(returnedName); + }); +}); + +SpecEnd