Skip to content

Instantly share code, notes, and snippets.

@andrei512
Created November 19, 2012 10:14
Show Gist options
  • Save andrei512/4109969 to your computer and use it in GitHub Desktop.
Save andrei512/4109969 to your computer and use it in GitHub Desktop.
CloudFolderContentsDataRequestSpecs
//
// CloudFolderContentsDataRequestSpecs.m
// Launchpad v3
//
// Created by Andrei on 11/16/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "CloudFolderContentsDataRequestSpecs.h"
#import "CloudFolderContentDataRequest.h"
#import "CloudFolder.h"
#import "NSObject+Phoenix.h"
@interface CloudFolderContentsDataRequestSpecs()
@property (nonatomic, strong) Test *rootFolderTest;
@property (nonatomic, strong) Test *subfolderTest;
@property int subfoldersRequestRemaining;
@end
@implementation CloudFolderContentsDataRequestSpecs
@synthesize rootFolderTest, subfolderTest, subfoldersRequestRemaining;
- (void)runTests {
[self APILoginWithBlock:^{
self.rootFolderTest = [[self beginTest:@"fetch the contents of the root folder"
selector:@selector(rootFolder:)]
setPassedBlock:^{
self.subfolderTest = [self beginTest:@"subfolders" selector:@selector(subfolders:)];
}];
}];
}
- (void)subfolders:(Test *)test {
CloudFolder *rootFolder = [CloudFolder rootFolder];
self.subfoldersRequestRemaining = 0;
for (CloudFolder *folder in rootFolder.contents) {
if ([folder.extentionType isEqualToString:@"folder"]) {
CloudFolderContentDataRequest *dataRequest = [CloudFolderContentDataRequest requestForFolder:folder
andDelegate:self];
dataRequest.requestID = @"SubfolderRequest";
self.subfoldersRequestRemaining += 1;
[dataRequest runRequest];
}
}
}
- (void)rootFolder:(Test *)test {
CloudFolderContentDataRequest *dataRequest = [CloudFolderContentDataRequest requestForFolder:[CloudFolder rootFolder]
andDelegate:self];
dataRequest.requestID = @"rootFolderRequest";
[dataRequest runRequest];
}
#pragma mark - CloudFolderContentEventsDelegate
- (void)contentRequest:(CloudFolderContentDataRequest *)dataRequest didLoadContensForFolder:(CloudFolder *)cloudFolder {
if ([dataRequest.requestID isEqualToString:@"rootFolderRequest"]) {
if ((cloudFolder.contents != nil) &&
([cloudFolder.contents isKindOfClass:[NSArray class]] == YES)) {
[self passTest:self.rootFolderTest];
} else {
[self failTest:self.rootFolderTest
forReason:@"root folder contents nil or wrong class"];
}
} else {
self.subfoldersRequestRemaining -= 1;
if (self.subfoldersRequestRemaining == 0) {
[self passTest:self.subfolderTest];
}
}
}
- (void)contentRequest:(CloudFolderContentDataRequest *)dataRequest didFailToLoadContensForFolder:(CloudFolder *)cloudFolder {
if ([dataRequest.requestID isEqualToString:@"rootFolderRequest"]) {
[self failTest:self.rootFolderTest
forReason:@"request failed"];
} else {
if (self.subfolderTest.state == TestStateStarted) {
[self failTest:self.subfolderTest
forReason:@"request failed"];
}
}
}
- (void)dataRequest:(DataRequest *)dataRequest didFailWithError:(NSError *)error {
if ([dataRequest isKindOfClass:[CloudFolderContentDataRequest class]]) {
if ([dataRequest.requestID isEqualToString:@"rootFolderRequest"]) {
[self failTest:self.rootFolderTest
forReason:@"request failed with network error"];
} else {
if (self.subfolderTest.state == TestStateStarted) {
[self failTest:self.subfolderTest
forReason:@"request failed with network error"];
}
}
}
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment