From f0f35f8c0ba55beb7576cecfb009e1c95ab1d773 Mon Sep 17 00:00:00 2001 From: Roderic Campbell Date: Wed, 29 May 2019 16:43:51 -0700 Subject: [PATCH] Update date formatter to use NSISO8601DateFormatter --- .../Helpers/NSDateUtilities/NSDate+Utilities.h | 2 ++ .../Helpers/NSDateUtilities/NSDate+Utilities.m | 12 ++++++++++++ .../UserNotification/GroupBackgroundFetcher.m | 1 - SF iOS/SF iOS/Location/FeedFetch/FeedFetchService.m | 3 ++- SF iOS/SF iOS/Models/Event.h | 2 +- SF iOS/SF iOS/Models/Event.m | 6 +----- SF iOS/SF iOSTests/EventDataSourceTests.m | 4 +++- SF iOS/SF iOSTests/EventNotificationCopyTests.m | 4 +++- SF iOS/SF iOSTests/EventTests.m | 8 ++++++-- SF iOS/SF iOSTests/FeedItemTests.m | 3 ++- SF iOS/SF iOSTests/UNNotificationContentTests.m | 3 ++- 11 files changed, 34 insertions(+), 14 deletions(-) diff --git a/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.h b/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.h index 929b664..01ea79b 100644 --- a/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.h +++ b/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.h @@ -27,6 +27,8 @@ NS_ASSUME_NONNULL_BEGIN - (NSString *)stringWithformat:(NSString *)format; ++ (NSISO8601DateFormatter *)formatter; + - (NSString *)weekdayName; - (BOOL)isLaterThanDate:(NSDate *)date; diff --git a/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.m b/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.m index 036410e..0e91e6c 100644 --- a/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.m +++ b/SF iOS/SF iOS/Helpers/NSDateUtilities/NSDate+Utilities.m @@ -58,6 +58,18 @@ - (NSString *)abbreviatedTimeintervalFromNow { return [NSDate abbreviatedTimeIntervalForTimeInterval:difference]; } ++ (NSISO8601DateFormatter *)formatter { + NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; + [formatter setFormatOptions: NSISO8601DateFormatWithFullDate | + NSISO8601DateFormatWithFullTime | + NSISO8601DateFormatWithTimeZone | + NSISO8601DateFormatWithDashSeparatorInDate | + NSISO8601DateFormatWithColonSeparatorInTime | + NSISO8601DateFormatWithColonSeparatorInTimeZone | + NSISO8601DateFormatWithFractionalSeconds]; + return formatter; +} + + (NSString *)abbreviatedTimeIntervalForTimeInterval:(NSTimeInterval)timeInterval { NSDateComponentsFormatter *formatter = [NSDateComponentsFormatter new]; formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated; diff --git a/SF iOS/SF iOS/Helpers/UserNotification/GroupBackgroundFetcher.m b/SF iOS/SF iOS/Helpers/UserNotification/GroupBackgroundFetcher.m index 24166c9..a06ca7b 100644 --- a/SF iOS/SF iOS/Helpers/UserNotification/GroupBackgroundFetcher.m +++ b/SF iOS/SF iOS/Helpers/UserNotification/GroupBackgroundFetcher.m @@ -51,7 +51,6 @@ - (void)start { __weak typeof(self) welf = self; for (Group *group in groups) { - NSString *groupName = group.name; dispatch_group_enter(dipatchGroup); BackgroundFetcher *fetcher = [[BackgroundFetcher alloc] initForGroup:group withCompletionHandler:^(UIBackgroundFetchResult result) { switch (result) { diff --git a/SF iOS/SF iOS/Location/FeedFetch/FeedFetchService.m b/SF iOS/SF iOS/Location/FeedFetch/FeedFetchService.m index ad5c1b6..31b4a64 100644 --- a/SF iOS/SF iOS/Location/FeedFetch/FeedFetchService.m +++ b/SF iOS/SF iOS/Location/FeedFetch/FeedFetchService.m @@ -8,6 +8,7 @@ #import "FeedFetchService.h" #import "FeedFetchOperation.h" #import "Event.h" +#import "NSDate+Utilities.h" @interface FeedFetchService () @property (nonatomic) NSOperationQueue *feedFetchQueue; @@ -31,7 +32,7 @@ -(void)getFeedWithHandler:(FeedFetchCompletionHandler)completionHandler { NSError *_Nullable error) { NSMutableArray *events = [[NSMutableArray alloc] initWithCapacity:feed.count]; for (NSDictionary *dict in feed) { - [events addObject:[[Event alloc] initWithDictionary:dict]]; + [events addObject:[[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]]; } completionHandler(events, error); }]; diff --git a/SF iOS/SF iOS/Models/Event.h b/SF iOS/SF iOS/Models/Event.h index 9ba8dda..a8bae9b 100644 --- a/SF iOS/SF iOS/Models/Event.h +++ b/SF iOS/SF iOS/Models/Event.h @@ -32,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSString *venueName; @property (nonatomic, readonly) Location *location; -- (instancetype)initWithDictionary:(NSDictionary *)record; +- (instancetype)initWithDictionary:(NSDictionary *)record dateFormatter:(NSISO8601DateFormatter *)formatter; - (nullable NSURL *)imageFileURL; - (nullable NSURL *)venueURL; diff --git a/SF iOS/SF iOS/Models/Event.m b/SF iOS/SF iOS/Models/Event.m index a80ff5e..fa9107d 100644 --- a/SF iOS/SF iOS/Models/Event.m +++ b/SF iOS/SF iOS/Models/Event.m @@ -12,15 +12,11 @@ @implementation Event -- (instancetype)initWithDictionary:(NSDictionary *)record { +- (instancetype)initWithDictionary:(NSDictionary *)record dateFormatter:(NSISO8601DateFormatter *)formatter { if (self = [super init]) { self.eventID = record[@"id"]; self.groupID = record[@"group_id"]; self.type = 0; - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; - NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; - [formatter setLocale:locale]; NSString *startAt = record[@"start_at"]; self.date = [formatter dateFromString:startAt]; self.endDate = [formatter dateFromString:record[@"end_at"]]; diff --git a/SF iOS/SF iOSTests/EventDataSourceTests.m b/SF iOS/SF iOSTests/EventDataSourceTests.m index 543d15a..68be7f9 100644 --- a/SF iOS/SF iOSTests/EventDataSourceTests.m +++ b/SF iOS/SF iOSTests/EventDataSourceTests.m @@ -8,6 +8,7 @@ #import #import "EventDataSource.h" +#import "NSDate+Utilities.h" #import "FeedProviderDelegate.h" #import #import "Group.h" @@ -43,8 +44,9 @@ - (void)setUp { self.group = [[Group alloc] init]; self.group.groupID = @"28ef50f9-b909-4f03-9a69-a8218a8cbd99"; - self.event = [[Event alloc] initWithDictionary:dict]; + self.event = [[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]; + XCTAssertNotNil(self.event.date); _fetchingExpectation = [self expectationWithDescription:@"Wait for events"]; self.realmConfiguration = [RLMRealmConfiguration defaultConfiguration]; diff --git a/SF iOS/SF iOSTests/EventNotificationCopyTests.m b/SF iOS/SF iOSTests/EventNotificationCopyTests.m index 6af895c..ec82245 100644 --- a/SF iOS/SF iOSTests/EventNotificationCopyTests.m +++ b/SF iOS/SF iOSTests/EventNotificationCopyTests.m @@ -8,6 +8,8 @@ #import #import "NSString+EventNotifications.h" #import "Event.h" +#import "NSDate+Utilities.h" + @interface EventNotificationCopyTests : XCTestCase @property (nonatomic) Event *event; @@ -34,7 +36,7 @@ - (void)setUp { @"venue": venue, @"start_at": @"2019-04-03T15:30:00.000Z" }; - self.event = [[Event alloc] initWithDictionary:dict]; + self.event = [[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]; self.event.type = EventTypeSFCoffee; self.event.date = [NSDate dateWithTimeIntervalSince1970:123456]; } diff --git a/SF iOS/SF iOSTests/EventTests.m b/SF iOS/SF iOSTests/EventTests.m index 92dd9fa..9bd5229 100644 --- a/SF iOS/SF iOSTests/EventTests.m +++ b/SF iOS/SF iOSTests/EventTests.m @@ -8,6 +8,8 @@ #import #import "Event.h" #import "Venue.h" +#import "NSDate+Utilities.h" + @interface EventTests : XCTestCase @property (nonatomic) Event *event; @@ -34,10 +36,12 @@ - (void)setUp { @"venue": venue, @"start_at": @"2019-04-03T15:30:00.000Z" }; - self.event = [[Event alloc] initWithDictionary:dict]; + self.event = [[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]; self.event.type = EventTypeSFCoffee; self.event.date = [NSDate new]; - self.secondEvent = [[Event alloc] initWithDictionary:dict]; + self.event = [[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]; + self.secondEvent = [[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]; + self.secondEvent.type = EventTypeSFCoffee; self.secondEvent.date = self.event.date; } diff --git a/SF iOS/SF iOSTests/FeedItemTests.m b/SF iOS/SF iOSTests/FeedItemTests.m index 208f790..aec0ad6 100644 --- a/SF iOS/SF iOSTests/FeedItemTests.m +++ b/SF iOS/SF iOSTests/FeedItemTests.m @@ -9,6 +9,7 @@ #import #import "Event.h" #import "FeedItem.h" +#import "NSDate+Utilities.h" @interface FeedItemTests : XCTestCase @@ -38,7 +39,7 @@ - (void)setUp { @"venue": venue, @"start_at": @"2019-04-03T15:30:00.000Z" }; - self.event = [[Event alloc] initWithDictionary:dict]; + self.event = [[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]; self.event.type = EventTypeSFCoffee; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; self.noon = [calendar dateBySettingHour:12 minute:0 second:0 ofDate:[NSDate date] options:0]; diff --git a/SF iOS/SF iOSTests/UNNotificationContentTests.m b/SF iOS/SF iOSTests/UNNotificationContentTests.m index 1a5faeb..1d91754 100644 --- a/SF iOS/SF iOSTests/UNNotificationContentTests.m +++ b/SF iOS/SF iOSTests/UNNotificationContentTests.m @@ -8,6 +8,7 @@ #import #import "UNNotificationContent+EventNotifications.h" #import "Event.h" +#import "NSDate+Utilities.h" @interface UNNotificationContentTests : XCTestCase @property (nonatomic) Event *event; @@ -35,7 +36,7 @@ - (void)setUp { @"venue": venue, @"start_at": @"2019-04-03T15:30:00.000Z" }; - self.event = [[Event alloc] initWithDictionary:dict]; + self.event = [[Event alloc] initWithDictionary:dict dateFormatter:[NSDate formatter]]; self.event.type = EventTypeSFCoffee; self.event.date = [NSDate new]; }