Skip to content

Instantly share code, notes, and snippets.

@tedgonzalez
tedgonzalez / config.yml
Created January 5, 2020 16:34
Cache cocoapods when using circleci
- restore_cache:
key: 1-pods-{{ checksum "Podfile.lock" }}
- run:
name: Install CocoaPods
command: |
if [ ! -d "Pods" ]
then
curl https://cocoapods-specs.circleci.com/fetch-cocoapods-repo-from-s3.sh | bash -s cf
bundle exec pod install
fi
func testDecodingUnknownOrderItemsThrowsAnError() throws {
let givenJsonData = #"""
[
"unknownDelivery": "unknownValue"
]
"""#.data(using: .utf8)!
XCTAssertThrowsError(try decoder.decode([OrderItem].self, from: givenJsonData))
}
func testDecodingFoodDeliveryWithoutRestaurantThrowsAnError() throws {
let givenJsonData = #"""
[
{
"food": {
"date": "2020-01-01",
"totalCost": "8.00",
"orders": [
{
"name": "Pizza",
func testDecodingArrayWithPassengerDeliverySucceeds() throws {
let givenJsonData = #"""
[
{
"food": {
"date": "2020-01-01",
"restaurantName": "Restaurant",
"totalCost": "8.00",
"orders": [
{
func testDecodingEmptyArraySucceeds() throws {
let givenJsonData = #"""
[]
"""#.data(using: .utf8)!
let result = try decoder.decode([OrderItem].self, from: givenJsonData)
let expected: [OrderItem] = []
XCTAssertEqual(result, expected)
}
struct FoodDelivery: Codable, Equatable {
struct Order: Codable, Equatable {
let name: String
let cost: String
}
let date: String
let orders: [Order]
let restaurantName: String
let totalCost: String
}
struct GenericOrderItem: Codable {
// common between all the objects
let date: String
let totalCost: String
let carType: PassengerDelivery.CarType?
let restaurantName: String?
let distance: String?
let orders: [FoodDelivery.Order]?
let size: String?
enum OrderItem: Decodable, Equatable {
case food(FoodDelivery)
case package(PackageDelivery)
case passenger(PassengerDelivery)
enum CodingKeys: CodingKey, CaseIterable {
case food
case package
case passenger
}
struct PackageDelivery: Codable, Equatable {
let date: String
let size: String
let totalCost: String
let weight: String
}
struct PassengerDelivery: Codable, Equatable {
struct CarType: Codable, Equatable {
let name: String
let distanceFare: String
let timeFare: String
}
let carType: CarType
let date: String
let distance: String
let time: String