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

E2e tests split #2401

Merged
merged 15 commits into from
Feb 19, 2019
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions Example/Auth/E2eTests/BYOAuthTests.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*
* Copyright 2019 Google
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#import "FIRAuthE2eTestsBase.h"

/** The url for obtaining a valid custom token string used to test BYOAuth. */
static NSString *const kCustomTokenUrl = @"https://fb-sa-1211.appspot.com/token";

/** The invalid custom token string for testing BYOAuth. */
static NSString *const kInvalidCustomToken = @"invalid token.";

/** The user name string for BYOAuth testing account. */
static NSString *const kTestingAccountUserID = @"BYU_Test_User_ID";

@interface BYOAuthTests : FIRAuthE2eTestsBase

@end

@implementation BYOAuthTests

/** Test sign in with a valid BYOAuth token retrived from a remote server. */
- (void)testSignInWithValidBYOAuthToken {
NSError *error;
NSString *customToken = [NSString stringWithContentsOfURL:[NSURL URLWithString:kCustomTokenUrl]
encoding:NSUTF8StringEncoding
error:&error];
if (!customToken) {
GREYFail(@"There was an error retrieving the custom token: %@", error);
}

[[[EarlGrey selectElementWithMatcher:grey_allOf(grey_text(@"Sign In (BYOAuth)"),
grey_sufficientlyVisible(), nil)]
usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, kShortScrollDistance)
onElementWithMatcher:grey_allOf(grey_scrollView(), grey_kindOfClass([UITableView class]),
nil)] performAction:grey_tap()];

[[[EarlGrey selectElementWithMatcher:grey_kindOfClass([UITextView class])]
performAction:grey_replaceText(customToken)] assertWithMatcher:grey_text(customToken)];

[[EarlGrey selectElementWithMatcher:grey_text(@"Done")] performAction:grey_tap()];

[self waitForElementWithText:@"OK" withDelay:kWaitForElementTimeOut];

[[EarlGrey selectElementWithMatcher:grey_text(@"OK")] performAction:grey_tap()];

[[[EarlGrey selectElementWithMatcher:grey_allOf(grey_text(kTestingAccountUserID),
grey_sufficientlyVisible(), nil)]
usingSearchAction:grey_scrollInDirection(kGREYDirectionUp, kShortScrollDistance)
onElementWithMatcher:grey_allOf(grey_scrollView(), grey_kindOfClass([UITableView class]),
nil)] assertWithMatcher:grey_sufficientlyVisible()];
}

- (void)testSignInWithInvalidBYOAuthToken {
[[[EarlGrey selectElementWithMatcher:grey_allOf(grey_text(@"Sign In (BYOAuth)"),
grey_sufficientlyVisible(), nil)]
usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, kShortScrollDistance)
onElementWithMatcher:grey_allOf(grey_scrollView(), grey_kindOfClass([UITableView class]),
nil)] performAction:grey_tap()];

[[[EarlGrey selectElementWithMatcher:grey_kindOfClass([UITextView class])]
performAction:grey_replaceText(kInvalidCustomToken)]
assertWithMatcher:grey_text(kInvalidCustomToken)];

[[EarlGrey selectElementWithMatcher:grey_text(@"Done")] performAction:grey_tap()];

NSString *invalidTokenErrorMessage = @"Sign-In Error";

[self waitForElementWithText:invalidTokenErrorMessage withDelay:kWaitForElementTimeOut];

[[EarlGrey selectElementWithMatcher:grey_text(@"OK")] performAction:grey_tap()];
}

@end
56 changes: 56 additions & 0 deletions Example/Auth/E2eTests/FIRAuthE2eTests.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright 2017 Google
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#import "FIRAuthE2eTestsBase.h"

@interface FIRAuthE2eTests : FIRAuthE2eTestsBase

@end

@implementation FIRAuthE2eTests

- (void)testSignInExistingUser {
NSString *email = @"[email protected]";
[[[EarlGrey selectElementWithMatcher:grey_allOf(grey_text(@"Sign in with Email/Password"),
grey_sufficientlyVisible(), nil)]
usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, kShortScrollDistance)
onElementWithMatcher:grey_allOf(grey_scrollView(), grey_kindOfClass([UITableView class]),
nil)] performAction:grey_tap()];

id<GREYMatcher> comfirmationButtonMatcher =
grey_allOf(grey_kindOfClass([UILabel class]), grey_accessibilityLabel(@"OK"), nil);

[[EarlGrey selectElementWithMatcher:
#warning TODO Add accessibilityIdentifiers for the elements.
grey_kindOfClass(NSClassFromString(@"_UIAlertControllerView"))]
performAction:grey_typeText(email)];

