public async Task Should_ReorderPortfolioSymbols() { var payload = new { name = "" }.ToJsonPayload(); // Create Portfolio var createPortfolioResponse = await _client.PostAsync(ApiPath.Portfolio(), payload); createPortfolioResponse.EnsureSuccessStatusCode(); var portfolio = await createPortfolioResponse.Content.ReadAsAsync <Portfolio>(); Assert.True(portfolio.Id > 0); // Search for symbols by keyword SymbolSearchResultDTO tslaSymbol = await FetchSymbol("TSLA", ExchangeType.NASDAQ); SymbolSearchResultDTO jpmSymbol = await FetchSymbol("JPM", ExchangeType.NYSE); SymbolSearchResultDTO fbSymbol = await FetchSymbol("FB", ExchangeType.NASDAQ); SymbolSearchResultDTO msftSymbol = await FetchSymbol("MSFT", ExchangeType.NASDAQ); // Add symbols to Portfolio var addTSLAResponse = await _client.PostAsync(ApiPath.PortfolioSymbols(portfolio.Id), new { SymbolId = tslaSymbol.SymbolId }.ToJsonPayload()); addTSLAResponse.EnsureSuccessStatusCode(); var tslaPortfolioSymbol = await addTSLAResponse.Content.ReadAsAsync <PortfolioSymbol>(); var addJPMResponse = await _client.PostAsync(ApiPath.PortfolioSymbols(portfolio.Id), new { SymbolId = jpmSymbol.SymbolId }.ToJsonPayload()); addJPMResponse.EnsureSuccessStatusCode(); var jpmPortfolioSymbol = await addJPMResponse.Content.ReadAsAsync <PortfolioSymbol>(); var addFBResponse = await _client.PostAsync(ApiPath.PortfolioSymbols(portfolio.Id), new { SymbolId = fbSymbol.SymbolId }.ToJsonPayload()); addFBResponse.EnsureSuccessStatusCode(); var fbPortfolioSymbol = await addFBResponse.Content.ReadAsAsync <PortfolioSymbol>(); var addMSFTResponse = await _client.PostAsync(ApiPath.PortfolioSymbols(portfolio.Id), new { SymbolId = msftSymbol.SymbolId }.ToJsonPayload()); addMSFTResponse.EnsureSuccessStatusCode(); var msftPortfolioSymbol = await addMSFTResponse.Content.ReadAsAsync <PortfolioSymbol>(); // Check starting order is as expected Assert.Equal(1, tslaPortfolioSymbol.SortOrder); Assert.Equal(2, jpmPortfolioSymbol.SortOrder); Assert.Equal(3, fbPortfolioSymbol.SortOrder); Assert.Equal(4, msftPortfolioSymbol.SortOrder); var newOrder = new { PortfolioSymbolIdToSortOrder = new Dictionary <int, int> { { fbPortfolioSymbol.Id, 1 }, { tslaPortfolioSymbol.Id, 2 }, { msftPortfolioSymbol.Id, 3 }, { jpmPortfolioSymbol.Id, 4 }, } }.ToJsonPayload(); var reorderTSLAResponse = await _client.PatchAsync(ApiPath.PortfolioSymbolsReorder(portfolio.Id), newOrder); reorderTSLAResponse.EnsureSuccessStatusCode(); var getPortfolioResponse = await _client.GetAsync(ApiPath.Portfolio(portfolio.Id)); var fetchedPortfolio = await getPortfolioResponse.Content.ReadAsAsync <Portfolio>(); Assert.Equal(portfolio.Id, fetchedPortfolio.Id); var tsla = fetchedPortfolio.PortfolioSymbols.Single(s => s.Ticker == "TSLA"); var jpm = fetchedPortfolio.PortfolioSymbols.Single(s => s.Ticker == "JPM"); var fb = fetchedPortfolio.PortfolioSymbols.Single(s => s.Ticker == "FB"); var msft = fetchedPortfolio.PortfolioSymbols.Single(s => s.Ticker == "MSFT"); Assert.Equal(1, fb.SortOrder); Assert.Equal(2, tsla.SortOrder); Assert.Equal(3, msft.SortOrder); Assert.Equal(4, jpm.SortOrder); }