public async Task <PartOutResult> GetPartOutValueFromPageAsync(string itemNo, Condition condition = Condition.New, bool includeInstructions = true, bool breakMinifigs = false, bool includeBox = false, bool includeExtraParts = false, bool breakSetsInSet = false, PartOutItemType itemType = PartOutItemType.Set, string?currencyCode = null) { var split = itemNo.Split('-'); var rawItemNumber = split[0]; var sequenceNumber = 1; if (split.Length > 1) { if (!int.TryParse(split[1], out int temp)) { throw new ArgumentException($"{itemNo} '{itemNo}' has an invalid sequence number. The section after the '-' must be numeric.", nameof(itemNo)); } sequenceNumber = temp; } var url = "https://www.bricklink.com/catalogPOV.asp?" + $"itemType={itemType.GetStringValueOrDefault()}&itemNo={rawItemNumber}&itemSeq={sequenceNumber}&itemQty=1&" + $"breakType={(breakMinifigs ? "P" : "M")}&itemCondition={condition.GetStringValueOrDefault()}" + $"&incInstr={(includeInstructions ? "Y" : "N")}&incBox={(includeBox ? "Y" : "N")}&" + $"incParts={(includeExtraParts ? "Y" : "N")}&breakSets={(breakSetsInSet ? "Y" : "N")}"; var response = await _httpClient.GetAsync(url); var htmlResponse = await response.Content.ReadAsStringAsync(); var result = PartOutResponseParser.ParseResponse(htmlResponse, url); result.ItemNumber = $"{rawItemNumber}-{sequenceNumber}"; result.Condition = condition; if (currencyCode != null) { var exchangeRate = await _currencyRatesService.GetExchangeRateAsync("USD", currencyCode); result.Average6MonthsSalesValueMyCurrency = Math.Round(result.Average6MonthsSalesValueUsd * exchangeRate, 3); result.CurrentSalesValueMyCurreny = Math.Round(result.CurrentSalesValueUsd * exchangeRate, 3); } return(result); }
private async Task GetPartOutValueFromPageAsync_ItemExists(string itemNumber, PartOutItemType itemType) { using var client = BricklinkClientFactory.Build(); var result = await client.GetPartOutValueFromPageAsync(itemNumber, itemType : itemType); Assert.True(result.Average6MonthsSalesValueUsd > 0.0M); Assert.True(result.CurrentSalesValueUsd > 0.0M); Assert.True(result.IncludedItemsCount > 0); Assert.True(result.IncludedLotsCount > 0); }