Skip to content

Commit

Permalink
feat(app): add any fallback
Browse files Browse the repository at this point in the history
  • Loading branch information
tamslo committed Sep 19, 2024
1 parent 9706efa commit 33be194
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 31 deletions.
58 changes: 37 additions & 21 deletions app/integration_test/drugs_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:integration_test/integration_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:provider/provider.dart';

import 'fixtures/drugs/with_any_fallback_guideline.dart';
import 'fixtures/drugs/with_proper_guideline.dart';
import 'fixtures/drugs/without_guidelines.dart';
import 'fixtures/set_user_data_for_drug.dart';
Expand Down Expand Up @@ -65,6 +66,14 @@ void main() {
expectNoGuidelines: true,
);
});

testWidgets('test drug content with any fallback guideline', (tester) async {
await _expectDrugContent(
tester,
mockDrugsCubit,
drug: drugWithAnyFallbackGuideline,
);
});
});
}

Expand Down Expand Up @@ -132,33 +141,40 @@ Future<void> _expectDrugContent(
: drug.guidelines.first.annotations.warningLevel.color,
);
expect(find.byType(Disclaimer), findsOneWidget);
String tooltipText;
List<String> guidelineTexts;
final context = tester.element(find.byType(Scaffold).first);
if (expectNoGuidelines) {
tooltipText = context.l10n.drugs_page_tooltip_guideline_missing;
guidelineTexts = [
context.l10n.drugs_page_guidelines_empty(drug.name),
context.l10n.drugs_page_no_guidelines_text,
];
expect(
find.byTooltip(context.l10n.drugs_page_tooltip_guideline_missing),
findsOneWidget,
);
expect(
find.text(context.l10n.drugs_page_guidelines_empty(drug.name)),
findsOneWidget,
);
expect(
find.text(context.l10n.drugs_page_no_guidelines_text),
findsOneWidget,
);
} else {
tooltipText = context.l10n.drugs_page_tooltip_guideline_present(
drug.guidelines.first.externalData.first.source,
expect(
find.byTooltip(context.l10n.drugs_page_tooltip_guideline_present(
drug.guidelines.first.externalData.first.source,
)),
findsOneWidget,
);
expect(
find.text(drug.guidelines.first.annotations.implication),
findsOneWidget,
);
guidelineTexts = [
drug.guidelines.first.annotations.implication,
drug.guidelines.first.annotations.recommendation,
...drug.guidelineGenotypes
];
}
for (final guidelineText in guidelineTexts) {
expect(
find.textContaining(guidelineText),
find.textContaining(drug.guidelines.first.annotations.recommendation),
findsOneWidget,
);
for (final genotypeKey in drug.guidelineGenotypes) {
expect(
find.text(genotypeKey),
findsOneWidget,
);
}
}
expect(
find.byTooltip(tooltipText),
findsOneWidget,
);
}
28 changes: 18 additions & 10 deletions app/lib/common/models/drug/drug.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,16 +78,24 @@ extension DrugExtension on Drug {
: namesMatch;
}

Guideline? get userGuideline => guidelines.firstOrNullWhere(
(guideline) => guideline.lookupkey.all(
(gene, variants) => variants.any((variant) =>
variants.contains(UserData.lookupFor(
GenotypeKey(gene, variant).value,
drug: name,
)
)),
),
);
Guideline? get userGuideline {
final anyFallbackGuideline = guidelines.firstOrNullWhere(
(guideline) => guideline.lookupkey.all(
(gene, variants) => variants.any((variant) => variant == '*')
),
);
if (anyFallbackGuideline != null) return anyFallbackGuideline;
return guidelines.firstOrNullWhere(
(guideline) => guideline.lookupkey.all(
(gene, variants) => variants.any((variant) =>
variants.contains(UserData.lookupFor(
GenotypeKey(gene, variant).value,
drug: name,
)
)),
),
);
}

Guideline? get userOrFirstGuideline => userGuideline ??
(guidelines.isNotEmpty ? guidelines.first : null);
Expand Down

0 comments on commit 33be194

Please sign in to comment.