Skip to content

Commit e41e674

Browse files
committed
Added GetAll method to SqlKataRepository and covered it with test.
Implemented some PortfolioServiceImpl methods.
1 parent ab6547a commit e41e674

File tree

8 files changed

+128
-32
lines changed

8 files changed

+128
-32
lines changed

Model/Model.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace Model
55
{
6-
public record Portfolio(string Name, string Description, int CurrencyCode, int Id = -1);
6+
public record Portfolio(string Name, string Description, Currency Currency, int Id = -1);
77

88
public record PortfolioEntry(string Symbol, int PortfolioId = -1, int Id = -1);
99

@@ -21,11 +21,10 @@ public virtual bool Equals(MarketOrder? other)
2121
}
2222
}
2323

24-
25-
public enum Currency
24+
public enum Currency : int
2625
{
27-
Czk,
28-
Eur,
29-
Usd
26+
Czk = 203,
27+
Eur = 978,
28+
Usd = 849
3029
}
3130
}

Repository/IRepository.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Generic;
12
using Model;
23

34
namespace Repository
@@ -10,6 +11,8 @@ public interface IRepository<T>
1011
public int Add(T entry);
1112

1213
public T Get(int id);
14+
15+
public List<T> GetAll();
1316

1417
public bool Update(T entry);
1518

Repository/SqlKataPortfolioRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ public SqlKataPortfolioRepository(SqlKataDatabase db) : base(db, "portfolios")
1515
{
1616
name = entry.Name,
1717
description = entry.Description,
18-
currency_code = entry.CurrencyCode
18+
currency_code = (int) entry.Currency
1919
};
2020

2121
public override Portfolio FromRow(dynamic d) =>
22-
new((string) d.name, (string) d.description, (int) d.currency_code, (int) d.id);
22+
new((string) d.name, (string) d.description, (Currency) d.currency_code, (int) d.id);
2323
}
2424
}

Repository/SqlKataRepository.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,23 @@ public T Get(int id)
5454
return FromRow(result);
5555
}
5656

57+
public List<T> GetAll()
58+
{
59+
var result = Db.Get().Query(_tableName).Get();
60+
if (result == null)
61+
{
62+
return default;
63+
}
64+
65+
var list = new List<T>();
66+
foreach (var row in result)
67+
{
68+
list.Add(FromRow(row));
69+
}
70+
71+
return list;
72+
}
73+
5774
public List<T> All()
5875
{
5976
List<T> items = new List<T>();

Services/Services/PortfolioService.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Services
88
{
99
public interface IPortfolioService
1010
{
11-
Portfolio CreatePortfolio(string name, string description);
11+
Portfolio CreatePortfolio(string name, string description, Currency currency);
1212
bool DeletePortfolio(Portfolio portfolio);
1313
bool UpdatePortfolio(Portfolio portfolio);
1414
Portfolio GetPortfolio(int id);
@@ -24,10 +24,14 @@ public PortfolioServiceImpl(IPortfolioRepository portfolioRepository)
2424
this._portfolioRepository = portfolioRepository;
2525
}
2626

27-
public Portfolio CreatePortfolio(string name, string description)
27+
public Portfolio CreatePortfolio(string name, string description, Currency currency)
2828
{
29-
var id = _portfolioRepository.Add(new(name, description));
30-
return new(name, description, id);
29+
var potfolio = new Portfolio(name, description, currency);
30+
var id = _portfolioRepository.Add(potfolio);
31+
return potfolio with
32+
{
33+
Id = id
34+
};
3135
}
3236

3337
public bool DeletePortfolio(Portfolio portfolio)
@@ -37,17 +41,17 @@ public bool DeletePortfolio(Portfolio portfolio)
3741

3842
public bool UpdatePortfolio(Portfolio portfolio)
3943
{
40-
throw new NotImplementedException();
44+
return _portfolioRepository.Update(portfolio);
4145
}
4246

4347
public Portfolio GetPortfolio(int id)
4448
{
45-
throw new NotImplementedException();
49+
return _portfolioRepository.Get(id);
4650
}
4751

4852
public List<Portfolio> GetPortfolios()
4953
{
50-
throw new NotImplementedException();
54+
return _portfolioRepository.GetAll();
5155
}
5256
}
5357
}

