add automated screenshots, fastlane metadata, and appstream metainfo
Fixes #174, fixes #173, fixes #172
This commit is contained in:
parent
7fd4fbec0b
commit
c93004f060
1 changed files with 870 additions and 103 deletions
142
integration_test/screenshots/screenshots_test.dart
Normal file
142
integration_test/screenshots/screenshots_test.dart
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
import "dart:convert";
|
||||
|
||||
import "package:flutter_test/flutter_test.dart";
|
||||
import "package:integration_test/integration_test.dart";
|
||||
import "package:material_ui/material_ui.dart";
|
||||
import "package:nexus/controllers/client.dart";
|
||||
import "package:nexus/controllers/client_state.dart";
|
||||
import "package:nexus/controllers/gomuks_listener.dart";
|
||||
import "package:nexus/controllers/init_complete.dart";
|
||||
import "package:nexus/controllers/key.dart";
|
||||
import "package:nexus/controllers/member_list_opened.dart";
|
||||
import "package:nexus/controllers/rooms.dart";
|
||||
import "package:nexus/controllers/settings.dart";
|
||||
import "package:nexus/controllers/space_edges.dart";
|
||||
import "package:nexus/controllers/top_level_spaces.dart";
|
||||
import "package:nexus/main.dart" as nexus;
|
||||
import "package:nexus/models/account.dart";
|
||||
import "package:nexus/widgets/account_scope.dart";
|
||||
import "package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart";
|
||||
import "package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart";
|
||||
|
||||
import "../helpers/pump_until.dart";
|
||||
import "screenshot_data.dart";
|
||||
import "screenshot_fakes.dart";
|
||||
|
||||
void main() {
|
||||
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
// Where the screenshots are saved, set by `nix run .#screenshots`
|
||||
const outputDirectory = String.fromEnvironment(
|
||||
"SCREENSHOTS_DIR",
|
||||
defaultValue: "build/screenshots",
|
||||
);
|
||||
const accountId = "screenshots";
|
||||
|
||||
final data = ScreenshotData(.now());
|
||||
|
||||
setUpAll(() => nexus.isInBackground = false);
|
||||
|
||||
/// Opens Nexus at the Nexus room, as a [size] window at [pixelRatio],
|
||||
/// pretending to be a phone if [mobile].
|
||||
Future<void> open(
|
||||
WidgetTester tester, {
|
||||
required ThemeMode theme,
|
||||
required Size size,
|
||||
required double pixelRatio,
|
||||
required bool mobile,
|
||||
}) async {
|
||||
tester.view.physicalSize = size;
|
||||
tester.view.devicePixelRatio = pixelRatio;
|
||||
addTearDown(tester.view.reset);
|
||||
|
||||
SharedPreferencesAsyncPlatform.instance =
|
||||
InMemorySharedPreferencesAsync.withData({
|
||||
KeyController.accountsKey: json.encode([
|
||||
Account(
|
||||
id: accountId,
|
||||
userId: ScreenshotData.me,
|
||||
displayName: "QuadRadical",
|
||||
avatar: .parse(ScreenshotData.myAvatar),
|
||||
),
|
||||
]),
|
||||
KeyController.activeAccountKey: accountId,
|
||||
MemberListOpenedController.key: true,
|
||||
"$accountId/${KeyController.spaceKey}": ScreenshotData.nexusSpace,
|
||||
"$accountId/${KeyController.roomKey}": ScreenshotData.nexusRoom,
|
||||
});
|
||||
|
||||
await tester.pumpWidget(
|
||||
AccountScope(
|
||||
initialAccountId: accountId,
|
||||
retry: (_, _) => null,
|
||||
overrides: [
|
||||
ClientController.provider.overrideWith(FakeClientController.new),
|
||||
// Never starts gomuks; the state below is what it would sync
|
||||
GomuksListenerController.provider.overrideWithBuild((_, _) {}),
|
||||
ClientStateController.provider.overrideWithBuild(
|
||||
(_, _) => ScreenshotData.clientState,
|
||||
),
|
||||
InitCompleteController.provider.overrideWithBuild((_, _) => true),
|
||||
RoomsController.provider.overrideWithBuild((_, _) => data.rooms),
|
||||
TopLevelSpacesController.provider.overrideWithBuild(
|
||||
(_, _) => ScreenshotData.topLevelSpaces,
|
||||
),
|
||||
SpaceEdgesController.provider.overrideWithBuild(
|
||||
(_, _) => ScreenshotData.spaceEdges,
|
||||
),
|
||||
SettingsController.provider.overrideWithBuild(
|
||||
(_, _) => .new(
|
||||
theme: theme,
|
||||
useDynamicTheming: false,
|
||||
linuxMobileMode: mobile,
|
||||
),
|
||||
),
|
||||
],
|
||||
child: nexus.App(),
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpUntil(find.text("they're generated now?? let's gooo"));
|
||||
|
||||
// Focused on desktop, which would show a cursor
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
}
|
||||
|
||||
for (final theme in [ThemeMode.dark, ThemeMode.light]) {
|
||||
testWidgets("desktop, ${theme.name}", (tester) async {
|
||||
await open(
|
||||
tester,
|
||||
theme: theme,
|
||||
size: const .new(1920, 1080),
|
||||
pixelRatio: 1,
|
||||
mobile: false,
|
||||
);
|
||||
|
||||
await tester.pumpUntil(find.text("Strudel"));
|
||||
|
||||
await tester.screenshot("$outputDirectory/desktop-${theme.name}.png");
|
||||
});
|
||||
|
||||
testWidgets("phone, ${theme.name}", (tester) async {
|
||||
await open(
|
||||
tester,
|
||||
theme: theme,
|
||||
size: const .new(1080, 2340),
|
||||
pixelRatio: 3,
|
||||
mobile: true,
|
||||
);
|
||||
|
||||
await tester.screenshot("$outputDirectory/phone-chat-${theme.name}.png");
|
||||
|
||||
await tester.tap(
|
||||
find.byTooltip(
|
||||
const DefaultMaterialLocalizations().openAppDrawerTooltip,
|
||||
),
|
||||
);
|
||||
await tester.pumpUntil(find.text("Off-topic"));
|
||||
|
||||
await tester.screenshot("$outputDirectory/phone-rooms-${theme.name}.png");
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue