Skip to content

Commit d66e67a

Browse files
committed
Bogus removed
1 parent ee08fca commit d66e67a

9 files changed

Lines changed: 68 additions & 66 deletions

File tree

MockMe.API/AutoMapperProfile.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,9 @@ public static void Initialize()
1414

1515
Mapper.Initialize(cfg =>
1616
{
17-
cfg.CreateMap<Asset, AssetViewModel>()
18-
.ForMember(o => o.Id, map => map.MapFrom(o => o.Id))
19-
.ForMember(o => o.Name, map => map.MapFrom(o => o.Name))
20-
.ReverseMap();
21-
2217
cfg.CreateMap<AssetTrade, AssetTradeViewModel>()
23-
.ForMember(o => o.Asset, map => map.MapFrom(o => o.Asset))
18+
.ForMember(o => o.Id, map => map.MapFrom(o => o.Asset.Id))
19+
.ForMember(o => o.Name, map => map.MapFrom(o => o.Asset.Name))
2420
.ForMember(o => o.Amount, map => map.MapFrom(o => o.Amount))
2521
.ForMember(o => o.Payout, map => map.MapFrom(o => o.Payout))
2622
.ForMember(o => o.Direction, map => map.MapFrom(o => o.Direction))

MockMe.API/Controllers/TradeController.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ namespace MockMe.API.Controllers
1313
public class TradeController : ControllerBase
1414
{
1515
readonly ITradeService _tradeService;
16+
readonly IAssetService _assetService;
1617
readonly ICountryService _countryService;
1718

18-
public TradeController(ITradeService tradeService, ICountryService countryService)
19+
public TradeController(ITradeService tradeService, IAssetService assetService, ICountryService countryService)
1920
{
2021
_tradeService = tradeService;
22+
_assetService = assetService;
2123
_countryService = countryService;
2224
}
2325

@@ -45,7 +47,7 @@ public async Task<IActionResult> GetById(Guid id)
4547
[HttpGet("[action]")]
4648
public async Task<IActionResult> Generate()
4749
{
48-
var item = await _tradeService.GenerateAsync();
50+
var item = await _tradeService.GenerateSingleAsync();
4951
return CreatedAtAction("Generate", new { id = item.Id }, item);
5052
}
5153

@@ -74,6 +76,13 @@ public async Task<IActionResult> Delete(Guid id)
7476
return new OkObjectResult(item);
7577
}
7678

79+
[HttpGet("Assets")]
80+
public async Task<IActionResult> Assets()
81+
{
82+
var items = await _assetService.GetAssetsAsync();
83+
return new OkObjectResult(items);
84+
}
85+
7786
[Authorize]
7887
[HttpGet("Countries")]
7988
public async Task<IActionResult> Countries()

MockMe.API/Services/TradeService.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public interface ITradeService
1818
Task<AssetTrade> SaveAsync(AssetTradeViewModel entity);
1919
Task<AssetTrade> UpdateAsync(Guid id, AssetTradeViewModel entity);
2020
Task<AssetTrade> DeleteAsync(Guid id);
21-
Task<AssetTrade> GenerateAsync();
21+
Task<AssetTrade> GenerateSingleAsync();
2222
}
2323

2424
public interface ICountryService
@@ -28,18 +28,22 @@ public interface ICountryService
2828

2929
public interface IAssetService
3030
{
31-
Task<IEnumerable<AssetViewModel>> GetAssets();
31+
Task<IEnumerable<Asset>> GetAssetsAsync();
3232
}
3333

34-
public class TradeService : ITradeService, ICountryService, IAssetService
34+
public class TradeService : ITradeService, IAssetService, ICountryService
3535
{
3636
readonly IMemoryCache _cache;
3737
readonly ITradeRepository _tradeRepository;
38+
readonly IEnumerable<CurrencyPair> _currencyPairs;
39+
readonly IEnumerable<Asset> _assets;
3840

3941
public TradeService(IMemoryCache cache, ITradeRepository tradeRepository)
4042
{
4143
_cache = cache;
4244
_tradeRepository = tradeRepository;
45+
_currencyPairs = Enum.GetValues(typeof(CurrencyPair)).Cast<CurrencyPair>();
46+
_assets = _currencyPairs.Select(pair => new Asset((int)pair, pair.Description()));
4347
}
4448

4549
public async Task<IEnumerable<AssetTrade>> GetAllAsync()
@@ -70,12 +74,22 @@ public async Task<AssetTrade> DeleteAsync(Guid id)
7074
return await _tradeRepository.DeleteAsync(id);
7175
}
7276

73-
public async Task<AssetTrade> GenerateAsync()
77+
public async Task<AssetTrade> GenerateSingleAsync()
7478
{
75-
var fakeTrade = await _tradeRepository.GenerateAsync();
79+
var fakeTrade = await _tradeRepository.GenerateSingleAsync();
7680
return await _tradeRepository.SaveAsync(fakeTrade);
7781
}
7882

83+
public async Task<IEnumerable<Asset>> GetAssetsAsync()
84+
{
85+
// Cached Assets
86+
return await _cache.GetOrCreateAsync("Assets", async e =>
87+
{
88+
e.SetOptions(new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24) });
89+
return await Task.FromResult(_assets);
90+
});
91+
}
92+
7993
public async Task<IEnumerable<Country>> GetCountriesAsync()
8094
{
8195
// Cached Countries
@@ -86,19 +100,5 @@ public async Task<IEnumerable<Country>> GetCountriesAsync()
86100
return await Task.FromResult(Constants.COUNTRIES);
87101
});
88102
}
89-
90-
public async Task<IEnumerable<AssetViewModel>> GetAssets()
91-
{
92-
return await _cache.GetOrCreateAsync("Assets", async e =>
93-
{
94-
// Cached Assets
95-
e.SetOptions(new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromDays(1) });
96-
97-
var currencyPairs = ((IEnumerable<CurrencyPair>)Enum.GetValues(typeof(CurrencyPair))).ToList();
98-
var result = currencyPairs.Select(pair =>
99-
Mapper.Map<AssetViewModel>(new Asset((int)pair, pair.Description())));
100-
return await Task.FromResult(result);
101-
});
102-
}
103103
}
104104
}

