@@ -146,6 +146,22 @@ public function it_sets_all_values()
146146 'test ' => ['a ' => 'A ' , 'b ' => 'B ' ],
147147 'statamic.system.view_config_allowlist ' => ['@default ' , 'test.a ' , 'test.b ' ],
148148 ]);
149+
150+ $ this ->app ->bind ('statamic.addons.test-addon.settings_blueprint ' , fn () => [
151+ 'tabs ' => [
152+ 'main ' => [
153+ 'sections ' => [
154+ [
155+ 'fields ' => [
156+ ['handle ' => 'api_key ' , 'field ' => ['type ' => 'text ' , 'default ' => 'my-default-key ' ]],
157+ ['handle ' => 'another_field ' , 'field ' => ['type ' => 'text ' , 'default ' => 'default-value ' ]],
158+ ],
159+ ],
160+ ],
161+ ],
162+ ],
163+ ]);
164+
149165 $ addon = $ this ->makeFromPackage ();
150166 $ settings = new Settings ($ addon , ['foo ' => 'bar ' ]);
151167
@@ -158,13 +174,90 @@ public function it_sets_all_values()
158174 ]);
159175
160176 $ this ->assertEquals ([
177+ 'api_key ' => 'my-default-key ' ,
178+ 'another_field ' => 'default-value ' ,
161179 'alfa ' => 'bravo ' ,
162180 'charlie ' => 'A ' ,
163181 'delta ' => ['echo ' => 'B ' ],
164182 ], $ settings ->all ());
165183 $ this ->assertEquals ($ raw , $ settings ->raw ());
166184 }
167185
186+ #[Test]
187+ public function it_applies_blueprint_defaults_to_resolved_settings ()
188+ {
189+ $ this ->app ->bind ('statamic.addons.test-addon.settings_blueprint ' , fn () => [
190+ 'tabs ' => [
191+ 'main ' => [
192+ 'sections ' => [
193+ [
194+ 'fields ' => [
195+ ['handle ' => 'api_key ' , 'field ' => ['type ' => 'text ' , 'default ' => 'my-default-key ' ]],
196+ ['handle ' => 'no_default_field ' , 'field ' => ['type ' => 'text ' ]],
197+ ],
198+ ],
199+ ],
200+ ],
201+ ],
202+ ]);
203+
204+ $ addon = $ this ->makeFromPackage ();
205+ $ settings = new Settings ($ addon , []);
206+
207+ $ this ->assertEquals ('my-default-key ' , $ settings ->get ('api_key ' ));
208+ $ this ->assertNull ($ settings ->get ('no_default_field ' ));
209+ }
210+
211+ #[Test]
212+ public function it_does_not_include_blueprint_defaults_in_raw_settings ()
213+ {
214+ $ this ->app ->bind ('statamic.addons.test-addon.settings_blueprint ' , fn () => [
215+ 'tabs ' => [
216+ 'main ' => [
217+ 'sections ' => [
218+ [
219+ 'fields ' => [
220+ ['handle ' => 'api_key ' , 'field ' => ['type ' => 'text ' , 'default ' => 'my-default-key ' ]],
221+ ],
222+ ],
223+ ],
224+ ],
225+ ],
226+ ]);
227+
228+ $ addon = $ this ->makeFromPackage ();
229+ $ settings = new Settings ($ addon , []);
230+
231+ $ this ->assertArrayNotHasKey ('api_key ' , $ settings ->raw ());
232+ $ this ->assertSame ([], $ settings ->raw ());
233+ }
234+
235+ #[Test]
236+ public function saved_settings_take_precedence_over_blueprint_defaults ()
237+ {
238+ $ this ->app ->bind ('statamic.addons.test-addon.settings_blueprint ' , fn () => [
239+ 'tabs ' => [
240+ 'main ' => [
241+ 'sections ' => [
242+ [
243+ 'fields ' => [
244+ ['handle ' => 'api_key ' , 'field ' => ['type ' => 'text ' , 'default ' => 'my-default-key ' ]],
245+ ['handle ' => 'another_field ' , 'field ' => ['type ' => 'text ' , 'default ' => 'default-value ' ]],
246+ ],
247+ ],
248+ ],
249+ ],
250+ ],
251+ ]);
252+
253+ $ addon = $ this ->makeFromPackage ();
254+ $ settings = new Settings ($ addon , ['api_key ' => 'saved-key ' ]);
255+
256+ $ this ->assertEquals ('saved-key ' , $ settings ->get ('api_key ' ));
257+ $ this ->assertEquals ('default-value ' , $ settings ->get ('another_field ' ));
258+ $ this ->assertSame (['api_key ' => 'saved-key ' ], $ settings ->raw ());
259+ }
260+
168261 #[Test]
169262 public function it_saves_settings ()
170263 {
0 commit comments