1+ import 'package:dslideshow_backend/config.dart' ;
2+ import 'package:test/test.dart' ;
3+
4+ void main () {
5+ group ('stripDefaults' , () {
6+ test ('Removes simple fields (String, int, bool) if they match defaults' , () {
7+ final json = {
8+ 'name' : 'Alex' ,
9+ 'age' : 25 ,
10+ 'isAdmin' : false ,
11+ };
12+ final defaults = {
13+ 'name' : 'Alex' , // match -> remove
14+ 'age' : 18 , // diff -> keep
15+ 'isAdmin' : false , // match -> remove
16+ };
17+
18+ final result = stripDefaults (json, defaults);
19+
20+ expect (result, equals ({'age' : 25 }));
21+ });
22+
23+ test ('Preserves fields that do not exist in defaults' , () {
24+ final json = {
25+ 'id' : 100 , // not in defaults
26+ 'name' : 'Alex' ,
27+ };
28+ final defaults = {
29+ 'name' : 'Alex' ,
30+ };
31+
32+ final result = stripDefaults (json, defaults);
33+
34+ expect (result, equals ({'id' : 100 }));
35+ });
36+
37+ test ('Handles null values correctly' , () {
38+ final json = {'desc' : null , 'title' : 'Test' };
39+ final defaults = {'desc' : null , 'title' : null };
40+
41+ final result = stripDefaults (json, defaults);
42+
43+ // desc: null == null -> remove
44+ // title: 'Test' != null -> keep
45+ expect (result, equals ({'title' : 'Test' }));
46+ });
47+
48+ test ('Removes Lists if they are identical' , () {
49+ final json = {
50+ 'tags' : ['a' , 'b' ],
51+ 'ids' : [1 , 2 , 3 ],
52+ };
53+ final defaults = {
54+ 'tags' : ['a' , 'b' ], // match
55+ 'ids' : [1 , 2 ], // diff length
56+ };
57+
58+ final result = stripDefaults (json, defaults);
59+
60+ expect (result, equals ({'ids' : [1 , 2 , 3 ]}));
61+ });
62+
63+ test ('Recursion: Removes parent key if nested object matches completely' , () {
64+ final json = {
65+ 'settings' : {
66+ 'theme' : 'dark' ,
67+ 'sound' : true ,
68+ },
69+ 'other' : 1
70+ };
71+ final defaults = {
72+ 'settings' : {
73+ 'theme' : 'dark' ,
74+ 'sound' : true ,
75+ },
76+ 'other' : 1
77+ };
78+
79+ final result = stripDefaults (json, defaults);
80+
81+ expect (result, isEmpty);
82+ });
83+
84+ test ('Recursion: Preserves parent key if nested object has differences' , () {
85+ final json = {
86+ 'settings' : {
87+ 'theme' : 'light' , // diff
88+ 'sound' : true , // match
89+ }
90+ };
91+ final defaults = {
92+ 'settings' : {
93+ 'theme' : 'dark' ,
94+ 'sound' : true ,
95+ }
96+ };
97+
98+ final result = stripDefaults (json, defaults);
99+
100+ // 'sound' removed, 'theme' kept -> 'settings' kept
101+ expect (result, equals ({
102+ 'settings' : {'theme' : 'light' }
103+ }));
104+ });
105+
106+ test ('Complex nested scenario' , () {
107+ final json = {
108+ 'user' : {
109+ 'meta' : {'v' : 1 , 'flag' : 'A' },
110+ 'data' : [1 , 2 ]
111+ },
112+ 'active' : true
113+ };
114+
115+ final defaults = {
116+ 'user' : {
117+ 'meta' : {'v' : 1 , 'flag' : 'B' }, // flag diff
118+ 'data' : [1 , 2 ] // data match
119+ },
120+ 'active' : true // match
121+ };
122+
123+ final result = stripDefaults (json, defaults);
124+
125+ expect (result, equals ({
126+ 'user' : {
127+ 'meta' : {'flag' : 'A' }
128+ }
129+ }));
130+ });
131+ });
132+ }
0 commit comments