Skip to content

Commit bad41cd

Browse files
authored
Merge pull request #196 from zapcannon87/IM
release: 16.0.0-beta.7
2 parents 17d2f54 + 295dfc0 commit bad41cd

File tree

12 files changed

+267
-55
lines changed

12 files changed

+267
-55
lines changed

LeanCloud.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'LeanCloud'
3-
s.version = '16.0.0-beta.6'
3+
s.version = '16.0.0-beta.7'
44
s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' }
55
s.summary = 'LeanCloud Swift SDK'
66
s.homepage = 'https://leancloud.cn/'

LeanCloud.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
D3AB32D8227D983E00DCE794 /* CaptchaClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3AB32D7227D983E00DCE794 /* CaptchaClient.swift */; };
9696
D3AC7BA821AE9C1A00C6C557 /* IMClientTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3AC7BA721AE9C1A00C6C557 /* IMClientTestCase.swift */; };
9797
D3AF1CB722681F1200A97566 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3AF1CA422681EF500A97566 /* FMDB.framework */; };
98+
D3B600842281679400F2E556 /* LCApplicationTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3B600832281679400F2E556 /* LCApplicationTestCase.swift */; };
9899
D3BBFB41225D944100B75BA1 /* LCLocalStorageContextTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3BBFB40225D944100B75BA1 /* LCLocalStorageContextTestCase.swift */; };
99100
D3C3782F21E48D3C00EA9AC9 /* IMConversationQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C3782E21E48D3C00EA9AC9 /* IMConversationQuery.swift */; };
100101
D3DAD03C218DA402008BCD37 /* RTMConnectionTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DAD03B218DA402008BCD37 /* RTMConnectionTestCase.swift */; };
@@ -421,6 +422,7 @@
421422
D3AB32D7227D983E00DCE794 /* CaptchaClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaptchaClient.swift; sourceTree = "<group>"; };
422423
D3AC7BA721AE9C1A00C6C557 /* IMClientTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMClientTestCase.swift; sourceTree = "<group>"; };
423424
D3AF1C8A22681EF500A97566 /* fmdb.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = fmdb.xcodeproj; path = fmdb/fmdb.xcodeproj; sourceTree = "<group>"; };
425+
D3B600832281679400F2E556 /* LCApplicationTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LCApplicationTestCase.swift; sourceTree = "<group>"; };
424426
D3BBFB40225D944100B75BA1 /* LCLocalStorageContextTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LCLocalStorageContextTestCase.swift; sourceTree = "<group>"; };
425427
D3C3782E21E48D3C00EA9AC9 /* IMConversationQuery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMConversationQuery.swift; sourceTree = "<group>"; };
426428
D3DAD03B218DA402008BCD37 /* RTMConnectionTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RTMConnectionTestCase.swift; sourceTree = "<group>"; };
@@ -540,6 +542,7 @@
540542
8342FCCC1C7B13A700C3CF15 /* Info.plist */,
541543
83D5923D1CD88846007177C5 /* BridgingHeader.h */,
542544
8342FCCA1C7B13A700C3CF15 /* BaseTestCase.swift */,
545+
D3B600832281679400F2E556 /* LCApplicationTestCase.swift */,
543546
11FBD1E4215BDDCA00370C61 /* LCCoreTestCase.swift */,
544547
1178D10E213F7B9600429131 /* LCAPITestCase.swift */,
545548
116A682521427442004141A5 /* LCRouterTestCase.swift */,
@@ -1119,6 +1122,7 @@
11191122
83FAF0931CC4D1E400A84063 /* LCObjectTestCase.swift in Sources */,
11201123
834EA7151D2A139A00108DDC /* LCUserTestCase.swift in Sources */,
11211124
D3BBFB41225D944100B75BA1 /* LCLocalStorageContextTestCase.swift in Sources */,
1125+
D3B600842281679400F2E556 /* LCApplicationTestCase.swift in Sources */,
11221126
D33A8DAA21F577F2005B84A9 /* RTMBaseTestCase.swift in Sources */,
11231127
11FBD1E5215BDDCA00370C61 /* LCCoreTestCase.swift in Sources */,
11241128
8342FCCB1C7B13A700C3CF15 /* BaseTestCase.swift in Sources */,

LeanCloudTests/BaseTestCase.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//
88

99
import XCTest
10-
@testable import LeanCloud
10+
import LeanCloud
1111

1212
class BaseTestCase: XCTestCase {
1313

@@ -35,11 +35,6 @@ class BaseTestCase: XCTestCase {
3535
key: "7g5pPsI55piz2PRLPWK5MPz0"
3636
)
3737
}
38-
39-
override func tearDown() {
40-
applicationRegistry.removeAll()
41-
super.tearDown()
42-
}
4338

