Skip to content

Commit

Permalink
fix: incorrect currency conversion on day change summary with currenc…
Browse files Browse the repository at this point in the history
…y-summary-only option set
  • Loading branch information
achannarasappa committed Aug 14, 2022
1 parent 961755a commit be3b760
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 5 deletions.
2 changes: 1 addition & 1 deletion internal/asset/asset.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func addHoldingToHoldingSummary(holdingSummary HoldingSummary, holding c.Holding

value := holdingSummary.Value + (holding.Value * currencyRateByUse.SummaryValue)
cost := holdingSummary.Cost + (holding.Cost * currencyRateByUse.SummaryCost)
dayChange := holdingSummary.DayChange.Amount + holding.DayChange.Amount
dayChange := holdingSummary.DayChange.Amount + (holding.DayChange.Amount * currencyRateByUse.SummaryValue)
totalChange := value - cost
totalChangePercent := (totalChange / cost) * 100
dayChangePercent := (dayChange / value) * 100
Expand Down
56 changes: 52 additions & 4 deletions internal/asset/asset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,45 @@ var _ = Describe("Asset", func() {
ToCurrency: "EUR",
Rate: 1.5,
},
"GBP": {
FromCurrency: "GBP",
ToCurrency: "EUR",
Rate: 2,
},
},
},
}
inputAssetGroupQuote := fixtureAssetGroupQuote
inputAssetGroupQuote.AssetQuotes = []c.AssetQuote{
{
Name: "ThoughtWorks",
Symbol: "TWKS",
Class: c.AssetClassStock,
Currency: c.Currency{FromCurrencyCode: "USD"},
QuotePrice: c.QuotePrice{Price: 110.0, PricePrevClose: 100.0, PriceOpen: 100.0, PriceDayHigh: 110.0, PriceDayLow: 90.0, Change: 10.0, ChangePercent: 10.0},
QuoteExtended: c.QuoteExtended{FiftyTwoWeekHigh: 150, FiftyTwoWeekLow: 50, MarketCap: 1000000},
},
{
Name: "Microsoft Inc",
Symbol: "MSFT",
Class: c.AssetClassStock,
Currency: c.Currency{FromCurrencyCode: "GBP"},
QuotePrice: c.QuotePrice{Price: 220.0, PricePrevClose: 200.0, PriceOpen: 200.0, PriceDayHigh: 220.0, PriceDayLow: 180.0, Change: 20.0, ChangePercent: 10.0},
},
}
inputAssetGroupQuote.AssetGroup.ConfigAssetGroup.Holdings = []c.Lot{
{
Symbol: "TWKS",
UnitCost: 100,
Quantity: 10,
FixedCost: 0,
},
{
Symbol: "MSFT",
UnitCost: 100,
Quantity: 1,
FixedCost: 0,
},
}

outputAssets, outputHoldingSummary := GetAssets(inputContext, inputAssetGroupQuote)
Expand Down Expand Up @@ -130,11 +158,31 @@ var _ = Describe("Asset", func() {
Expect(outputAssets[0].Holding.UnitCost).To(Equal(150.0))
})
It("should convert holding summary values", func() {
Expect(outputHoldingSummary.Cost).To(Equal(1500.0))
Expect(outputHoldingSummary.Value).To(Equal(1650.0))
Expect(outputHoldingSummary.TotalChange.Amount).To(Equal(150.0))
Expect(outputHoldingSummary.DayChange.Amount).To(Equal(150.0))
Expect(outputHoldingSummary.Cost).To(Equal(1700.0))
Expect(outputHoldingSummary.Value).To(Equal(2090.0))
Expect(outputHoldingSummary.TotalChange.Amount).To(Equal(390.0))
Expect(outputHoldingSummary.DayChange.Amount).To(Equal(190.0))
})

When("and only the summary conversion only option is set", func() {

inputContextSummaryConversion := inputContext
inputContextSummaryConversion.Config = c.Config{
Currency: "EUR",
CurrencyConvertSummaryOnly: true,
}

_, outputHoldingSummary := GetAssets(inputContextSummaryConversion, inputAssetGroupQuote)

It("should convert holding summary values", func() {
Expect(outputHoldingSummary.Cost).To(Equal(1700.0))
Expect(outputHoldingSummary.Value).To(Equal(2090.0))
Expect(outputHoldingSummary.TotalChange.Amount).To(Equal(390.0))
Expect(outputHoldingSummary.DayChange.Amount).To(Equal(190.0))
})

})

})

When("there is no explicit currency conversion", func() {
Expand Down

0 comments on commit be3b760

Please sign in to comment.