Skip to content

Commit 580253a

Browse files
committed
test: add FeedDisplayPreferences tests
1 parent b6ca546 commit 580253a

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import 'package:ht_shared/src/models/user_settings/feed_display_preferences.dart';
2+
import 'package:test/test.dart';
3+
4+
void main() {
5+
group('FeedDisplayPreferences', () {
6+
const defaultPreferences = FeedDisplayPreferences();
7+
8+
test('supports value equality', () {
9+
expect(defaultPreferences, const FeedDisplayPreferences());
10+
});
11+
12+
test('has correct default values', () {
13+
expect(defaultPreferences.headlineDensity, HeadlineDensity.standard);
14+
expect(
15+
defaultPreferences.headlineImageStyle,
16+
HeadlineImageStyle.smallThumbnail,
17+
);
18+
expect(defaultPreferences.showSourceInHeadlineFeed, isTrue);
19+
expect(defaultPreferences.showPublishDateInHeadlineFeed, isTrue);
20+
});
21+
22+
group('fromJson', () {
23+
test('returns correct object when all fields are provided', () {
24+
final json = <String, dynamic>{
25+
'headlineDensity': 'compact',
26+
'headlineImageStyle': 'largeThumbnail',
27+
'showSourceInHeadlineFeed': false,
28+
'showPublishDateInHeadlineFeed': false,
29+
};
30+
expect(
31+
FeedDisplayPreferences.fromJson(json),
32+
const FeedDisplayPreferences(
33+
headlineDensity: HeadlineDensity.compact,
34+
headlineImageStyle: HeadlineImageStyle.largeThumbnail,
35+
showSourceInHeadlineFeed: false,
36+
showPublishDateInHeadlineFeed: false,
37+
),
38+
);
39+
});
40+
41+
test('returns correct object with default values when fields are missing',
42+
() {
43+
final json = <String, dynamic>{}; // Empty JSON
44+
expect(FeedDisplayPreferences.fromJson(json), defaultPreferences);
45+
});
46+
});
47+
48+
group('toJson', () {
49+
test('returns correct JSON map', () {
50+
const preferences = FeedDisplayPreferences(
51+
headlineDensity: HeadlineDensity.compact,
52+
headlineImageStyle: HeadlineImageStyle.largeThumbnail,
53+
showSourceInHeadlineFeed: false,
54+
showPublishDateInHeadlineFeed: false,
55+
);
56+
expect(preferences.toJson(), <String, dynamic>{
57+
'headlineDensity': 'compact',
58+
'headlineImageStyle': 'largeThumbnail',
59+
'showSourceInHeadlineFeed': false,
60+
'showPublishDateInHeadlineFeed': false,
61+
});
62+
});
63+
64+
test('returns default values in JSON if not explicitly set', () {
65+
expect(defaultPreferences.toJson(), <String, dynamic>{
66+
'headlineDensity': 'standard',
67+
'headlineImageStyle': 'smallThumbnail',
68+
'showSourceInHeadlineFeed': true,
69+
'showPublishDateInHeadlineFeed': true,
70+
});
71+
});
72+
});
73+
74+
group('copyWith', () {
75+
test('returns a new object with updated headlineDensity', () {
76+
final updated = defaultPreferences.copyWith(
77+
headlineDensity: HeadlineDensity.compact,);
78+
expect(updated.headlineDensity, HeadlineDensity.compact);
79+
expect(
80+
updated.headlineImageStyle, defaultPreferences.headlineImageStyle,);
81+
});
82+
83+
test('returns a new object with updated headlineImageStyle', () {
84+
final updated = defaultPreferences.copyWith(
85+
headlineImageStyle: HeadlineImageStyle.largeThumbnail,
86+
);
87+
expect(updated.headlineImageStyle, HeadlineImageStyle.largeThumbnail);
88+
expect(updated.headlineDensity, defaultPreferences.headlineDensity);
89+
});
90+
91+
test('returns a new object with updated showSourceInHeadlineFeed', () {
92+
final updated =
93+
defaultPreferences.copyWith(showSourceInHeadlineFeed: false);
94+
expect(updated.showSourceInHeadlineFeed, isFalse);
95+
expect(updated.showPublishDateInHeadlineFeed, isTrue);
96+
});
97+
98+
test('returns a new object with updated showPublishDateInHeadlineFeed',
99+
() {
100+
final updated =
101+
defaultPreferences.copyWith(showPublishDateInHeadlineFeed: false);
102+
expect(updated.showPublishDateInHeadlineFeed, isFalse);
103+
expect(updated.showSourceInHeadlineFeed, isTrue);
104+
});
105+
106+
test('returns a new object with multiple updated properties', () {
107+
final updated = defaultPreferences.copyWith(
108+
headlineDensity: HeadlineDensity.compact,
109+
showSourceInHeadlineFeed: false,
110+
);
111+
expect(updated.headlineDensity, HeadlineDensity.compact);
112+
expect(updated.showSourceInHeadlineFeed, isFalse);
113+
expect(updated.headlineImageStyle, HeadlineImageStyle.smallThumbnail);
114+
});
115+
});
116+
});
117+
}

0 commit comments

Comments
 (0)