@@ -31,7 +31,7 @@ - (void)testReceiveMessageWithoutStorage{
3131 [roomLight addDelegate: self delegateQueue: dispatch_get_main_queue ()];
3232 [roomLight activate: streamTest];
3333
34- [streamTest fakeMessageResponse: [self fakeIncomingMessage ]];
34+ [streamTest fakeMessageResponse: [self fakeIncomingMessageWithBody: YES ]];
3535 [self waitForExpectationsWithTimeout: 2 handler: ^(NSError * _Nullable error) {
3636 if (error){
3737 XCTFail (@" Expectation Failed with error: %@ " , error);
@@ -53,7 +53,7 @@ - (void)testReceiveMessageWithStorage{
5353 [roomLight addDelegate: self delegateQueue: dispatch_get_main_queue ()];
5454 [roomLight activate: streamTest];
5555
56- [streamTest fakeMessageResponse: [self fakeIncomingMessage ]];
56+ [streamTest fakeMessageResponse: [self fakeIncomingMessageWithBody: YES ]];
5757
5858 dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(2 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
5959 NSManagedObjectContext *context = [storage mainThreadManagedObjectContext ];
@@ -135,6 +135,52 @@ - (void)testReceiveAffiliationMessageWithStorage {
135135 }];
136136}
137137
138+ - (void )testReceiveMessageWithoutBody {
139+ self.checkDelegate = false ;
140+
141+ XCTestExpectation *expectation = [self expectationWithDescription: @" receive message without body and correctly stored" ];
142+
143+ XMPPRoomLightCoreDataStorage *storage = [[XMPPRoomLightCoreDataStorage alloc ] initWithDatabaseFilename: @" testReceiveMessageWithoutBody.sqlite"
144+ storeOptions: nil ];
145+ storage.autoRemovePreviousDatabaseFile = YES ;
146+
147+ XMPPMockStream *streamTest = [[XMPPMockStream alloc ] init ];
148+ streamTest.
myJID = [XMPPJID
jidWithString: @" [email protected] " ];
149+ XMPPJID *jid = [XMPPJID
jidWithString: @" [email protected] " ];
150+ XMPPRoomLight *roomLight = [[XMPPRoomLight alloc ] initWithRoomLightStorage: storage jid: jid roomname: @" test" dispatchQueue: nil ];
151+ roomLight.shouldHandleMemberMessagesWithoutBody = YES ;
152+ [roomLight activate: streamTest];
153+
154+ [streamTest fakeMessageResponse: [self fakeIncomingMessageWithBody: NO ]];
155+
156+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(2 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
157+ NSManagedObjectContext *context = [storage mainThreadManagedObjectContext ];
158+ NSEntityDescription *entity = [NSEntityDescription entityForName: @" XMPPRoomLightMessageCoreDataStorageObject"
159+ inManagedObjectContext: context];
160+
161+ NSPredicate *predicate = [NSPredicate predicateWithFormat: @" roomJIDStr = %@" , jid.full];
162+
163+ NSFetchRequest *request = [[NSFetchRequest alloc ] init ];
164+ request.entity = entity;
165+ request.predicate = predicate;
166+
167+ NSError *error;
168+ XMPPRoomLightMessageCoreDataStorageObject *roomMessage = [[context executeFetchRequest: request error: &error] firstObject ];
169+ XCTAssertNil (error);
170+ XCTAssertEqualObjects (roomMessage.
jid .
full ,
@" [email protected] /[email protected] " );
171+ XCTAssertNil (roomMessage.body );
172+ XCTAssertEqualObjects (roomMessage.
nickname ,
@" [email protected] " );
173+
174+ [expectation fulfill ];
175+ });
176+
177+ [self waitForExpectationsWithTimeout: 3 handler: ^(NSError * _Nullable error) {
178+ if (error){
179+ XCTFail (@" Expectation Failed with error: %@ " , error);
180+ }
181+ }];
182+ }
183+
138184- (void )testImportMessage {
139185 self.checkDelegate = false ;
140186
@@ -148,7 +194,10 @@ - (void)testImportMessage {
148194 XMPPJID *jid = [XMPPJID
jidWithString: @" [email protected] " ];
149195 XMPPRoomLight *roomLight = [[XMPPRoomLight alloc ] initWithRoomLightStorage: storage jid: jid roomname: @" test" dispatchQueue: nil ];
150196
151- [storage importRemoteArchiveMessage: [self fakeIncomingMessage ] withTimestamp: [NSDate dateWithTimeIntervalSinceReferenceDate: 0 ] inRoom: roomLight fromStream: streamTest];
197+ [storage importRemoteArchiveMessage: [self fakeIncomingMessageWithBody: YES ]
198+ withTimestamp: [NSDate dateWithTimeIntervalSinceReferenceDate: 0 ]
199+ inRoom: roomLight
200+ fromStream: streamTest];
152201
153202 dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(2 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
154203 NSManagedObjectContext *context = [storage mainThreadManagedObjectContext ];
@@ -194,8 +243,14 @@ - (void)testImportMessageUniquing {
194243 XMPPJID *jid = [XMPPJID
jidWithString: @" [email protected] " ];
195244 XMPPRoomLight *roomLight = [[XMPPRoomLight alloc ] initWithRoomLightStorage: storage jid: jid roomname: @" test" dispatchQueue: nil ];
196245
197- [storage importRemoteArchiveMessage: [self fakeIncomingMessage ] withTimestamp: [NSDate dateWithTimeIntervalSinceReferenceDate: 0 ] inRoom: roomLight fromStream: streamTest];
198- [storage importRemoteArchiveMessage: [self fakeIncomingMessage ] withTimestamp: [NSDate dateWithTimeIntervalSinceReferenceDate: 0 ] inRoom: roomLight fromStream: streamTest];
246+ [storage importRemoteArchiveMessage: [self fakeIncomingMessageWithBody: YES ]
247+ withTimestamp: [NSDate dateWithTimeIntervalSinceReferenceDate: 0 ]
248+ inRoom: roomLight
249+ fromStream: streamTest];
250+ [storage importRemoteArchiveMessage: [self fakeIncomingMessageWithBody: YES ]
251+ withTimestamp: [NSDate dateWithTimeIntervalSinceReferenceDate: 0 ]
252+ inRoom: roomLight
253+ fromStream: streamTest];
199254
200255 dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(2 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
201256 NSManagedObjectContext *context = [storage mainThreadManagedObjectContext ];
@@ -231,14 +286,16 @@ - (void)xmppRoomLight:(XMPPRoomLight *)sender didReceiveMessage:(XMPPMessage *)m
231286 }
232287}
233288
234- - (XMPPMessage *)fakeIncomingMessage {
289+ - (XMPPMessage *)fakeIncomingMessageWithBody : ( BOOL ) shouldIncludeBody {
235290 NSMutableString *s = [NSMutableString string ];
236291 [s appendString: @" <message xmlns='jabber:client' \
237292238293239294 id='C7A969D8-C711-4516-9313-10EA9927B39B' \
240295 type='groupchat'>" ];
241- [s appendString: @" <body>Yo! 13</body>'" ];
296+ if (shouldIncludeBody) {
297+ [s appendString: @" <body>Yo! 13</body>'" ];
298+ }
242299 [s appendString: @" </message>" ];
243300
244301 NSError *error;
0 commit comments