@@ -337,6 +337,150 @@ class IMClientTestCase: RTMBaseTestCase {
337337 } )
338338 wait ( for: [ queryExp2] , timeout: timeout)
339339 }
340+
341+ func testPrepareLocalStorage( ) {
342+ expecting { ( exp) in
343+ let notUseLocalStorageClient = try ! IMClient ( ID: uuid, options: [ ] )
344+ do {
345+ try notUseLocalStorageClient. prepareLocalStorage ( completion: { ( _) in } )
346+ XCTFail ( )
347+ } catch {
348+ XCTAssertTrue ( error is LCError )
349+ }
350+ exp. fulfill ( )
351+ }
352+
353+ expecting { ( exp) in
354+ let client = try ! IMClient ( ID: uuid)
355+ try ! client. prepareLocalStorage ( completion: { ( result) in
356+ XCTAssertTrue ( result. isSuccess)
357+ XCTAssertNil ( result. error)
358+ exp. fulfill ( )
359+ } )
360+ }
361+ }
362+
363+ func testGetAndLoadStoredConversations( ) {
364+ expecting { ( exp) in
365+ let notUseLocalStorageClient = try ! IMClient ( ID: uuid, options: [ ] )
366+ do {
367+ try notUseLocalStorageClient. getAndLoadStoredConversations ( completion: { ( _) in } )
368+ XCTFail ( )
369+ } catch {
370+ XCTAssertTrue ( error is LCError )
371+ }
372+ exp. fulfill ( )
373+ }
374+
375+ let client = try ! IMClient ( ID: uuid)
376+
377+ expecting { ( exp) in
378+ try ! client. prepareLocalStorage ( completion: { ( result) in
379+ XCTAssertTrue ( result. isSuccess)
380+ XCTAssertNil ( result. error)
381+ exp. fulfill ( )
382+ } )
383+ }
384+
385+ expecting { ( exp) in
386+ try ! client. getAndLoadStoredConversations ( completion: { ( result) in
387+ XCTAssertTrue ( result. isSuccess)
388+ XCTAssertNil ( result. error)
389+ XCTAssertEqual ( result. value? . count, 0 )
390+ XCTAssertTrue ( client. convCollection. isEmpty)
391+ exp. fulfill ( )
392+ } )
393+ }
394+
395+ expecting { ( exp) in
396+ client. open ( completion: { ( result) in
397+ XCTAssertTrue ( result. isSuccess)
398+ XCTAssertNil ( result. error)
399+ exp. fulfill ( )
400+ } )
401+ }
402+
403+ for _ in 0 ... 1 {
404+ var conv : IMConversation !
405+
406+ expecting { ( exp) in
407+ try ! client. createConversation ( clientIDs: [ uuid] , completion: { ( result) in
408+ XCTAssertTrue ( result. isSuccess)
409+ XCTAssertNil ( result. error)
410+ conv = result. value
411+ exp. fulfill ( )
412+ } )
413+ }
414+
415+ delay ( seconds: 0.1 )
416+
417+ expecting { ( exp) in
418+ try ! conv. refresh ( completion: { ( result) in
419+ XCTAssertTrue ( result. isSuccess)
420+ XCTAssertNil ( result. error)
421+ exp. fulfill ( )
422+ } )
423+ }
424+
425+ delay ( seconds: 0.1 )
426+
427+ expecting { ( exp) in
428+ let message = IMMessage ( )
429+ try ! message. set ( content: . string( " test " ) )
430+ try ! conv. send ( message: message, completion: { ( result) in
431+ XCTAssertTrue ( result. isSuccess)
432+ XCTAssertNil ( result. error)
433+ exp. fulfill ( )
434+ } )
435+ }
436+ }
437+
438+ let checker : ( IMClient . StoredConversationOrder ) -> Void = { order in
439+ self . expecting { ( exp) in
440+ try ! client. getAndLoadStoredConversations ( order: order, completion: { ( result) in
441+ XCTAssertTrue ( result. isSuccess)
442+ XCTAssertNil ( result. error)
443+ XCTAssertEqual ( result. value? . count, 2 )
444+ switch order {
445+ case let . lastMessageSentTimestamp( descending: descending) :
446+ let firstTimestamp = result. value? . first? . lastMessage? . sentTimestamp
447+ let lastTimestamp = result. value? . last? . lastMessage? . sentTimestamp
448+ if descending {
449+ XCTAssertGreaterThanOrEqual ( firstTimestamp!, lastTimestamp!)
450+ } else {
451+ XCTAssertGreaterThanOrEqual ( lastTimestamp!, firstTimestamp!)
452+ }
453+ case let . createdTimestamp( descending: descending) :
454+ let firstTimestamp = result. value? . first? . createdAt? . timeIntervalSince1970
455+ let lastTimestamp = result. value? . last? . createdAt? . timeIntervalSince1970
456+ if descending {
457+ XCTAssertGreaterThanOrEqual ( firstTimestamp!, lastTimestamp!)
458+ } else {
459+ XCTAssertGreaterThanOrEqual ( lastTimestamp!, firstTimestamp!)
460+ }
461+ case let . updatedTimestamp( descending: descending) :
462+ let firstTimestamp = result. value? . first? . updatedAt? . timeIntervalSince1970
463+ let lastTimestamp = result. value? . last? . updatedAt? . timeIntervalSince1970
464+ if descending {
465+ XCTAssertGreaterThanOrEqual ( firstTimestamp!, lastTimestamp!)
466+ } else {
467+ XCTAssertGreaterThanOrEqual ( lastTimestamp!, firstTimestamp!)
468+ }
469+ }
470+ exp. fulfill ( )
471+ } )
472+ }
473+ }
474+
475+ checker ( . lastMessageSentTimestamp( descending: true ) )
476+ checker ( . lastMessageSentTimestamp( descending: false ) )
477+ checker ( . updatedTimestamp( descending: true ) )
478+ checker ( . updatedTimestamp( descending: false ) )
479+ checker ( . createdTimestamp( descending: true ) )
480+ checker ( . createdTimestamp( descending: false ) )
481+
482+ XCTAssertEqual ( client. convCollection. count, 2 )
483+ }
340484
341485}
342486
0 commit comments