@@ -39,6 +39,7 @@ import org.junit.Assert.assertEquals
3939import org.junit.Assert.assertTrue
4040import org.junit.Before
4141import org.junit.Test
42+ import org.junit.jupiter.api.Assertions.assertThrows
4243import org.junit.runner.RunWith
4344import org.robolectric.annotation.Config
4445import java.io.File
@@ -172,4 +173,62 @@ class ProfileManagerTest {
172173
173174 assertEquals(" Serialization round-trip failed!" , original, reconstructed)
174175 }
176+
177+ @Test
178+ fun `renameProfile updates displayName in registry` () {
179+ val manager = ProfileManager .create(context)
180+ val profileId = manager.createNewProfile(" Original Name" )
181+ val newName = " Updated Name"
182+
183+ manager.renameProfile(profileId, newName)
184+
185+ val json = prefs.getString(profileId.value, null )
186+ val metadata = ProfileManager .ProfileMetadata .fromJson(json!! )
187+
188+ assertEquals(newName, metadata.displayName)
189+ }
190+
191+ @Test
192+ fun `renameProfile preserves version and createdTimestamp` () {
193+ val manager = ProfileManager .create(context)
194+ val profileId = manager.createNewProfile(" Original Name" )
195+
196+ val originalJson = prefs.getString(profileId.value, null )
197+ val originalMetadata = ProfileManager .ProfileMetadata .fromJson(originalJson!! )
198+
199+ manager.renameProfile(profileId, " New Name" )
200+
201+ val updatedJson = prefs.getString(profileId.value, null )
202+ val updatedMetadata = ProfileManager .ProfileMetadata .fromJson(updatedJson!! )
203+
204+ assertEquals(" Version must be preserved" , originalMetadata.version, updatedMetadata.version)
205+ assertEquals(" Timestamp must be preserved" , originalMetadata.createdTimestamp, updatedMetadata.createdTimestamp)
206+ }
207+
208+ @Test
209+ fun `renameProfile does not write to disk if name is identical` () {
210+ val manager = ProfileManager .create(context)
211+ val name = " No Change"
212+ val profileId = manager.createNewProfile(name)
213+
214+ val originalJson = prefs.getString(profileId.value, null )
215+
216+ manager.renameProfile(profileId, name)
217+
218+ val currentJson = prefs.getString(profileId.value, null )
219+ assertEquals(" No disk write should occur for identical names" , originalJson, currentJson)
220+ }
221+
222+ @Test
223+ fun `renameProfile throws IllegalArgumentException for missing profile` () {
224+ val manager = ProfileManager .create(context)
225+ val fakeId = ProfileId (" p_ghost" )
226+
227+ val exception =
228+ assertThrows(IllegalArgumentException ::class .java) {
229+ manager.renameProfile(fakeId, " New Name" )
230+ }
231+
232+ assertTrue(exception.message!! .contains(" not found" ))
233+ }
175234}
0 commit comments