4439
func busywait(interval: TimeInterval = 0.1, untilTrue: () -> Bool) -> Void {
4540
while !untilTrue() {

LeanCloudTests/IMClientTestCase.swift

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

LeanCloudTests/IMConversationTestCase.swift

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,33 @@ class IMConversationTestCase: RTMBaseTestCase {
186186
return
187187
}
188188

189+
let delegatorA = IMClientTestCase.Delegator()
190+
clientA.delegate = delegatorA
191+
let delegatorB = IMClientTestCase.Delegator()
192+
clientB.delegate = delegatorB
193+
189194
let exp1 = expectation(description: "create unique conversation")
195+
exp1.expectedFulfillmentCount = 5
196+
delegatorA.conversationEvent = { _, _, event in
197+
switch event {
198+
case .joined:
199+
exp1.fulfill()
200+
case .membersJoined:
201+
exp1.fulfill()
202+
default:
203+
break
204+
}
205+
}
206+
delegatorB.conversationEvent = { _, _, event in
207+
switch event {
208+
case .joined:
209+
exp1.fulfill()
210+
case .membersJoined:
211+
exp1.fulfill()
212+
default:
213+
break
214+
}
215+
}
190216
try? clientA.createConversation(clientIDs: [clientA.ID, clientB.ID], completion: { (result) in
191217
if let conv: IMConversation = result.value {
192218
XCTAssertTrue(type(of: conv) == IMConversation.self)
@@ -200,7 +226,31 @@ class IMConversationTestCase: RTMBaseTestCase {
200226
})
201227
wait(for: [exp1], timeout: timeout)
202228

229+
delegatorA.conversationEvent = nil
230+
delegatorB.conversationEvent = nil
231+
203232
let exp2 = expectation(description: "create unique conversation")
233+
exp2.expectedFulfillmentCount = 5
234+
delegatorA.conversationEvent = { _, _, event in
235+
switch event {
236+
case .joined:
237+
exp2.fulfill()
238+
case .membersJoined:
239+
exp2.fulfill()
240+
default:
241+
break
242+
}
243+
}
244+
delegatorB.conversationEvent = { _, _, event in
245+
switch event {
246+
case .joined:
247+
exp2.fulfill()
248+
case .membersJoined:
249+
exp2.fulfill()
250+
default:
251+
break
252+
}
253+
}
204254
try? clientB.createConversation(clientIDs: [clientA.ID, clientB.ID], completion: { (result) in
205255
if let conv: IMConversation = result.value {
206256
XCTAssertTrue(type(of: conv) == IMConversation.self)

LeanCloudTests/IMLocalStorageTestCase.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -350,18 +350,6 @@ class IMLocalStorageTestCase: RTMBaseTestCase {
350350
expectingOrder(.updatedTimestamp(descending: false))
351351
expectingOrder(.lastMessageSentTimestamp(descending: true))
352352
expectingOrder(.lastMessageSentTimestamp(descending: false))
353-
354-
expecting { (exp) in
355-
client.localStorage?.selectConversations(IDSet: conversationIDSet, completion: { (client, result) in
356-
XCTAssertTrue(result.isSuccess)
357-
XCTAssertNil(result.error)
358-
XCTAssertEqual(conversationIDSet.count, result.value?.conversations.count)
359-
for conv in result.value!.conversations {
360-
XCTAssertTrue(conversationIDSet.contains(conv.ID))
361-
}
362-
exp.fulfill()
363-
})
364-
}
365353
}
366354

367355
func testInsertOrReplaceMessages() {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//
2+
// LCApplicationTestCase.swift
3+
// LeanCloudTests
4+
//
5+
// Created by zapcannon87 on 2019/5/7.
6+
// Copyright © 2019 LeanCloud. All rights reserved.
7+
//
8+
9+
import XCTest
10+
@testable import LeanCloud
11+
12+
class LCApplicationTestCase: BaseTestCase {
13+
14+
func testClearLocalStorage() {
15+
for url in [LCApplication.default.localStorageContext!.applicationSupportDirectoryPath,
16+
LCApplication.default.localStorageContext!.cachesDirectoryPath]
17+
{
18+
if FileManager.default.fileExists(atPath: url.path) {
19+
try! FileManager.default.removeItem(at: url)
20+
}
21+
}
22+
}
23+
24+
}

LeanCloudTests/RTMBaseTestCase.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,5 @@ class RTMBaseTestCase: BaseTestCase {
2020
static var uuid: String {
2121
return UUID().uuidString.replacingOccurrences(of: "-", with: "")
2222
}
23-
24-
override func setUp() {
25-
super.setUp()
26-
}
27-
28-
override func tearDown() {
29-
try! FileManager.default.removeItem(at: LCApplication.default.localStorageContext!.applicationSupportDirectoryPath)
30-
try! FileManager.default.removeItem(at: LCApplication.default.localStorageContext!.cachesDirectoryPath)
31-
super.tearDown()
32-
}
3323

3424
}

Sources/IM/IMClient.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -929,15 +929,14 @@ extension IMClient {
929929
}
930930

931931
public func getAndLoadStoredConversations(
932-
IDs: Set<String>? = nil,
933932
order: IMClient.StoredConversationOrder = .lastMessageSentTimestamp(descending: true),
934933
completion: @escaping (LCGenericResult<[IMConversation]>) -> Void)
935934
throws
936935
{
937936
guard let localStorage = self.localStorage else {
938937
throw LCError.clientLocalStorageNotFound
939938
}
940-
localStorage.selectConversations(order: order, IDSet: IDs) { (client, result) in
939+
localStorage.selectConversations(order: order) { (client, result) in
941940
assert(client.specificAssertion)
942941
switch result {
943942
case .success(value: let tuple):

0 commit comments

Comments
 (0)