13d95647eSBen Roth#import <XCTest/XCTest.h> 23d95647eSBen Roth 33d95647eSBen Roth#import "EXAppLoader+Tests.h" 43d95647eSBen Roth#import "EXAppFetcherWithTimeout.h" 53d95647eSBen Roth#import "EXClientTestCase.h" 63d95647eSBen Roth#import "EXEnvironment.h" 73d95647eSBen Roth 83d95647eSBen Roth@interface EXAppFetcherWithTimeout (EXAppLoaderTests) 93d95647eSBen Roth 103d95647eSBen Roth@property (nonatomic, readonly) NSTimeInterval timeout; 113d95647eSBen Roth 123d95647eSBen Roth@end 133d95647eSBen Roth 143d95647eSBen Roth@interface EXAppLoaderConfigurationTests : EXClientTestCase 153d95647eSBen Roth 163d95647eSBen Roth@end 173d95647eSBen Roth 183d95647eSBen Roth@implementation EXAppLoaderConfigurationTests 193d95647eSBen Roth 203d95647eSBen Roth- (void)setUp 213d95647eSBen Roth{ 223d95647eSBen Roth [super setUp]; 233d95647eSBen Roth 243d95647eSBen Roth if ([EXEnvironment sharedEnvironment].testEnvironment == EXTestEnvironmentNone) { 253d95647eSBen Roth [EXEnvironment sharedEnvironment].testEnvironment = EXTestEnvironmentLocal; 263d95647eSBen Roth } 273d95647eSBen Roth} 283d95647eSBen Roth 293d95647eSBen Roth#pragma mark - app loader configuration in app.json 303d95647eSBen Roth 313d95647eSBen Roth- (void)testIsDefaultUpdatesConfigUsed 323d95647eSBen Roth{ 333d95647eSBen Roth NSDictionary *manifest = @{}; 34*19a0af8dSWill Schurman EXDevelopmentHomeLoader *appLoader = [[EXDevelopmentHomeLoader alloc] initWithManifestUrl:[NSURL URLWithString:@"exp://exp.host/@esamelson/test-fetch-update"]]; 353d95647eSBen Roth [appLoader _fetchBundleWithManifest:manifest]; 363d95647eSBen Roth XCTAssert([appLoader.appFetcher isKindOfClass:[EXAppFetcherWithTimeout class]], @"AppLoader should choose to use AppFetcherWithTimeout when fetching remotely"); 373d95647eSBen Roth XCTAssert([(EXAppFetcherWithTimeout *)appLoader.appFetcher timeout] == kEXAppLoaderDefaultTimeout, @"AppFetcherWithTimeout should have the correct user-specified timeout length"); 383d95647eSBen Roth} 393d95647eSBen Roth 403d95647eSBen Roth- (void)testIsUpdateTimeoutConfigRespected 413d95647eSBen Roth{ 423d95647eSBen Roth NSDictionary *manifest = @{ 433d95647eSBen Roth @"updates": @{ 443d95647eSBen Roth @"fallbackToCacheTimeout": @1000, 453d95647eSBen Roth } 463d95647eSBen Roth }; 47*19a0af8dSWill Schurman EXDevelopmentHomeLoader *appLoader = [[EXDevelopmentHomeLoader alloc] initWithManifestUrl:[NSURL URLWithString:@"exp://exp.host/@esamelson/test-fetch-update"]]; 483d95647eSBen Roth [appLoader _fetchBundleWithManifest:manifest]; 493d95647eSBen Roth XCTAssert([appLoader.appFetcher isKindOfClass:[EXAppFetcherWithTimeout class]], @"AppLoader should choose to use AppFetcherWithTimeout when fetching remotely"); 503d95647eSBen Roth XCTAssert([(EXAppFetcherWithTimeout *)appLoader.appFetcher timeout] == 1.0f, @"AppFetcherWithTimeout should have the correct user-specified timeout length"); 513d95647eSBen Roth} 523d95647eSBen Roth 533d95647eSBen Roth- (void)testIsOnErrorRecoveryIgnoredInExpoClient 543d95647eSBen Roth{ 553d95647eSBen Roth NSDictionary *manifest = @{ 563d95647eSBen Roth @"updates": @{ 573d95647eSBen Roth @"checkAutomatically": @"ON_ERROR_RECOVERY" 583d95647eSBen Roth } 593d95647eSBen Roth }; 60*19a0af8dSWill Schurman EXDevelopmentHomeLoader *appLoader = [[EXDevelopmentHomeLoader alloc] initWithManifestUrl:[NSURL URLWithString:@"exp://exp.host/@esamelson/test-fetch-update"]]; 613d95647eSBen Roth [appLoader _fetchBundleWithManifest:manifest]; 62dc898499SJames Ide XCTAssert([appLoader.appFetcher isKindOfClass:[EXAppFetcherWithTimeout class]], @"AppLoader should ignore ON_ERROR_RECOVERY in Expo Go"); 633d95647eSBen Roth} 643d95647eSBen Roth 653d95647eSBen Roth@end 66