Skip to content
This repository has been archived by the owner on Jul 31, 2021. It is now read-only.

Commit

Permalink
rename repositories to store, switch from test_driver to integration_…
Browse files Browse the repository at this point in the history
…test, add some widget tests
  • Loading branch information
mkofdwu committed Jan 23, 2021
1 parent 376ce99 commit 9035d49
Show file tree
Hide file tree
Showing 98 changed files with 773 additions and 501 deletions.
File renamed without changes.
14 changes: 11 additions & 3 deletions test_driver/app.dart → _test_driver/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,26 @@ import 'package:tundr/main.dart' as app;

Future<void> mockMethodChannels() async {
// load sample image for testing
final bytes = (await rootBundle.load('assets/test_images/Wall.jpg'))
final imageBytes = (await rootBundle.load('assets/test_images/Wall.jpg'))
.buffer
.asUint8List();
final videoBytes = (await rootBundle.load('assets/test_images/Vid.mp4'))
.buffer
.asUint8List();
final tempDir = await getTemporaryDirectory();
final imageFile = await File('${tempDir.path}/wall.jpg').writeAsBytes(bytes);
final imageFile =
await File('${tempDir.path}/wall.jpg').writeAsBytes(imageBytes);
final videoFile =
await File('${tempDir.path}/vid.mp4').writeAsBytes(videoBytes);

const imagePickerChannel = MethodChannel('plugins.flutter.io/image_picker');
imagePickerChannel.setMockMethodCallHandler((call) async {
if (call.method == 'pickImage') {
return imageFile.path;
}
if (call.method == 'pickVideo') {}
if (call.method == 'pickVideo') {
return videoFile.path;
}
});

const imageCropperChannel = MethodChannel('plugins.hunghd.vn/image_cropper');
Expand Down
9 changes: 6 additions & 3 deletions test_driver/app_test.dart → _test_driver/app_test.dart
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
import 'package:integration_test/integration_test.dart';
import 'package:test/test.dart';

import 'groups/login.dart' as login;
import 'groups/logout.dart' as logout;
import 'groups/chat/chat.dart' as chat;
import 'groups/edit_filters.dart' as edit_filters;
import 'groups/edit_profile.dart' as edit_profile;
import 'groups/login.dart' as login;
import 'groups/registration.dart' as registration;
import 'groups/most_popular.dart' as most_popular;
import 'groups/search_users.dart' as search_users;
import 'groups/swiping.dart' as swiping;
import 'groups/delete_account.dart' as delete_account;

void main() {
group('Login', login.main);
group('Registration', registration.main);
group('Logout', logout.main);
group('Login', login.main);
group('Swiping page', swiping.main);
group('Most popular page', most_popular.main);
group('Search for users', search_users.main);
group('Edit profile', edit_profile.main);
group('Edit filters', edit_filters.main);
group('Chats', chat.main);
group('Delete account', delete_account.main);
}
File renamed without changes.
27 changes: 27 additions & 0 deletions _test_driver/groups/delete_account.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

import '../utils/constants.dart';

void main() {
FlutterDriver driver;

setUpAll(() async {
driver = await FlutterDriver.connect();
});

tearDownAll(() {
if (driver != null) driver.close();
});

test('Delete account', () async {
await driver.tap(find.byValueKey('meTab'));
await driver.tap(find.byValueKey('settingsBtn'));
await driver.scrollIntoView(find.byValueKey('deleteAccountBtn'));
await driver.tap(find.byValueKey('deleteAccountBtn'));
await driver.tap(find.byValueKey('confirmPasswordField'));
await driver.enterText(USER_PASSWORD);
await driver.tap(find.byValueKey('confirmDeleteAccountBtn'));
await driver.waitFor(find.byType('WelcomePage'));
});
}
67 changes: 67 additions & 0 deletions _test_driver/groups/edit_filters.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

void main() {
FlutterDriver driver;

setUpAll(() async {
driver = await FlutterDriver.connect();
});

tearDownAll(() async {
if (driver != null) {
await driver.close();
}
});

test('filters are displayed correctly', () async {
await driver.tap(find.byValueKey('meTab'));
await driver.tap(find.text('Settings'));
await driver.scrollIntoView(find.text('Filters'));
await driver.tap(find.text('Filters'));
await driver.waitFor(find.descendant(
of: find.byValueKey('Height'),
matching: find.text('1, 300'),
));
await driver.waitFor(find.descendant(
of: find.byValueKey('Personality'),
matching: find.text('2, 4'),
));
});

test('change height filter', () async {
await driver.tap(find.byValueKey('Height'));
await driver.waitFor(find.byType('RangeSliderFilterPage'));
// TODO FIXME dont know how to drag the slider
await driver.tap(find.byType('MyBackButton'));
});

test('change pets filter', () async {
await driver.tap(find.byValueKey('Pets'));
await driver.waitFor(find.byType('TextListFilterPage'));
await driver.tap(find.text('No filter'));
await driver.tap(find.text('Cannot contain any of ...'));
await driver.tap(find.text('Add new'));
await driver.enterText('Cat');
// TODO FIXME dont know how to press enter
await driver.tap(find.byType('MyBackButton'));
});

test('change star sign filter', () async {
await driver.tap(find.byValueKey('Star sign'));
await driver.waitFor(find.byType('CheckboxFilterPage'));
await driver.tap(find.text('Aries'));
await driver.tap(find.text('Cancer'));
await driver.tap(find.byType('MyBackButton'));
await driver.waitFor(find.text('Aries, Cancer'));
});

test('reset star sign', () async {
await driver.tap(find.byValueKey('Star sign'));
await driver.waitFor(find.byType('CheckboxFilterPage'));
await driver.tap(find.text('Aries'));
await driver.tap(find.text('Cancer'));
await driver.tap(find.byType('MyBackButton'));
await driver.waitForAbsent(find.text('Aries, Cancer'));
});
}
79 changes: 79 additions & 0 deletions _test_driver/groups/edit_profile.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

void main() {
FlutterDriver driver;

setUpAll(() async {
driver = await FlutterDriver.connect();
// should be at home page
await driver.waitFor(find.byType('HomePage'));
await driver.tap(find.byValueKey('meTab'));
await driver.tap(find.text('Profile'));
await driver.waitFor(find.byType('EditProfilePage'));
});

tearDownAll(() async {
if (driver != null) await driver.close();
});

test('Change about', () async {
await driver.tap(find.byValueKey('editAboutMeBtn'));
await driver.enterText('This is my about (edited)');
await driver.tap(find.byValueKey('updateAboutMeBtn'));
final text = await driver.getText(find.byValueKey('aboutMeField'));
expect(text, 'This is my about (edited)');
// reset
await driver.tap(find.byValueKey('aboutMeField'));
await driver.enterText('This is my about');
await driver.tap(find.byValueKey('updateAboutMeBtn'));
});

test('Add extra media', () async {
await driver.tap(find.byValueKey('extraMediaEditTile0'));
await driver.tap(find.text('Image'));
await driver.tap(find.text('Camera'));
await driver.tap(find.byValueKey('extraMediaEditTile5'));
await driver.tap(find.text('Video'));
await driver.tap(find.text('Camera'));
});

test('Replace extra media', () async {
await driver.tap(find.byValueKey('extraMediaEditTile0'));
await driver.waitFor(find.byType('EditExtraMediaPage'));
await driver.tap(find.byValueKey('menu'));
await driver.tap(find.text('Replace with video')); // video
await driver.tap(find.byType('MyBackButton'));
});

test('Delete extra media', () async {
await driver.tap(find.byValueKey('extraMediaEditTile0'));
await driver.waitFor(find.byType('EditExtraMediaPage'));
await driver.tap(find.byValueKey('menu'));
await driver.tap(find.byValueKey('deleteBtn'));
await driver.waitFor(find.byType('EditProfilePage'));
});

test('Change all personal info', () async {
await driver.scrollIntoView(find.byType('PersonalInfoList'));
await driver.tap(find.byValueKey('School'));
await driver.tap(find.byValueKey('Height'));
});

test('Edit interests (includes interestbrowser)', () async {
await driver.scrollIntoView(find.byValueKey('editInterestsBtn'));
await driver.tap(find.byValueKey('editInterestsBtn'));
// at interestseditpage (browser)
await driver.tap(find.text('Animals'));
await driver.tap(find.text('Bird Watching'));
// TODO
});

test('Preview profile', () async {
await driver.tap(find.byValueKey('previewProfileBtn'));
await driver.waitFor(find.byType('MainProfilePage'));
await driver.waitFor(find.text('test, 15'));
await driver.waitForAbsent(find.byValueKey('chatWithUserBtn'));
await driver.tap(find.byType('MyBackButton'));
});
}
12 changes: 4 additions & 8 deletions test_driver/groups/login.dart → _test_driver/groups/login.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,6 @@ void main() {
if (driver != null) await driver.close();
});

