1*3d95647eSBen Roth#import <XCTest/XCTest.h> 2*3d95647eSBen Roth 3*3d95647eSBen Roth#import "EXAppLoader+Tests.h" 4*3d95647eSBen Roth#import "EXAppFetcherWithTimeout.h" 5*3d95647eSBen Roth#import "EXClientTestCase.h" 6*3d95647eSBen Roth#import "EXEnvironment.h" 7*3d95647eSBen Roth 8*3d95647eSBen Roth@interface EXAppFetcherWithTimeout (EXAppLoaderTests) 9*3d95647eSBen Roth 10*3d95647eSBen Roth@property (nonatomic, readonly) NSTimeInterval timeout; 11*3d95647eSBen Roth 12*3d95647eSBen Roth@end 13*3d95647eSBen Roth 14*3d95647eSBen Roth@interface EXAppLoaderConfigurationTests : EXClientTestCase 15*3d95647eSBen Roth 16*3d95647eSBen Roth@end 17*3d95647eSBen Roth 18*3d95647eSBen Roth@implementation EXAppLoaderConfigurationTests 19*3d95647eSBen Roth 20*3d95647eSBen Roth- (void)setUp 21*3d95647eSBen Roth{ 22*3d95647eSBen Roth [super setUp]; 23*3d95647eSBen Roth 24*3d95647eSBen Roth if ([EXEnvironment sharedEnvironment].testEnvironment == EXTestEnvironmentNone) { 25*3d95647eSBen Roth [EXEnvironment sharedEnvironment].testEnvironment = EXTestEnvironmentLocal; 26*3d95647eSBen Roth } 27*3d95647eSBen Roth} 28*3d95647eSBen Roth 29*3d95647eSBen Roth#pragma mark - app loader configuration in app.json 30*3d95647eSBen Roth 31*3d95647eSBen Roth- (void)testIsDefaultUpdatesConfigUsed 32*3d95647eSBen Roth{ 33*3d95647eSBen Roth NSDictionary *manifest = @{}; 34*3d95647eSBen Roth EXAppLoader *appLoader = [[EXAppLoader alloc] initWithManifestUrl:[NSURL URLWithString:@"exp://exp.host/@esamelson/test-fetch-update"]]; 35*3d95647eSBen Roth [appLoader _fetchBundleWithManifest:manifest]; 36*3d95647eSBen Roth XCTAssert([appLoader.appFetcher isKindOfClass:[EXAppFetcherWithTimeout class]], @"AppLoader should choose to use AppFetcherWithTimeout when fetching remotely"); 37*3d95647eSBen Roth XCTAssert([(EXAppFetcherWithTimeout *)appLoader.appFetcher timeout] == kEXAppLoaderDefaultTimeout, @"AppFetcherWithTimeout should have the correct user-specified timeout length"); 38*3d95647eSBen Roth} 39*3d95647eSBen Roth 40*3d95647eSBen Roth- (void)testIsUpdateTimeoutConfigRespected 41*3d95647eSBen Roth{ 42*3d95647eSBen Roth NSDictionary *manifest = @{ 43*3d95647eSBen Roth @"updates": @{ 44*3d95647eSBen Roth @"fallbackToCacheTimeout": @1000, 45*3d95647eSBen Roth } 46*3d95647eSBen Roth }; 47*3d95647eSBen Roth EXAppLoader *appLoader = [[EXAppLoader alloc] initWithManifestUrl:[NSURL URLWithString:@"exp://exp.host/@esamelson/test-fetch-update"]]; 48*3d95647eSBen Roth [appLoader _fetchBundleWithManifest:manifest]; 49*3d95647eSBen Roth XCTAssert([appLoader.appFetcher isKindOfClass:[EXAppFetcherWithTimeout class]], @"AppLoader should choose to use AppFetcherWithTimeout when fetching remotely"); 50*3d95647eSBen Roth XCTAssert([(EXAppFetcherWithTimeout *)appLoader.appFetcher timeout] == 1.0f, @"AppFetcherWithTimeout should have the correct user-specified timeout length"); 51*3d95647eSBen Roth} 52*3d95647eSBen Roth 53*3d95647eSBen Roth- (void)testIsOnErrorRecoveryIgnoredInExpoClient 54*3d95647eSBen Roth{ 55*3d95647eSBen Roth NSDictionary *manifest = @{ 56*3d95647eSBen Roth @"updates": @{ 57*3d95647eSBen Roth @"checkAutomatically": @"ON_ERROR_RECOVERY" 58*3d95647eSBen Roth } 59*3d95647eSBen Roth }; 60*3d95647eSBen Roth EXAppLoader *appLoader = [[EXAppLoader alloc] initWithManifestUrl:[NSURL URLWithString:@"exp://exp.host/@esamelson/test-fetch-update"]]; 61*3d95647eSBen Roth [appLoader _fetchBundleWithManifest:manifest]; 62*3d95647eSBen Roth XCTAssert([appLoader.appFetcher isKindOfClass:[EXAppFetcherWithTimeout class]], @"AppLoader should ignore ON_ERROR_RECOVERY in the Expo client"); 63*3d95647eSBen Roth} 64*3d95647eSBen Roth 65*3d95647eSBen Roth@end 66