|
| 1 | +import XCTest |
| 2 | +@testable import Networking |
| 3 | + |
| 4 | +final class CouponEncoderTests: XCTestCase { |
| 5 | + |
| 6 | + func test_coupon_encoder_encodes_necessary_fields_correctly() throws { |
| 7 | + // Given |
| 8 | + let dateFormatter = DateFormatter.Defaults.dateTimeFormatter |
| 9 | + let coupon = Coupon( |
| 10 | + couponID: 720, |
| 11 | + code: "free shipping", |
| 12 | + amount: "10.00", |
| 13 | + dateCreated: dateFormatter.date(from: "2017-03-21T18:25:02")!, |
| 14 | + dateModified: dateFormatter.date(from: "2017-03-21T18:25:02")!, |
| 15 | + discountType: .fixedCart, |
| 16 | + description: "Coupon description", |
| 17 | + dateExpires: dateFormatter.date(from: "2017-03-31T15:25:02"), |
| 18 | + usageCount: 10, |
| 19 | + individualUse: true, |
| 20 | + productIds: [12893712, 12389], |
| 21 | + excludedProductIds: [12213], |
| 22 | + usageLimit: 1200, |
| 23 | + usageLimitPerUser: 3, |
| 24 | + limitUsageToXItems: 10, |
| 25 | + freeShipping: true, |
| 26 | + productCategories: [123, 435, 232], |
| 27 | + excludedProductCategories: [908], |
| 28 | + excludeSaleItems: false, |
| 29 | + minimumAmount: "5.00", |
| 30 | + maximumAmount: "500.00", |
| 31 | + emailRestrictions : ["*@a8c.com", "[email protected]"], |
| 32 | + |
| 33 | + ) |
| 34 | + |
| 35 | + // When |
| 36 | + let parameters = try coupon.toDictionary(keyEncodingStrategy: .convertToSnakeCase, dateFormatter: dateFormatter) |
| 37 | + |
| 38 | + // Then |
| 39 | + XCTAssertEqual(parameters["code"] as? String, "free shipping") |
| 40 | + XCTAssertEqual(parameters["amount"] as? String, "10.00") |
| 41 | + XCTAssertEqual(parameters["discount_type"] as? String, "fixed_cart") |
| 42 | + XCTAssertEqual(parameters["description"] as? String, "Coupon description") |
| 43 | + XCTAssertEqual(parameters["date_expires"] as? String, "2017-03-31T15:25:02") |
| 44 | + XCTAssertEqual(parameters["individual_use"] as? Bool, true) |
| 45 | + XCTAssertEqual(parameters["product_ids"] as? [Int], [12893712, 12389]) |
| 46 | + XCTAssertEqual(parameters["excluded_product_ids"] as? [Int], [12213]) |
| 47 | + XCTAssertEqual(parameters["usage_limit"] as? Int, 1200) |
| 48 | + XCTAssertEqual(parameters["usage_limit_per_user"] as? Int, 3) |
| 49 | + XCTAssertEqual(parameters["limit_usage_to_x_items"] as? Int, 10) |
| 50 | + XCTAssertEqual(parameters["free_shipping"] as? Bool, true) |
| 51 | + XCTAssertEqual(parameters["product_categories"] as? [Int], [123, 435, 232]) |
| 52 | + XCTAssertEqual(parameters["excluded_product_categories"] as? [Int], [908]) |
| 53 | + XCTAssertEqual(parameters["exclude_sale_items"] as? Bool, false) |
| 54 | + XCTAssertEqual(parameters["minimum_amount"] as? String, "5.00") |
| 55 | + XCTAssertEqual(parameters["maximum_amount"] as? String, "500.00") |
| 56 | + XCTAssertEqual(parameters["email_restrictions"] as? [String], ["*@a8c.com", "[email protected]"]) |
| 57 | + |
| 58 | + // These fields cannot be updated so they are not encoded |
| 59 | + XCTAssertNil(parameters["coupon_id"]) |
| 60 | + XCTAssertNil(parameters["date_created"]) |
| 61 | + XCTAssertNil(parameters["date_modified"]) |
| 62 | + XCTAssertNil(parameters["usage_count"]) |
| 63 | + XCTAssertNil(parameters["used_by"]) |
| 64 | + } |
| 65 | +} |
0 commit comments