Skip to content

Commit c6b73ad

Browse files
author
JagCesar
committed
Add SetTemperaturesRequest
1 parent d70a185 commit c6b73ad

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import Foundation
2+
3+
public struct SetTemperaturesRequest: RequestProtocol {
4+
typealias CompletionType = Bool
5+
var path: String {
6+
return "/api/1/vehicles/\(vehicleIdentifier)/command/set_temps"
7+
}
8+
let method = WebRequest.RequestMethod.post
9+
let accessToken: String
10+
let vehicleIdentifier: String
11+
let driverTemp: Double
12+
let passengerTemp: Double
13+
14+
public init(accessToken: String, vehicleIdentifier: String, driverTemp: Double, passengerTemp: Double) {
15+
self.accessToken = accessToken
16+
self.vehicleIdentifier = vehicleIdentifier
17+
self.driverTemp = driverTemp
18+
self.passengerTemp = passengerTemp
19+
}
20+
21+
public func execute(completion: @escaping (Result<Bool>) -> Void) {
22+
WebRequest.request(
23+
path: path,
24+
method: method,
25+
params: ["driver_temp": "\(driverTemp)", "passenger_temp": "\(passengerTemp)"],
26+
accessToken: accessToken) { response, error in
27+
if let error = error {
28+
DispatchQueue.main.async {
29+
completion(Result.failure(error))
30+
}
31+
} else if let response = response as? [String: [String: Any]],
32+
let resultBool = response["response"]?["result"] as? Bool {
33+
DispatchQueue.main.async {
34+
completion(Result.success(resultBool))
35+
}
36+
} else {
37+
DispatchQueue.main.async {
38+
completion(Result.failure(APIError()))
39+
}
40+
}
41+
}
42+
}
43+
}

Tesla-API.xcodeproj/project.pbxproj