[[EarlGrey selectElementWithMatcher:comfirmationButtonMatcher] performAction:grey_tap()];

[[EarlGrey
selectElementWithMatcher:grey_kindOfClass(NSClassFromString(@"_UIAlertControllerView"))]
performAction:grey_typeText(@"password")];

[[EarlGrey selectElementWithMatcher:comfirmationButtonMatcher] performAction:grey_tap()];

[[[EarlGrey
selectElementWithMatcher:grey_allOf(grey_text(email), grey_sufficientlyVisible(), nil)]
usingSearchAction:grey_scrollInDirection(kGREYDirectionUp, kShortScrollDistance)
onElementWithMatcher:grey_allOf(grey_scrollView(), grey_kindOfClass([UITableView class]),
nil)] assertWithMatcher:grey_sufficientlyVisible()];
}

@end
42 changes: 42 additions & 0 deletions Example/Auth/E2eTests/FIRAuthE2eTestsBase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright 2019 Google
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#import <XCTest/XCTest.h>

#import <EarlGrey/EarlGrey.h>

#import "FirebaseAuth.h"

NS_ASSUME_NONNULL_BEGIN

extern CGFloat const kShortScrollDistance;

extern NSTimeInterval const kWaitForElementTimeOut;

/** Convenience function for EarlGrey tests. */
id<GREYMatcher> grey_scrollView(void);

@interface FIRAuthE2eTestsBase : XCTestCase

/** Sign out current account. */
- (void)signOut;

/** Wait for an element with text to appear. */
- (void)waitForElementWithText:(NSString *)text withDelay:(NSTimeInterval)maxDelay;

@end

NS_ASSUME_NONNULL_END
70 changes: 70 additions & 0 deletions Example/Auth/E2eTests/FIRAuthE2eTestsBase.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* Copyright 2019 Google
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#import "FIRAuthE2eTestsBase.h"

CGFloat const kShortScrollDistance = 400;

NSTimeInterval const kWaitForElementTimeOut = 15;

/** Convenience function for EarlGrey tests. */
id<GREYMatcher> grey_scrollView(void) {
return [GREYMatchers matcherForKindOfClass:[UIScrollView class]];
}

@implementation FIRAuthE2eTestsBase

/** To reset the app so that each test sees the app in a clean state. */
- (void)setUp {
[super setUp];

[self signOut];

[[EarlGrey selectElementWithMatcher:grey_allOf(grey_scrollView(),
grey_kindOfClass([UITableView class]), nil)]
performAction:grey_scrollToContentEdge(kGREYContentEdgeTop)];
}

- (void)tearDown {
[super tearDown];
}

/** Sign out current account. */
- (void)signOut {
NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];

// Just log the error because we don't want to fail the test if signing out fails.
if (!status) {
NSLog(@"Error signing out: %@", signOutError);
}
}

/** Wait for an element with text to appear. */
- (void)waitForElementWithText:(NSString *)text withDelay:(NSTimeInterval)maxDelay {
GREYCondition *displayed =
[GREYCondition conditionWithName:@"Wait for element"
block:^BOOL {
NSError *error = nil;
[[EarlGrey selectElementWithMatcher:grey_text(text)]
assertWithMatcher:grey_sufficientlyVisible()
error:&error];
return !error;
}];
GREYAssertTrue([displayed waitWithTimeout:maxDelay], @"Failed to wait for element '%@'.", text);
}

@end
File renamed without changes.
38 changes: 38 additions & 0 deletions Example/Auth/E2eTests/VerifyIOSClientTests.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2018 Google
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#import "FIRAuthE2eTestsBase.h"

@interface VerifyIOSClientTests : FIRAuthE2eTestsBase

@end

@implementation VerifyIOSClientTests

/** Test verify ios client*/
- (void)testVerifyIOSClient {
[[[EarlGrey selectElementWithMatcher:grey_allOf(grey_text(@"Verify iOS client"),
grey_sufficientlyVisible(), nil)]
usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, kShortScrollDistance)
onElementWithMatcher:grey_allOf(grey_scrollView(), grey_kindOfClass([UITableView class]),
nil)] performAction:grey_tap()];

[self waitForElementWithText:@"OK" withDelay:kWaitForElementTimeOut];

[[EarlGrey selectElementWithMatcher:grey_text(@"OK")] performAction:grey_tap()];
}

@end
89 changes: 0 additions & 89 deletions Example/Auth/EarlGreyTests/FIRVerifyIOSClientTests.m

This file was deleted.

Loading