Tests/Integration/Repository/MarketOrderTest.cs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using Database;
34
using Microsoft.Data.Sqlite;
45
using Model;
@@ -23,7 +24,7 @@ public SqlKataMarketOrderRepositoryFixture()
2324
SqlKataPortfolioRepository portfolioRepository = new(db);
2425
SqlKataPortfolioEntryRepository portfolioEntryRepository = new(db);
2526
this.MarketOrderRepository = new(db);
26-
var defaultPortfolioId = portfolioRepository.Add(new("Foo", "Bar", 101));
27+
var defaultPortfolioId = portfolioRepository.Add(new("Foo", "Bar", Currency.Eur));
2728
DefaultPortfolioEntryId = portfolioEntryRepository.Add(new("btc", defaultPortfolioId));
2829
}
2930

@@ -81,6 +82,31 @@ public void Added_And_Get_AreEqual()
8182
Assert.Equal(marketOrder, actual);
8283
}
8384

85+
[Fact]
86+
public void Added_And_GetAll_AreEqual()
87+
{
88+
// fixture unique to this test
89+
var marketOrderRepositoryFixture = new SqlKataMarketOrderRepositoryFixture();
90+
91+
// arrange
92+
var marketOrder1 = new MarketOrder(new Decimal(10000.39), 10, new Decimal(1.1), DateTime.Now, true,
93+
PortfolioEntryId: marketOrderRepositoryFixture.DefaultPortfolioEntryId);
94+
var marketOrder2 = new MarketOrder(new Decimal(11000.39), 11, new Decimal(1.2), DateTime.Now.Subtract(TimeSpan.FromSeconds(3600)), true,
95+
PortfolioEntryId: marketOrderRepositoryFixture.DefaultPortfolioEntryId);
96+
var marketOrder3 = new MarketOrder(new Decimal(12000.39), 12, new Decimal(1.3), DateTime.Now.Subtract(TimeSpan.FromDays(30)), false,
97+
PortfolioEntryId: marketOrderRepositoryFixture.DefaultPortfolioEntryId);
98+
99+
// act
100+
marketOrder1 = marketOrder1 with {Id = marketOrderRepositoryFixture.MarketOrderRepository.Add(marketOrder1)};
101+
marketOrder2 = marketOrder2 with {Id = marketOrderRepositoryFixture.MarketOrderRepository.Add(marketOrder2)};
102+
marketOrder3 = marketOrder3 with {Id = marketOrderRepositoryFixture.MarketOrderRepository.Add(marketOrder3)};
103+
104+
// assert
105+
var loadedPortfolios = marketOrderRepositoryFixture.MarketOrderRepository.GetAll();
106+
Assert.Equal(3, loadedPortfolios.Count);
107+
Assert.Equal(new List<MarketOrder>{marketOrder1, marketOrder2, marketOrder3}, loadedPortfolios);
108+
}
109+
84110
[Fact]
85111
public void AddUpdate_Updates()
86112
{

Tests/Integration/Repository/PortfolioEntryTest.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using Database;
34
using Microsoft.Data.Sqlite;
45
using Model;
@@ -22,7 +23,7 @@ public SqlKataPortfolioEntryRepositoryFixture()
2223
var db = new SqlKataDatabase(_dbConnection, new SqliteCompiler());
2324
this.PortfolioRepository = new(db);
2425
this.PortfolioEntryRepository = new(db);
25-
DefaultPortfolioId = PortfolioRepository.Add(new("Foo", "Bar", 101));
26+
DefaultPortfolioId = PortfolioRepository.Add(new("Foo", "Bar", Currency.Czk));
2627
}
2728

