Merge feature/source-kinds into ticket/2-source-kinds-learn-tab (#2)
Brings in the News catalog update (#5). ByteByteGo joins the expected on-by-default sets for updated installs, and the catalog test checks the on-by-default set among News sources. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
a6b8d8b537
6 files changed
+139
-44
No files matched your search
@@ -0,0 +1,51 @@
|
||||
import 'package:daily_tech_news/data/default_sources.dart';
|
||||
import 'package:daily_tech_news/models/news_source.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
NewsSource _byId(String id) => defaultSources.singleWhere((s) => s.id == id);
|
||||
|
||||
void main() {
|
||||
test('the News sources on by default are the curated quality set', () {
|
||||
final onByDefault = {
|
||||
for (final s in defaultSources)
|
||||
if (s.enabledByDefault && s.kind == SourceKind.news) s.id,
|
||||
};
|
||||
|
||||
expect(onByDefault, {
|
||||
'heise', 'golem', 'arstechnica', 'hackernews',
|
||||
'techmeme', 'lobsters', 'the-decoder', 'simonwillison',
|
||||
});
|
||||
});
|
||||
|
||||
test('the added Sources read the agreed feeds', () {
|
||||
final feeds = {
|
||||
for (final id in ['techmeme', 'lobsters', 'the-decoder', 'simonwillison'])
|
||||
id: (_byId(id).feedUrl, _byId(id).language),
|
||||
};
|
||||
|
||||
expect(feeds, {
|
||||
'techmeme': ('https://www.techmeme.com/feed.xml', SourceLanguage.en),
|
||||
'lobsters': ('https://lobste.rs/rss', SourceLanguage.en),
|
||||
'the-decoder': ('https://the-decoder.de/feed/', SourceLanguage.de),
|
||||
'simonwillison': ('https://simonwillison.net/atom/entries/', SourceLanguage.en),
|
||||
});
|
||||
});
|
||||
|
||||
test('Hacker News only brings well-voted front page stories', () {
|
||||
expect(_byId('hackernews').feedUrl, 'https://hnrss.org/frontpage?points=150');
|
||||
});
|
||||
|
||||
test('switched-off Sources stay in the catalog, WIRED and Engadget are gone', () {
|
||||
final ids = defaultSources.map((s) => s.id).toSet();
|
||||
|
||||
expect(ids, containsAll(['t3n', 'computerbase', 'techcrunch', 'verge']));
|
||||
expect(ids, isNot(contains('wired')));
|
||||
expect(ids, isNot(contains('engadget')));
|
||||
});
|
||||
|
||||
test('every Source has its own id', () {
|
||||
final ids = defaultSources.map((s) => s.id).toList();
|
||||
|
||||
expect(ids.toSet().length, ids.length);
|
||||
});
|
||||
}
|
||||
@@ -123,7 +123,7 @@ void main() {
|
||||
test('every curated Source from before kinds is a News source', () {
|
||||
final older = defaultSources.where((s) => legacySeenSourceIds.contains(s.id));
|
||||
|
||||
expect(older, hasLength(legacySeenSourceIds.length));
|
||||
expect(older, isNotEmpty);
|
||||
expect(older.where((s) => s.kind != SourceKind.news), isEmpty);
|
||||
});
|
||||
|
||||
|
||||
@@ -78,13 +78,32 @@ void main() {
|
||||
test('an install from before the app remembered seen Sources keeps its toggles', () async {
|
||||
// Toggles saved by an earlier version: golem, t3n and others switched off.
|
||||
SharedPreferences.setMockInitialValues({
|
||||
'enabled_sources': ['heise', 'verge', 'wired'],
|
||||
'enabled_sources': ['heise', 'verge', 'mit-tr'],
|
||||
});
|
||||
|
||||
final newSource = _source('new-source', onByDefault: true);
|
||||
final state = await _launch([...defaultSources, newSource]);
|
||||
|
||||
// ByteByteGo came after the legacy catalog, so it is new to this install too.
|
||||
expect(state.enabledSourceIds, {'heise', 'verge', 'wired', 'bytebytego', 'new-source'});
|
||||
expect(state.enabledSourceIds, {
|
||||
'heise', 'verge', 'mit-tr', 'new-source',
|
||||
// Added to the catalog later, on by default.
|
||||
'techmeme', 'lobsters', 'the-decoder', 'simonwillison', 'bytebytego',
|
||||
});
|
||||
});
|
||||
|
||||
test('an install from before the catalog update gets the new Sources and drops removed ones',
|
||||
() async {
|
||||
// Toggles saved by an earlier version, with WIRED and Engadget switched on.
|
||||
SharedPreferences.setMockInitialValues({
|
||||
'enabled_sources': ['heise', 'golem', 't3n', 'verge', 'wired', 'engadget'],
|
||||
});
|
||||
|
||||
final state = await _launch(defaultSources);
|
||||
|
||||
expect(state.enabledSourceIds, {
|
||||
'heise', 'golem', 't3n', 'verge',
|
||||
'techmeme', 'lobsters', 'the-decoder', 'simonwillison', 'bytebytego',
|
||||
});
|
||||
expect(state.enabledSources.map((s) => s.id), isNot(contains('wired')));
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user