Skip to content

Commit

Permalink
[Woo POS] [Variable Products] Match variation order with wp admin men…
Browse files Browse the repository at this point in the history
…u order (#14946)
  • Loading branch information
joshheald authored Jan 23, 2025
2 parents 3ffc0b9 + a81490c commit fe0d95e
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 46 deletions.
21 changes: 20 additions & 1 deletion Networking/Networking/Remote/ProductVariationsRemote.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ public class ProductVariationsRemote: Remote, ProductVariationsRemoteProtocol {
variationIDs: [],
downloadable: false,
status: .published,
orderBy: .menuOrder,
order: .ascending,
context: nil,
pageNumber: pageNumber,
pageSize: POSConstants.variationsPerPage)
Expand All @@ -105,6 +107,8 @@ public class ProductVariationsRemote: Remote, ProductVariationsRemoteProtocol {
variationIDs: [Int64],
downloadable: Bool? = nil,
status: ProductStatus? = nil,
orderBy: OrderByField? = nil,
order: OrderDirection? = nil,
context: String?,
pageNumber: Int,
pageSize: Int) -> JetpackRequest {
Expand All @@ -116,7 +120,9 @@ public class ProductVariationsRemote: Remote, ProductVariationsRemoteProtocol {
ParameterKey.downloadable: downloadable.map { String($0) },
ParameterKey.contextKey: context ?? Default.context,
ParameterKey.include: variationIDs.isEmpty ? nil: stringOfVariationIDs,
ParameterKey.status: status?.rawValue
ParameterKey.status: status?.rawValue,
ParameterKey.orderBy: orderBy?.rawValue,
ParameterKey.order: order?.rawValue
]
.compactMapValues { $0 }

Expand Down Expand Up @@ -340,7 +346,20 @@ public extension ProductVariationsRemote {
static let include: String = "include"
static let downloadable: String = "downloadable"
static let status: String = "status"
static let orderBy: String = "orderby"
static let order: String = "order"
}

enum OrderByField: String {
case date
case menuOrder = "menu_order"
}

enum OrderDirection: String {
case ascending = "asc"
case descending = "desc"
}

}

private extension ProductVariationsRemote {
Expand Down
92 changes: 47 additions & 45 deletions WooCommerce/WooCommerceTests/Extensions/VersionHelpersTests.swift
Original file line number Diff line number Diff line change
@@ -1,52 +1,54 @@
import XCTest
import Testing
@testable import WooCommerce

/// VersionHelpers Unit Tests
///
final class VersionHelpersTests: XCTestCase {
func test_compare_as_version() {
let tests = [
VersionTestCase(foundVersion: "2.8", requiredMinimumVersion: "2", meetsMinimum: true),
VersionTestCase(foundVersion: "2.9", requiredMinimumVersion: "3", meetsMinimum: false),
VersionTestCase(foundVersion: "2.9.1", requiredMinimumVersion: "2", meetsMinimum: true),
VersionTestCase(foundVersion: "3.0", requiredMinimumVersion: "3", meetsMinimum: true),

VersionTestCase(foundVersion: "2.8", requiredMinimumVersion: "2.9", meetsMinimum: false),
VersionTestCase(foundVersion: "2.9", requiredMinimumVersion: "2.9", meetsMinimum: true),
VersionTestCase(foundVersion: "2.9.1", requiredMinimumVersion: "2.9", meetsMinimum: true),
VersionTestCase(foundVersion: "3.0", requiredMinimumVersion: "2.9", meetsMinimum: true),

VersionTestCase(foundVersion: "2.9", requiredMinimumVersion: "2.9.0", meetsMinimum: true),

VersionTestCase(foundVersion: "2.9.1", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
VersionTestCase(foundVersion: "3.0", requiredMinimumVersion: "2.9.1", meetsMinimum: true),

VersionTestCase(foundVersion: "3.3.1-test-1", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
VersionTestCase(foundVersion: "3.3.1-test-1", requiredMinimumVersion: "3.3", meetsMinimum: true),
VersionTestCase(foundVersion: "3.3.1-test-1", requiredMinimumVersion: "3.3.1", meetsMinimum: false),

VersionTestCase(foundVersion: "4.3.2RC1", requiredMinimumVersion: "4.3.2RC2", meetsMinimum: false),
VersionTestCase(foundVersion: "4.3.2RC2", requiredMinimumVersion: "4.3.2RC1", meetsMinimum: true),

VersionTestCase(foundVersion: "1.0.0beta", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.1beta", requiredMinimumVersion: "1.0.0", meetsMinimum: true),
VersionTestCase(foundVersion: "1.0.0beta", requiredMinimumVersion: "1.0.0b", meetsMinimum: true),

VersionTestCase(foundVersion: "1.0.0-dev", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-alpha", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-a", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-beta", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-b", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-RC1", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-rc1", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-pl", requiredMinimumVersion: "1.0.0", meetsMinimum: true),
VersionTestCase(foundVersion: "1.0.0-p1", requiredMinimumVersion: "1.0.0", meetsMinimum: true),
]

for test in tests {
let meetsMinimum = VersionHelpers.compare(test.foundVersion, test.requiredMinimumVersion) != .orderedAscending
XCTAssertEqual(test.meetsMinimum, meetsMinimum)
}
struct VersionHelpersTests {
@Test("Version comparisons match PHP behaviour", arguments: [
VersionTestCase(foundVersion: "2.8", requiredMinimumVersion: "2", meetsMinimum: true),
VersionTestCase(foundVersion: "2.9", requiredMinimumVersion: "3", meetsMinimum: false),
VersionTestCase(foundVersion: "2.9.1", requiredMinimumVersion: "2", meetsMinimum: true),
VersionTestCase(foundVersion: "3.0", requiredMinimumVersion: "3", meetsMinimum: true),
VersionTestCase(foundVersion: "2.8", requiredMinimumVersion: "2.9", meetsMinimum: false),
VersionTestCase(foundVersion: "2.9", requiredMinimumVersion: "2.9", meetsMinimum: true),
VersionTestCase(foundVersion: "2.9.1", requiredMinimumVersion: "2.9", meetsMinimum: true),
VersionTestCase(foundVersion: "3.0", requiredMinimumVersion: "2.9", meetsMinimum: true),
VersionTestCase(foundVersion: "2.9", requiredMinimumVersion: "2.9.0", meetsMinimum: true),
VersionTestCase(foundVersion: "2.9.1", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
VersionTestCase(foundVersion: "3.0", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
VersionTestCase(foundVersion: "3.3.1-test-1", requiredMinimumVersion: "2.9.1", meetsMinimum: true),
VersionTestCase(foundVersion: "3.3.1-test-1", requiredMinimumVersion: "3.3", meetsMinimum: true),
VersionTestCase(foundVersion: "3.3.1-test-1", requiredMinimumVersion: "3.3.1", meetsMinimum: false),
VersionTestCase(foundVersion: "4.3.2RC1", requiredMinimumVersion: "4.3.2RC2", meetsMinimum: false),
VersionTestCase(foundVersion: "4.3.2RC2", requiredMinimumVersion: "4.3.2RC1", meetsMinimum: true),
VersionTestCase(foundVersion: "1.0.0beta", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.1beta", requiredMinimumVersion: "1.0.0", meetsMinimum: true),
VersionTestCase(foundVersion: "1.0.0beta", requiredMinimumVersion: "1.0.0b", meetsMinimum: true),
VersionTestCase(foundVersion: "1.0.0-dev", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-alpha", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-a", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-beta", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-b", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-RC1", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-rc1", requiredMinimumVersion: "1.0.0", meetsMinimum: false),
VersionTestCase(foundVersion: "1.0.0-pl", requiredMinimumVersion: "1.0.0", meetsMinimum: true),
VersionTestCase(foundVersion: "1.0.0-p1", requiredMinimumVersion: "1.0.0", meetsMinimum: true),
VersionTestCase(foundVersion: "9.6.0-rc.1", requiredMinimumVersion: "9.6.0-rc.2", meetsMinimum: false),
VersionTestCase(foundVersion: "9.6.0-rc.1", requiredMinimumVersion: "9.6.0-rc.1", meetsMinimum: true),
VersionTestCase(foundVersion: "9.6.0-rc.2", requiredMinimumVersion: "9.6.0-rc.1", meetsMinimum: true),
])
func compareAsVersion(testCase: VersionTestCase) {
let meetsMinimum = VersionHelpers.compare(testCase.foundVersion, testCase.requiredMinimumVersion) != .orderedAscending
#expect(testCase.meetsMinimum == meetsMinimum,
"\(testCase.foundVersion) should \(testCase.meetsMinimum ? "not " : "" )meet minimum \(testCase.requiredMinimumVersion)")
}

struct VersionTestCase {
Expand Down

0 comments on commit fe0d95e

Please sign in to comment.