test('Logs in with correct credentials', () async {
await loginWith(driver);
});

test('Logs out correctly', () async {
await logoutWith(driver);
});

Future<void> invalidLoginWith(
FlutterDriver driver, String username, String password) async {
await loginWith(
Expand All @@ -46,4 +38,8 @@ void main() {
await invalidLoginWith(driver, 'e\tu q\ntesting', '');
await invalidLoginWith(driver, '', 'a \n\r\tpw');
});

test('Logs in with correct credentials', () async {
await loginWith(driver);
});
}
20 changes: 20 additions & 0 deletions _test_driver/groups/logout.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

import '../utils/auth.dart';

void main() {
FlutterDriver driver;

setUpAll(() async {
driver = await FlutterDriver.connect();
});

tearDownAll(() async {
if (driver != null) await driver.close();
});

test('Logs out correctly', () async {
await logoutWith(driver);
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

import '../utils/processes.dart';

const NEW_USERNAME = 'username2';
const NEW_PASSWORD = 'password2';
import '../utils/constants.dart';

void main() {
FlutterDriver driver;
Expand Down Expand Up @@ -33,13 +31,36 @@ void main() {
await driver.tap(find.text('Setup'));
}

test('Shows error with invalid input', () async {
// existing username
await registerWith(driver, 'test', 'password', 'password');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
// not matching passwords
await registerWith(driver, 'username9978', 'password', 'password1');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
// invalid username
await registerWith(driver, ' usernam\ne9978\r \t', 'password', 'password');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
// nothing
await registerWith(driver, '', '', '');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
});

test('Registration flow works correctly', () async {
await registerWith(driver, NEW_USERNAME, NEW_PASSWORD, NEW_PASSWORD);
await registerWith(driver, USER_USERNAME, USER_PASSWORD, USER_PASSWORD);

await driver.runUnsynchronized(() async {
await driver.waitFor(find.byType('SetupNamePage'));
await driver.tap(find.byValueKey('nameField'));
await driver.enterText(NEW_USERNAME);
await driver.enterText(USER_USERNAME);
await driver.tap(find.byType('ScrollDownArrow'));

await driver.waitFor(find.byType('SetupBirthdayPage'));
Expand Down Expand Up @@ -106,38 +127,4 @@ void main() {
await driver.waitFor(find.byType('HomePage'));
});
});

test('Delete account', () async {
await driver.tap(find.byValueKey('meTab'));
await driver.tap(find.byValueKey('settingsBtn'));
await driver.scrollIntoView(find.byValueKey('deleteAccountBtn'));
await driver.tap(find.byValueKey('deleteAccountBtn'));
await driver.tap(find.byValueKey('confirmPasswordField'));
await driver.enterText(NEW_PASSWORD);
await driver.tap(find.byValueKey('confirmDeleteAccountBtn'));
await driver.waitFor(find.byType('WelcomePage'));
});

test('Shows error with invalid input', () async {
// existing username
await registerWith(driver, 'test', 'password', 'password');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
// not matching passwords
await registerWith(driver, 'username9978', 'password', 'password1');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
// invalid username
await registerWith(driver, ' usernam\ne9978\r \t', 'password', 'password');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
// nothing
await registerWith(driver, '', '', '');
await driver.waitFor(find.byType('AlertDialog'));
await driver.tap(find.text('CLOSE'));
await back();
});
}
File renamed without changes.
Loading

0 comments on commit 9035d49

Please sign in to comment.