+18
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@
8484
FCB9328C20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */; };
8585
FCB9328D20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */; };
8686
FCB9328E20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */; };
87+
FCB9329020FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328F20FBADE700D19874 /* SetTemperaturesRequest.swift */; };
88+
FCB9329120FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328F20FBADE700D19874 /* SetTemperaturesRequest.swift */; };
89+
FCB9329220FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328F20FBADE700D19874 /* SetTemperaturesRequest.swift */; };
90+
FCB9329320FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328F20FBADE700D19874 /* SetTemperaturesRequest.swift */; };
91+
FCB9329520FBB50B00D19874 /* SetTemperaturesRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9329420FBB50B00D19874 /* SetTemperaturesRequestTests.swift */; };
92+
FCB9329620FBB50B00D19874 /* SetTemperaturesRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9329420FBB50B00D19874 /* SetTemperaturesRequestTests.swift */; };
93+
FCB9329720FBB50B00D19874 /* SetTemperaturesRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9329420FBB50B00D19874 /* SetTemperaturesRequestTests.swift */; };
8794
FCD161971F1E79F0003FE381 /* Tesla-API.h in Headers */ = {isa = PBXBuildFile; fileRef = FCD161901F1E793F003FE381 /* Tesla-API.h */; settings = {ATTRIBUTES = (Public, ); }; };
8895
FCE31678205E3284004EF4B0 /* TeslaAPITestsEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE31677205E3284004EF4B0 /* TeslaAPITestsEmpty.swift */; };
8996
FCE3167A205E3284004EF4B0 /* TeslaAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCD1615D1F1E7844003FE381 /* TeslaAPI.framework */; };
@@ -158,6 +165,8 @@
158165
FCB9328120FB913700D19874 /* ClimateStateRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClimateStateRequest.swift; sourceTree = "<group>"; };
159166
FCB9328620FB917F00D19874 /* ClimateState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClimateState.swift; sourceTree = "<group>"; };
160167
FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClimateStateRequestTests.swift; sourceTree = "<group>"; };
168+
FCB9328F20FBADE700D19874 /* SetTemperaturesRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetTemperaturesRequest.swift; sourceTree = "<group>"; };
169+
FCB9329420FBB50B00D19874 /* SetTemperaturesRequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetTemperaturesRequestTests.swift; sourceTree = "<group>"; };
161170
FCD1615D1F1E7844003FE381 /* TeslaAPI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TeslaAPI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
162171
FCD1618D1F1E793F003FE381 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
163172
FCD1618F1F1E793F003FE381 /* Vehicle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Vehicle.swift; sourceTree = "<group>"; };
@@ -249,6 +258,7 @@
249258
FC27C97F1F4995240064E1AE /* LockRequestTests.swift */,
250259
FC27C9801F4995240064E1AE /* MobileEnabledForRequestTests.swift */,
251260
FC27C9811F4995240064E1AE /* OpenChargePortRequestTests.swift */,
261+
FCB9329420FBB50B00D19874 /* SetTemperaturesRequestTests.swift */,
252262
);
253263
path = "Request Tests";
254264
sourceTree = "<group>";
@@ -296,6 +306,7 @@
296306
FC75EC521F2E4AD7007ED697 /* LockRequest.swift */,
297307
FC1B80961F49883500D24310 /* MobileEnabledForVehicleRequest.swift */,
298308
FC75EC571F2E613A007ED697 /* OpenChargePortRequest.swift */,
309+
FCB9328F20FBADE700D19874 /* SetTemperaturesRequest.swift */,
299310
);
300311
path = Requests;
301312
sourceTree = "<group>";
@@ -668,6 +679,7 @@
668679
FC27C9821F4995240064E1AE /* ListVehiclesRequestTests.swift in Sources */,
669680
FCF2A1291FA32CE900BA5C3F /* Credentials.swift in Sources */,
670681
FCE826061F8C092C00B72C08 /* ChargeStateRequestTests.swift in Sources */,
682+
FCB9329520FBB50B00D19874 /* SetTemperaturesRequestTests.swift in Sources */,
671683
FC27C97A1F4993E10064E1AE /* ModelMocks.swift in Sources */,
672684
FC27C9851F4995240064E1AE /* LockRequestTests.swift in Sources */,
673685
FC27C9881F4995240064E1AE /* MobileEnabledForRequestTests.swift in Sources */,
@@ -692,6 +704,7 @@
692704
FCE826021F8C075C00B72C08 /* ChargeState.swift in Sources */,
693705
FC80D5031F2CE6FD0013F6DF /* ListVehiclesRequest.swift in Sources */,
694706
FC99DFD91F1FBBE100013FE9 /* Error.swift in Sources */,
707+
FCB9329120FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */,
695708
FC75EC591F2E6219007ED697 /* OpenChargePortRequest.swift in Sources */,
696709
FC99DFD61F1FB65A00013FE9 /* Token.swift in Sources */,
697710
);
@@ -714,6 +727,7 @@
714727
FCE826031F8C075C00B72C08 /* ChargeState.swift in Sources */,
715728
FC80D5041F2CE6FD0013F6DF /* ListVehiclesRequest.swift in Sources */,
716729
FC99DFDA1F1FBBE100013FE9 /* Error.swift in Sources */,
730+
FCB9329220FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */,
717731
FC75EC5A1F2E621A007ED697 /* OpenChargePortRequest.swift in Sources */,
718732
FC99DFD51F1FB65A00013FE9 /* Token.swift in Sources */,
719733
);
@@ -736,6 +750,7 @@
736750
FCE826041F8C075C00B72C08 /* ChargeState.swift in Sources */,
737751
FC80D5051F2CE6FD0013F6DF /* ListVehiclesRequest.swift in Sources */,
738752
FC99DFDB1F1FBBE100013FE9 /* Error.swift in Sources */,
753+
FCB9329320FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */,
739754
FC75EC5B1F2E621A007ED697 /* OpenChargePortRequest.swift in Sources */,
740755
FC99DFD41F1FB65A00013FE9 /* Token.swift in Sources */,
741756
);
@@ -750,6 +765,7 @@
750765
FC27C9831F4995240064E1AE /* ListVehiclesRequestTests.swift in Sources */,
751766
FCF2A12A1FA32CE900BA5C3F /* Credentials.swift in Sources */,
752767
FC6F72E61FA12BB3009BF1C4 /* ChargeStateRequestTests.swift in Sources */,
768+
FCB9329620FBB50B00D19874 /* SetTemperaturesRequestTests.swift in Sources */,
753769
FC27C97B1F4993E10064E1AE /* ModelMocks.swift in Sources */,
754770
FC27C9861F4995240064E1AE /* LockRequestTests.swift in Sources */,
755771
FC27C9891F4995240064E1AE /* MobileEnabledForRequestTests.swift in Sources */,
@@ -766,6 +782,7 @@
766782
FC27C9841F4995240064E1AE /* ListVehiclesRequestTests.swift in Sources */,
767783
FCF2A12B1FA32CE900BA5C3F /* Credentials.swift in Sources */,
768784
FC6F72E71FA12BB4009BF1C4 /* ChargeStateRequestTests.swift in Sources */,
785+
FCB9329720FBB50B00D19874 /* SetTemperaturesRequestTests.swift in Sources */,
769786
FC27C97C1F4993E10064E1AE /* ModelMocks.swift in Sources */,
770787
FC27C9871F4995240064E1AE /* LockRequestTests.swift in Sources */,
771788
FC27C98A1F4995240064E1AE /* MobileEnabledForRequestTests.swift in Sources */,
@@ -790,6 +807,7 @@
790807
FCE826011F8C075C00B72C08 /* ChargeState.swift in Sources */,
791808
FC80D5021F2CE6FD0013F6DF /* ListVehiclesRequest.swift in Sources */,
792809
FC99DFD81F1FBBE100013FE9 /* Error.swift in Sources */,
810+
FCB9329020FBADE700D19874 /* SetTemperaturesRequest.swift in Sources */,
793811
FC75EC581F2E613A007ED697 /* OpenChargePortRequest.swift in Sources */,
794812
FC48F9A71F1E7FB600D2400B /* TeslaAPI.swift in Sources */,
795813
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import XCTest
2+
@testable import TeslaAPI
3+
4+
extension TeslaAPITests {
5+
func testSetTemperatures() {
6+
let waitExpectation = expectation(description: "Set temperatures")
7+
8+
SetTemperaturesRequest(
9+
accessToken: accessToken(),
10+
vehicleIdentifier: vehicleIdentifier(),
11+
driverTemp: 21,
12+
passengerTemp: 21).execute { result in
13+
XCTAssert(Thread.isMainThread)
14+
switch result {
15+
case .success(let result):
16+
if result == true {
17+
waitExpectation.fulfill()
18+
} else {
19+
XCTFail()
20+
}
21+
case .failure(_):
22+
XCTFail()
23+
}
24+
}
25+
waitForExpectations(timeout: 30, handler: nil)
26+
}
27+
}

0 commit comments

Comments
 (0)