@@ -229,6 +229,142 @@ struct SiteSpecificAppSettingsStoreMethodsTests {
229229 #expect( retrievedVariationTerms == variationTerms)
230230 #expect( retrievedCouponTerms == couponTerms)
231231 }
232+
233+ // MARK: - POS Last Full Sync Date Tests
234+
235+ @Test func getPOSLastFullSyncDate_returns_nil_when_no_date_exists( ) {
236+ // When
237+ let syncDate = sut. getPOSLastFullSyncDate ( for: siteID)
238+
239+ // Then
240+ #expect( syncDate == nil )
241+ }
242+
243+ @Test func getPOSLastFullSyncDate_returns_saved_date( ) throws {
244+ // Given
245+ let expectedDate = Date ( )
246+ let storeSettings = GeneralStoreSettings ( posLastFullSyncDate: expectedDate)
247+ let existingData = GeneralStoreSettingsBySite ( storeSettingsBySite: [ siteID: storeSettings] )
248+ try fileStorage. write ( existingData, to: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
249+
250+ // When
251+ let syncDate = sut. getPOSLastFullSyncDate ( for: siteID)
252+
253+ // Then
254+ #expect( syncDate == expectedDate)
255+ }
256+
257+ @Test func setPOSLastFullSyncDate_saves_date_successfully( ) throws {
258+ // Given
259+ let dateToSave = Date ( )
260+ let existingData = GeneralStoreSettingsBySite ( storeSettingsBySite: [ siteID: GeneralStoreSettings ( ) ] )
261+ try fileStorage. write ( existingData, to: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
262+
263+ // When
264+ sut. setPOSLastFullSyncDate ( dateToSave, for: siteID)
265+
266+ // Then
267+ let savedData : GeneralStoreSettingsBySite = try fileStorage. data ( for: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
268+ #expect( savedData. storeSettingsBySite [ siteID] ? . posLastFullSyncDate == dateToSave)
269+ }
270+
271+ @Test func setPOSLastFullSyncDate_can_set_nil_date( ) throws {
272+ // Given
273+ let existingDate = Date ( )
274+ let storeSettings = GeneralStoreSettings ( posLastFullSyncDate: existingDate)
275+ let existingData = GeneralStoreSettingsBySite ( storeSettingsBySite: [ siteID: storeSettings] )
276+ try fileStorage. write ( existingData, to: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
277+
278+ // When
279+ sut. setPOSLastFullSyncDate ( nil , for: siteID)
280+
281+ // Then
282+ let savedData : GeneralStoreSettingsBySite = try fileStorage. data ( for: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
283+ #expect( savedData. storeSettingsBySite [ siteID] ? . posLastFullSyncDate == nil )
284+ }
285+
286+ @Test func setPOSLastFullSyncDate_preserves_other_settings( ) throws {
287+ // Given
288+ let existingStoreID = " existing-store "
289+ let existingTerms = [ " existing " , " terms " ]
290+ let storeSettings = GeneralStoreSettings (
291+ storeID: existingStoreID,
292+ searchTermsByKey: [ " product_search_terms " : existingTerms]
293+ )
294+ let existingData = GeneralStoreSettingsBySite ( storeSettingsBySite: [ siteID: storeSettings] )
295+ try fileStorage. write ( existingData, to: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
296+
297+ let dateToSave = Date ( )
298+
299+ // When
300+ sut. setPOSLastFullSyncDate ( dateToSave, for: siteID)
301+
302+ // Then
303+ let savedData : GeneralStoreSettingsBySite = try fileStorage. data ( for: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
304+ let savedSettings = savedData. storeSettingsBySite [ siteID]
305+ #expect( savedSettings? . posLastFullSyncDate == dateToSave)
306+ #expect( savedSettings? . storeID == existingStoreID)
307+ #expect( savedSettings? . searchTermsByKey [ " product_search_terms " ] == existingTerms)
308+ }
309+
310+ @Test func setPOSLastFullSyncDate_preserves_dates_for_other_sites( ) throws {
311+ // Given
312+ let otherSiteID : Int64 = 456
313+ let otherSiteDate = Date ( ) . addingTimeInterval ( - 3600 )
314+ let otherSiteSettings = GeneralStoreSettings ( posLastFullSyncDate: otherSiteDate)
315+ let existingData = GeneralStoreSettingsBySite ( storeSettingsBySite: [ otherSiteID: otherSiteSettings] )
316+ try fileStorage. write ( existingData, to: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
317+
318+ let newDate = Date ( )
319+
320+ // When
321+ sut. setPOSLastFullSyncDate ( newDate, for: siteID)
322+
323+ // Then
324+ let savedData : GeneralStoreSettingsBySite = try fileStorage. data ( for: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
325+ #expect( savedData. storeSettingsBySite [ siteID] ? . posLastFullSyncDate == newDate)
326+ #expect( savedData. storeSettingsBySite [ otherSiteID] ? . posLastFullSyncDate == otherSiteDate)
327+ }
328+
329+ @Test func getPOSLastFullSyncDate_handles_different_sites_independently( ) throws {
330+ // Given
331+ let siteA : Int64 = 123
332+ let siteB : Int64 = 456
333+ let dateA = Date ( )
334+ let dateB = Date ( ) . addingTimeInterval ( - 3600 )
335+
336+ let storeSettingsA = GeneralStoreSettings ( posLastFullSyncDate: dateA)
337+ let storeSettingsB = GeneralStoreSettings ( posLastFullSyncDate: dateB)
338+ let existingData = GeneralStoreSettingsBySite ( storeSettingsBySite: [
339+ siteA: storeSettingsA,
340+ siteB: storeSettingsB
341+ ] )
342+ try fileStorage. write ( existingData, to: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
343+
344+ // When
345+ let retrievedDateA = sut. getPOSLastFullSyncDate ( for: siteA)
346+ let retrievedDateB = sut. getPOSLastFullSyncDate ( for: siteB)
347+
348+ // Then
349+ #expect( retrievedDateA == dateA)
350+ #expect( retrievedDateB == dateB)
351+ }
352+
353+ @Test func resetStoreSettings_clears_pos_sync_date( ) throws {
354+ // Given
355+ let syncDate = Date ( )
356+ let storeSettings = GeneralStoreSettings ( posLastFullSyncDate: syncDate)
357+ let existingData = GeneralStoreSettingsBySite ( storeSettingsBySite: [ siteID: storeSettings] )
358+ try fileStorage. write ( existingData, to: SiteSpecificAppSettingsStoreMethods . defaultGeneralStoreSettingsFileURL)
359+
360+ // When
361+ sut. resetStoreSettings ( )
362+
363+ // Then
364+ #expect( fileStorage. deleteIsHit == true )
365+ let retrievedDate = sut. getPOSLastFullSyncDate ( for: siteID)
366+ #expect( retrievedDate == nil )
367+ }
232368}
233369
234370// MARK: - Mock FileStorage
0 commit comments