2829
public void Dispose()
@@ -72,6 +73,28 @@ public void Added_And_Get_AreEqual()
7273
Assert.Equal(portfolioEntry,
7374
_portfolioEntryRepositoryFixture.PortfolioEntryRepository.Get(portfolioEntry.Id));
7475
}
76+
77+
[Fact]
78+
public void Added_And_GetAll_AreEqual()
79+
{
80+
// fixture unique to this test
81+
var portfolioEntryRepositoryFixture = new SqlKataPortfolioEntryRepositoryFixture();
82+
83+
// arrange
84+
var portfolioEntry1 = new PortfolioEntry("btc", portfolioEntryRepositoryFixture.DefaultPortfolioId);
85+
var portfolioEntry2 = new PortfolioEntry("ada", portfolioEntryRepositoryFixture.DefaultPortfolioId);
86+
var portfolioEntry3 = new PortfolioEntry("ltc", portfolioEntryRepositoryFixture.DefaultPortfolioId);
87+
88+
// act
89+
portfolioEntry1 = portfolioEntry1 with {Id = portfolioEntryRepositoryFixture.PortfolioEntryRepository.Add(portfolioEntry1)};
90+
portfolioEntry2 = portfolioEntry2 with {Id = portfolioEntryRepositoryFixture.PortfolioEntryRepository.Add(portfolioEntry2)};
91+
portfolioEntry3 = portfolioEntry3 with {Id = portfolioEntryRepositoryFixture.PortfolioEntryRepository.Add(portfolioEntry3)};
92+
93+
// assert
94+
var loadedPortfolios = portfolioEntryRepositoryFixture.PortfolioEntryRepository.GetAll();
95+
Assert.Equal(3, loadedPortfolios.Count);
96+
Assert.Equal(new List<PortfolioEntry>{portfolioEntry1, portfolioEntry2, portfolioEntry3}, loadedPortfolios);
97+
}
7598

7699
[Fact]
77100
public void AddUpdate_Updates()

Tests/Integration/Repository/PortfolioTest.cs

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Security.Cryptography;
34
using Database;
45
using Microsoft.Data.Sqlite;
@@ -30,21 +31,21 @@ public void Dispose()
3031

