forked from angelolloqui/AGImageChecker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AGDropboxPluginTests.m
209 lines (165 loc) · 8.67 KB
/
AGDropboxPluginTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
//
// AGDropboxPluginTests.m
// AGImageChecker
//
// Created by Angel Garcia on 9/26/12.
// Copyright (c) 2012 angelolloqui.com. All rights reserved.
//
#import "AGDropboxPluginTests.h"
#import "UIImageView+AGImageCheckerDropbox.h"
#import "UIImage+AGImageChecker.h"
#import <DropboxSDK/DropboxSDK.h>
@interface AGImageCheckerDropboxPlugin(private)<DBRestClientDelegate>
@property (nonatomic, strong) DBRestClient *dbClient;
- (void)uploadToDropbox:(UIImageView *)imageView original:(BOOL)original;
- (void)downloadFromDropbox:(UIImageView *)imageView;
- (void)removeFromLocalStorage:(UIImageView *)imageView;
- (void)loginToDropbox;
- (void)logoutFromDropbox;
- (NSString *)saveImageIntoTemporaryLocation:(UIImage *)image;
@end
@implementation AGDropboxPluginTests
@synthesize mockImageChecker;
@synthesize mockDBSession;
@synthesize mockDBClient;
@synthesize plugin;
@synthesize mockDBPlugin;
@synthesize imageView;
@synthesize mockImageView;
@synthesize bundle;
static AGImageChecker *originalInstance = nil;
- (void)setUp {
originalInstance = [AGImageChecker sharedInstance];
self.mockImageChecker = [OCMockObject niceMockForClass:[AGImageChecker class]];
[AGImageChecker setSharedInstance:mockImageChecker];
self.mockDBSession = [OCMockObject niceMockForClass:[DBSession class]];
[DBSession setSharedSession:mockDBSession];
self.plugin = [[AGImageCheckerDropboxPlugin alloc] init];
self.mockDBPlugin = [OCMockObject partialMockForObject:plugin];
self.mockDBClient = [OCMockObject niceMockForClass:[DBRestClient class]];
plugin.dbClient = mockDBClient;
self.bundle = [NSBundle bundleForClass:[self class]];
self.imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"square_small_image" ofType:@"png"]];
[(id) imageView.image setName:@"imageName"];
self.mockImageView = [OCMockObject partialMockForObject:imageView];
}
- (void)tearDown {
[AGImageChecker setSharedInstance:originalInstance];
}
- (void)testDropboxIsAddedToImageCheckerPlugins {
[[mockImageChecker expect] addPlugin:[OCMArg checkWithBlock:^(id arg) {
return [arg isKindOfClass:[AGImageCheckerDropboxPlugin class]];
}]];
[AGImageCheckerDropboxPlugin addPluginWithAppKey:@"key" appSecret:@"secret"];
[mockImageChecker verify];
}
- (void)testDelegateHandlesDropboxURL {
UIApplication *application = [UIApplication sharedApplication];
NSURL *dropboxUrl = [NSURL URLWithString:@""];
STAssertNotNil([application delegate], @"Application deledate should not be null");
[AGImageCheckerDropboxPlugin addPluginWithAppKey:@"key" appSecret:@"secret"];
[DBSession setSharedSession:mockDBSession];
[[mockDBSession expect] handleOpenURL:dropboxUrl];
[[application delegate] application:application openURL:dropboxUrl sourceApplication:nil annotation:nil];
[mockDBSession verify];
}
- (void)testImageViewAddDropboxMethods {
STAssertTrue([imageView respondsToSelector:@selector(originalImage)], @"ImageView should respond to originalImage method");
STAssertTrue([imageView respondsToSelector:@selector(dropboxImagePath)], @"ImageView should respond to dropboxImagePath method");
STAssertTrue([imageView respondsToSelector:@selector(localDropboxImagePath)], @"ImageView should respond to localDropboxImagePath method");
STAssertTrue([imageView respondsToSelector:@selector(localDropboxImageExists)], @"ImageView should respond to localDropboxImageExists method");
}
- (void)testImageViewSetsOriginalImage {
STAssertNil(imageView.originalImage, @"Original image should be nil by default");
UIImage *image = [[UIImage alloc] init];
imageView.originalImage = image;
STAssertEquals(imageView.originalImage, image, @"The original image has not been set correctly");
imageView.originalImage = nil;
STAssertNil(imageView.originalImage, @"Original image should allow nullifying");
}
- (void)testImageViewReturnsDropboxImagePaths {
STAssertNotNil([imageView dropboxImagePath], @"Dropbox image path should be set");
STAssertTrue([[imageView dropboxImagePath] rangeOfString:@"imageName"].location != NSNotFound, @"Dropbox image path should contain the image name");
STAssertNotNil([imageView localDropboxImagePath], @"Local Dropbox image path should be set");
STAssertTrue([[imageView localDropboxImagePath] rangeOfString:@"imageName"].location != NSNotFound, @"Local Dropbox image path should contain the image name");
}
- (void)testPluginChecksImageIsInLocalDropbox {
[[mockImageView expect] localDropboxImageExists];
[plugin didFinishCalculatingIssues:mockImageView];
[mockImageView verify];
}
- (void)testPluginUsesLocalDropboxImage {
BOOL ret = YES;
[[[mockImageView stub] andReturnValue:OCMOCK_VALUE(ret)] localDropboxImageExists];
[[[mockImageView stub] andReturn:[bundle pathForResource:@"square_small_image" ofType:@"png"]] localDropboxImagePath];
UIImage *originalImage = [mockImageView image];
[plugin didFinishCalculatingIssues:mockImageView];
STAssertNotNil([mockImageView image], @"The local Dropbox image should be loaded correctly");
STAssertEqualObjects([mockImageView originalImage], originalImage, @"The original image should be saved");
[plugin didFinishCalculatingIssues:mockImageView];
STAssertNotNil([mockImageView image], @"The local Dropbox image should be loaded correctly");
STAssertEqualObjects([mockImageView originalImage], originalImage, @"The original image should be preserved in next requests");
}
- (void)testPluginRemovesLocalDropboxImage {
BOOL ret = NO;
[[[mockImageView stub] andReturnValue:OCMOCK_VALUE(ret)] localDropboxImageExists];
UIImage *originalImage = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"square_small_image" ofType:@"png"]];
[mockImageView setOriginalImage:originalImage];
[plugin didFinishCalculatingIssues:mockImageView];
STAssertNotNil([mockImageView image], @"The image should be set correctly");
STAssertNil([mockImageView originalImage], @"The original image should be removed");
STAssertEqualObjects([mockImageView image], originalImage, @"The original image should be reset to the main image");
}
- (void)testUploadToDropboxIsCalled {
[[mockDBClient expect] uploadFile:[OCMArg any] toPath:[OCMArg any] withParentRev:nil fromPath:[OCMArg any]];
[plugin uploadToDropbox:imageView original:YES];
[mockDBClient verify];
}
- (void)testDownloadFromDropboxIsCalled {
[[mockDBClient expect] loadFile:[OCMArg any] intoPath:[OCMArg any]];
[plugin downloadFromDropbox:imageView];
[mockDBClient verify];
}
- (void)testLinkToDropboxIsCalled {
BOOL linked = NO;
[[[mockDBSession stub] andReturnValue:OCMOCK_VALUE(linked)] isLinked];
[[mockDBSession expect] linkFromController:[OCMArg any]];
[plugin loginToDropbox];
[mockDBSession verify];
}
- (void)testUnLinkToDropboxIsCalled {
[[mockDBSession expect] unlinkAll];
[plugin logoutFromDropbox];
[mockDBSession verify];
}
- (void)testRemoveLocalStorageCallsRefresh{
[[mockDBPlugin expect] didFinishCalculatingIssues:[OCMArg any]];
[mockDBPlugin removeFromLocalStorage:imageView];
[mockDBPlugin verify];
}
- (void)testPluginRespondsToMainDelegateMethods {
STAssertNoThrow([plugin restClient:mockDBClient loadedFile:@"file"], @"Plugin should respond to restClient:loadedFile:");
STAssertNoThrow([plugin restClient:mockDBClient loadFileFailedWithError:nil], @"Plugin should respond to restClient:loadFileFailedWithError");
STAssertNoThrow([plugin restClient:mockDBClient uploadedFile:@"file" from:@"from" metadata:nil], @"Plugin should respond to restClient:uploadedFile:from:metadata:");
STAssertNoThrow([plugin restClient:mockDBClient uploadFileFailedWithError:nil], @"Plugin should respond to restClient:uploadFileFailedWithError:");
}
- (void)testDownloadDelegateCallsRefresh{
[[mockDBPlugin expect] didFinishCalculatingIssues:[OCMArg any]];
[mockDBPlugin restClient:mockDBClient loadedFile:@"file"];
[mockDBPlugin verify];
}
- (void)testImageToUploadIsCorrectlyChoosen {
__block UIImage *savedImage = nil;
[[[mockDBPlugin stub] andDo:^(NSInvocation *inv) {
__unsafe_unretained UIImage *image = nil;
[inv getArgument:&image atIndex:2];
savedImage = image;
}] saveImageIntoTemporaryLocation:[OCMArg any]];
[mockDBPlugin uploadToDropbox:imageView original:YES];
STAssertEqualObjects(savedImage, imageView.image, @"The saved image should be the original image");
savedImage = nil;
[mockDBPlugin uploadToDropbox:imageView original:NO];
STAssertFalse(savedImage == imageView.image, @"The saved image should be a new one with the rendered image");
}
@end