mirror of
https://github.com/inventree/inventree-app.git
synced 2026-07-21 19:55:55 +00:00
UI updates (#849)
* Updated dashboard - Display "outstanding" badges - Display "overdue" badges - Pull-to-refresh * Remove dead code * Refactor app colors * Add "pending shipments" icon * Remove custom spinner * Refactor error dialog * Updated redirect after login * Refactor login/account pages - Better UX and confirmation messages * Refactor API error messages * Improve token management - Secure storage - Handle session expiry - Per-profile HTTPS certificate checks * Improved error messages
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
import "package:flutter/material.dart";
|
||||
import "package:flutter_test/flutter_test.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
|
||||
import "package:inventree/widget/home.dart";
|
||||
|
||||
void main() {
|
||||
Future<void> pumpBadge(
|
||||
WidgetTester tester,
|
||||
Widget? Function(BuildContext context) buildBadge,
|
||||
) async {
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Builder(
|
||||
builder: (context) {
|
||||
return Scaffold(body: buildBadge(context) ?? const SizedBox());
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
group("buildOverdueBadge", () {
|
||||
testWidgets("renders a badge when there is an overdue count", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await pumpBadge(tester, (context) => buildOverdueBadge(context, 5));
|
||||
|
||||
expect(find.text("5"), findsOneWidget);
|
||||
expect(find.byIcon(TablerIcons.calendar_exclamation), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets("renders nothing when the overdue count is zero", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await pumpBadge(tester, (context) => buildOverdueBadge(context, 0));
|
||||
|
||||
expect(find.text("0"), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets("renders nothing when the overdue count is not loaded", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await pumpBadge(tester, (context) => buildOverdueBadge(context, null));
|
||||
|
||||
expect(find.byType(Container), findsNothing);
|
||||
});
|
||||
});
|
||||
|
||||
group("buildOutstandingBadge", () {
|
||||
testWidgets("renders a badge when there is an outstanding count", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await pumpBadge(tester, (context) => buildOutstandingBadge(context, 3));
|
||||
|
||||
expect(find.text("3"), findsOneWidget);
|
||||
expect(find.byIcon(TablerIcons.progress), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets("uses a less prominent color than the overdue badge", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
late Color outstandingColor;
|
||||
late Color overdueColor;
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Builder(
|
||||
builder: (context) {
|
||||
final ColorScheme colors = Theme.of(context).colorScheme;
|
||||
outstandingColor = colors.secondaryContainer;
|
||||
overdueColor = colors.errorContainer;
|
||||
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
children: [
|
||||
buildOutstandingBadge(context, 3)!,
|
||||
buildOverdueBadge(context, 3)!,
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
final containers = tester
|
||||
.widgetList<Container>(find.byType(Container))
|
||||
.toList();
|
||||
|
||||
final Color outstandingBadgeColor =
|
||||
(containers[0].decoration! as BoxDecoration).color!;
|
||||
final Color overdueBadgeColor =
|
||||
(containers[1].decoration! as BoxDecoration).color!;
|
||||
|
||||
expect(outstandingBadgeColor, outstandingColor);
|
||||
expect(overdueBadgeColor, overdueColor);
|
||||
expect(outstandingBadgeColor, isNot(equals(overdueBadgeColor)));
|
||||
});
|
||||
});
|
||||
|
||||
group("buildOrderBadges", () {
|
||||
testWidgets("renders nothing when both counts are empty", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await pumpBadge(
|
||||
tester,
|
||||
(context) =>
|
||||
buildOrderBadges(context, outstandingCount: null, overdueCount: 0),
|
||||
);
|
||||
|
||||
expect(find.byType(Container), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets("renders both badges side by side when both counts are set", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await pumpBadge(
|
||||
tester,
|
||||
(context) =>
|
||||
buildOrderBadges(context, outstandingCount: 7, overdueCount: 2),
|
||||
);
|
||||
|
||||
expect(find.text("7"), findsOneWidget);
|
||||
expect(find.text("2"), findsOneWidget);
|
||||
expect(find.byIcon(TablerIcons.progress), findsOneWidget);
|
||||
expect(find.byIcon(TablerIcons.calendar_exclamation), findsOneWidget);
|
||||
// One outer Row combining the badges, plus one inner Row per badge
|
||||
expect(find.byType(Row), findsNWidgets(3));
|
||||
});
|
||||
|
||||
testWidgets("renders only the overdue badge when outstanding is zero", (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await pumpBadge(
|
||||
tester,
|
||||
(context) =>
|
||||
buildOrderBadges(context, outstandingCount: 0, overdueCount: 4),
|
||||
);
|
||||
|
||||
expect(find.text("4"), findsOneWidget);
|
||||
expect(find.byType(Container), findsOneWidget);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user