3132
public class PortfolioTest : IClassFixture<SqlKataPortfolioRepositoryFixture>
3233
{
33-
private SqlKataPortfolioRepositoryFixture _portfolioFixture;
34+
private SqlKataPortfolioRepositoryFixture _portfolioRepositoryFixture;
3435

35-
public PortfolioTest(SqlKataPortfolioRepositoryFixture portfolioFixture)
36+
public PortfolioTest(SqlKataPortfolioRepositoryFixture portfolioRepositoryFixture)
3637
{
37-
this._portfolioFixture = portfolioFixture;
38+
this._portfolioRepositoryFixture = portfolioRepositoryFixture;
3839
}
3940

4041
[Fact]
4142
public void Add_ReturnsNonZeroId()
4243
{
4344
// arrange
44-
var portfolio = new Portfolio("My new portfolio", "Lorem ipsum dolor sit amet", 101);
45+
var portfolio = new Portfolio("My new portfolio", "Lorem ipsum dolor sit amet", Currency.Eur);
4546

4647
// act
47-
int id = _portfolioFixture.PortfolioRepository.Add(portfolio);
48+
int id = _portfolioRepositoryFixture.PortfolioRepository.Add(portfolio);
4849

4950
// assert
5051
Assert.True(id > 0);
@@ -54,11 +55,11 @@ public void Add_ReturnsNonZeroId()
5455
public void Added_And_Get_AreEqual()
5556
{
5657
// arrange
57-
var portfolio = new Portfolio("My new portfolio", "Lorem ipsum dolor sit amet", 101);
58+
var portfolio = new Portfolio("My new portfolio", "Lorem ipsum dolor sit amet", Currency.Czk);
5859

5960
// act
60-
int id = _portfolioFixture.PortfolioRepository.Add(portfolio);
61-
var loaded = _portfolioFixture.PortfolioRepository.Get(id);
61+
int id = _portfolioRepositoryFixture.PortfolioRepository.Add(portfolio);
62+
var loaded = _portfolioRepositoryFixture.PortfolioRepository.Get(id);
6263
portfolio = portfolio with
6364
{
6465
Id = loaded.Id
@@ -69,15 +70,37 @@ public void Added_And_Get_AreEqual()
6970
Assert.Equal(portfolio, loaded);
7071
}
7172

73+
[Fact]
74+
public void Added_And_GetAll_AreEqual()
75+
{
76+
// fixture unique to this test
77+
var portfolioRepositoryFixture = new SqlKataPortfolioRepositoryFixture();
78+
79+
// arrange
80+
var portfolio1 = new Portfolio("My new portfolio", "Lorem ipsum dolor sit amet", Currency.Czk);
81+
var portfolio2 = new Portfolio("My second portfolio", "Lorem ipsum dolor sit amet", Currency.Eur);
82+
var portfolio3 = new Portfolio("My third portfolio", "Lorem ipsum dolor sit amet", Currency.Usd);
83+
84+
// act
85+
portfolio1 = portfolio1 with {Id = portfolioRepositoryFixture.PortfolioRepository.Add(portfolio1)};
86+
portfolio2 = portfolio2 with {Id = portfolioRepositoryFixture.PortfolioRepository.Add(portfolio2)};
87+
portfolio3 = portfolio3 with {Id = portfolioRepositoryFixture.PortfolioRepository.Add(portfolio3)};
88+
89+
// assert
90+
var loadedPortfolios = portfolioRepositoryFixture.PortfolioRepository.GetAll();
91+
Assert.Equal(3, loadedPortfolios.Count);
92+
Assert.Equal(new List<Portfolio>{portfolio1, portfolio2, portfolio3}, loadedPortfolios);
93+
}
94+
7295
[Fact]
7396
public void AddUpdate_Updates()
7497
{
7598
// arrange
76-
var template = new Portfolio("My new portfolio", "Lorem ipsum dolor sit amet", 101);
99+
var template = new Portfolio("My new portfolio", "Lorem ipsum dolor sit amet", Currency.Usd);
77100

78101
// act
79-
int firstId = _portfolioFixture.PortfolioRepository.Add(template);
80-
int secondId = _portfolioFixture.PortfolioRepository.Add(template);
102+
int firstId = _portfolioRepositoryFixture.PortfolioRepository.Add(template);
103+
int secondId = _portfolioRepositoryFixture.PortfolioRepository.Add(template);
81104
var secondPortfolio = template with
82105
{
83106
Id = secondId
@@ -87,12 +110,13 @@ public void AddUpdate_Updates()
87110
// update the first entry
88111
Id = firstId,
89112
// change it's name
90-
Name = "Foo Portfolio"
113+
Name = "Foo Portfolio",
114+
Currency = Currency.Eur
91115
};
92-
_portfolioFixture.PortfolioRepository.Update(firstPortfolio);
116+
_portfolioRepositoryFixture.PortfolioRepository.Update(firstPortfolio);
93117

94-
Assert.Equal(firstPortfolio, _portfolioFixture.PortfolioRepository.Get(firstPortfolio.Id));
95-
Assert.Equal(secondPortfolio, _portfolioFixture.PortfolioRepository.Get(secondPortfolio.Id));
118+
Assert.Equal(firstPortfolio, _portfolioRepositoryFixture.PortfolioRepository.Get(firstPortfolio.Id));
119+
Assert.Equal(secondPortfolio, _portfolioRepositoryFixture.PortfolioRepository.Get(secondPortfolio.Id));
96120
}
97121

98122
}

0 commit comments

Comments
 (0)