func testGetAllProducts()

in source/UberRidesTests/ObjectMappingTests.swift [97:164]


    func testGetAllProducts() {
        let bundle = Bundle(for: ObjectMappingTests.self)
        if let path = bundle.path(forResource: "getProducts", ofType: "json") {
            if let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path)) {
                let products = try? JSONDecoder.uberDecoder.decode(UberProducts.self, from: jsonData)
                XCTAssertNotNil(products)
                XCTAssertNotNil(products!.list)
                XCTAssertEqual(products!.list!.count, 9)
                XCTAssertEqual(products!.list![0].name, "SELECT")
                XCTAssertEqual(products!.list![1].name, "uberXL")
                XCTAssertEqual(products!.list![2].name, "BLACK")
                XCTAssertEqual(products!.list![3].name, "SUV")
                XCTAssertEqual(products!.list![4].name, "ASSIST")
                XCTAssertEqual(products!.list![5].name, "WAV")
                XCTAssertEqual(products!.list![6].name, "POOL")
                XCTAssertEqual(products!.list![7].name, "uberX")
                XCTAssertEqual(products!.list![8].name, "TAXI")

                /// Assert upfront fare product, POOL
                let uberPool = products?.list?[6]
                XCTAssertEqual(uberPool?.upfrontFareEnabled, true)
                XCTAssertEqual(uberPool?.capacity, 2)
                XCTAssertEqual(uberPool?.productID, "26546650-e557-4a7b-86e7-6a3942445247")
                XCTAssertNil(uberPool?.priceDetails)
                XCTAssertEqual(uberPool?.imageURL, URL(string: "http://d1a3f4spazzrp4.cloudfront.net/car-types/mono/mono-uberx.png")!)
                XCTAssertEqual(uberPool?.cashEnabled, false)
                XCTAssertEqual(uberPool?.isShared, true)
                XCTAssertEqual(uberPool?.name, "POOL")
                XCTAssertEqual(uberPool?.productGroup, ProductGroup.rideshare)
                XCTAssertEqual(uberPool?.productDescription, "Share the ride, split the cost.")

                /// Assert time+distance product, uberX (pulled from Sydney)
                let uberX = products?.list?[7]
                XCTAssertEqual(uberX?.upfrontFareEnabled, false)
                XCTAssertEqual(uberX?.capacity, 4)
                XCTAssertEqual(uberX?.productID, "2d1d002b-d4d0-4411-98e1-673b244878b2")
                XCTAssertEqual(uberX?.imageURL, URL(string: "http://d1a3f4spazzrp4.cloudfront.net/car-types/mono/mono-uberx.png")!)
                XCTAssertEqual(uberX?.cashEnabled, false)
                XCTAssertEqual(uberX?.isShared, false)
                XCTAssertEqual(uberX?.name, "uberX")
                XCTAssertEqual(uberX?.productGroup, ProductGroup.uberX)
                XCTAssertEqual(uberX?.productDescription, "Everyday rides that are always smarter than a taxi")

                XCTAssertEqual(uberX?.priceDetails?.serviceFees?.first?.fee, 0.55)
                XCTAssertEqual(uberX?.priceDetails?.serviceFees?.first?.name, "Booking fee")
                XCTAssertEqual(uberX?.priceDetails?.costPerMinute, 0.4)
                XCTAssertEqual(uberX?.priceDetails?.distanceUnit, "km")
                XCTAssertEqual(uberX?.priceDetails?.minimumFee, 9)
                XCTAssertEqual(uberX?.priceDetails?.costPerDistance, 1.45)
                XCTAssertEqual(uberX?.priceDetails?.baseFee, 2.5)
                XCTAssertEqual(uberX?.priceDetails?.cancellationFee, 10)
                XCTAssertEqual(uberX?.priceDetails?.currencyCode, "AUD")

                /// Assert hail product, TAXI
                let taxi = products?.list?[8]
                XCTAssertEqual(taxi?.upfrontFareEnabled, false)
                XCTAssertEqual(taxi?.capacity, 4)
                XCTAssertEqual(taxi?.productID, "3ab64887-4842-4c8e-9780-ccecd3a0391d")
                XCTAssertNil(uberPool?.priceDetails)
                XCTAssertEqual(taxi?.imageURL, URL(string: "http://d1a3f4spazzrp4.cloudfront.net/car-types/mono/mono-taxi.png")!)
                XCTAssertEqual(taxi?.cashEnabled, false)
                XCTAssertEqual(taxi?.isShared, false)
                XCTAssertEqual(taxi?.name, "TAXI")
                XCTAssertEqual(taxi?.productGroup, ProductGroup.taxi)
                XCTAssertEqual(taxi?.productDescription, "TAXI WITHOUT THE HASSLE")
            }
        }
    }