Skip to content

Commit a1a5313

Browse files
committed
Adds Yosemite action to create products
1 parent 658ffe8 commit a1a5313

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

Yosemite/Yosemite/Actions/ProductAction.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,8 @@ public enum ProductAction: Action {
8686
/// Checks if the store has at least one product
8787
///
8888
case checkForProducts(siteID: Int64, onCompletion: (Result<Bool, Error>) -> Void)
89+
90+
/// Creates a product using the provided template type.
91+
///
92+
case createTemplateProduct(siteID: Int64, template: ProductsRemote.TemplateType, onCompletion: (Result<Product, Error>) -> Void)
8993
}

Yosemite/Yosemite/Stores/ProductStore.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ public class ProductStore: Store {
102102
replaceProductLocally(product: product, onCompletion: onCompletion)
103103
case let .checkForProducts(siteID: siteID, onCompletion: onCompletion):
104104
checkForProducts(siteID: siteID, onCompletion: onCompletion)
105+
case let .createTemplateProduct(siteID, template, onCompletion):
106+
createTemplateProduct(siteID: siteID, template: template, onCompletion: onCompletion)
105107
}
106108
}
107109
}
@@ -409,6 +411,20 @@ private extension ProductStore {
409411
}
410412
}
411413
}
414+
415+
/// Creates a product using the provided template type.
416+
///
417+
func createTemplateProduct(siteID: Int64, template: ProductsRemote.TemplateType, onCompletion: @escaping (Result<Product, Error>) -> Void) {
418+
remote.createTemplateProduct(for: siteID, template: template) { [remote] result in
419+
switch result {
420+
case .success(let productID):
421+
remote.loadProduct(for: siteID, productID: productID, completion: onCompletion)
422+
423+
case .failure(let error):
424+
onCompletion(.failure(error))
425+
}
426+
}
427+
}
412428
}
413429

414430

Yosemite/YosemiteTests/Stores/ProductStoreTests.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,25 @@ final class ProductStoreTests: XCTestCase {
15921592
let hasProducts = try XCTUnwrap(result.get())
15931593
XCTAssertFalse(hasProducts)
15941594
}
1595+
1596+
func test_create_template_product_invokes_correct_network_calls() {
1597+
// Given
1598+
let productStore = ProductStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
1599+
network.simulateResponse(requestUrlSuffix: "onboarding/tasks/create_product_from_template", filename: "product-id-only")
1600+
network.simulateResponse(requestUrlSuffix: "products/3946", filename: "product")
1601+
1602+
// When
1603+
let result: Result<Networking.Product, Error> = waitFor { promise in
1604+
let action = ProductAction.createTemplateProduct(siteID: self.sampleSiteID, template: .physical) { result in
1605+
promise(result)
1606+
}
1607+
productStore.onAction(action)
1608+
}
1609+
1610+
// Then
1611+
XCTAssertTrue(result.isSuccess)
1612+
XCTAssertNotNil(try? result.get())
1613+
}
15951614
}
15961615

15971616
// MARK: - Private Helpers

0 commit comments

Comments
 (0)