Merge pull request #601 from rgoldberg/597-formatted-price

Use `formattedPrice` for prices
This commit is contained in:
Ross Goldberg 2024-10-26 02:23:47 -04:00 committed by GitHub
commit a256832b78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 895 additions and 3352 deletions

View file

@ -18,7 +18,7 @@ enum AppInfoFormatter {
let headline = [
"\(app.trackName)",
"\(app.version)",
"[\(app.price ?? 0)]",
"[\(app.formattedPrice)]",
]
.joined(separator: " ")
@ -27,7 +27,7 @@ enum AppInfoFormatter {
"By: \(app.sellerName)",
"Released: \(humanReadableDate(app.currentVersionReleaseDate))",
"Minimum OS: \(app.minimumOsVersion)",
"Size: \(humanReadableSize(app.fileSizeBytes ?? "0"))",
"Size: \(humanReadableSize(app.fileSizeBytes))",
"From: \(app.trackViewUrl)",
]
.joined(separator: "\n")

View file

@ -27,12 +27,11 @@ enum SearchResultFormatter {
let appID = result.trackId
let appName = result.trackName.padding(toLength: maxLength, withPad: " ", startingAt: 0)
let version = result.version
let price = result.price ?? 0.0
if includePrice {
output += String(format: "%12lu %@ $%5.2f (%@)\n", appID, appName, price, version)
output += String(format: "%12lu %@ (%@) %@\n", appID, appName, version, result.formattedPrice)
} else {
output += String(format: "%12lu %@ (%@)\n", appID, appName, version)
output += String(format: "%12lu %@ (%@)\n", appID, appName, version)
}
}

View file

@ -9,9 +9,10 @@
struct SearchResult: Decodable {
var bundleId: String
var currentVersionReleaseDate: String
var fileSizeBytes: String?
var fileSizeBytes: String
var formattedPrice: String
var minimumOsVersion: String
var price: Double?
var price: Double
var sellerName: String
var sellerUrl: String?
var trackId: AppID
@ -23,6 +24,7 @@ struct SearchResult: Decodable {
bundleId: String = "",
currentVersionReleaseDate: String = "",
fileSizeBytes: String = "0",
formattedPrice: String = "0",
minimumOsVersion: String = "",
price: Double = 0.0,
sellerName: String = "",
@ -35,6 +37,7 @@ struct SearchResult: Decodable {
self.bundleId = bundleId
self.currentVersionReleaseDate = currentVersionReleaseDate
self.fileSizeBytes = fileSizeBytes
self.formattedPrice = formattedPrice
self.minimumOsVersion = minimumOsVersion
self.price = price
self.sellerName = sellerName

View file

@ -39,8 +39,8 @@ public class InfoSpec: QuickSpec {
let mockResult = SearchResult(
currentVersionReleaseDate: "2019-01-07T18:53:13Z",
fileSizeBytes: "1024",
formattedPrice: "$2.00",
minimumOsVersion: "10.14",
price: 2.0,
sellerName: "Awesome Dev",
trackId: 1111,
trackName: "Awesome App",
@ -54,7 +54,7 @@ public class InfoSpec: QuickSpec {
}
}
== """
Awesome App 1.0 [2.0]
Awesome App 1.0 [$2.00]
By: Awesome Dev
Released: 2019-01-07
Minimum OS: 10.14

View file

@ -36,7 +36,7 @@ public class SearchSpec: QuickSpec {
try MAS.Search.parse(["slack"]).run(searcher: searcher)
}
}
== " 1111 slack (0.0)\n"
== " 1111 slack (0.0)\n"
}
it("fails when searching for nonexistent app") {
expect {

View file

@ -29,57 +29,57 @@ public class SearchResultFormatterSpec: QuickSpec {
}
it("can format a single result") {
let result = SearchResult(
price: 9.87,
formattedPrice: "$9.87",
trackId: 12345,
trackName: "Awesome App",
version: "19.2.1"
)
expect(format([result], false)) == " 12345 Awesome App (19.2.1)"
expect(format([result], false)) == " 12345 Awesome App (19.2.1)"
}
it("can format a single result with price") {
let result = SearchResult(
price: 9.87,
formattedPrice: "$9.87",
trackId: 12345,
trackName: "Awesome App",
version: "19.2.1"
)
expect(format([result], true)) == " 12345 Awesome App $ 9.87 (19.2.1)"
expect(format([result], true)) == " 12345 Awesome App (19.2.1) $9.87"
}
it("can format a two results") {
results = [
SearchResult(
price: 9.87,
formattedPrice: "$9.87",
trackId: 12345,
trackName: "Awesome App",
version: "19.2.1"
),
SearchResult(
price: 0.01,
formattedPrice: "$0.01",
trackId: 67890,
trackName: "Even Better App",
version: "1.2.0"
),
]
expect(format(results, false))
== " 12345 Awesome App (19.2.1)\n 67890 Even Better App (1.2.0)"
== " 12345 Awesome App (19.2.1)\n 67890 Even Better App (1.2.0)"
}
it("can format a two results with prices") {
results = [
SearchResult(
price: 9.87,
formattedPrice: "$9.87",
trackId: 12345,
trackName: "Awesome App",
version: "19.2.1"
),
SearchResult(
price: 0.01,
formattedPrice: "$0.01",
trackId: 67890,
trackName: "Even Better App",
version: "1.2.0"
),
]
expect(format(results, true))
== " 12345 Awesome App $ 9.87 (19.2.1)\n 67890 Even Better App $ 0.01 (1.2.0)"
== " 12345 Awesome App (19.2.1) $9.87\n 67890 Even Better App (1.2.0) $0.01"
}
}
}

View file

@ -19,6 +19,9 @@
"trackName": "Things That Go Bump",
"trackId": 1472954003,
"sellerName": "Tinybop Inc.",
"price": 0.99,
"fileSizeBytes": "12345678",
"formattedPrice": "$0.99",
"releaseNotes": "* BOOM *, this is a BIG update. The house spawns a game room, complete with video games you can ENTER INTO. It's fun and a little bit weird! Try it! \n»-(¯`·.·´¯)->",
"primaryGenreId": 6014,
"primaryGenreName": "Games",

File diff suppressed because it is too large Load diff