Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move to domainURIPrefix for FIRDynamicLinkComponents #2119

Merged
merged 11 commits into from Nov 29, 2018
37 changes: 37 additions & 0 deletions Example/DynamicLinks/Tests/FDLURLComponentsTests.m
Expand Up @@ -711,6 +711,43 @@ - (void)testDeprecatedMethodComponentsWithLinkForDomain {
[componentsClassMock stopMocking];
}

- (void)testDeprecatedMethodComponentsWithLinkForDomainWithInvalidDomainScheme {
NSString *shortURLString = @"https://xyz.page.link/abcd";

// Mock key provider
id keyProviderClassMock = OCMClassMock([FIRDynamicLinkComponentsKeyProvider class]);
[[[keyProviderClassMock expect] andReturn:@"fake-api-key"] APIKey];

id componentsClassMock = OCMClassMock([FIRDynamicLinkComponents class]);
[[componentsClassMock expect]
sendHTTPRequest:OCMOCK_ANY
completion:[OCMArg checkWithBlock:^BOOL(id obj) {
void (^completion)(NSData *_Nullable, NSError *_Nullable) = obj;
NSDictionary *JSON = @{@"shortLink" : shortURLString};
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:0];
completion(JSONData, nil);
return YES;
}]];

XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
NSURL *link = [NSURL URLWithString:@"https://google.com/abc"];
FIRDynamicLinkComponents *components =
[FIRDynamicLinkComponents componentsWithLink:link domain:@"http://xyz.page.link"];
XCTAssertNotNil(components);
[components
shortenWithCompletion:^(NSURL *_Nullable shortURL, NSArray<NSString *> *_Nullable warnings,
NSError *_Nullable error) {
XCTAssertEqualObjects(shortURL.absoluteString, shortURLString);
[expectation fulfill];
}];
[self waitForExpectationsWithTimeout:0.1 handler:nil];

[keyProviderClassMock verify];
[keyProviderClassMock stopMocking];
[componentsClassMock verify];
[componentsClassMock stopMocking];
}

- (void)testShortenURLReturnsErrorWhenAPIKeyMissing {
NSString *shortURLString = @"https://xyz.page.link/abcd";

Expand Down
4 changes: 3 additions & 1 deletion Firebase/DynamicLinks/CHANGELOG.md
@@ -1,5 +1,7 @@
# v3.3.0
- Introduced a new componentsWithLink:domainURIPrefix: and deprecated the existing componentsWithLink:domain:. (#1962, #2017, #2078, #2097)

# v3.2.0
dmandar marked this conversation as resolved.
Show resolved Hide resolved
- introduced a new componentsWithLink:domainURIPrefix: and deprecated the existing componentsWithLink:domain:. (#1962, #2017, #2078)
- Delete deprecated source files. (#2038)

# v3.1.1
Expand Down
31 changes: 16 additions & 15 deletions Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m
Expand Up @@ -458,7 +458,7 @@ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain {
}
NSString *domainURIPrefix =
domainURL.scheme ? domain : [NSString stringWithFormat:@"https://%@", domain];
return [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:domainURIPrefix];
return [[self alloc] initWithLink:link domainURIPrefix:domainURIPrefix allowNilReturn:NO];
}

- (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain {
Expand All @@ -469,26 +469,23 @@ - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain {
}
NSString *domainURIPrefix =
domainURL.scheme ? domain : [NSString stringWithFormat:@"https://%@", domain];
return [self initWithLink:link domainURIPrefix:domainURIPrefix];
return [self initWithLink:link domainURIPrefix:domainURIPrefix allowNilReturn:NO];
}

#pragma mark Initializers.
+ (instancetype)componentsWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix {
NSURL *domainURIPrefixURL = [NSURL URLWithString:domainURIPrefix];
if (!domainURIPrefixURL) {
FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefix,
@"Invalid domainURIPrefix. Please input a valid URL.");
return nil;
}
if (![[domainURIPrefixURL.scheme lowercaseString] isEqualToString:@"https"]) {
FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme,
@"Invalid domainURIPrefix scheme. Scheme needs to be https");
return nil;
}
return [[self alloc] initWithLink:link domainURIPrefix:domainURIPrefix];
}

- (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix {
return [self initWithLink:link domainURIPrefix:domainURIPrefix allowNilReturn:YES];
}

/// Deprecated init API has nonnull return type. If the check fails, support returning an instance
dmandar marked this conversation as resolved.
Show resolved Hide resolved
/// for the deprecated API (the backend call will return an error. This is pre-existing behavior).
- (instancetype)initWithLink:(NSURL *)link
domainURIPrefix:(NSString *)domainURIPrefix
allowNilReturn:(BOOL)allowNilReturn {
dmandar marked this conversation as resolved.
Show resolved Hide resolved
self = [super init];
if (self) {
_link = link;
Expand All @@ -497,12 +494,16 @@ - (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURI
if (!domainURIPrefixURL) {
FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefix,
@"Invalid domainURIPrefix. Please input a valid URL.");
return nil;
if (allowNilReturn) {
return nil;
}
}
if (![[domainURIPrefixURL.scheme lowercaseString] isEqualToString:@"https"]) {
FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme,
@"Invalid domainURIPrefix scheme. Scheme needs to be https");
return nil;
if (allowNilReturn) {
return nil;
}
}
_domain = [domainURIPrefix copy];
}
Expand Down