Skip to content

Commit dc47e63

Browse files
committed
feat: add ping to apple and wsift sdk.
1 parent a852aba commit dc47e63

File tree

7 files changed

+91
-13
lines changed

7 files changed

+91
-13
lines changed

templates/apple/Sources/Client.swift.twig

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,26 @@ open class Client {
214214
) ?? ""
215215
}
216216

217+
///
218+
/// Sends a "ping" request to Appwrite to verify connectivity.
219+
///
220+
/// @return String
221+
/// @throws Exception
222+
///
223+
open func ping() async throws -> String {
224+
let apiPath: String = "/ping"
225+
226+
let apiHeaders: [String: String] = [
227+
"content-type": "application/json"
228+
]
229+
230+
return try await call(
231+
method: "GET",
232+
path: apiPath,
233+
headers: apiHeaders
234+
)
235+
}
236+
217237
///
218238
/// Make an API call
219239
///
@@ -284,6 +304,8 @@ open class Client {
284304
}
285305
}
286306

307+
var data = try await response.body.collect(upTo: Int.max)
308+
287309
switch response.status.code {
288310
case 0..<400:
289311
if response.headers["Set-Cookie"].count > 0 {
@@ -296,10 +318,11 @@ open class Client {
296318
switch T.self {
297319
case is Bool.Type:
298320
return true as! T
321+
case is String.Type:
322+
return (data.readString(length: data.readableBytes) ?? "") as! T
299323
case is ByteBuffer.Type:
300-
return try await response.body.collect(upTo: Int.max) as! T
324+
return data as! T
301325
default:
302-
let data = try await response.body.collect(upTo: Int.max)
303326
if data.readableBytes == 0 {
304327
return true as! T
305328
}
@@ -309,7 +332,6 @@ open class Client {
309332
}
310333
default:
311334
var message = ""
312-
var data = try await response.body.collect(upTo: Int.max)
313335
var type = ""
314336

315337
do {

templates/swift/Sources/Client.swift.twig

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,26 @@ open class Client {
192192
) ?? ""
193193
}
194194

195+
///
196+
/// Sends a "ping" request to Appwrite to verify connectivity.
197+
///
198+
/// @return String
199+
/// @throws Exception
200+
///
201+
open func ping() async throws -> String {
202+
let apiPath: String = "/ping"
203+
204+
let apiHeaders: [String: String] = [
205+
"content-type": "application/json"
206+
]
207+
208+
return try await call(
209+
method: "GET",
210+
path: apiPath,
211+
headers: apiHeaders
212+
)
213+
}
214+
195215
///
196216
/// Make an API call
197217
///
@@ -327,15 +347,18 @@ open class Client {
327347
}
328348
}
329349

350+
var data = try await response.body.collect(upTo: Int.max)
351+
330352
switch response.status.code {
331353
case 0..<400:
332354
switch T.self {
333355
case is Bool.Type:
334356
return true as! T
357+
case is String.Type:
358+
return (data.readString(length: data.readableBytes) ?? "") as! T
335359
case is ByteBuffer.Type:
336-
return try await response.body.collect(upTo: Int.max) as! T
360+
return data as! T
337361
default:
338-
let data = try await response.body.collect(upTo: Int.max)
339362
if data.readableBytes == 0 {
340363
return true as! T
341364
}
@@ -345,7 +368,6 @@ open class Client {
345368
}
346369
default:
347370
var message = ""
348-
var data = try await response.body.collect(upTo: Int.max)
349371
var type = ""
350372

351373
do {

templates/swift/Sources/Models/Model.swift.twig

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,21 @@ public class {{ definition | modelType(spec) | raw }} {
5858
{%~ endif %}
5959
)
6060
}
61+
62+
public static func from(json: String) -> {{ definition.name | caseUcfirst }}? {
63+
guard let data = json.data(using: .utf8) else {
64+
return nil
65+
}
66+
67+
do {
68+
if let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
69+
return {{ definition.name | caseUcfirst }}.from(map: jsonObject)
70+
} else {
71+
return nil
72+
}
73+
} catch {
74+
return nil
75+
}
76+
}
6177
}
6278
{% endif %}

tests/AppleSwift56Test.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class AppleSwift56Test extends Base
1919
'docker run --network="mockapi" --rm -v $(pwd):/app -w /app/tests/sdks/apple swift:5.6-focal swift test';
2020

2121
protected array $expectedOutput = [
22+
...Base::PING_RESPONSE,
2223
...Base::FOO_RESPONSES,
2324
...Base::BAR_RESPONSES,
2425
...Base::GENERAL_RESPONSES,

tests/Swift56Test.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Swift56Test extends Base
1919
'docker run --network="mockapi" --rm -v $(pwd):/app -w /app/tests/sdks/swift swift:5.6-focal swift test';
2020

2121
protected array $expectedOutput = [
22+
...Base::PING_RESPONSE,
2223
...Base::FOO_RESPONSES,
2324
...Base::BAR_RESPONSES,
2425
...Base::GENERAL_RESPONSES,

tests/languages/apple/Tests.swift

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,21 @@ class Tests: XCTestCase {
2121

2222
func test() async throws {
2323
let client = Client()
24-
.setEndpointRealtime("ws://cloud.appwrite.io/v1")
25-
.setProject("console")
24+
.setProject("123456")
2625
.addHeader(key: "Origin", value: "http://localhost")
2726
.setSelfSigned()
2827

28+
var mock: Mock
29+
30+
// Ping pong test
31+
let ping = try await client.ping()
32+
mock = Mock.from(json: ping)!
33+
print(mock.result)
34+
35+
// reset configs
36+
client.setProject("console")
37+
.setEndpointRealtime("ws://cloud.appwrite.io/v1")
38+
2939
let foo = Foo(client)
3040
let bar = Bar(client)
3141
let general = General(client)
@@ -39,8 +49,6 @@ class Tests: XCTestCase {
3949
expectation.fulfill()
4050
}
4151

42-
var mock: Mock
43-
4452
// Foo Tests
4553
mock = try await foo.get(x: "string", y: 123, z: ["string in array"])
4654
print(mock.result)

tests/languages/swift/Tests.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,24 @@ class Tests: XCTestCase {
2121
func test() async throws {
2222
do {
2323
let client = Client()
24-
.setProject("console")
24+
.setProject("123456")
2525
.addHeader(key: "Origin", value: "http://localhost")
2626
.setSelfSigned()
2727

28+
var mock: Mock
29+
30+
// Ping pong test
31+
let ping = try await client.ping()
32+
mock = Mock.from(json: ping)!
33+
print(mock.result)
34+
35+
// reset project
36+
client.setProject("console")
37+
2838
let foo = Foo(client)
2939
let bar = Bar(client)
3040
let general = General(client)
3141

32-
var mock: Mock
33-
3442
// Foo Tests
3543
mock = try await foo.get(x: "string", y: 123, z: ["string in array"])
3644
print(mock.result)

0 commit comments

Comments
 (0)