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