MockMe.API/Startup.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ public void ConfigureServices(IServiceCollection services)
6868
services.AddSingleton<IJwtAuthManager, JwtAuthManager>();
6969
services.AddHostedService<JwtRefreshTokenCache>();
7070
services.AddScoped<IUserService, UserService>();
71-
services.AddScoped<ITradeRepository, TradeRepository>();
7271
services.AddScoped<ITradeService, TradeService>();
7372
services.AddScoped<ICountryService, TradeService>();
73+
services.AddScoped<IAssetService, TradeService>();
74+
services.AddSingleton<ITradeRepository, TradeRepository>();
7475

7576
services.AddSwaggerGen(c => {
7677
c.SwaggerDoc("jwt", new OpenApiInfo { Title = "JWT Auth API" });

MockMe.API/ViewModels/AssetTradeViewModel.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
{
33
public class AssetTradeViewModel
44
{
5-
public AssetViewModel Asset { get; set; }
5+
public int Id { get; set; }
6+
public string Name { get; set; }
67
public int Expiration { get; set; }
78
public decimal Amount { get; set; }
89
public int Direction { get; set; }

MockMe.API/ViewModels/AssetViewModel.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.

MockMe.Common/MockMe.Common.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
</PropertyGroup>
66

77
<ItemGroup>
8-
<PackageReference Include="Bogus" Version="35.6.1" />
98
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
109
<PackageReference Include="System.Text.Json" Version="8.0.5" />
1110
</ItemGroup>
Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Bogus;
2-
using MockMe.Common;
1+
using MockMe.Common;
32
using MockMe.Model;
43
using System;
54
using System.Collections.Generic;
@@ -14,32 +13,37 @@ public interface ITradeRepository
1413
Task<AssetTrade> SaveAsync(AssetTrade entity);
1514
Task<AssetTrade> UpdateAsync(Guid id, AssetTrade entity);
1615
Task<AssetTrade> DeleteAsync(Guid id);
17-
Task<AssetTrade> GenerateAsync();
16+
Task<AssetTrade> GenerateSingleAsync();
1817
}
1918

2019
public class TradeRepository : ITradeRepository
2120
{
22-
static List<AssetTrade> Trades;
21+
readonly IEnumerable<CurrencyPair> _currencyPairs;
22+
readonly IEnumerable<Asset> _assets;
23+
readonly Random _random = new Random();
24+
readonly List<AssetTrade> _trades;
2325

2426
public TradeRepository()
2527
{
26-
Trades ??= GenerateTrades(10);
28+
_currencyPairs = Enum.GetValues(typeof(CurrencyPair)).Cast<CurrencyPair>();
29+
_assets = _currencyPairs.Select(pair => new Asset((int)pair, pair.Description()));
30+
_trades ??= GenerateTrades(10);
2731
}
2832

2933
public async Task<IEnumerable<AssetTrade>> GetAllAsync()
3034
{
31-
return await Task.FromResult(Trades);
35+
return await Task.FromResult(_trades);
3236
}
3337

3438
public async Task<AssetTrade> SaveAsync(AssetTrade entity)
3539
{
36-
Trades.Add(entity);
40+
_trades.Add(entity);
3741
return await Task.FromResult(entity);
3842
}
3943

4044
public async Task<AssetTrade> UpdateAsync(Guid id, AssetTrade entity)
4145
{
42-
var item = Trades.Single(p => p.Id == id.ToString());
46+
var item = _trades.Single(p => p.Id == id.ToString());
4347

4448
item.Asset = new Asset { Id = entity.Asset.Id, Name = entity.Asset.Name };
4549
item.Direction = entity.Direction;
@@ -52,32 +56,31 @@ public async Task<AssetTrade> UpdateAsync(Guid id, AssetTrade entity)
5256

5357
public async Task<AssetTrade> DeleteAsync(Guid id)
5458
{
55-
var item = Trades.Single(o => o.Id == id.ToString());
56-
var entry = Trades.Remove(item);
59+
var item = _trades.Single(o => o.Id == id.ToString());
60+
var entry = _trades.Remove(item);
5761
return await Task.FromResult(item);
5862
}
5963

60-
public async Task<AssetTrade> GenerateAsync()
64+
public async Task<AssetTrade> GenerateSingleAsync()
6165
{
62-
var randomTrade = GenerateTrades(1).FirstOrDefault();
66+
var asset = _assets.ElementAt(_random.Next(0, _assets.Count()));
67+
var randomTrade = GenerateTrades(1, asset).FirstOrDefault();
6368
return await Task.FromResult(randomTrade);
6469
}
6570

66-
List<AssetTrade> GenerateTrades(int count)
71+
List<AssetTrade> GenerateTrades(int count ,Asset asset = null)
6772
{
68-
var currencyPairs = ((IEnumerable<CurrencyPair>)Enum.GetValues(typeof(CurrencyPair))).ToList();
69-
var trades = new Faker<AssetTrade>()
70-
.RuleFor(o => o.Id, f => Guid.NewGuid().ToString())
71-
.RuleFor(o => o.Asset, f => {
72-
var pair = new Faker().Random.ListItem((IList<CurrencyPair>)currencyPairs);
73-
return new Asset((int)pair, pair.Description());
73+
var assetCount = _assets.Count();
74+
return Enumerable.Range(0, count)
75+
.Select(i => new AssetTrade
76+
{
77+
Asset = asset ?? _assets.ElementAt(i % _assets.Count()), // Cycles on assets
78+
Amount = Math.Round(_random.Next(100, 100000) * 0.01m, 2),
79+
Expiration = _random.Next(1, 1000),
80+
Payout = _random.Next(1, 1000),
81+
Direction = _random.Next(0, 2)
7482
})
75-
.RuleFor(o => o.Amount, f => decimal.Parse(f.Random.Decimal(1000).ToString("0.00")))
76-
.RuleFor(o => o.Expiration, f => f.Random.Number(1, 1000))
77-
.RuleFor(o => o.Payout, f => f.Random.Number(1, 1000))
78-
.RuleFor(o => o.Direction, f => f.Random.Number(0, 1))
79-
.Generate(count);
80-
return trades;
83+
.ToList();
8184
}
8285
}
8386
}

MockMe.UnitTest/TradeServiceTest.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ public async Task GetAsync_Success()
5858
});
5959

6060
// Act
61-
var entity = new AssetTradeViewModel { Asset = new AssetViewModel { Id = trade.Asset.Id, Name = trade.Asset.Name }, Amount = trade.Amount, Direction = trade.Direction };
61+
62+
var entity = new AssetTradeViewModel { Id = trade.Asset.Id, Name = trade.Asset.Name, Amount = trade.Amount, Direction = trade.Direction };
6263
await mockService.Object.SaveAsync(entity);
6364
var actual = await mockService.Object.GetAsync(Guid.Parse(trade.Id));
6465

@@ -101,7 +102,7 @@ public async Task SaveAsync_Success()
101102
});
102103

103104
// Act
104-
var entity = new AssetTradeViewModel { Asset = new AssetViewModel { Id = trade.Asset.Id, Name = trade.Asset.Name }, Amount = trade.Amount, Direction = trade.Direction };
105+
var entity = new AssetTradeViewModel { Id = trade.Asset.Id, Name = trade.Asset.Name, Amount = trade.Amount, Direction = trade.Direction };
105106
var actual = await mockService.Object.SaveAsync(entity);
106107

107108
// Assert
@@ -136,7 +137,7 @@ public async Task UpdateAsync_Success()
136137
});
137138

138139
// Act
139-
var entity = new AssetTradeViewModel { Asset = new AssetViewModel { Id = trade.Asset.Id, Name = trade.Asset.Name }, Amount = trade.Amount, Direction = trade.Direction };
140+
var entity = new AssetTradeViewModel { Id = trade.Asset.Id, Name = trade.Asset.Name, Amount = trade.Amount, Direction = trade.Direction };
140141
await mockService.Object.UpdateAsync(Guid.Parse(trade.Id), entity);
141142

142143
// Assert

0 commit comments

Comments
 (0)